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
12261215SimpPATCHLEVEL = 4
13318102SgonzoSUBLEVEL = 3
14204431SrajEXTRAVERSION =
15204431SrajLOCAL_VERSION =
16204431SrajCONFIG_LOCALVERSION =
17204431Sraj
18238742SimpCPPFLAGS = -I libfdt -I .
19318102SgonzoWARNINGS = -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \
20318102Sgonzo	-Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wshadow
21238742SimpCFLAGS = -g -Os -fPIC -Werror $(WARNINGS)
22204431Sraj
23204431SrajBISON = bison
24204431SrajLEX = flex
25204431Sraj
26204431SrajINSTALL = /usr/bin/install
27204431SrajDESTDIR =
28204431SrajPREFIX = $(HOME)
29204431SrajBINDIR = $(PREFIX)/bin
30204431SrajLIBDIR = $(PREFIX)/lib
31204431SrajINCLUDEDIR = $(PREFIX)/include
32204431Sraj
33204433SrajHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
34204433Sraj	    sed -e 's/\(cygwin\).*/cygwin/')
35204433Sraj
36204433Srajifeq ($(HOSTOS),darwin)
37204433SrajSHAREDLIB_EXT=dylib
38204433SrajSHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl,
39204433Srajelse
40204433SrajSHAREDLIB_EXT=so
41204433SrajSHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname,
42204433Srajendif
43204433Sraj
44204431Sraj#
45204431Sraj# Overall rules
46204431Sraj#
47204431Srajifdef V
48204431SrajVECHO = :
49204431Srajelse
50204431SrajVECHO = echo "	"
51243933SeadlerARFLAGS ?= rc
52204431Sraj.SILENT:
53204431Srajendif
54204431Sraj
55204431SrajNODEPTARGETS = clean
56204431Srajifeq ($(MAKECMDGOALS),)
57204431SrajDEPTARGETS = all
58204431Srajelse
59204431SrajDEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS))
60204431Srajendif
61204431Sraj
62204431Sraj#
63204431Sraj# Rules for versioning
64204431Sraj#
65204431Sraj
66204431SrajDTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
67204431SrajVERSION_FILE = version_gen.h
68204431Sraj
69204431SrajCONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
70204431Sraj	  else if [ -x /bin/bash ]; then echo /bin/bash; \
71204431Sraj	  else echo sh; fi ; fi)
72204431Sraj
73204431Srajnullstring :=
74204431Srajspace	:= $(nullstring) # end of line
75204431Sraj
76204431Srajlocalver_config = $(subst $(space),, $(string) \
77204431Sraj			      $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
78204431Sraj
79204431Srajlocalver_cmd = $(subst $(space),, $(string) \
80204431Sraj			      $(patsubst "%",%,$(LOCALVERSION)))
81204431Sraj
82204431Srajlocalver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion)
83204431Srajlocalver_full  = $(localver_config)$(localver_cmd)$(localver_scm)
84204431Sraj
85204431Srajdtc_version = $(DTC_VERSION)$(localver_full)
86204431Sraj
87204431Sraj# Contents of the generated version file.
88204431Srajdefine filechk_version
89204431Sraj	(echo "#define DTC_VERSION \"DTC $(dtc_version)\""; )
90204431Srajendef
91204431Sraj
92204431Srajdefine filechk
93204431Sraj	set -e;					\
94204431Sraj	echo '	CHK $@';			\
95204431Sraj	mkdir -p $(dir $@);			\
96204431Sraj	$(filechk_$(1)) < $< > $@.tmp;		\
97204431Sraj	if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
98204431Sraj		rm -f $@.tmp;			\
99204431Sraj	else					\
100204431Sraj		echo '	UPD $@';		\
101204431Sraj		mv -f $@.tmp $@;		\
102204431Sraj	fi;
103204431Srajendef
104204431Sraj
105204431Sraj
106204433Srajinclude Makefile.convert-dtsv0
107204431Srajinclude Makefile.dtc
108238742Simpinclude Makefile.utils
109204431Sraj
110204433SrajBIN += convert-dtsv0
111204431SrajBIN += dtc
112238742SimpBIN += fdtdump
113238742SimpBIN += fdtget
114238742SimpBIN += fdtput
115204431Sraj
116238742SimpSCRIPTS = dtdiff
117204431Sraj
118204433Srajall: $(BIN) libfdt
119204431Sraj
120204433Sraj
121204431Srajifneq ($(DEPTARGETS),)
122204431Sraj-include $(DTC_OBJS:%.o=%.d)
123204433Sraj-include $(CONVERT_OBJS:%.o=%.d)
124238742Simp-include $(FDTDUMP_OBJS:%.o=%.d)
125238742Simp-include $(FDTGET_OBJS:%.o=%.d)
126238742Simp-include $(FDTPUT_OBJS:%.o=%.d)
127204431Srajendif
128204431Sraj
129204431Sraj
130204431Sraj
131204431Sraj#
132204431Sraj# Rules for libfdt
133204431Sraj#
134204431SrajLIBFDT_objdir = libfdt
135204431SrajLIBFDT_srcdir = libfdt
136204433SrajLIBFDT_archive = $(LIBFDT_objdir)/libfdt.a
137238742SimpLIBFDT_lib = $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT)
138204431SrajLIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
139204433SrajLIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION))
140204431Sraj
141204431Srajinclude $(LIBFDT_srcdir)/Makefile.libfdt
142204431Sraj
143204431Sraj.PHONY: libfdt
144204433Srajlibfdt: $(LIBFDT_archive) $(LIBFDT_lib)
145204431Sraj
146204433Sraj$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
147204431Sraj$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
148204431Sraj
149204431Srajlibfdt_clean:
150204431Sraj	@$(VECHO) CLEAN "(libfdt)"
151204431Sraj	rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES))
152204433Sraj	rm -f $(LIBFDT_objdir)/*.so
153204431Sraj
154204431Srajifneq ($(DEPTARGETS),)
155204431Sraj-include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d)
156204431Srajendif
157204431Sraj
158204433Sraj# This stops make from generating the lex and bison output during
159204433Sraj# auto-dependency computation, but throwing them away as an
160204433Sraj# intermediate target and building them again "for real"
161204433Sraj.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS)
162204433Sraj
163261215Simpinstall-bin: all $(SCRIPTS)
164261215Simp	@$(VECHO) INSTALL-BIN
165204433Sraj	$(INSTALL) -d $(DESTDIR)$(BINDIR)
166238742Simp	$(INSTALL) $(BIN) $(SCRIPTS) $(DESTDIR)$(BINDIR)
167261215Simp
168261215Simpinstall-lib: all
169261215Simp	@$(VECHO) INSTALL-LIB
170204433Sraj	$(INSTALL) -d $(DESTDIR)$(LIBDIR)
171204433Sraj	$(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)
172238742Simp	ln -sf $(notdir $(LIBFDT_lib)) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname)
173238742Simp	ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/libfdt.$(SHAREDLIB_EXT)
174204433Sraj	$(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR)
175261215Simp
176261215Simpinstall-includes:
177261215Simp	@$(VECHO) INSTALL-INC
178204433Sraj	$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
179204433Sraj	$(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR)
180204433Sraj
181261215Simpinstall: install-bin install-lib install-includes
182261215Simp
183204433Sraj$(VERSION_FILE): Makefile FORCE
184204433Sraj	$(call filechk,version)
185204433Sraj
186204433Sraj
187204433Srajdtc: $(DTC_OBJS)
188204433Sraj
189204433Srajconvert-dtsv0: $(CONVERT_OBJS)
190204433Sraj	@$(VECHO) LD $@
191204433Sraj	$(LINK.c) -o $@ $^
192204433Sraj
193238742Simpfdtdump:	$(FDTDUMP_OBJS)
194204433Sraj
195238742Simpfdtget:	$(FDTGET_OBJS) $(LIBFDT_archive)
196204433Sraj
197238742Simpfdtput:	$(FDTPUT_OBJS) $(LIBFDT_archive)
198238742Simp
199318102Sgonzodist:
200318102Sgonzo	git archive --format=tar --prefix=dtc-$(dtc_version)/ HEAD \
201318102Sgonzo		> ../dtc-$(dtc_version).tar
202318102Sgonzo	cat ../dtc-$(dtc_version).tar | \
203318102Sgonzo		gzip -9 > ../dtc-$(dtc_version).tar.gz
204238742Simp
205204431Sraj#
206318102Sgonzo# Release signing and uploading
207318102Sgonzo# This is for maintainer convenience, don't try this at home.
208318102Sgonzo#
209318102Sgonzoifeq ($(MAINTAINER),y)
210318102SgonzoGPG = gpg2
211318102SgonzoKUP = kup
212318102SgonzoKUPDIR = /pub/software/utils/dtc
213318102Sgonzo
214318102Sgonzokup: dist
215318102Sgonzo	$(GPG) --detach-sign --armor -o ../dtc-$(dtc_version).tar.sign \
216318102Sgonzo		../dtc-$(dtc_version).tar
217318102Sgonzo	$(KUP) put ../dtc-$(dtc_version).tar.gz ../dtc-$(dtc_version).tar.sign \
218318102Sgonzo		$(KUPDIR)/dtc-$(dtc_version).tar.gz
219318102Sgonzoendif
220318102Sgonzo
221318102Sgonzotags: FORCE
222318102Sgonzo	rm -f tags
223318102Sgonzo	find . \( -name tests -type d -prune \) -o \
224318102Sgonzo	       \( ! -name '*.tab.[ch]' ! -name '*.lex.c' \
225318102Sgonzo	       -name '*.[chly]' -type f -print \) | xargs ctags -a
226318102Sgonzo
227318102Sgonzo#
228204431Sraj# Testsuite rules
229204431Sraj#
230204431SrajTESTS_PREFIX=tests/
231238742Simp
232238742SimpTESTS_BIN += dtc
233238742SimpTESTS_BIN += convert-dtsv0
234238742SimpTESTS_BIN += fdtput
235238742SimpTESTS_BIN += fdtget
236318102SgonzoTESTS_BIN += fdtdump
237238742Simp
238204431Srajinclude tests/Makefile.tests
239204431Sraj
240204431Sraj#
241204431Sraj# Clean rules
242204431Sraj#
243238742SimpSTD_CLEANFILES = *~ *.o *.$(SHAREDLIB_EXT) *.d *.a *.i *.s core a.out vgcore.* \
244204431Sraj	*.tab.[ch] *.lex.c *.output
245204431Sraj
246204431Srajclean: libfdt_clean tests_clean
247204431Sraj	@$(VECHO) CLEAN
248204431Sraj	rm -f $(STD_CLEANFILES)
249204431Sraj	rm -f $(VERSION_FILE)
250204431Sraj	rm -f $(BIN)
251318102Sgonzo	rm -f dtc-*.tar dtc-*.tar.sign dtc-*.tar.asc
252204431Sraj
253204431Sraj#
254204431Sraj# Generic compile rules
255204431Sraj#
256204431Sraj%: %.o
257204431Sraj	@$(VECHO) LD $@
258204431Sraj	$(LINK.c) -o $@ $^
259204431Sraj
260204431Sraj%.o: %.c
261204431Sraj	@$(VECHO) CC $@
262204431Sraj	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
263204431Sraj
264204431Sraj%.o: %.S
265204431Sraj	@$(VECHO) AS $@
266204431Sraj	$(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $<
267204431Sraj
268204431Sraj%.d: %.c
269204431Sraj	@$(VECHO) DEP $<
270204431Sraj	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
271204431Sraj
272204431Sraj%.d: %.S
273204431Sraj	@$(VECHO) DEP $<
274204431Sraj	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
275204431Sraj
276204431Sraj%.i:	%.c
277204431Sraj	@$(VECHO) CPP $@
278204431Sraj	$(CC) $(CPPFLAGS) -E $< > $@
279204431Sraj
280204431Sraj%.s:	%.c
281204431Sraj	@$(VECHO) CC -S $@
282204431Sraj	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $<
283204431Sraj
284204431Sraj%.a:
285204431Sraj	@$(VECHO) AR $@
286204431Sraj	$(AR) $(ARFLAGS) $@ $^
287204431Sraj
288204433Sraj$(LIBFDT_lib):
289204433Sraj	@$(VECHO) LD $@
290238742Simp	$(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(LIBFDT_soname) -o $(LIBFDT_lib) $^
291204433Sraj
292204431Sraj%.lex.c: %.l
293204431Sraj	@$(VECHO) LEX $@
294204431Sraj	$(LEX) -o$@ $<
295204431Sraj
296204431Sraj%.tab.c %.tab.h %.output: %.y
297204431Sraj	@$(VECHO) BISON $@
298204431Sraj	$(BISON) -d $<
299204431Sraj
300204431SrajFORCE:
301