Makefile revision 204431
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
19204431SrajCFLAGS = -Wall -g -Os -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
31204431Sraj#
32204431Sraj# Overall rules
33204431Sraj#
34204431Srajifdef V
35204431SrajVECHO = :
36204431Srajelse
37204431SrajVECHO = echo "	"
38204431SrajARFLAGS = rc
39204431Sraj.SILENT:
40204431Srajendif
41204431Sraj
42204431SrajNODEPTARGETS = clean
43204431Srajifeq ($(MAKECMDGOALS),)
44204431SrajDEPTARGETS = all
45204431Srajelse
46204431SrajDEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS))
47204431Srajendif
48204431Sraj
49204431Srajall: dtc ftdump convert-dtsv0 libfdt
50204431Sraj
51204431Srajinstall: all
52204431Sraj	@$(VECHO) INSTALL
53204431Sraj	$(INSTALL) -d $(DESTDIR)$(BINDIR)
54204431Sraj	$(INSTALL) -m 755 dtc $(DESTDIR)$(BINDIR)
55204431Sraj	$(INSTALL) -d $(DESTDIR)$(LIBDIR)
56204431Sraj	$(INSTALL) -m 644 $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)
57204431Sraj	$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
58204431Sraj	$(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR)
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$(VERSION_FILE): Makefile FORCE
104204431Sraj	$(call filechk,version)
105204431Sraj
106204431Sraj#
107204431Sraj# Rules for dtc proper
108204431Sraj#
109204431Srajinclude Makefile.dtc
110204431Sraj
111204431SrajBIN += dtc
112204431Sraj
113204431Sraj# This stops make from generating the lex and bison output during
114204431Sraj# auto-dependency computation, but throwing them away as an
115204431Sraj# intermediate target and building them again "for real"
116204431Sraj.SECONDARY: $(DTC_GEN_SRCS)
117204431Sraj
118204431Srajdtc: $(DTC_OBJS)
119204431Sraj
120204431Srajifneq ($(DEPTARGETS),)
121204431Sraj-include $(DTC_OBJS:%.o=%.d)
122204431Srajendif
123204431Sraj#
124204431Sraj# Rules for ftdump & convert-dtsv0
125204431Sraj#
126204431SrajBIN += ftdump convert-dtsv0
127204431Sraj
128204431Srajftdump:	ftdump.o
129204431Sraj
130204431Srajconvert-dtsv0: convert-dtsv0-lexer.lex.o srcpos.o
131204431Sraj	@$(VECHO) LD $@
132204431Sraj	$(LINK.c) -o $@ $^
133204431Sraj
134204431Srajifneq ($(DEPTARGETS),)
135204431Sraj-include ftdump.d
136204431Srajendif
137204431Sraj#
138204431Sraj# Rules for libfdt
139204431Sraj#
140204431SrajLIBFDT_objdir = libfdt
141204431SrajLIBFDT_srcdir = libfdt
142204431SrajLIBFDT_lib = $(LIBFDT_objdir)/libfdt.a
143204431SrajLIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
144204431Sraj
145204431Srajinclude $(LIBFDT_srcdir)/Makefile.libfdt
146204431Sraj
147204431Sraj.PHONY: libfdt
148204431Srajlibfdt: $(LIBFDT_lib)
149204431Sraj
150204431Sraj$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
151204431Sraj
152204431Srajlibfdt_clean:
153204431Sraj	@$(VECHO) CLEAN "(libfdt)"
154204431Sraj	rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES))
155204431Sraj
156204431Srajifneq ($(DEPTARGETS),)
157204431Sraj-include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d)
158204431Srajendif
159204431Sraj
160204431Sraj#
161204431Sraj# Testsuite rules
162204431Sraj#
163204431SrajTESTS_PREFIX=tests/
164204431Srajinclude tests/Makefile.tests
165204431Sraj
166204431Sraj#
167204431Sraj# Clean rules
168204431Sraj#
169204431SrajSTD_CLEANFILES = *~ *.o *.d *.a *.i *.s core a.out vgcore.* \
170204431Sraj	*.tab.[ch] *.lex.c *.output
171204431Sraj
172204431Srajclean: libfdt_clean tests_clean
173204431Sraj	@$(VECHO) CLEAN
174204431Sraj	rm -f $(STD_CLEANFILES)
175204431Sraj	rm -f $(VERSION_FILE)
176204431Sraj	rm -f $(BIN)
177204431Sraj
178204431Sraj#
179204431Sraj# Generic compile rules
180204431Sraj#
181204431Sraj%: %.o
182204431Sraj	@$(VECHO) LD $@
183204431Sraj	$(LINK.c) -o $@ $^
184204431Sraj
185204431Sraj%.o: %.c
186204431Sraj	@$(VECHO) CC $@
187204431Sraj	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
188204431Sraj
189204431Sraj%.o: %.S
190204431Sraj	@$(VECHO) AS $@
191204431Sraj	$(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $<
192204431Sraj
193204431Sraj%.d: %.c
194204431Sraj	@$(VECHO) DEP $<
195204431Sraj	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
196204431Sraj
197204431Sraj%.d: %.S
198204431Sraj	@$(VECHO) DEP $<
199204431Sraj	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
200204431Sraj
201204431Sraj%.i:	%.c
202204431Sraj	@$(VECHO) CPP $@
203204431Sraj	$(CC) $(CPPFLAGS) -E $< > $@
204204431Sraj
205204431Sraj%.s:	%.c
206204431Sraj	@$(VECHO) CC -S $@
207204431Sraj	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $<
208204431Sraj
209204431Sraj%.a:
210204431Sraj	@$(VECHO) AR $@
211204431Sraj	$(AR) $(ARFLAGS) $@ $^
212204431Sraj
213204431Sraj%.lex.c: %.l
214204431Sraj	@$(VECHO) LEX $@
215204431Sraj	$(LEX) -o$@ $<
216204431Sraj
217204431Sraj%.tab.c %.tab.h %.output: %.y
218204431Sraj	@$(VECHO) BISON $@
219204431Sraj	$(BISON) -d $<
220204431Sraj
221204431SrajFORCE:
222