Makefile revision 1.1.1.2 1 1.1 macallan #
2 1.1 macallan # Device Tree Compiler
3 1.1 macallan #
4 1.1 macallan
5 1.1 macallan #
6 1.1 macallan # Version information will be constructed in this order:
7 1.1 macallan # EXTRAVERSION might be "-rc", for example.
8 1.1 macallan # LOCAL_VERSION is likely from command line.
9 1.1 macallan # CONFIG_LOCALVERSION from some future config system.
10 1.1 macallan #
11 1.1 macallan VERSION = 1
12 1.1 macallan PATCHLEVEL = 4
13 1.1.1.2 skrll SUBLEVEL = 4
14 1.1 macallan EXTRAVERSION =
15 1.1 macallan LOCAL_VERSION =
16 1.1 macallan CONFIG_LOCALVERSION =
17 1.1 macallan
18 1.1 macallan CPPFLAGS = -I libfdt -I .
19 1.1 macallan WARNINGS = -Wall -Wpointer-arith -Wcast-qual -Wnested-externs \
20 1.1 macallan -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wshadow
21 1.1 macallan CFLAGS = -g -Os -fPIC -Werror $(WARNINGS)
22 1.1 macallan
23 1.1 macallan BISON = bison
24 1.1 macallan LEX = flex
25 1.1 macallan
26 1.1 macallan INSTALL = /usr/bin/install
27 1.1 macallan DESTDIR =
28 1.1 macallan PREFIX = $(HOME)
29 1.1 macallan BINDIR = $(PREFIX)/bin
30 1.1 macallan LIBDIR = $(PREFIX)/lib
31 1.1 macallan INCLUDEDIR = $(PREFIX)/include
32 1.1 macallan
33 1.1 macallan HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
34 1.1 macallan sed -e 's/\(cygwin\).*/cygwin/')
35 1.1 macallan
36 1.1 macallan ifeq ($(HOSTOS),darwin)
37 1.1 macallan SHAREDLIB_EXT=dylib
38 1.1 macallan SHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl,
39 1.1 macallan else
40 1.1 macallan SHAREDLIB_EXT=so
41 1.1 macallan SHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname,
42 1.1 macallan endif
43 1.1 macallan
44 1.1 macallan #
45 1.1 macallan # Overall rules
46 1.1 macallan #
47 1.1 macallan ifdef V
48 1.1 macallan VECHO = :
49 1.1 macallan else
50 1.1 macallan VECHO = echo " "
51 1.1 macallan ARFLAGS = rc
52 1.1 macallan .SILENT:
53 1.1 macallan endif
54 1.1 macallan
55 1.1 macallan NODEPTARGETS = clean
56 1.1 macallan ifeq ($(MAKECMDGOALS),)
57 1.1 macallan DEPTARGETS = all
58 1.1 macallan else
59 1.1 macallan DEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS))
60 1.1 macallan endif
61 1.1 macallan
62 1.1 macallan #
63 1.1 macallan # Rules for versioning
64 1.1 macallan #
65 1.1 macallan
66 1.1 macallan DTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
67 1.1 macallan VERSION_FILE = version_gen.h
68 1.1 macallan
69 1.1 macallan CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
70 1.1 macallan else if [ -x /bin/bash ]; then echo /bin/bash; \
71 1.1 macallan else echo sh; fi ; fi)
72 1.1 macallan
73 1.1 macallan nullstring :=
74 1.1 macallan space := $(nullstring) # end of line
75 1.1 macallan
76 1.1 macallan localver_config = $(subst $(space),, $(string) \
77 1.1 macallan $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
78 1.1 macallan
79 1.1 macallan localver_cmd = $(subst $(space),, $(string) \
80 1.1 macallan $(patsubst "%",%,$(LOCALVERSION)))
81 1.1 macallan
82 1.1 macallan localver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion)
83 1.1 macallan localver_full = $(localver_config)$(localver_cmd)$(localver_scm)
84 1.1 macallan
85 1.1 macallan dtc_version = $(DTC_VERSION)$(localver_full)
86 1.1 macallan
87 1.1 macallan # Contents of the generated version file.
88 1.1 macallan define filechk_version
89 1.1 macallan (echo "#define DTC_VERSION \"DTC $(dtc_version)\""; )
90 1.1 macallan endef
91 1.1 macallan
92 1.1 macallan define filechk
93 1.1 macallan set -e; \
94 1.1 macallan echo ' CHK $@'; \
95 1.1 macallan mkdir -p $(dir $@); \
96 1.1 macallan $(filechk_$(1)) < $< > $@.tmp; \
97 1.1 macallan if [ -r $@ ] && cmp -s $@ $@.tmp; then \
98 1.1 macallan rm -f $@.tmp; \
99 1.1 macallan else \
100 1.1 macallan echo ' UPD $@'; \
101 1.1 macallan mv -f $@.tmp $@; \
102 1.1 macallan fi;
103 1.1 macallan endef
104 1.1 macallan
105 1.1 macallan
106 1.1 macallan include Makefile.convert-dtsv0
107 1.1 macallan include Makefile.dtc
108 1.1 macallan include Makefile.utils
109 1.1 macallan
110 1.1 macallan BIN += convert-dtsv0
111 1.1 macallan BIN += dtc
112 1.1 macallan BIN += fdtdump
113 1.1 macallan BIN += fdtget
114 1.1 macallan BIN += fdtput
115 1.1 macallan
116 1.1 macallan SCRIPTS = dtdiff
117 1.1 macallan
118 1.1 macallan all: $(BIN) libfdt
119 1.1 macallan
120 1.1 macallan
121 1.1 macallan ifneq ($(DEPTARGETS),)
122 1.1 macallan -include $(DTC_OBJS:%.o=%.d)
123 1.1 macallan -include $(CONVERT_OBJS:%.o=%.d)
124 1.1 macallan -include $(FDTDUMP_OBJS:%.o=%.d)
125 1.1 macallan -include $(FDTGET_OBJS:%.o=%.d)
126 1.1 macallan -include $(FDTPUT_OBJS:%.o=%.d)
127 1.1 macallan endif
128 1.1 macallan
129 1.1 macallan
130 1.1 macallan
131 1.1 macallan #
132 1.1 macallan # Rules for libfdt
133 1.1 macallan #
134 1.1 macallan LIBFDT_objdir = libfdt
135 1.1 macallan LIBFDT_srcdir = libfdt
136 1.1 macallan LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a
137 1.1 macallan LIBFDT_lib = $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT)
138 1.1 macallan LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
139 1.1 macallan LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION))
140 1.1 macallan
141 1.1 macallan include $(LIBFDT_srcdir)/Makefile.libfdt
142 1.1 macallan
143 1.1 macallan .PHONY: libfdt
144 1.1 macallan libfdt: $(LIBFDT_archive) $(LIBFDT_lib)
145 1.1 macallan
146 1.1 macallan $(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
147 1.1 macallan $(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
148 1.1 macallan
149 1.1 macallan libfdt_clean:
150 1.1 macallan @$(VECHO) CLEAN "(libfdt)"
151 1.1 macallan rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES))
152 1.1 macallan rm -f $(LIBFDT_objdir)/*.so
153 1.1 macallan
154 1.1 macallan ifneq ($(DEPTARGETS),)
155 1.1 macallan -include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d)
156 1.1 macallan endif
157 1.1 macallan
158 1.1 macallan # This stops make from generating the lex and bison output during
159 1.1 macallan # auto-dependency computation, but throwing them away as an
160 1.1 macallan # intermediate target and building them again "for real"
161 1.1 macallan .SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS)
162 1.1 macallan
163 1.1 macallan install-bin: all $(SCRIPTS)
164 1.1 macallan @$(VECHO) INSTALL-BIN
165 1.1 macallan $(INSTALL) -d $(DESTDIR)$(BINDIR)
166 1.1 macallan $(INSTALL) $(BIN) $(SCRIPTS) $(DESTDIR)$(BINDIR)
167 1.1 macallan
168 1.1 macallan install-lib: all
169 1.1 macallan @$(VECHO) INSTALL-LIB
170 1.1 macallan $(INSTALL) -d $(DESTDIR)$(LIBDIR)
171 1.1 macallan $(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR)
172 1.1 macallan ln -sf $(notdir $(LIBFDT_lib)) $(DESTDIR)$(LIBDIR)/$(LIBFDT_soname)
173 1.1 macallan ln -sf $(LIBFDT_soname) $(DESTDIR)$(LIBDIR)/libfdt.$(SHAREDLIB_EXT)
174 1.1 macallan $(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR)
175 1.1 macallan
176 1.1 macallan install-includes:
177 1.1 macallan @$(VECHO) INSTALL-INC
178 1.1 macallan $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)
179 1.1 macallan $(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR)
180 1.1 macallan
181 1.1 macallan install: install-bin install-lib install-includes
182 1.1 macallan
183 1.1 macallan $(VERSION_FILE): Makefile FORCE
184 1.1 macallan $(call filechk,version)
185 1.1 macallan
186 1.1 macallan
187 1.1 macallan dtc: $(DTC_OBJS)
188 1.1 macallan
189 1.1 macallan convert-dtsv0: $(CONVERT_OBJS)
190 1.1 macallan @$(VECHO) LD $@
191 1.1 macallan $(LINK.c) -o $@ $^
192 1.1 macallan
193 1.1 macallan fdtdump: $(FDTDUMP_OBJS)
194 1.1 macallan
195 1.1 macallan fdtget: $(FDTGET_OBJS) $(LIBFDT_archive)
196 1.1 macallan
197 1.1 macallan fdtput: $(FDTPUT_OBJS) $(LIBFDT_archive)
198 1.1 macallan
199 1.1 macallan dist:
200 1.1.1.2 skrll git archive --format=tar --prefix=dtc-$(dtc_version)/ HEAD \
201 1.1.1.2 skrll > ../dtc-$(dtc_version).tar
202 1.1.1.2 skrll cat ../dtc-$(dtc_version).tar | \
203 1.1.1.2 skrll gzip -9 > ../dtc-$(dtc_version).tar.gz
204 1.1.1.2 skrll
205 1.1.1.2 skrll #
206 1.1.1.2 skrll # Release signing and uploading
207 1.1.1.2 skrll # This is for maintainer convenience, don't try this at home.
208 1.1.1.2 skrll #
209 1.1.1.2 skrll ifeq ($(MAINTAINER),y)
210 1.1.1.2 skrll GPG = gpg2
211 1.1.1.2 skrll KUP = kup
212 1.1.1.2 skrll KUPDIR = /pub/software/utils/dtc
213 1.1.1.2 skrll
214 1.1.1.2 skrll kup: dist
215 1.1.1.2 skrll $(GPG) --detach-sign --armor -o ../dtc-$(dtc_version).tar.sign \
216 1.1.1.2 skrll ../dtc-$(dtc_version).tar
217 1.1.1.2 skrll $(KUP) put ../dtc-$(dtc_version).tar.gz ../dtc-$(dtc_version).tar.sign \
218 1.1.1.2 skrll $(KUPDIR)/dtc-$(dtc_version).tar.gz
219 1.1.1.2 skrll endif
220 1.1.1.2 skrll
221 1.1.1.2 skrll tags: FORCE
222 1.1.1.2 skrll rm -f tags
223 1.1.1.2 skrll find . \( -name tests -type d -prune \) -o \
224 1.1.1.2 skrll \( ! -name '*.tab.[ch]' ! -name '*.lex.c' \
225 1.1.1.2 skrll -name '*.[chly]' -type f -print \) | xargs ctags -a
226 1.1 macallan
227 1.1 macallan #
228 1.1 macallan # Testsuite rules
229 1.1 macallan #
230 1.1 macallan TESTS_PREFIX=tests/
231 1.1 macallan
232 1.1 macallan TESTS_BIN += dtc
233 1.1 macallan TESTS_BIN += convert-dtsv0
234 1.1 macallan TESTS_BIN += fdtput
235 1.1 macallan TESTS_BIN += fdtget
236 1.1 macallan TESTS_BIN += fdtdump
237 1.1 macallan
238 1.1 macallan include tests/Makefile.tests
239 1.1 macallan
240 1.1 macallan #
241 1.1 macallan # Clean rules
242 1.1 macallan #
243 1.1 macallan STD_CLEANFILES = *~ *.o *.$(SHAREDLIB_EXT) *.d *.a *.i *.s core a.out vgcore.* \
244 1.1 macallan *.tab.[ch] *.lex.c *.output
245 1.1 macallan
246 1.1 macallan clean: libfdt_clean tests_clean
247 1.1 macallan @$(VECHO) CLEAN
248 1.1 macallan rm -f $(STD_CLEANFILES)
249 1.1 macallan rm -f $(VERSION_FILE)
250 1.1 macallan rm -f $(BIN)
251 1.1 macallan rm -f dtc-*.tar dtc-*.tar.sign dtc-*.tar.asc
252 1.1 macallan
253 1.1 macallan #
254 1.1 macallan # Generic compile rules
255 1.1 macallan #
256 1.1 macallan %: %.o
257 1.1 macallan @$(VECHO) LD $@
258 1.1 macallan $(LINK.c) -o $@ $^
259 1.1 macallan
260 1.1 macallan %.o: %.c
261 1.1 macallan @$(VECHO) CC $@
262 1.1 macallan $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $<
263 1.1 macallan
264 1.1 macallan %.o: %.S
265 1.1 macallan @$(VECHO) AS $@
266 1.1 macallan $(CC) $(CPPFLAGS) $(AFLAGS) -D__ASSEMBLY__ -o $@ -c $<
267 1.1 macallan
268 1.1 macallan %.d: %.c
269 1.1 macallan @$(VECHO) DEP $<
270 1.1 macallan $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
271 1.1 macallan
272 1.1 macallan %.d: %.S
273 1.1 macallan @$(VECHO) DEP $<
274 1.1 macallan $(CC) $(CPPFLAGS) -MM -MG -MT "$*.o $@" $< > $@
275 1.1 macallan
276 1.1 macallan %.i: %.c
277 1.1 macallan @$(VECHO) CPP $@
278 1.1 macallan $(CC) $(CPPFLAGS) -E $< > $@
279 1.1 macallan
280 1.1 macallan %.s: %.c
281 1.1 macallan @$(VECHO) CC -S $@
282 1.1 macallan $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -S $<
283 1.1 macallan
284 1.1 macallan %.a:
285 1.1 macallan @$(VECHO) AR $@
286 1.1 macallan $(AR) $(ARFLAGS) $@ $^
287 1.1 macallan
288 1.1 macallan $(LIBFDT_lib):
289 1.1 macallan @$(VECHO) LD $@
290 1.1 macallan $(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(LIBFDT_soname) -o $(LIBFDT_lib) $^
291 1.1 macallan
292 1.1 macallan %.lex.c: %.l
293 1.1 macallan @$(VECHO) LEX $@
294 1.1 macallan $(LEX) -o$@ $<
295 1.1 macallan
296 1.1 macallan %.tab.c %.tab.h %.output: %.y
297 1.1 macallan @$(VECHO) BISON $@
298 1.1 macallan $(BISON) -d $<
299 1.1 macallan
300 1.1 macallan FORCE:
301