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 12204431SrajPATCHLEVEL = 2 13204431SrajSUBLEVEL = 0 14204431SrajEXTRAVERSION = 15204431SrajLOCAL_VERSION = 16204431SrajCONFIG_LOCALVERSION = 17204431Sraj 18204431SrajCPPFLAGS = -I libfdt 19204433SrajCFLAGS = -Wall -g -Os -fPIC -Wpointer-arith -Wcast-qual 20204431Sraj 21204431SrajBISON = bison 22204431SrajLEX = flex 23204431Sraj 24204431SrajINSTALL = /usr/bin/install 25204431SrajDESTDIR = 26204431SrajPREFIX = $(HOME) 27204431SrajBINDIR = $(PREFIX)/bin 28204431SrajLIBDIR = $(PREFIX)/lib 29204431SrajINCLUDEDIR = $(PREFIX)/include 30204431Sraj 31204433SrajHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \ 32204433Sraj sed -e 's/\(cygwin\).*/cygwin/') 33204433Sraj 34204433Srajifeq ($(HOSTOS),darwin) 35204433SrajSHAREDLIB_EXT=dylib 36204433SrajSHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl, 37204433Srajelse 38204433SrajSHAREDLIB_EXT=so 39204433SrajSHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname, 40204433Srajendif 41204433Sraj 42204431Sraj# 43204431Sraj# Overall rules 44204431Sraj# 45204431Srajifdef V 46204431SrajVECHO = : 47204431Srajelse 48204431SrajVECHO = echo " " 49204431SrajARFLAGS = rc 50204431Sraj.SILENT: 51204431Srajendif 52204431Sraj 53204431SrajNODEPTARGETS = clean 54204431Srajifeq ($(MAKECMDGOALS),) 55204431SrajDEPTARGETS = all 56204431Srajelse 57204431SrajDEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS)) 58204431Srajendif 59204431Sraj 60204431Sraj# 61204431Sraj# Rules for versioning 62204431Sraj# 63204431Sraj 64204431SrajDTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) 65204431SrajVERSION_FILE = version_gen.h 66204431Sraj 67204431SrajCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ 68204431Sraj else if [ -x /bin/bash ]; then echo /bin/bash; \ 69204431Sraj else echo sh; fi ; fi) 70204431Sraj 71204431Srajnullstring := 72204431Srajspace := $(nullstring) # end of line 73204431Sraj 74204431Srajlocalver_config = $(subst $(space),, $(string) \ 75204431Sraj $(patsubst "%",%,$(CONFIG_LOCALVERSION))) 76204431Sraj 77204431Srajlocalver_cmd = $(subst $(space),, $(string) \ 78204431Sraj $(patsubst "%",%,$(LOCALVERSION))) 79204431Sraj 80204431Srajlocalver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion) 81204431Srajlocalver_full = $(localver_config)$(localver_cmd)$(localver_scm) 82204431Sraj 83204431Srajdtc_version = $(DTC_VERSION)$(localver_full) 84204431Sraj 85204431Sraj# Contents of the generated version file. 86204431Srajdefine filechk_version 87204431Sraj (echo "#define DTC_VERSION \"DTC $(dtc_version)\""; ) 88204431Srajendef 89204431Sraj 90204431Srajdefine filechk 91204431Sraj set -e; \ 92204431Sraj echo ' CHK $@'; \ 93204431Sraj mkdir -p $(dir $@); \ 94204431Sraj $(filechk_$(1)) < $< > $@.tmp; \ 95204431Sraj if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 96204431Sraj rm -f $@.tmp; \ 97204431Sraj else \ 98204431Sraj echo ' UPD $@'; \ 99204431Sraj mv -f $@.tmp $@; \ 100204431Sraj fi; 101204431Srajendef 102204431Sraj 103204431Sraj 104204433Srajinclude Makefile.convert-dtsv0 105204431Srajinclude Makefile.dtc 106204433Srajinclude Makefile.ftdump 107204431Sraj 108204433SrajBIN += convert-dtsv0 109204431SrajBIN += dtc 110204433SrajBIN += ftdump 111204431Sraj 112204431Sraj 113204433Srajall: $(BIN) libfdt 114204431Sraj 115204433Sraj 116204431Srajifneq ($(DEPTARGETS),) 117204431Sraj-include $(DTC_OBJS:%.o=%.d) 118204433Sraj-include $(CONVERT_OBJS:%.o=%.d) 119204433Sraj-include $(FTDUMP_OBJS:%.o=%.d) 120204431Srajendif 121204431Sraj 122204431Sraj 123204431Sraj 124204431Sraj# 125204431Sraj# Rules for libfdt 126204431Sraj# 127204431SrajLIBFDT_objdir = libfdt 128204431SrajLIBFDT_srcdir = libfdt 129204433SrajLIBFDT_archive = $(LIBFDT_objdir)/libfdt.a 130204433SrajLIBFDT_lib = $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT) 131204431SrajLIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES)) 132204433SrajLIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION)) 133204431Sraj 134204431Srajinclude $(LIBFDT_srcdir)/Makefile.libfdt 135204431Sraj 136204431Sraj.PHONY: libfdt 137204433Srajlibfdt: $(LIBFDT_archive) $(LIBFDT_lib) 138204431Sraj 139204433Sraj$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) 140204431Sraj$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) 141204431Sraj 142204431Srajlibfdt_clean: 143204431Sraj @$(VECHO) CLEAN "(libfdt)" 144204431Sraj rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES)) 145204433Sraj rm -f $(LIBFDT_objdir)/*.so 146204431Sraj 147204431Srajifneq ($(DEPTARGETS),) 148204431Sraj-include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d) 149204431Srajendif 150204431Sraj 151204433Sraj# This stops make from generating the lex and bison output during 152204433Sraj# auto-dependency computation, but throwing them away as an 153204433Sraj# intermediate target and building them again "for real" 154204433Sraj.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS) 155204433Sraj 156204433Srajinstall: all 157204433Sraj @$(VECHO) INSTALL 158204433Sraj $(INSTALL) -d $(DESTDIR)$(BINDIR) 159204433Sraj $(INSTALL) $(BIN) $(DESTDIR)$(BINDIR) 160204433Sraj $(INSTALL) -d $(DESTDIR)$(LIBDIR) 161204433Sraj $(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR) 162204433Sraj $(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR) 163204433Sraj $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR) 164204433Sraj $(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR) 165204433Sraj 166204433Sraj$(VERSION_FILE): Makefile FORCE 167204433Sraj $(call filechk,version) 168204433Sraj 169204433Sraj 170204433Srajdtc: $(DTC_OBJS) 171204433Sraj 172204433Srajconvert-dtsv0: $(CONVERT_OBJS) 173204433Sraj @$(VECHO) LD $@ 174204433Sraj $(LINK.c) -o $@ $^ 175204433Sraj 176204433Srajftdump: $(FTDUMP_OBJS) 177204433Sraj 178204433Sraj 179204431Sraj# 180204431Sraj# Testsuite rules 181204431Sraj# 182204431SrajTESTS_PREFIX=tests/ 183204431Srajinclude tests/Makefile.tests 184204431Sraj 185204431Sraj# 186204431Sraj# Clean rules 187204431Sraj# 188204433SrajSTD_CLEANFILES = *~ *.o *.so *.d *.a *.i *.s core a.out vgcore.* \ 189204431Sraj *.tab.[ch] *.lex.c *.output 190204431Sraj 191204431Srajclean: libfdt_clean tests_clean 192204431Sraj @$(VECHO) CLEAN 193204431Sraj rm -f $(STD_CLEANFILES) 194204431Sraj rm -f $(VERSION_FILE) 195204431Sraj rm -f $(BIN) 196204431Sraj 197204431Sraj# 198204431Sraj# Generic compile rules 199204431Sraj# 200204431Sraj%: %.o 201204431Sraj @$(VECHO) LD $@ 202204431Sraj $(LINK.c) -o $@ $^ 203204431Sraj 204204431Sraj%.o: %.c 205204431Sraj @$(VECHO) CC $@ 206204431Sraj $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 207204431Sraj 208204431Sraj%.o: %.S 209204431Sraj @$(VECHO) AS $@ 210204431Sraj $(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $< 211204431Sraj 212204431Sraj%.d: %.c 213204431Sraj @$(VECHO) DEP $< 214204431Sraj $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@ 215204431Sraj 216204431Sraj%.d: %.S 217204431Sraj @$(VECHO) DEP $< 218204431Sraj $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@ 219204431Sraj 220204431Sraj%.i: %.c 221204431Sraj @$(VECHO) CPP $@ 222204431Sraj $(CC) $(CPPFLAGS) -E $< > $@ 223204431Sraj 224204431Sraj%.s: %.c 225204431Sraj @$(VECHO) CC -S $@ 226204431Sraj $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $< 227204431Sraj 228204431Sraj%.a: 229204431Sraj @$(VECHO) AR $@ 230204431Sraj $(AR) $(ARFLAGS) $@ $^ 231204431Sraj 232204433Sraj$(LIBFDT_lib): 233204433Sraj @$(VECHO) LD $@ 234204433Sraj $(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(notdir $@) -o $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) $^ 235204433Sraj ln -sf libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT) 236204433Sraj 237204431Sraj%.lex.c: %.l 238204431Sraj @$(VECHO) LEX $@ 239204431Sraj $(LEX) -o$@ $< 240204431Sraj 241204431Sraj%.tab.c %.tab.h %.output: %.y 242204431Sraj @$(VECHO) BISON $@ 243204431Sraj $(BISON) -d $< 244204431Sraj 245204431SrajFORCE: 246