Home | History | Annotate | Line # | Download | only in dist
Makefile revision 1.1
      1 #
      2 # Device Tree Compiler
      3 #
      4 
      5 #
      6 # Version information will be constructed in this order:
      7 # EXTRAVERSION might be "-rc", for example.
      8 # LOCAL_VERSION is likely from command line.
      9 # CONFIG_LOCALVERSION from some future config system.
     10 #
     11 VERSION = 1
     12 PATCHLEVEL = 4
     13 SUBLEVEL = 1
     14 EXTRAVERSION =
     15 LOCAL_VERSION =
     16 CONFIG_LOCALVERSION =
     17 
     18 CPPFLAGS = -I libfdt -I .
     19 WARNINGS = -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \
     20 	-Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wshadow
     21 CFLAGS = -g -Os -fPIC -Werror $(WARNINGS)
     22 
     23 BISON = bison
     24 LEX = flex
     25 
     26 INSTALL = /usr/bin/install
     27 DESTDIR =
     28 PREFIX = $(HOME)
     29 BINDIR = $(PREFIX)/bin
     30 LIBDIR = $(PREFIX)/lib
     31 INCLUDEDIR = $(PREFIX)/include
     32 
     33 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
     34 	    sed -e 's/\(cygwin\).*/cygwin/')
     35 
     36 ifeq ($(HOSTOS),darwin)
     37 SHAREDLIB_EXT=dylib
     38 SHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl,
     39 else
     40 SHAREDLIB_EXT=so
     41 SHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname,
     42 endif
     43 
     44 #
     45 # Overall rules
     46 #
     47 ifdef V
     48 VECHO = :
     49 else
     50 VECHO = echo "	"
     51 ARFLAGS = rc
     52 .SILENT:
     53 endif
     54 
     55 NODEPTARGETS = clean
     56 ifeq ($(MAKECMDGOALS),)
     57 DEPTARGETS = all
     58 else
     59 DEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS))
     60 endif
     61 
     62 #
     63 # Rules for versioning
     64 #
     65 
     66 DTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
     67 VERSION_FILE = version_gen.h
     68 
     69 CONFIG_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 
     73 nullstring :=
     74 space	:= $(nullstring) # end of line
     75 
     76 localver_config = $(subst $(space),, $(string) \
     77 			      $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
     78 
     79 localver_cmd = $(subst $(space),, $(string) \
     80 			      $(patsubst "%",%,$(LOCALVERSION)))
     81 
     82 localver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion)
     83 localver_full  = $(localver_config)$(localver_cmd)$(localver_scm)
     84 
     85 dtc_version = $(DTC_VERSION)$(localver_full)
     86 
     87 # Contents of the generated version file.
     88 define filechk_version
     89 	(echo "#define DTC_VERSION \"DTC $(dtc_version)\""; )
     90 endef
     91 
     92 define 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;
    103 endef
    104 
    105 
    106 include Makefile.convert-dtsv0
    107 include Makefile.dtc
    108 include Makefile.utils
    109 
    110 BIN += convert-dtsv0
    111 BIN += dtc
    112 BIN += fdtdump
    113 BIN += fdtget
    114 BIN += fdtput
    115 
    116 SCRIPTS = dtdiff
    117 
    118 all: $(BIN) libfdt
    119 
    120 
    121 ifneq ($(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)
    127 endif
    128 
    129 
    130 
    131 #
    132 # Rules for libfdt
    133 #
    134 LIBFDT_objdir = libfdt
    135 LIBFDT_srcdir = libfdt
    136 LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a
    137 LIBFDT_lib = $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT)
    138 LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
    139 LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION))
    140 
    141 include $(LIBFDT_srcdir)/Makefile.libfdt
    142 
    143 .PHONY: libfdt
    144 libfdt: $(LIBFDT_archive) $(LIBFDT_lib)
    145 
    146 $(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
    147 $(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
    148 
    149 libfdt_clean:
    150 	@$(VECHO) CLEAN "(libfdt)"
    151 	rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES))
    152 	rm -f $(LIBFDT_objdir)/*.so
    153 
    154 ifneq ($(DEPTARGETS),)
    155 -include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d)
    156 endif
    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 
    163 install-bin: all $(SCRIPTS)
    164 	@$(VECHO) INSTALL-BIN
    165 	$(INSTALL) -d $(DESTDIR)$(BINDIR)
    166 	$(INSTALL) $(BIN) $(SCRIPTS) $(DESTDIR)$(BINDIR)
    167 
    168 install-lib: all
    169 	@$(VECHO) INSTALL-LIB
    170 	$(INSTALL) -d $(DESTDIR)$(LIBDIR)
    171 	$(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)
    172 	ln -sf $(notdir $(LIBFDT_lib)) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname)
    173 	ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/libfdt.$(SHAREDLIB_EXT)
    174 	$(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR)
    175 
    176 install-includes:
    177 	@$(VECHO) INSTALL-INC
    178 	$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
    179 	$(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR)
    180 
    181 install: install-bin install-lib install-includes
    182 
    183 $(VERSION_FILE): Makefile FORCE
    184 	$(call filechk,version)
    185 
    186 
    187 dtc: $(DTC_OBJS)
    188 
    189 convert-dtsv0: $(CONVERT_OBJS)
    190 	@$(VECHO) LD $@
    191 	$(LINK.c) -o $@ $^
    192 
    193 fdtdump:	$(FDTDUMP_OBJS)
    194 
    195 fdtget:	$(FDTGET_OBJS) $(LIBFDT_archive)
    196 
    197 fdtput:	$(FDTPUT_OBJS) $(LIBFDT_archive)
    198 
    199 dist:
    200 	git archive --format=tar --prefix=dtc-v$(dtc_version)/ HEAD \
    201 		> ../dtc-v$(dtc_version).tar
    202 	cat ../dtc-v$(dtc_version).tar | \
    203 		gzip -9 > ../dtc-v$(dtc_version).tgz
    204 
    205 #
    206 # Testsuite rules
    207 #
    208 TESTS_PREFIX=tests/
    209 
    210 TESTS_BIN += dtc
    211 TESTS_BIN += convert-dtsv0
    212 TESTS_BIN += fdtput
    213 TESTS_BIN += fdtget
    214 TESTS_BIN += fdtdump
    215 
    216 include tests/Makefile.tests
    217 
    218 #
    219 # Clean rules
    220 #
    221 STD_CLEANFILES = *~ *.o *.$(SHAREDLIB_EXT) *.d *.a *.i *.s core a.out vgcore.* \
    222 	*.tab.[ch] *.lex.c *.output
    223 
    224 clean: libfdt_clean tests_clean
    225 	@$(VECHO) CLEAN
    226 	rm -f $(STD_CLEANFILES)
    227 	rm -f $(VERSION_FILE)
    228 	rm -f $(BIN)
    229 	rm -f dtc-*.tar dtc-*.tar.sign dtc-*.tar.asc
    230 
    231 #
    232 # Generic compile rules
    233 #
    234 %: %.o
    235 	@$(VECHO) LD $@
    236 	$(LINK.c) -o $@ $^
    237 
    238 %.o: %.c
    239 	@$(VECHO) CC $@
    240 	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
    241 
    242 %.o: %.S
    243 	@$(VECHO) AS $@
    244 	$(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $<
    245 
    246 %.d: %.c
    247 	@$(VECHO) DEP $<
    248 	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
    249 
    250 %.d: %.S
    251 	@$(VECHO) DEP $<
    252 	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
    253 
    254 %.i:	%.c
    255 	@$(VECHO) CPP $@
    256 	$(CC) $(CPPFLAGS) -E $< > $@
    257 
    258 %.s:	%.c
    259 	@$(VECHO) CC -S $@
    260 	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $<
    261 
    262 %.a:
    263 	@$(VECHO) AR $@
    264 	$(AR) $(ARFLAGS) $@ $^
    265 
    266 $(LIBFDT_lib):
    267 	@$(VECHO) LD $@
    268 	$(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(LIBFDT_soname) -o $(LIBFDT_lib) $^
    269 
    270 %.lex.c: %.l
    271 	@$(VECHO) LEX $@
    272 	$(LEX) -o$@ $<
    273 
    274 %.tab.c %.tab.h %.output: %.y
    275 	@$(VECHO) BISON $@
    276 	$(BISON) -d $<
    277 
    278 FORCE:
    279