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
19204433SrajCFLAGS = -Wall -g -Os -fPIC -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
31204433SrajHOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
32204433Sraj	    sed -e 's/\(cygwin\).*/cygwin/')
33204433Sraj
34204433Srajifeq ($(HOSTOS),darwin)
35204433SrajSHAREDLIB_EXT=dylib
36204433SrajSHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl,
37204433Srajelse
38204433SrajSHAREDLIB_EXT=so
39204433SrajSHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname,
40204433Srajendif
41204433Sraj
42204431Sraj#
43204431Sraj# Overall rules
44204431Sraj#
45204431Srajifdef V
46204431SrajVECHO = :
47204431Srajelse
48204431SrajVECHO = echo "	"
49204431SrajARFLAGS = rc
50204431Sraj.SILENT:
51204431Srajendif
52204431Sraj
53204431SrajNODEPTARGETS = clean
54204431Srajifeq ($(MAKECMDGOALS),)
55204431SrajDEPTARGETS = all
56204431Srajelse
57204431SrajDEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS))
58204431Srajendif
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
104204433Srajinclude Makefile.convert-dtsv0
105204431Srajinclude Makefile.dtc
106204433Srajinclude Makefile.ftdump
107204431Sraj
108204433SrajBIN += convert-dtsv0
109204431SrajBIN += dtc
110204433SrajBIN += ftdump
111204431Sraj
112204431Sraj
113204433Srajall: $(BIN) libfdt
114204431Sraj
115204433Sraj
116204431Srajifneq ($(DEPTARGETS),)
117204431Sraj-include $(DTC_OBJS:%.o=%.d)
118204433Sraj-include $(CONVERT_OBJS:%.o=%.d)
119204433Sraj-include $(FTDUMP_OBJS:%.o=%.d)
120204431Srajendif
121204431Sraj
122204431Sraj
123204431Sraj
124204431Sraj#
125204431Sraj# Rules for libfdt
126204431Sraj#
127204431SrajLIBFDT_objdir = libfdt
128204431SrajLIBFDT_srcdir = libfdt
129204433SrajLIBFDT_archive = $(LIBFDT_objdir)/libfdt.a
130204433SrajLIBFDT_lib = $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT)
131204431SrajLIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
132204433SrajLIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION))
133204431Sraj
134204431Srajinclude $(LIBFDT_srcdir)/Makefile.libfdt
135204431Sraj
136204431Sraj.PHONY: libfdt
137204433Srajlibfdt: $(LIBFDT_archive) $(LIBFDT_lib)
138204431Sraj
139204433Sraj$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
140204431Sraj$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
141204431Sraj
142204431Srajlibfdt_clean:
143204431Sraj	@$(VECHO) CLEAN "(libfdt)"
144204431Sraj	rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES))
145204433Sraj	rm -f $(LIBFDT_objdir)/*.so
146204431Sraj
147204431Srajifneq ($(DEPTARGETS),)
148204431Sraj-include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d)
149204431Srajendif
150204431Sraj
151204433Sraj# This stops make from generating the lex and bison output during
152204433Sraj# auto-dependency computation, but throwing them away as an
153204433Sraj# intermediate target and building them again "for real"
154204433Sraj.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS)
155204433Sraj
156204433Srajinstall: all
157204433Sraj	@$(VECHO) INSTALL
158204433Sraj	$(INSTALL) -d $(DESTDIR)$(BINDIR)
159204433Sraj	$(INSTALL) $(BIN) $(DESTDIR)$(BINDIR)
160204433Sraj	$(INSTALL) -d $(DESTDIR)$(LIBDIR)
161204433Sraj	$(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)
162204433Sraj	$(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR)
163204433Sraj	$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
164204433Sraj	$(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR)
165204433Sraj
166204433Sraj$(VERSION_FILE): Makefile FORCE
167204433Sraj	$(call filechk,version)
168204433Sraj
169204433Sraj
170204433Srajdtc: $(DTC_OBJS)
171204433Sraj
172204433Srajconvert-dtsv0: $(CONVERT_OBJS)
173204433Sraj	@$(VECHO) LD $@
174204433Sraj	$(LINK.c) -o $@ $^
175204433Sraj
176204433Srajftdump:	$(FTDUMP_OBJS)
177204433Sraj
178204433Sraj
179204431Sraj#
180204431Sraj# Testsuite rules
181204431Sraj#
182204431SrajTESTS_PREFIX=tests/
183204431Srajinclude tests/Makefile.tests
184204431Sraj
185204431Sraj#
186204431Sraj# Clean rules
187204431Sraj#
188204433SrajSTD_CLEANFILES = *~ *.o *.so *.d *.a *.i *.s core a.out vgcore.* \
189204431Sraj	*.tab.[ch] *.lex.c *.output
190204431Sraj
191204431Srajclean: libfdt_clean tests_clean
192204431Sraj	@$(VECHO) CLEAN
193204431Sraj	rm -f $(STD_CLEANFILES)
194204431Sraj	rm -f $(VERSION_FILE)
195204431Sraj	rm -f $(BIN)
196204431Sraj
197204431Sraj#
198204431Sraj# Generic compile rules
199204431Sraj#
200204431Sraj%: %.o
201204431Sraj	@$(VECHO) LD $@
202204431Sraj	$(LINK.c) -o $@ $^
203204431Sraj
204204431Sraj%.o: %.c
205204431Sraj	@$(VECHO) CC $@
206204431Sraj	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
207204431Sraj
208204431Sraj%.o: %.S
209204431Sraj	@$(VECHO) AS $@
210204431Sraj	$(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $<
211204431Sraj
212204431Sraj%.d: %.c
213204431Sraj	@$(VECHO) DEP $<
214204431Sraj	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
215204431Sraj
216204431Sraj%.d: %.S
217204431Sraj	@$(VECHO) DEP $<
218204431Sraj	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
219204431Sraj
220204431Sraj%.i:	%.c
221204431Sraj	@$(VECHO) CPP $@
222204431Sraj	$(CC) $(CPPFLAGS) -E $< > $@
223204431Sraj
224204431Sraj%.s:	%.c
225204431Sraj	@$(VECHO) CC -S $@
226204431Sraj	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $<
227204431Sraj
228204431Sraj%.a:
229204431Sraj	@$(VECHO) AR $@
230204431Sraj	$(AR) $(ARFLAGS) $@ $^
231204431Sraj
232204433Sraj$(LIBFDT_lib):
233204433Sraj	@$(VECHO) LD $@
234204433Sraj	$(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(notdir $@) -o $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) $^
235204433Sraj	ln -sf libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT)
236204433Sraj
237204431Sraj%.lex.c: %.l
238204431Sraj	@$(VECHO) LEX $@
239204431Sraj	$(LEX) -o$@ $<
240204431Sraj
241204431Sraj%.tab.c %.tab.h %.output: %.y
242204431Sraj	@$(VECHO) BISON $@
243204431Sraj	$(BISON) -d $<
244204431Sraj
245204431SrajFORCE:
246