yet some corrections.
[AROS.git] / Makefile.in
blob4076eade674a34ae382b1a23b81bbd2b938bd25c
1 # Copyright © 2000-2019, The AROS Development Team. All rights reserved.
2 # $Id$
4 # Main makefile for AROS
6 default: all
8 AROS_BUILD_HOST ?= @aros_build_host@
9 AROS_HOST_CPU ?= @aros_host_cpu@
10 AROS_HOST_ARCH ?= @aros_host_arch@
11 AROS_TARGET_CPU ?= @aros_target_cpu@
12 AROS_TARGET_CPU_MODE ?= @aros_target_cpu_mode@
13 AROS_TARGET_ARCH ?= @aros_target_arch@
14 AROS_TARGET_VARIANT ?= @aros_target_variant@
16 # normally, these variable's should go in mmake.config/globalvarfile
17 export AROS_TARGET_BOOTLOADER := @aros_target_bootloader@
18 export AROS_TARGET_ICONSET := @aros_target_iconset@
19 export AROS_GUI_THEME := @aros_target_guitheme@
21 TOP := @AROS_BUILDDIR@
22 SRCDIR := @SRCDIR@
23 include $(TOP)/config/make.cfg
24 ifneq ($(CROSSTOOLS_TARGET),)
25 include $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).cfg
26 include $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).deps
27 CROSSTOOLS_BUILDFLAG:=$(CROSSTOOLSDIR)/.installflag-crosstools
28 AROS_TOOLCHAIN_DEPS:=$(AROS_TOOLCHAIN_DEPS) $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).cfg $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).deps $(SRCDIR)/tools/crosstools/mmakefile.src
29 else
30 CROSSTOOLS_BUILDFLAG:=
31 endif
33 MMAKE_OPTIONS ?= --srcdir=$(SRCDIR) --builddir=$(TOP)
34 ifneq (,$(findstring s,$(MAKEFLAGS)))
35 MMAKE_OPTIONS += -q
36 endif
39 # Rules for Configure generated files ...
42 $(TOP)/Makefile: $(SRCDIR)/Makefile.in $(TOP)/config.status
43 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
44 @$(TOP)/config.status --silent --file=$@:$<
46 CONFIGUREFILES += $(TOP)/Makefile
48 $(TOP)/mmake.config: $(SRCDIR)/mmake.config.in $(TOP)/config.status
49 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
50 @$(TOP)/config.status --silent --file=$@:$<
52 CONFIGUREFILES += $(TOP)/mmake.config
54 $(TOP)/config/make.cfg: $(SRCDIR)/config/make.cfg.in $(TOP)/config.status
55 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
56 @$(TOP)/config.status --silent --file=$@:$<
58 CONFIGUREFILES += $(TOP)/config/make.cfg
60 $(TOP)/compiler/include/geninc.cfg: $(SRCDIR)/compiler/include/geninc.cfg.in $(TOP)/config.status
61 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
62 @$(TOP)/config.status --silent --file=$@:$<
64 CONFIGUREFILES += $(TOP)/compiler/include/geninc.cfg
66 $(AROS_INCLUDES)/aros/config.h: $(SRCDIR)/config/config.h.in $(TOP)/config.status
67 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
68 @$(TOP)/config.status --silent --file=$@:$<
70 CONFIGUREFILES += $(AROS_INCLUDES)/aros/config.h
72 $(GENINCDIR)/aros/config.h: $(SRCDIR)/config/config.h.in $(TOP)/config.status
73 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
74 @$(TOP)/config.status --silent --file=$@:$<
76 CONFIGUREFILES += $(GENINCDIR)/aros/config.h
78 $(GENDIR)/config/target.cfg: $(SRCDIR)/config/target.cfg.in $(TOP)/config.status
79 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
80 @$(TOP)/config.status --silent --file=$@:$<
82 CONFIGUREFILES += $(GENDIR)/config/target.cfg
84 $(GENDIR)/config/build.cfg: $(SRCDIR)/config/build.cfg.in $(TOP)/config.status
85 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
86 @$(TOP)/config.status --silent --file=$@:$<
88 CONFIGUREFILES += $(GENDIR)/config/build.cfg
90 $(GENDIR)/config/make.defaults: $(SRCDIR)/config/make.defaults.in $(TOP)/config.status
91 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
92 @$(TOP)/config.status --silent --file=$@:$<
94 CONFIGUREFILES += $(GENDIR)/config/make.defaults
96 $(HOSTGENDIR)/config/host.cfg: $(SRCDIR)/config/host.cfg.in $(TOP)/config.status
97 @+$(ECHO) "Regenerating " $(subst $(TOP)/,,$@); \
98 @$(TOP)/config.status --silent --file=$@:$<
100 CONFIGUREFILES += $(HOSTGENDIR)/config/host.cfg
103 # Standard Rules ...
106 all: $(CONFIGUREFILES) crosstools features
107 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.AROS
109 makedirs:
110 @$(RM) $(TOP)/errors
111 @$(FOR) dir in $(AROSDIR) $(GENDIR) $(TOOLDIR) ; do \
112 $(IF) [ ! -d $$dir ]; then \
113 $(MECHO) $(MKDIR) "$$dir" ; \
114 $(MKDIR) "$$dir" ; \
115 else true ; fi ; \
116 done
117 @$(IF) [ ! -f $(AROSDIR)/.gdbinit ]; then \
118 $(CP) $(SRCDIR)/_gdbinit $(AROSDIR)/.gdbinit ; \
119 else true ; fi
121 # Create the tools that are used to build AROS.
122 tools : makedirs mmake $(GENMFSCRIPT) $(ARCHTOOL) $(ELF2HUNK) \
123 $(FLEXCAT) $(CREATEDTDESC) \
124 $(ILBMTOC) $(ILBMTOICON) $(INFOINFO) \
125 $(COLLECT-AROS) $(AFSLIB) $(COPYTOAFS) \
126 $(FD2INLINE) $(FD2PRAGMA) $(SFDC) $(SETREV)
127 @$(NOP)
129 # rebuild the crosstools if we are reconfigured, or its dependencies change.
130 $(CROSSTOOLSDIR)/.installflag-crosstools: $(TOP)/config.status $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).cfg $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).deps $(AROS_TOOLCHAIN_DEPS) tools
131 @+$(IF) ! $(TEST) -f $@ ; then \
132 $(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$(CROSSTOOLS_TARGET) && $(TOUCH) $@ ; \
135 crosstools: tools $(CROSSTOOLS_BUILDFLAG)
136 @$(NOP)
138 $(TOP)/config/features.status: $(SRCDIR)/config/features $(CROSSTOOLS_BUILDFLAG)
139 @$(IF) ! $(TEST) -f $@ ; then \
140 $(ECHO) "Querying target compiler features..." ; \
141 cd $(TOP)/config ; CC="$(TARGET_CC) $(TARGET_SYSROOT)" CFLAGS="$(TARGET_CFLAGS) $(DEBUG_CFLAGS) $(OPTIMIZATION_CFLAGS)" CPP="$(TARGET_CPP) $(TARGET_SYSROOT)" CXX="$(TARGET_CXX) $(TARGET_SYSROOT)" CXXFLAGS=" $(TARGET_CXXFLAGS) $(DEBUG_CFLAGS) $(OPTIMIZATION_CFLAGS)" CONFIG_STATUS="features.status" $(SRCDIR)/config/features --host=$(AROS_BUILD_HOST) --with-config-dir=$(GENDIR)/config ; \
144 features: crosstools $(TOP)/config/features.status
145 @$(NOP)
147 $(GENMFSCRIPT): $(SRCDIR)/tools/genmf/genmf.py
148 @$(ECHO) Generating $(subst $(TOP)/,,$(GENMFSCRIPT))...
149 @$(TOP)/config.status --silent --file=$(subst $(TOP)/,,$@):$<
151 $(ELF2HUNK): $(SRCDIR)/tools/elf2hunk/elf2hunk.c
152 @$(ECHO) Building elf2hunk...
153 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/elf2hunk SRCDIR=$(SRCDIR) TOP=$(TOP)
155 $(ARCHTOOL): $(SRCDIR)/tools/archtools/archtool.c
156 @$(ECHO) Building archtool...
157 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/archtools SRCDIR=$(SRCDIR) TOP=$(TOP)
159 $(FLEXCAT): $(wildcard $(SRCDIR)/tools/flexcat/src/*.[ch]) $(wildcard $(SRCDIR)/tools/flexcat/src/sd/*.sd)
160 @$(ECHO) Building flexcat...
161 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/flexcat/src -f Makefile.aros SRCDIR=$(SRCDIR) TOP=$(TOP)
163 $(CREATEDTDESC): $(wildcard $(SRCDIR)/tools/dtdesc/*.[ch]) $(wildcard $(SRCDIR)/tools/dtdesc/c_iff/*.[ch])
164 @$(ECHO) Building createdtdesc...
165 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/dtdesc -f Makefile.aros SRCDIR=$(SRCDIR) TOP=$(TOP)
167 $(AFSLIB): $(wildcard $(SRCDIR)/workbench/devs/afs/*.[ch])
168 @$(ECHO) Building afslib...
169 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/copytoafs -f Makefile.afslib SRCDIR=$(SRCDIR) TOP=$(TOP)
171 $(COPYTOAFS): $(AFSLIB) $(SRCDIR)/tools/copytoafs/copytoafs.c
172 @$(ECHO) Building copytoafs...
173 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/copytoafs SRCDIR=$(SRCDIR) TOP=$(TOP)
175 $(ILBMTOC): $(SRCDIR)/tools/ilbmtoc/ilbmtoc.c
176 @$(ECHO) Building ilbmtoc...
177 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/ilbmtoc SRCDIR=$(SRCDIR) TOP=$(TOP)
179 $(ILBMTOICON): $(SRCDIR)/tools/ilbmtoicon/ilbmtoicon.c
180 @$(ECHO) Building ilbmtoicon...
181 @$(CALL) $(MAKE) $(MKARGS) $@ -C $(SRCDIR)/tools/ilbmtoicon SRCDIR=$(SRCDIR) TOP=$(TOP)
183 $(INFOINFO): $(SRCDIR)/tools/ilbmtoicon/infoinfo.c
184 @$(ECHO) Building infoinfo...
185 @$(CALL) $(MAKE) $(MKARGS) $@ -C $(SRCDIR)/tools/ilbmtoicon SRCDIR=$(SRCDIR) TOP=$(TOP)
187 $(COLLECT-AROS): $(wildcard $(SRCDIR)/tools/collect-aros/*.[hc])
188 @$(ECHO) Building collect-aros...
189 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/collect-aros SRCDIR=$(SRCDIR) TOP=$(TOP)
191 $(FD2INLINE): $(SRCDIR)/tools/fd2inline/fd2inline.c
192 @$(ECHO) Building fd2inline...
193 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2inline SRCDIR=$(SRCDIR) TOP=$(TOP)
195 $(FD2PRAGMA): $(SRCDIR)/tools/fd2pragma/fd2pragma.c
196 @$(ECHO) Building fd2pragma...
197 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2pragma SRCDIR=$(SRCDIR) TOP=$(TOP)
199 $(SFDC): $(SRCDIR)/tools/sfdc/*.pl
200 @$(ECHO) Building sfdc...
201 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/sfdc SRCDIR=$(SRCDIR) TOP=$(TOP)
203 $(SETREV): $(SRCDIR)/tools/setrev/setrev.c
204 @$(ECHO) Building setrev...
205 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/setrev SRCDIR=$(SRCDIR) TOP=$(TOP)
207 # MetaMake apparently requires a slighty different compilation. Probably
208 # because it is sort-of an external package as well.
210 mmake: $(TOP)/tools/MetaMake/Makefile $(MMAKE)
211 @$(NOP)
213 $(SRCDIR)/tools/MetaMake/configure: $(SRCDIR)/tools/MetaMake/configure.in
214 @$(ECHO) Building MetaMake...
215 @cd $(SRCDIR)/tools/MetaMake && @aros_host_aclocal@ && @aros_host_autoconf@
217 $(TOP)/tools/MetaMake/Makefile: $(SRCDIR)/tools/MetaMake/configure $(SRCDIR)/tools/MetaMake/Makefile.in
218 @$(IF) [ ! -d $(TOP)/tools/MetaMake ]; then \
219 $(MECHO) $(MKDIR) "$(TOP)/tools/MetaMake" ; \
220 $(MKDIR) "$(TOP)/tools/MetaMake"; \
222 @cd $(TOP)/tools/MetaMake ; CC="$(HOST_CC)" CFLAGS="$(HOST_CFLAGS) -D_FILE_OFFSET_BITS=64" LDFLAGS="$(HOST_LDFLAGS)" $(SRCDIR)/tools/MetaMake/configure --prefix=$(TOOLDIR) --bindir=$(TOOLDIR) --with-objfiledir=$(HOSTGENDIR)/tools/MetaMake
224 $(MMAKE): $(TOP)/tools/MetaMake/Makefile $(wildcard $(SRCDIR)/tools/MetaMake/*.[ch]) $(GENMFSCRIPT)
225 @$(MAKE) $(MKARGS) AUTOHEADER=@aros_host_autoheader@ -C $(TOP)/tools/MetaMake
226 @$(MAKE) $(MKARGS) -C $(TOP)/tools/MetaMake install
228 # Clean the sources and tools
229 clean:
230 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.clean
231 @$(MAKE) $(MKARGS) -C $(TOP)/tools/MetaMake clean SRCDIR=$(SRCDIR) TOP=$(TOP)
232 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/flexcat/src -f Makefile.aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
233 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/archtools clean SRCDIR=$(SRCDIR) TOP=$(TOP)
234 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/genmf clean
235 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/dtdesc -f Makefile.aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
236 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/collect-aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
237 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2inline clean SRCDIR=$(SRCDIR) TOP=$(TOP)
238 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2pragma clean SRCDIR=$(SRCDIR) TOP=$(TOP)
239 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/sfdc clean SRCDIR=$(SRCDIR) TOP=$(TOP)
240 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/setrev clean SRCDIR=$(SRCDIR) TOP=$(TOP)
241 -@$(RM) $(ARCHDIR) Makefile config.cache config.status config.log \
242 mmake.cache mmake.config rom/mmakefile config/make.cfg \
243 $(AROS_DEVELOPMENT)/include/aros/config.h \
244 $(GENDIR)/include/aros/config.h $(HOSTGENDIR)/config/host.cfg \
245 $(GENDIR)/config/target.cfg $(GENDIR)/config/make.defaults \
246 $(GENDIR)/config/specs \
247 $(TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX)-aros-gcc \
248 $(TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX)-aros-ld \
249 $(GENDIR)/scripts/genshared $(TOOLDIR)/genmf.py \
250 tools/adflib/myconf.aros tools/collect-aros/env.h
252 # Clean the sources and tools
253 arch-clean: clean
254 @$(NOP)
256 # Really clean all - like a clean checkout
257 dist-clean: arch-clean
258 @$(NOP)
260 # Don't try to generate $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts
261 $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts:
262 @$(NOP)
264 # targets which do not generate files or for which a file/directory exists
265 .PHONY: default all makedirs tools crosstools features docs clean arch-clean dist-clean install \
266 $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts \
267 test kernel boot workbench compiler contrib ports sdk mmake query
269 # Workaround for bug in make v3.81 (should normally be handled by .DEFAULT)
270 install test kernel boot workbench compiler contrib ports sdk : crosstools features $(CONFIGUREFILES)
271 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
273 # Bypass crosstools target.
274 query: tools
275 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
277 # Map MetaTargets to make targets : Call mmake with AROS.target
278 # This does not allow to check for dependancies, so it is not suitable for
279 # Calling standard main targets, but is usable as a shortcut for MetaMake
280 # if it was not installed globally
283 distfiles::
284 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
286 # The '%-quick' and '%-clean' targets are special - we don't want to wait around
287 # for building crosstools if we just want to build one subtarget
288 %-quick %-clean:
289 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
291 .DEFAULT: $(CONFIGUREFILES)
292 @$(MAKE) $(MKARGS) crosstools
293 @$(MAKE) $(MKARGS) crosstools features
294 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@