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