Makefile revision 243933
1214501Srpaulo# 2214501Srpaulo# Device Tree Compiler 3214501Srpaulo# 4214501Srpaulo 5252726Srpaulo# 6252726Srpaulo# Version information will be constructed in this order: 7214501Srpaulo# EXTRAVERSION might be "-rc", for example. 8214501Srpaulo# LOCAL_VERSION is likely from command line. 9214501Srpaulo# CONFIG_LOCALVERSION from some future config system. 10214501Srpaulo# 11214501SrpauloVERSION = 1 12214501SrpauloPATCHLEVEL = 3 13214501SrpauloSUBLEVEL = 0 14214501SrpauloEXTRAVERSION = 15214501SrpauloLOCAL_VERSION = 16214501SrpauloCONFIG_LOCALVERSION = 17214501Srpaulo 18214501SrpauloCPPFLAGS = -I libfdt -I . 19214501SrpauloWARNINGS = -Werror -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \ 20214501Srpaulo -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls 21214501SrpauloCFLAGS = -g -Os -fPIC -Werror $(WARNINGS) 22214501Srpaulo 23214501SrpauloBISON = bison 24214501SrpauloLEX = flex 25252726Srpaulo 26252726SrpauloINSTALL = /usr/bin/install 27252726SrpauloDESTDIR = 28214501SrpauloPREFIX = $(HOME) 29214501SrpauloBINDIR = $(PREFIX)/bin 30214501SrpauloLIBDIR = $(PREFIX)/lib 31214501SrpauloINCLUDEDIR = $(PREFIX)/include 32214501Srpaulo 33214501SrpauloHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \ 34214501Srpaulo sed -e 's/\(cygwin\).*/cygwin/') 35214501Srpaulo 36214501Srpauloifeq ($(HOSTOS),darwin) 37214501SrpauloSHAREDLIB_EXT=dylib 38214501SrpauloSHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl, 39214501Srpauloelse 40214501SrpauloSHAREDLIB_EXT=so 41214501SrpauloSHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname, 42214501Srpauloendif 43214501Srpaulo 44214501Srpaulo# 45214501Srpaulo# Overall rules 46214501Srpaulo# 47214501Srpauloifdef V 48214501SrpauloVECHO = : 49214501Srpauloelse 50214501SrpauloVECHO = echo " " 51214501SrpauloARFLAGS ?= rc 52214501Srpaulo.SILENT: 53214501Srpauloendif 54214501Srpaulo 55214501SrpauloNODEPTARGETS = clean 56214501Srpauloifeq ($(MAKECMDGOALS),) 57214501SrpauloDEPTARGETS = all 58214501Srpauloelse 59214501SrpauloDEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS)) 60214501Srpauloendif 61214501Srpaulo 62214501Srpaulo# 63214501Srpaulo# Rules for versioning 64214501Srpaulo# 65214501Srpaulo 66214501SrpauloDTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) 67214501SrpauloVERSION_FILE = version_gen.h 68214501Srpaulo 69214501SrpauloCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ 70 else if [ -x /bin/bash ]; then echo /bin/bash; \ 71 else echo sh; fi ; fi) 72 73nullstring := 74space := $(nullstring) # end of line 75 76localver_config = $(subst $(space),, $(string) \ 77 $(patsubst "%",%,$(CONFIG_LOCALVERSION))) 78 79localver_cmd = $(subst $(space),, $(string) \ 80 $(patsubst "%",%,$(LOCALVERSION))) 81 82localver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion) 83localver_full = $(localver_config)$(localver_cmd)$(localver_scm) 84 85dtc_version = $(DTC_VERSION)$(localver_full) 86 87# Contents of the generated version file. 88define filechk_version 89 (echo "#define DTC_VERSION \"DTC $(dtc_version)\""; ) 90endef 91 92define filechk 93 set -e; \ 94 echo ' CHK $@'; \ 95 mkdir -p $(dir $@); \ 96 $(filechk_$(1)) < $< > $@.tmp; \ 97 if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 98 rm -f $@.tmp; \ 99 else \ 100 echo ' UPD $@'; \ 101 mv -f $@.tmp $@; \ 102 fi; 103endef 104 105 106include Makefile.convert-dtsv0 107include Makefile.dtc 108include Makefile.utils 109 110BIN += convert-dtsv0 111BIN += dtc 112BIN += fdtdump 113BIN += fdtget 114BIN += fdtput 115 116SCRIPTS = dtdiff 117 118all: $(BIN) libfdt 119 120 121ifneq ($(DEPTARGETS),) 122-include $(DTC_OBJS:%.o=%.d) 123-include $(CONVERT_OBJS:%.o=%.d) 124-include $(FDTDUMP_OBJS:%.o=%.d) 125-include $(FDTGET_OBJS:%.o=%.d) 126-include $(FDTPUT_OBJS:%.o=%.d) 127endif 128 129 130 131# 132# Rules for libfdt 133# 134LIBFDT_objdir = libfdt 135LIBFDT_srcdir = libfdt 136LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a 137LIBFDT_lib = $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) 138LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES)) 139LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION)) 140 141include $(LIBFDT_srcdir)/Makefile.libfdt 142 143.PHONY: libfdt 144libfdt: $(LIBFDT_archive) $(LIBFDT_lib) 145 146$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) 147$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) 148 149libfdt_clean: 150 @$(VECHO) CLEAN "(libfdt)" 151 rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES)) 152 rm -f $(LIBFDT_objdir)/*.so 153 154ifneq ($(DEPTARGETS),) 155-include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d) 156endif 157 158# This stops make from generating the lex and bison output during 159# auto-dependency computation, but throwing them away as an 160# intermediate target and building them again "for real" 161.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS) 162 163install: all $(SCRIPTS) 164 @$(VECHO) INSTALL 165 $(INSTALL) -d $(DESTDIR)$(BINDIR) 166 $(INSTALL) $(BIN) $(SCRIPTS) $(DESTDIR)$(BINDIR) 167 $(INSTALL) -d $(DESTDIR)$(LIBDIR) 168 $(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR) 169 ln -sf $(notdir $(LIBFDT_lib)) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname) 170 ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/libfdt.$(SHAREDLIB_EXT) 171 $(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR) 172 $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR) 173 $(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR) 174 175$(VERSION_FILE): Makefile FORCE 176 $(call filechk,version) 177 178 179dtc: $(DTC_OBJS) 180 181convert-dtsv0: $(CONVERT_OBJS) 182 @$(VECHO) LD $@ 183 $(LINK.c) -o $@ $^ 184 185fdtdump: $(FDTDUMP_OBJS) 186 187fdtget: $(FDTGET_OBJS) $(LIBFDT_archive) 188 189fdtput: $(FDTPUT_OBJS) $(LIBFDT_archive) 190 191 192# 193# Testsuite rules 194# 195TESTS_PREFIX=tests/ 196 197TESTS_BIN += dtc 198TESTS_BIN += convert-dtsv0 199TESTS_BIN += fdtput 200TESTS_BIN += fdtget 201 202include tests/Makefile.tests 203 204# 205# Clean rules 206# 207STD_CLEANFILES = *~ *.o *.$(SHAREDLIB_EXT) *.d *.a *.i *.s core a.out vgcore.* \ 208 *.tab.[ch] *.lex.c *.output 209 210clean: libfdt_clean tests_clean 211 @$(VECHO) CLEAN 212 rm -f $(STD_CLEANFILES) 213 rm -f $(VERSION_FILE) 214 rm -f $(BIN) 215 216# 217# Generic compile rules 218# 219%: %.o 220 @$(VECHO) LD $@ 221 $(LINK.c) -o $@ $^ 222 223%.o: %.c 224 @$(VECHO) CC $@ 225 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $< 226 227%.o: %.S 228 @$(VECHO) AS $@ 229 $(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $< 230 231%.d: %.c 232 @$(VECHO) DEP $< 233 $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@ 234 235%.d: %.S 236 @$(VECHO) DEP $< 237 $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@ 238 239%.i: %.c 240 @$(VECHO) CPP $@ 241 $(CC) $(CPPFLAGS) -E $< > $@ 242 243%.s: %.c 244 @$(VECHO) CC -S $@ 245 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $< 246 247%.a: 248 @$(VECHO) AR $@ 249 $(AR) $(ARFLAGS) $@ $^ 250 251$(LIBFDT_lib): 252 @$(VECHO) LD $@ 253 $(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(LIBFDT_soname) -o $(LIBFDT_lib) $^ 254 255%.lex.c: %.l 256 @$(VECHO) LEX $@ 257 $(LEX) -o$@ $< 258 259%.tab.c %.tab.h %.output: %.y 260 @$(VECHO) BISON $@ 261 $(BISON) -d $< 262 263FORCE: 264