Makefile revision 204488
1#
2# Device Tree Compiler
3#
4
5#
6# Version information will be constructed in this order:
7# EXTRAVERSION might be "-rc", for example.
8# LOCAL_VERSION is likely from command line.
9# CONFIG_LOCALVERSION from some future config system.
10#
11VERSION = 1
12PATCHLEVEL = 2
13SUBLEVEL = 0
14EXTRAVERSION =
15LOCAL_VERSION =
16CONFIG_LOCALVERSION =
17
18CPPFLAGS = -I libfdt
19CFLAGS = -Wall -g -Os -fPIC -Wpointer-arith -Wcast-qual
20
21BISON = bison
22LEX = flex
23
24INSTALL = /usr/bin/install
25DESTDIR =
26PREFIX = $(HOME)
27BINDIR = $(PREFIX)/bin
28LIBDIR = $(PREFIX)/lib
29INCLUDEDIR = $(PREFIX)/include
30
31HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
32	    sed -e 's/\(cygwin\).*/cygwin/')
33
34ifeq ($(HOSTOS),darwin)
35SHAREDLIB_EXT=dylib
36SHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl,
37else
38SHAREDLIB_EXT=so
39SHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname,
40endif
41
42#
43# Overall rules
44#
45ifdef V
46VECHO = :
47else
48VECHO = echo "	"
49ARFLAGS = rc
50.SILENT:
51endif
52
53NODEPTARGETS = clean
54ifeq ($(MAKECMDGOALS),)
55DEPTARGETS = all
56else
57DEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS))
58endif
59
60#
61# Rules for versioning
62#
63
64DTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
65VERSION_FILE = version_gen.h
66
67CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
68	  else if [ -x /bin/bash ]; then echo /bin/bash; \
69	  else echo sh; fi ; fi)
70
71nullstring :=
72space	:= $(nullstring) # end of line
73
74localver_config = $(subst $(space),, $(string) \
75			      $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
76
77localver_cmd = $(subst $(space),, $(string) \
78			      $(patsubst "%",%,$(LOCALVERSION)))
79
80localver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion)
81localver_full  = $(localver_config)$(localver_cmd)$(localver_scm)
82
83dtc_version = $(DTC_VERSION)$(localver_full)
84
85# Contents of the generated version file.
86define filechk_version
87	(echo "#define DTC_VERSION \"DTC $(dtc_version)\""; )
88endef
89
90define filechk
91	set -e;					\
92	echo '	CHK $@';			\
93	mkdir -p $(dir $@);			\
94	$(filechk_$(1)) < $< > $@.tmp;		\
95	if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
96		rm -f $@.tmp;			\
97	else					\
98		echo '	UPD $@';		\
99		mv -f $@.tmp $@;		\
100	fi;
101endef
102
103
104include Makefile.convert-dtsv0
105include Makefile.dtc
106include Makefile.ftdump
107
108BIN += convert-dtsv0
109BIN += dtc
110BIN += ftdump
111
112
113all: $(BIN) libfdt
114
115
116ifneq ($(DEPTARGETS),)
117-include $(DTC_OBJS:%.o=%.d)
118-include $(CONVERT_OBJS:%.o=%.d)
119-include $(FTDUMP_OBJS:%.o=%.d)
120endif
121
122
123
124#
125# Rules for libfdt
126#
127LIBFDT_objdir = libfdt
128LIBFDT_srcdir = libfdt
129LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a
130LIBFDT_lib = $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT)
131LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
132LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION))
133
134include $(LIBFDT_srcdir)/Makefile.libfdt
135
136.PHONY: libfdt
137libfdt: $(LIBFDT_archive) $(LIBFDT_lib)
138
139$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
140$(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
141
142libfdt_clean:
143	@$(VECHO) CLEAN "(libfdt)"
144	rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES))
145	rm -f $(LIBFDT_objdir)/*.so
146
147ifneq ($(DEPTARGETS),)
148-include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d)
149endif
150
151# This stops make from generating the lex and bison output during
152# auto-dependency computation, but throwing them away as an
153# intermediate target and building them again "for real"
154.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS)
155
156install: all
157	@$(VECHO) INSTALL
158	$(INSTALL) -d $(DESTDIR)$(BINDIR)
159	$(INSTALL) $(BIN) $(DESTDIR)$(BINDIR)
160	$(INSTALL) -d $(DESTDIR)$(LIBDIR)
161	$(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)
162	$(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR)
163	$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
164	$(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR)
165
166$(VERSION_FILE): Makefile FORCE
167	$(call filechk,version)
168
169
170dtc: $(DTC_OBJS)
171
172convert-dtsv0: $(CONVERT_OBJS)
173	@$(VECHO) LD $@
174	$(LINK.c) -o $@ $^
175
176ftdump:	$(FTDUMP_OBJS)
177
178
179#
180# Testsuite rules
181#
182TESTS_PREFIX=tests/
183include tests/Makefile.tests
184
185#
186# Clean rules
187#
188STD_CLEANFILES = *~ *.o *.so *.d *.a *.i *.s core a.out vgcore.* \
189	*.tab.[ch] *.lex.c *.output
190
191clean: libfdt_clean tests_clean
192	@$(VECHO) CLEAN
193	rm -f $(STD_CLEANFILES)
194	rm -f $(VERSION_FILE)
195	rm -f $(BIN)
196
197#
198# Generic compile rules
199#
200%: %.o
201	@$(VECHO) LD $@
202	$(LINK.c) -o $@ $^
203
204%.o: %.c
205	@$(VECHO) CC $@
206	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
207
208%.o: %.S
209	@$(VECHO) AS $@
210	$(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $<
211
212%.d: %.c
213	@$(VECHO) DEP $<
214	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
215
216%.d: %.S
217	@$(VECHO) DEP $<
218	$(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
219
220%.i:	%.c
221	@$(VECHO) CPP $@
222	$(CC) $(CPPFLAGS) -E $< > $@
223
224%.s:	%.c
225	@$(VECHO) CC -S $@
226	$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $<
227
228%.a:
229	@$(VECHO) AR $@
230	$(AR) $(ARFLAGS) $@ $^
231
232$(LIBFDT_lib):
233	@$(VECHO) LD $@
234	$(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(notdir $@) -o $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) $^
235	ln -sf libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT)
236
237%.lex.c: %.l
238	@$(VECHO) LEX $@
239	$(LEX) -o$@ $<
240
241%.tab.c %.tab.h %.output: %.y
242	@$(VECHO) BISON $@
243	$(BISON) -d $<
244
245FORCE:
246