]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/dtc/Makefile
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.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 = 2
13 SUBLEVEL = 0
14 EXTRAVERSION =
15 LOCAL_VERSION =
16 CONFIG_LOCALVERSION =
17
18 CPPFLAGS = -I libfdt
19 CFLAGS = -Wall -g -Os -fPIC -Wpointer-arith -Wcast-qual
20
21 BISON = bison
22 LEX = flex
23
24 INSTALL = /usr/bin/install
25 DESTDIR =
26 PREFIX = $(HOME)
27 BINDIR = $(PREFIX)/bin
28 LIBDIR = $(PREFIX)/lib
29 INCLUDEDIR = $(PREFIX)/include
30
31 HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
32             sed -e 's/\(cygwin\).*/cygwin/')
33
34 ifeq ($(HOSTOS),darwin)
35 SHAREDLIB_EXT=dylib
36 SHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl,
37 else
38 SHAREDLIB_EXT=so
39 SHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname,
40 endif
41
42 #
43 # Overall rules
44 #
45 ifdef V
46 VECHO = :
47 else
48 VECHO = echo "  "
49 ARFLAGS = rc
50 .SILENT:
51 endif
52
53 NODEPTARGETS = clean
54 ifeq ($(MAKECMDGOALS),)
55 DEPTARGETS = all
56 else
57 DEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS))
58 endif
59
60 #
61 # Rules for versioning
62 #
63
64 DTC_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
65 VERSION_FILE = version_gen.h
66
67 CONFIG_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
71 nullstring :=
72 space   := $(nullstring) # end of line
73
74 localver_config = $(subst $(space),, $(string) \
75                               $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
76
77 localver_cmd = $(subst $(space),, $(string) \
78                               $(patsubst "%",%,$(LOCALVERSION)))
79
80 localver_scm = $(shell $(CONFIG_SHELL) ./scripts/setlocalversion)
81 localver_full  = $(localver_config)$(localver_cmd)$(localver_scm)
82
83 dtc_version = $(DTC_VERSION)$(localver_full)
84
85 # Contents of the generated version file.
86 define filechk_version
87         (echo "#define DTC_VERSION \"DTC $(dtc_version)\""; )
88 endef
89
90 define 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;
101 endef
102
103
104 include Makefile.convert-dtsv0
105 include Makefile.dtc
106 include Makefile.ftdump
107
108 BIN += convert-dtsv0
109 BIN += dtc
110 BIN += ftdump
111
112
113 all: $(BIN) libfdt
114
115
116 ifneq ($(DEPTARGETS),)
117 -include $(DTC_OBJS:%.o=%.d)
118 -include $(CONVERT_OBJS:%.o=%.d)
119 -include $(FTDUMP_OBJS:%.o=%.d)
120 endif
121
122
123
124 #
125 # Rules for libfdt
126 #
127 LIBFDT_objdir = libfdt
128 LIBFDT_srcdir = libfdt
129 LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a
130 LIBFDT_lib = $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT)
131 LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
132 LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION))
133
134 include $(LIBFDT_srcdir)/Makefile.libfdt
135
136 .PHONY: libfdt
137 libfdt: $(LIBFDT_archive) $(LIBFDT_lib)
138
139 $(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
140 $(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
141
142 libfdt_clean:
143         @$(VECHO) CLEAN "(libfdt)"
144         rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES))
145         rm -f $(LIBFDT_objdir)/*.so
146
147 ifneq ($(DEPTARGETS),)
148 -include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d)
149 endif
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
156 install: 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
170 dtc: $(DTC_OBJS)
171
172 convert-dtsv0: $(CONVERT_OBJS)
173         @$(VECHO) LD $@
174         $(LINK.c) -o $@ $^
175
176 ftdump: $(FTDUMP_OBJS)
177
178
179 #
180 # Testsuite rules
181 #
182 TESTS_PREFIX=tests/
183 include tests/Makefile.tests
184
185 #
186 # Clean rules
187 #
188 STD_CLEANFILES = *~ *.o *.so *.d *.a *.i *.s core a.out vgcore.* \
189         *.tab.[ch] *.lex.c *.output
190
191 clean: 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
245 FORCE: