w.i.p - only rebuild the toolchain if its dependencies change.
[AROS.git] / Makefile.in
blob55869ea84ef9c8a4c9300f2cdd1d2dd7bcf88ba6
1 # Copyright © 2000-2016, 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 -include $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).cfg
25 -include $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).deps
27 MMAKE_OPTIONS ?= --srcdir=$(SRCDIR) --builddir=$(TOP)
28 ifneq (,$(findstring s,$(MAKEFLAGS)))
29 MMAKE_OPTIONS += -q
30 endif
32 all: crosstools features
33 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.AROS
35 makedirs:
36 @$(RM) $(TOP)/errors
37 @$(FOR) dir in $(AROSDIR) $(GENDIR) $(TOOLDIR) ; do \
38 $(IF) [ ! -d $$dir ]; then \
39 $(MECHO) $(MKDIR) "$$dir" ; \
40 $(MKDIR) "$$dir" ; \
41 else true ; fi ; \
42 done
43 @$(IF) [ ! -f $(AROSDIR)/.gdbinit ]; then \
44 $(CP) $(SRCDIR)/_gdbinit $(AROSDIR)/.gdbinit ; \
45 else true ; fi
47 # Create the tools that are used to build AROS.
48 tools : makedirs mmake $(TOOLLIB) $(GENMF) $(ARCHTOOL) $(ELF2HUNK) \
49 $(FLEXCAT) $(CREATEDTDESC) \
50 $(ILBMTOC) $(ILBMTOICON) $(INFOINFO) \
51 $(COLLECT-AROS) $(AFSLIB) $(COPYTOAFS) \
52 $(FD2INLINE) $(FD2PRAGMA) $(SFDC) $(SETREV)
54 ifneq ($(CROSSTOOLS_TARGET),)
55 CROSSTOOLS_BUILDFLAG=$(CROSSTOOLSDIR)/.installflag-crosstools
56 endif
58 # rebuild the crosstools if we are reconfigured, or its dependencies change.
59 $(CROSSTOOLSDIR)/.installflag-crosstools : $(TOP)/config.status $(AROS_TOOLCHAIN_DEPS)
60 @$(IF) ! $(TEST) -f $@ ; then \
61 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$(CROSSTOOLS_TARGET) ; \
62 $(TOUCH) $@ ; \
65 crosstools : tools $(CROSSTOOLS_BUILDFLAG)
66 @$(NOP)
68 $(TOP)/features.status : $(SRCDIR)/features $(CROSSTOOLSDIR)/.installflag-crosstools
69 @$(IF) ! $(TEST) -f $@ ; then \
70 $(ECHO) "Querying target compiler features..." ; \
71 cd $(TOP) ; 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)/features --host=$(AROS_BUILD_HOST) --with-config-dir=$(GENDIR)/config ; \
74 features : crosstools $(TOP)/features.status
75 @$(NOP)
77 $(TOOLLIB) : $(wildcard $(SRCDIR)/tools/toollib/*.[ch])
78 @$(ECHO) Building toollib...
79 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/toollib SRCDIR=$(SRCDIR) TOP=$(TOP) CURDIR=toollib
81 $(GENMF) : $(SRCDIR)/tools/genmf/genmf.py
82 @$(ECHO) Copying genmf...
83 @./config.status $(subst $(TOP)/,,$(GENMF)) genmf_executable
85 $(ELF2HUNK) : $(SRCDIR)/tools/elf2hunk/elf2hunk.c
86 @$(ECHO) Building elf2hunk...
87 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/elf2hunk SRCDIR=$(SRCDIR) TOP=$(TOP)
89 $(ARCHTOOL) : $(SRCDIR)/tools/archtools/archtool.c
90 @$(ECHO) Building archtool...
91 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/archtools SRCDIR=$(SRCDIR) TOP=$(TOP)
93 $(FLEXCAT) : $(wildcard $(SRCDIR)/tools/flexcat/src/*.[ch]) $(wildcard $(SRCDIR)/tools/flexcat/src/sd/*.sd)
94 @$(ECHO) Building flexcat...
95 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/flexcat/src -f Makefile.aros SRCDIR=$(SRCDIR) TOP=$(TOP)
97 $(CREATEDTDESC) : $(wildcard $(SRCDIR)/tools/dtdesc/*.[ch]) $(wildcard $(SRCDIR)/tools/dtdesc/c_iff/*.[ch])
98 @$(ECHO) Building createdtdesc...
99 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/dtdesc -f Makefile.aros SRCDIR=$(SRCDIR) TOP=$(TOP)
101 $(AFSLIB) : $(wildcard $(SRCDIR)/workbench/devs/afs/*.[ch])
102 @$(ECHO) Building afslib...
103 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/copytoafs -f Makefile.afslib SRCDIR=$(SRCDIR) TOP=$(TOP)
105 $(COPYTOAFS) : $(AFSLIB) $(SRCDIR)/tools/copytoafs/copytoafs.c
106 @$(ECHO) Building copytoafs...
107 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/copytoafs SRCDIR=$(SRCDIR) TOP=$(TOP)
109 $(ILBMTOC) : $(SRCDIR)/tools/ilbmtoc/ilbmtoc.c
110 @$(ECHO) Building ilbmtoc...
111 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/ilbmtoc SRCDIR=$(SRCDIR) TOP=$(TOP)
113 $(ILBMTOICON) : $(SRCDIR)/tools/ilbmtoicon/ilbmtoicon.c
114 @$(ECHO) Building ilbmtoicon...
115 @$(CALL) $(MAKE) $(MKARGS) $@ -C $(SRCDIR)/tools/ilbmtoicon SRCDIR=$(SRCDIR) TOP=$(TOP)
117 $(INFOINFO) : $(SRCDIR)/tools/ilbmtoicon/infoinfo.c
118 @$(ECHO) Building infoinfo...
119 @$(CALL) $(MAKE) $(MKARGS) $@ -C $(SRCDIR)/tools/ilbmtoicon SRCDIR=$(SRCDIR) TOP=$(TOP)
121 $(COLLECT-AROS) : $(wildcard $(SRCDIR)/tools/collect-aros/*.[hc])
122 @$(ECHO) Building collect-aros...
123 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/collect-aros SRCDIR=$(SRCDIR) TOP=$(TOP)
125 $(FD2INLINE) : $(SRCDIR)/tools/fd2inline/fd2inline.c
126 @$(ECHO) Building fd2inline...
127 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2inline SRCDIR=$(SRCDIR) TOP=$(TOP)
129 $(FD2PRAGMA) : $(SRCDIR)/tools/fd2pragma/fd2pragma.c
130 @$(ECHO) Building fd2pragma...
131 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2pragma SRCDIR=$(SRCDIR) TOP=$(TOP)
133 $(SFDC) : $(SRCDIR)/tools/sfdc/*.pl
134 @$(ECHO) Building sfdc...
135 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/sfdc SRCDIR=$(SRCDIR) TOP=$(TOP)
137 $(SETREV) : $(SRCDIR)/tools/setrev/setrev.c
138 @$(ECHO) Building setrev...
139 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/setrev SRCDIR=$(SRCDIR) TOP=$(TOP)
141 # MetaMake apparently requires a slighty different compilation. Probably
142 # because it is sort-of an external package as well.
144 mmake : $(TOP)/tools/MetaMake/Makefile $(MMAKE)
146 $(SRCDIR)/tools/MetaMake/configure : $(SRCDIR)/tools/MetaMake/configure.in
147 @$(ECHO) Building MetaMake...
148 @cd $(SRCDIR)/tools/MetaMake && @aros_host_aclocal@ && @aros_host_autoconf@
150 $(TOP)/tools/MetaMake/Makefile : $(SRCDIR)/tools/MetaMake/configure $(SRCDIR)/tools/MetaMake/Makefile.in
151 @$(IF) [ ! -d $(TOP)/tools/MetaMake ]; then \
152 $(MECHO) $(MKDIR) "$(TOP)/tools/MetaMake" ; \
153 $(MKDIR) "$(TOP)/tools/MetaMake"; \
155 @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
157 $(MMAKE): $(TOP)/tools/MetaMake/Makefile $(wildcard $(SRCDIR)/tools/MetaMake/*.[ch]) $(GENMF)
158 @$(MAKE) $(MKARGS) AUTOHEADER=@aros_host_autoheader@ -C $(TOP)/tools/MetaMake
159 @$(MAKE) $(MKARGS) -C $(TOP)/tools/MetaMake install
161 # Clean the sources and tools
162 clean:
163 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.clean
164 @$(MAKE) $(MKARGS) -C $(TOP)/tools/MetaMake clean SRCDIR=$(SRCDIR) TOP=$(TOP)
165 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/flexcat/src -f Makefile.aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
166 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/archtools clean SRCDIR=$(SRCDIR) TOP=$(TOP)
167 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/genmf clean
168 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/toollib clean SRCDIR=$(SRCDIR) TOP=$(TOP)
169 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/dtdesc -f Makefile.aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
170 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/collect-aros clean SRCDIR=$(SRCDIR) TOP=$(TOP)
171 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2inline clean SRCDIR=$(SRCDIR) TOP=$(TOP)
172 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/fd2pragma clean SRCDIR=$(SRCDIR) TOP=$(TOP)
173 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/sfdc clean SRCDIR=$(SRCDIR) TOP=$(TOP)
174 @$(CALL) $(MAKE) $(MKARGS) -C $(SRCDIR)/tools/setrev clean SRCDIR=$(SRCDIR) TOP=$(TOP)
175 -@$(RM) $(ARCHDIR) Makefile config.cache config.status config.log \
176 mmake.cache mmake.config rom/mmakefile config/make.cfg \
177 $(AROS_DEVELOPMENT)/include/aros/config.h \
178 $(GENDIR)/include/aros/config.h $(HOSTGENDIR)/config/host.cfg \
179 $(GENDIR)/config/target.cfg $(GENDIR)/config/make.defaults \
180 $(GENDIR)/config/specs \
181 $(TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX)-aros-gcc \
182 $(TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX)-aros-ld \
183 $(GENDIR)/scripts/genshared $(TOOLDIR)/genmf.py \
184 tools/adflib/myconf.aros tools/collect-aros/env.h
186 # Clean the sources and tools
187 arch-clean: clean
188 @$(NOP)
190 # Really clean all - like a clean checkout
191 dist-clean: arch-clean
192 @$(NOP)
194 # Don't try to generate $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts
195 $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts:
196 @$(NOP)
198 # targets which do not generate files or for which a file/directory exists
199 .PHONY: default all makedirs tools crosstools features docs clean arch-clean dist-clean install \
200 $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts \
201 test kernel boot workbench compiler contrib ports sdk mmake query
203 # Workaround for bug in make v3.81 (should normally be handled by .DEFAULT)
204 install test kernel boot workbench compiler contrib ports sdk : crosstools features
205 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
207 # Bypass crosstools target.
208 query : tools
209 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
211 # Map MetaTargets to make targets : Call mmake with AROS.target
212 # This does not allow to check for dependancies, so it is not suitable for
213 # Calling standard main targets, but is usable as a shortcut for MetaMake
214 # if it was not installed globally
217 distfiles::
218 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
220 # The '%-quick' and '%-clean' targets are special - we don't want to wait around
221 # for building crosstools if we just want to build one subtarget
222 %-quick %-clean:
223 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@
225 .DEFAULT :
226 @$(MAKE) $(MKARGS) crosstools
227 @$(MAKE) $(MKARGS) crosstools features
228 @+$(CALL) $(MMAKE) $(MMAKE_OPTIONS) AROS.$@