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
12266130SianPATCHLEVEL = 4
13204431SrajSUBLEVEL = 0
14204431SrajEXTRAVERSION =
15204431SrajLOCAL_VERSION =
16204431SrajCONFIG_LOCALVERSION =
17204431Sraj
18238742SimpCPPFLAGS = -I libfdt -I .
19238742SimpWARNINGS = -Werror -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \
20238742Simp	-Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls
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
163266130Sianinstall-bin: all $(SCRIPTS)
164266130Sian	@$(VECHO) INSTALL-BIN
165204433Sraj	$(INSTALL) -d $(DESTDIR)$(BINDIR)
166238742Simp	$(INSTALL) $(BIN) $(SCRIPTS) $(DESTDIR)$(BINDIR)
167266130Sian
168266130Sianinstall-lib: all
169266130Sian	@$(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)
175266130Sian
176266130Sianinstall-includes:
177266130Sian	@$(VECHO) INSTALL-INC
178204433Sraj	$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
179204433Sraj	$(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR)
180204433Sraj
181266130Sianinstall: install-bin install-lib install-includes
182266130Sian
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
199238742Simp
200204431Sraj#
201204431Sraj# Testsuite rules
202204431Sraj#
203204431SrajTESTS_PREFIX=tests/
204238742Simp
205238742SimpTESTS_BIN += dtc
206238742SimpTESTS_BIN += convert-dtsv0
207238742SimpTESTS_BIN += fdtput
208238742SimpTESTS_BIN += fdtget
209238742Simp
210204431Srajinclude tests/Makefile.tests
211204431Sraj
212204431Sraj#
213204431Sraj# Clean rules
214204431Sraj#
215238742SimpSTD_CLEANFILES = *~ *.o *.$(SHAREDLIB_EXT) *.d *.a *.i *.s core a.out vgcore.* \
216204431Sraj	*.tab.[ch] *.lex.c *.output
217204431Sraj
218204431Srajclean: libfdt_clean tests_clean
219204431Sraj	@$(VECHO) CLEAN
220204431Sraj	rm -f $(STD_CLEANFILES)
221204431Sraj	rm -f $(VERSION_FILE)
222204431Sraj	rm -f $(BIN)
223204431Sraj
224204431Sraj#
225204431Sraj# Generic compile rules
226204431Sraj#
227204431Sraj%: %.o
228204431Sraj	@$(VECHO) LD $@
229204431Sraj	$(LINK.c) -o $@ $^
230204431Sraj
231204431Sraj%.o: %.c
232204431Sraj	@$(VECHO) CC $@
233204431Sraj	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
234204431Sraj
235204431Sraj%.o: %.S
236204431Sraj	@$(VECHO) AS $@
237204431Sraj	$(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $<
238204431Sraj
239204431Sraj%.d: %.c
240204431Sraj	@$(VECHO) DEP $<
241204431Sraj	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
242204431Sraj
243204431Sraj%.d: %.S
244204431Sraj	@$(VECHO) DEP $<
245204431Sraj	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
246204431Sraj
247204431Sraj%.i:	%.c
248204431Sraj	@$(VECHO) CPP $@
249204431Sraj	$(CC) $(CPPFLAGS) -E $< > $@
250204431Sraj
251204431Sraj%.s:	%.c
252204431Sraj	@$(VECHO) CC -S $@
253204431Sraj	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $<
254204431Sraj
255204431Sraj%.a:
256204431Sraj	@$(VECHO) AR $@
257204431Sraj	$(AR) $(ARFLAGS) $@ $^
258204431Sraj
259204433Sraj$(LIBFDT_lib):
260204433Sraj	@$(VECHO) LD $@
261238742Simp	$(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(LIBFDT_soname) -o $(LIBFDT_lib) $^
262204433Sraj
263204431Sraj%.lex.c: %.l
264204431Sraj	@$(VECHO) LEX $@
265204431Sraj	$(LEX) -o$@ $<
266204431Sraj
267204431Sraj%.tab.c %.tab.h %.output: %.y
268204431Sraj	@$(VECHO) BISON $@
269204431Sraj	$(BISON) -d $<
270204431Sraj
271204431SrajFORCE:
272