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