1204431Sraj# 2204431Sraj# Device Tree Compiler 3204431Sraj# 4204431Sraj 5204431Sraj# 6204431Sraj# Version information will be constructed in this order: 7204431Sraj# EXTRAVERSION might be "-rc", for example. 8204431Sraj# LOCAL_VERSION is likely from command line. 9204431Sraj# CONFIG_LOCALVERSION from some future config system. 10204431Sraj# 11204431SrajVERSION = 1 12266130SianPATCHLEVEL = 4 13204431SrajSUBLEVEL = 0 14204431SrajEXTRAVERSION = 15204431SrajLOCAL_VERSION = 16204431SrajCONFIG_LOCALVERSION = 17204431Sraj 18238742SimpCPPFLAGS = -I libfdt -I . 19238742SimpWARNINGS = -Werror -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \ 20238742Simp -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls 21238742SimpCFLAGS = -g -Os -fPIC -Werror $(WARNINGS) 22204431Sraj 23204431SrajBISON = bison 24204431SrajLEX = flex 25204431Sraj 26204431SrajINSTALL = /usr/bin/install 27204431SrajDESTDIR = 28204431SrajPREFIX = $(HOME) 29204431SrajBINDIR = $(PREFIX)/bin 30204431SrajLIBDIR = $(PREFIX)/lib 31204431SrajINCLUDEDIR = $(PREFIX)/include 32204431Sraj 33204433SrajHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \ 34204433Sraj sed -e 's/\(cygwin\).*/cygwin/') 35204433Sraj 36204433Srajifeq ($(HOSTOS),darwin) 37204433SrajSHAREDLIB_EXT=dylib 38204433SrajSHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl, 39204433Srajelse 40204433SrajSHAREDLIB_EXT=so 41204433SrajSHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname, 42204433Srajendif 43204433Sraj 44204431Sraj# 45204431Sraj# Overall rules 46204431Sraj# 47204431Srajifdef V 48204431SrajVECHO = : 49204431Srajelse 50204431SrajVECHO = echo " " 51243933SeadlerARFLAGS ?= rc 52204431Sraj.SILENT: 53204431Srajendif 54204431Sraj 55204431SrajNODEPTARGETS = clean 56204431Srajifeq ($(MAKECMDGOALS),) 57204431SrajDEPTARGETS = all 58204431Srajelse 59204431SrajDEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS)) 60204431Srajendif 61204431Sraj 62204431Sraj# 63204431Sraj# Rules for versioning 64204431Sraj# 65204431Sraj 66204431SrajDTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) 67204431SrajVERSION_FILE = version_gen.h 68204431Sraj 69204431SrajCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ 70204431Sraj else if [ -x /bin/bash ]; then echo /bin/bash; \ 71204431Sraj else echo sh; fi ; fi) 72204431Sraj 73204431Srajnullstring := 74204431Srajspace := $(nullstring) # end of line 75204431Sraj 76204431Srajlocalver_config = $(subst $(space),, $(string) \ 77204431Sraj $(patsubst "%",%,$(CONFIG_LOCALVERSION))) 78204431Sraj 79204431Srajlocalver_cmd = $(subst $(space),, $(string) \ 80204431Sraj $(patsubst "%",%,$(LOCALVERSION))) 81204431Sraj 82204431Srajlocalver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion) 83204431Srajlocalver_full = $(localver_config)$(localver_cmd)$(localver_scm) 84204431Sraj 85204431Srajdtc_version = $(DTC_VERSION)$(localver_full) 86204431Sraj 87204431Sraj# Contents of the generated version file. 88204431Srajdefine filechk_version 89204431Sraj (echo "#define DTC_VERSION \"DTC $(dtc_version)\""; ) 90204431Srajendef 91204431Sraj 92204431Srajdefine filechk 93204431Sraj set -e; \ 94204431Sraj echo ' CHK $@'; \ 95204431Sraj mkdir -p $(dir $@); \ 96204431Sraj $(filechk_$(1)) < $< > $@.tmp; \ 97204431Sraj if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 98204431Sraj rm -f $@.tmp; \ 99204431Sraj else \ 100204431Sraj echo ' UPD $@'; \ 101204431Sraj mv -f $@.tmp $@; \ 102204431Sraj fi; 103204431Srajendef 104204431Sraj 105204431Sraj 106204433Srajinclude Makefile.convert-dtsv0 107204431Srajinclude Makefile.dtc 108238742Simpinclude Makefile.utils 109204431Sraj 110204433SrajBIN += convert-dtsv0 111204431SrajBIN += dtc 112238742SimpBIN += fdtdump 113238742SimpBIN += fdtget 114238742SimpBIN += fdtput 115204431Sraj 116238742SimpSCRIPTS = dtdiff 117204431Sraj 118204433Srajall: $(BIN) libfdt 119204431Sraj 120204433Sraj 121204431Srajifneq ($(DEPTARGETS),) 122204431Sraj-include $(DTC_OBJS:%.o=%.d) 123204433Sraj-include $(CONVERT_OBJS:%.o=%.d) 124238742Simp-include $(FDTDUMP_OBJS:%.o=%.d) 125238742Simp-include $(FDTGET_OBJS:%.o=%.d) 126238742Simp-include $(FDTPUT_OBJS:%.o=%.d) 127204431Srajendif 128204431Sraj 129204431Sraj 130204431Sraj 131204431Sraj# 132204431Sraj# Rules for libfdt 133204431Sraj# 134204431SrajLIBFDT_objdir = libfdt 135204431SrajLIBFDT_srcdir = libfdt 136204433SrajLIBFDT_archive = $(LIBFDT_objdir)/libfdt.a 137238742SimpLIBFDT_lib = $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) 138204431SrajLIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES)) 139204433SrajLIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION)) 140204431Sraj 141204431Srajinclude $(LIBFDT_srcdir)/Makefile.libfdt 142204431Sraj 143204431Sraj.PHONY: libfdt 144204433Srajlibfdt: $(LIBFDT_archive) $(LIBFDT_lib) 145204431Sraj 146204433Sraj$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) 147204431Sraj$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) 148204431Sraj 149204431Srajlibfdt_clean: 150204431Sraj @$(VECHO) CLEAN "(libfdt)" 151204431Sraj rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES)) 152204433Sraj rm -f $(LIBFDT_objdir)/*.so 153204431Sraj 154204431Srajifneq ($(DEPTARGETS),) 155204431Sraj-include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d) 156204431Srajendif 157204431Sraj 158204433Sraj# This stops make from generating the lex and bison output during 159204433Sraj# auto-dependency computation, but throwing them away as an 160204433Sraj# intermediate target and building them again "for real" 161204433Sraj.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS) 162204433Sraj 163266130Sianinstall-bin: all $(SCRIPTS) 164266130Sian @$(VECHO) INSTALL-BIN 165204433Sraj $(INSTALL) -d $(DESTDIR)$(BINDIR) 166238742Simp $(INSTALL) $(BIN) $(SCRIPTS) $(DESTDIR)$(BINDIR) 167266130Sian 168266130Sianinstall-lib: all 169266130Sian @$(VECHO) INSTALL-LIB 170204433Sraj $(INSTALL) -d $(DESTDIR)$(LIBDIR) 171204433Sraj $(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR) 172238742Simp ln -sf $(notdir $(LIBFDT_lib)) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname) 173238742Simp ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/libfdt.$(SHAREDLIB_EXT) 174204433Sraj $(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR) 175266130Sian 176266130Sianinstall-includes: 177266130Sian @$(VECHO) INSTALL-INC 178204433Sraj $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR) 179204433Sraj $(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR) 180204433Sraj 181266130Sianinstall: install-bin install-lib install-includes 182266130Sian 183204433Sraj$(VERSION_FILE): Makefile FORCE 184204433Sraj $(call filechk,version) 185204433Sraj 186204433Sraj 187204433Srajdtc: $(DTC_OBJS) 188204433Sraj 189204433Srajconvert-dtsv0: $(CONVERT_OBJS) 190204433Sraj @$(VECHO) LD $@ 191204433Sraj $(LINK.c) -o $@ $^ 192204433Sraj 193238742Simpfdtdump: $(FDTDUMP_OBJS) 194204433Sraj 195238742Simpfdtget: $(FDTGET_OBJS) $(LIBFDT_archive) 196204433Sraj 197238742Simpfdtput: $(FDTPUT_OBJS) $(LIBFDT_archive) 198238742Simp 199238742Simp 200204431Sraj# 201204431Sraj# Testsuite rules 202204431Sraj# 203204431SrajTESTS_PREFIX=tests/ 204238742Simp 205238742SimpTESTS_BIN += dtc 206238742SimpTESTS_BIN += convert-dtsv0 207238742SimpTESTS_BIN += fdtput 208238742SimpTESTS_BIN += fdtget 209238742Simp 210204431Srajinclude tests/Makefile.tests 211204431Sraj 212204431Sraj# 213204431Sraj# Clean rules 214204431Sraj# 215238742SimpSTD_CLEANFILES = *~ *.o *.$(SHAREDLIB_EXT) *.d *.a *.i *.s core a.out vgcore.* \ 216204431Sraj *.tab.[ch] *.lex.c *.output 217204431Sraj 218204431Srajclean: libfdt_clean tests_clean 219204431Sraj @$(VECHO) CLEAN 220204431Sraj rm -f $(STD_CLEANFILES) 221204431Sraj rm -f $(VERSION_FILE) 222204431Sraj rm -f $(BIN) 223204431Sraj 224204431Sraj# 225204431Sraj# Generic compile rules 226204431Sraj# 227204431Sraj%: %.o 228204431Sraj @$(VECHO) LD $@ 229204431Sraj $(LINK.c) -o $@ $^ 230204431Sraj 231204431Sraj%.o: %.c 232204431Sraj @$(VECHO) CC $@ 233204431Sraj $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 234204431Sraj 235204431Sraj%.o: %.S 236204431Sraj @$(VECHO) AS $@ 237204431Sraj $(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $< 238204431Sraj 239204431Sraj%.d: %.c 240204431Sraj @$(VECHO) DEP $< 241204431Sraj $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@ 242204431Sraj 243204431Sraj%.d: %.S 244204431Sraj @$(VECHO) DEP $< 245204431Sraj $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@ 246204431Sraj 247204431Sraj%.i: %.c 248204431Sraj @$(VECHO) CPP $@ 249204431Sraj $(CC) $(CPPFLAGS) -E $< > $@ 250204431Sraj 251204431Sraj%.s: %.c 252204431Sraj @$(VECHO) CC -S $@ 253204431Sraj $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $< 254204431Sraj 255204431Sraj%.a: 256204431Sraj @$(VECHO) AR $@ 257204431Sraj $(AR) $(ARFLAGS) $@ $^ 258204431Sraj 259204433Sraj$(LIBFDT_lib): 260204433Sraj @$(VECHO) LD $@ 261238742Simp $(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(LIBFDT_soname) -o $(LIBFDT_lib) $^ 262204433Sraj 263204431Sraj%.lex.c: %.l 264204431Sraj @$(VECHO) LEX $@ 265204431Sraj $(LEX) -o$@ $< 266204431Sraj 267204431Sraj%.tab.c %.tab.h %.output: %.y 268204431Sraj @$(VECHO) BISON $@ 269204431Sraj $(BISON) -d $< 270204431Sraj 271204431SrajFORCE: 272