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