1 # Copyright © 2000-2016, The AROS Development Team. All rights reserved.
4 # Main makefile for AROS
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@
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
30 CROSSTOOLS_BUILDFLAG
:=
33 MMAKE_OPTIONS ?
= --srcdir=$(SRCDIR
) --builddir
=$(TOP
)
34 ifneq (,$(findstring s
,$(MAKEFLAGS
)))
38 all: crosstools features
39 @
+$(CALL
) $(MMAKE
) $(MMAKE_OPTIONS
) AROS.AROS
43 @
$(FOR
) dir in
$(AROSDIR
) $(GENDIR
) $(TOOLDIR
) ; do \
44 $(IF
) [ ! -d
$$dir ]; then \
45 $(MECHO
) $(MKDIR
) "$$dir" ; \
49 @
$(IF
) [ ! -f
$(AROSDIR
)/.gdbinit
]; then \
50 $(CP
) $(SRCDIR
)/_gdbinit
$(AROSDIR
)/.gdbinit
; \
53 # Create the tools that are used to build AROS.
54 tools
: makedirs mmake
$(TOOLLIB
) $(GENMF
) $(ARCHTOOL
) $(ELF2HUNK
) \
55 $(FLEXCAT
) $(CREATEDTDESC
) \
56 $(ILBMTOC
) $(ILBMTOICON
) $(INFOINFO
) \
57 $(COLLECT-AROS
) $(AFSLIB
) $(COPYTOAFS
) \
58 $(FD2INLINE
) $(FD2PRAGMA
) $(SFDC
) $(SETREV
)
61 # rebuild the crosstools if we are reconfigured, or its dependencies change.
62 $(CROSSTOOLSDIR
)/.installflag-crosstools
: $(TOP
)/config.status
$(AROS_TOOLCHAIN_DEPS
) tools
63 @
+$(IF
) ! $(TEST
) -f
$@
; then \
64 $(CALL
) $(MMAKE
) $(MMAKE_OPTIONS
) AROS.
$(CROSSTOOLS_TARGET
) && $(TOUCH
) $@
; \
67 crosstools
: tools
$(CROSSTOOLS_BUILDFLAG
)
70 $(TOP
)/features.status
: $(SRCDIR
)/features
$(CROSSTOOLS_BUILDFLAG
)
71 @
$(IF
) ! $(TEST
) -f
$@
; then \
72 $(ECHO
) "Querying target compiler features..." ; \
73 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
; \
76 features
: crosstools
$(TOP
)/features.status
79 $(TOOLLIB
) : $(wildcard $(SRCDIR
)/tools
/toollib
/*.
[ch
])
80 @
$(ECHO
) Building toollib...
81 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/toollib SRCDIR
=$(SRCDIR
) TOP
=$(TOP
) CURDIR
=toollib
83 $(GENMF
) : $(SRCDIR
)/tools
/genmf
/genmf.py
84 @
$(ECHO
) Copying genmf...
85 @.
/config.status
$(subst $(TOP
)/,,$(GENMF
)) genmf_executable
87 $(ELF2HUNK
) : $(SRCDIR
)/tools
/elf2hunk
/elf2hunk.c
88 @
$(ECHO
) Building elf2hunk...
89 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/elf2hunk SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
91 $(ARCHTOOL
) : $(SRCDIR
)/tools
/archtools
/archtool.c
92 @
$(ECHO
) Building archtool...
93 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/archtools SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
95 $(FLEXCAT
) : $(wildcard $(SRCDIR
)/tools
/flexcat
/src
/*.
[ch
]) $(wildcard $(SRCDIR
)/tools
/flexcat
/src
/sd
/*.sd
)
96 @
$(ECHO
) Building flexcat...
97 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/flexcat
/src
-f Makefile.aros SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
99 $(CREATEDTDESC
) : $(wildcard $(SRCDIR
)/tools
/dtdesc
/*.
[ch
]) $(wildcard $(SRCDIR
)/tools
/dtdesc
/c_iff
/*.
[ch
])
100 @
$(ECHO
) Building createdtdesc...
101 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/dtdesc
-f Makefile.aros SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
103 $(AFSLIB
) : $(wildcard $(SRCDIR
)/workbench
/devs
/afs
/*.
[ch
])
104 @
$(ECHO
) Building afslib...
105 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/copytoafs
-f Makefile.afslib SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
107 $(COPYTOAFS
) : $(AFSLIB
) $(SRCDIR
)/tools
/copytoafs
/copytoafs.c
108 @
$(ECHO
) Building copytoafs...
109 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/copytoafs SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
111 $(ILBMTOC
) : $(SRCDIR
)/tools
/ilbmtoc
/ilbmtoc.c
112 @
$(ECHO
) Building ilbmtoc...
113 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/ilbmtoc SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
115 $(ILBMTOICON
) : $(SRCDIR
)/tools
/ilbmtoicon
/ilbmtoicon.c
116 @
$(ECHO
) Building ilbmtoicon...
117 @
$(CALL
) $(MAKE
) $(MKARGS
) $@
-C
$(SRCDIR
)/tools
/ilbmtoicon SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
119 $(INFOINFO
) : $(SRCDIR
)/tools
/ilbmtoicon
/infoinfo.c
120 @
$(ECHO
) Building infoinfo...
121 @
$(CALL
) $(MAKE
) $(MKARGS
) $@
-C
$(SRCDIR
)/tools
/ilbmtoicon SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
123 $(COLLECT-AROS
) : $(wildcard $(SRCDIR
)/tools
/collect-aros
/*.
[hc
])
124 @
$(ECHO
) Building collect-aros...
125 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/collect-aros SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
127 $(FD2INLINE
) : $(SRCDIR
)/tools
/fd2inline
/fd2inline.c
128 @
$(ECHO
) Building fd2inline...
129 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/fd2inline SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
131 $(FD2PRAGMA
) : $(SRCDIR
)/tools
/fd2pragma
/fd2pragma.c
132 @
$(ECHO
) Building fd2pragma...
133 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/fd2pragma SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
135 $(SFDC
) : $(SRCDIR
)/tools
/sfdc
/*.pl
136 @
$(ECHO
) Building sfdc...
137 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/sfdc SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
139 $(SETREV
) : $(SRCDIR
)/tools
/setrev
/setrev.c
140 @
$(ECHO
) Building setrev...
141 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/setrev SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
143 # MetaMake apparently requires a slighty different compilation. Probably
144 # because it is sort-of an external package as well.
146 mmake
: $(TOP
)/tools
/MetaMake
/Makefile
$(MMAKE
)
149 $(SRCDIR
)/tools
/MetaMake
/configure
: $(SRCDIR
)/tools
/MetaMake
/configure.in
150 @
$(ECHO
) Building MetaMake...
151 @cd
$(SRCDIR
)/tools
/MetaMake
&& @aros_host_aclocal@
&& @aros_host_autoconf@
153 $(TOP
)/tools
/MetaMake
/Makefile
: $(SRCDIR
)/tools
/MetaMake
/configure
$(SRCDIR
)/tools
/MetaMake
/Makefile.in
154 @
$(IF
) [ ! -d
$(TOP
)/tools
/MetaMake
]; then \
155 $(MECHO
) $(MKDIR
) "$(TOP)/tools/MetaMake" ; \
156 $(MKDIR
) "$(TOP)/tools/MetaMake"; \
158 @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
160 $(MMAKE
): $(TOP
)/tools
/MetaMake
/Makefile
$(wildcard $(SRCDIR
)/tools
/MetaMake
/*.
[ch
]) $(GENMF
)
161 @
$(MAKE
) $(MKARGS
) AUTOHEADER
=@aros_host_autoheader@
-C
$(TOP
)/tools
/MetaMake
162 @
$(MAKE
) $(MKARGS
) -C
$(TOP
)/tools
/MetaMake
install
164 # Clean the sources and tools
166 @
+$(CALL
) $(MMAKE
) $(MMAKE_OPTIONS
) AROS.
clean
167 @
$(MAKE
) $(MKARGS
) -C
$(TOP
)/tools
/MetaMake
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
168 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/flexcat
/src
-f Makefile.aros
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
169 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/archtools
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
170 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/genmf
clean
171 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/toollib
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
172 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/dtdesc
-f Makefile.aros
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
173 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/collect-aros
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
174 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/fd2inline
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
175 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/fd2pragma
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
176 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/sfdc
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
177 @
$(CALL
) $(MAKE
) $(MKARGS
) -C
$(SRCDIR
)/tools
/setrev
clean SRCDIR
=$(SRCDIR
) TOP
=$(TOP
)
178 -@
$(RM
) $(ARCHDIR
) Makefile config.cache config.status config.log \
179 mmake.cache mmake.config rom
/mmakefile config
/make.cfg \
180 $(AROS_DEVELOPMENT
)/include/aros
/config.h \
181 $(GENDIR
)/include/aros
/config.h
$(HOSTGENDIR
)/config
/host.cfg \
182 $(GENDIR
)/config
/target.cfg
$(GENDIR
)/config
/make.defaults \
183 $(GENDIR
)/config
/specs \
184 $(TOOLDIR
)/$(AROS_TARGET_CPU
)-$(AROS_TARGET_ARCH
)$(AROS_TARGET_SUFFIX
)-aros-gcc \
185 $(TOOLDIR
)/$(AROS_TARGET_CPU
)-$(AROS_TARGET_ARCH
)$(AROS_TARGET_SUFFIX
)-aros-ld \
186 $(GENDIR
)/scripts
/genshared
$(TOOLDIR
)/genmf.py \
187 tools
/adflib
/myconf.aros tools
/collect-aros
/env.h
189 # Clean the sources and tools
193 # Really clean all - like a clean checkout
194 dist-clean
: arch-clean
197 # Don't try to generate $(TOP)/bin/$(AROS_TARGET_ARCH)-$(AROS_TARGET_CPU)$(AROS_TARGET_SUFFIX)/gen/config/make.opts
198 $(TOP
)/bin
/$(AROS_TARGET_ARCH
)-$(AROS_TARGET_CPU
)$(AROS_TARGET_SUFFIX
)/gen
/config
/make.opts
:
201 # targets which do not generate files or for which a file/directory exists
202 .PHONY
: default
all makedirs tools crosstools features docs
clean arch-clean dist-clean
install \
203 $(TOP
)/bin
/$(AROS_TARGET_ARCH
)-$(AROS_TARGET_CPU
)$(AROS_TARGET_SUFFIX
)/gen
/config
/make.opts \
204 test kernel boot workbench compiler contrib ports sdk mmake query
206 # Workaround for bug in make v3.81 (should normally be handled by .DEFAULT)
207 install test kernel boot workbench compiler contrib ports sdk
: crosstools features
208 @
+$(CALL
) $(MMAKE
) $(MMAKE_OPTIONS
) AROS.
$@
210 # Bypass crosstools target.
212 @
+$(CALL
) $(MMAKE
) $(MMAKE_OPTIONS
) AROS.
$@
214 # Map MetaTargets to make targets : Call mmake with AROS.target
215 # This does not allow to check for dependancies, so it is not suitable for
216 # Calling standard main targets, but is usable as a shortcut for MetaMake
217 # if it was not installed globally
221 @
+$(CALL
) $(MMAKE
) $(MMAKE_OPTIONS
) AROS.
$@
223 # The '%-quick' and '%-clean' targets are special - we don't want to wait around
224 # for building crosstools if we just want to build one subtarget
226 @
+$(CALL
) $(MMAKE
) $(MMAKE_OPTIONS
) AROS.
$@
229 @
$(MAKE
) $(MKARGS
) crosstools
230 @
$(MAKE
) $(MKARGS
) crosstools features
231 @
+$(CALL
) $(MMAKE
) $(MMAKE_OPTIONS
) AROS.
$@