1 include $(SRCDIR)/config/aros.cfg
2 -include $(SRCDIR)/tools/crosstools/$(AROS_TOOLCHAIN).cfg
6 BINUTILS_VERSION = $(TARGET_BINUTILS_VER)
7 BINUTILS_VERSION_MAJOR = $(shell echo "$(BINUTILS_VERSION)" | cut -d"." -f1)
8 BINUTILS_VERSION_MINOR = $(shell echo "$(BINUTILS_VERSION)" | cut -d"." -f2)
9 BINUTILS_VERSION_PATCH = $(shell echo "$(BINUTILS_VERSION)" | cut -d"." -f3)
11 BINUTILS_EXTRA_OPTS := --target=$(AROS_TARGET_CPU)-aros
12 BINUTILS_EXTRA_OPTS += -bindir=$(CROSSTOOLSDIR)
13 BINUTILS_EXTRA_OPTS += --libdir=$(CROSSTOOLSDIR)/lib
14 BINUTILS_EXTRA_OPTS += --with-sysroot=$(AROS_DEVELOPER)
15 BINUTILS_EXTRA_OPTS += --disable-werror
16 BINUTILS_EXTRA_OPTS += --disable-nls
17 ifeq (yes, $(TARGET_LTO))
18 BINUTILS_EXTRA_OPTS += --enable-plugins --enable-lto
21 # Binutils 2.31 enables separate code for x86 by default
22 # however we do not handle it.
24 ifeq ($(shell test $(BINUTILS_VERSION_MAJOR) -gt 2; echo $$?),0)
25 BINUTILS_NOSEPCODE=yes
27 ifeq ($(shell test $(BINUTILS_VERSION_MAJOR) -gt 1; echo $$?),0)
28 ifeq ($(shell test $(BINUTILS_VERSION_MINOR) -gt 30; echo $$?),0)
29 BINUTILS_NOSEPCODE=yes
33 ifneq ($(BINUTILS_NOSEPCODE),no)
34 ifeq ($(AROS_TARGET_CPU),i386)
35 BINUTILS_EXTRA_OPTS += --enable-separate-code=no
37 ifeq ($(AROS_TARGET_CPU),x86_64)
38 BINUTILS_EXTRA_OPTS += --enable-separate-code=no
42 GCC_VERSION = $(TARGET_GCC_VER)
43 GCC_VERSION_MAJOR = $(shell echo "$(GCC_VERSION)" | cut -d"." -f1)
44 GCC_VERSION_MINOR = $(shell echo "$(GCC_VERSION)" | cut -d"." -f2)
45 GCC_VERSION_PATCH = $(shell echo "$(GCC_VERSION)" | cut -d"." -f3)
48 ifneq (no-objc,$(OBJC_TARGET))
49 GCC_LANGUAGES:=$(GCC_LANGUAGES),objc
51 ifneq (no-java,$(JAVA_TARGET))
52 GCC_LANGUAGES:=$(GCC_LANGUAGES),java
55 GCC_COMMON_OPTS := --target=$(AROS_TARGET_CPU)-aros
57 # ARM requires additional flags to determine CPU type and FP model
58 ifneq (,$(findstring arm,$(AROS_TARGET_CPU)))
59 GCC_COMMON_OPTS += --with-arch=$(GCC_DEFAULT_CPU)
60 GCC_COMMON_OPTS += --with-float=$(GCC_DEFAULT_FLOAT_ABI)
61 GCC_COMMON_OPTS += --with-fpu=$(GCC_DEFAULT_FPU)
62 GCC_COMMON_OPTS += --with-mode=$(GCC_DEFAULT_MODE)
63 GCC_COMMON_OPTS += --disable-libunwind-exceptions
65 # If we are building GCC >= 5, for x86 targets, enable libmpx
66 # ifeq ($(shell test $(GCC_VERSION_MAJOR) -gt 4; echo $$?),0)
67 # ifeq ($(AROS_TARGET_CPU),i386)
68 # GCC_COMMON_OPTS += --enable-libmpx
70 # ifeq ($(AROS_TARGET_CPU),x86_64)
71 # GCC_COMMON_OPTS += --enable-libmpx
74 GCC_COMMON_OPTS += --with-dwarf2
77 GCC_COMMON_OPTS += --with-sysroot=$(AROS_DEVELOPER)
78 GCC_COMMON_OPTS += --with-native-system-header-dir=/include
79 GCC_COMMON_OPTS += --bindir=$(CROSSTOOLSDIR)
80 GCC_COMMON_OPTS += --libdir=$(CROSSTOOLSDIR)/lib
81 GCC_COMMON_OPTS += --enable-languages=$(strip $(GCC_LANGUAGES))
82 GCC_COMMON_OPTS += --enable-long-long
83 GCC_COMMON_OPTS += --enable-version-specific-runtime-libs
84 GCC_COMMON_OPTS += --enable-frame-pointer
85 GCC_COMMON_OPTS += --with-isl=$(CROSSTOOLSDIR)
86 GCC_COMMON_OPTS += --disable-isl-version-check
87 GCC_COMMON_OPTS += --disable-bootstrap
88 GCC_COMMON_OPTS += --disable-sjlj-exceptions
89 GCC_COMMON_OPTS += --disable-tls
90 ifneq (yes,$(TARGET_LTO))
91 GCC_COMMON_OPTS += --disable-plugins
93 GCC_COMMON_OPTS += --disable-nls
94 GCC_COMMON_OPTS += --disable-libssp
95 GCC_COMMON_OPTS += --disable-libstdcxx-pch
96 GCC_COMMON_OPTS += --disable-build-with-cxx
97 GCC_COMMON_OPTS += --disable-build-poststage1-with-cxx
99 ifeq (,$(GCC_EXTRA_OPTS))
100 GCC_EXTRA_OPTS += $(GCC_COMMON_OPTS)
103 # Disable libatomic until we are ready to build it...
104 gcc_build_libatomic?=enable_libatomic=no
105 GCC_ENV=$(gcc_build_libatomic)
107 GCC_PATH = `LANG=en_US $(CROSSTOOLSDIR)/$(AROS_TARGET_CPU)-aros-gcc -print-search-dirs | grep "programs: =" | cut -c 12-`
111 GDB_EXTRA_OPTS := --target=$(AROS_TARGET_CPU)-aros
112 GDB_EXTRA_OPTS += --bindir=$(CROSSTOOLSDIR)
113 GDB_EXTRA_OPTS += --libdir=$(CROSSTOOLSDIR)/lib
115 # Use the correct GCC repository depending if it is a release or snapshot build...
116 GNU_REPOSITORY := gnu://
117 ifeq (,$(findstring -,$(GCC_VERSION)))
118 GCC_REPOSITORY := $(GNU_REPOSITORY)/gcc/gcc-$(GCC_VERSION)
120 GCC_REPOSITORY := ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/snapshots/$(GCC_VERSION)
122 ISL_REPOSITORY := ftp://gcc.gnu.org/pub/gcc/infrastructure
123 MPC_REPOSITORY := ftp://ftp.gnu.org/gnu/mpc http://ftp.vim.org/ftp/gnu/mpc
125 binutils-installflag := $(CROSSTOOLSDIR)/.installflag-binutils-$(BINUTILS_VERSION)-$(AROS_TARGET_CPU)
126 gmp-installflag := $(CROSSTOOLSDIR)/.installflag-gmp-$(GMP_VERSION)
127 isl-installflag := $(CROSSTOOLSDIR)/.installflag-isl-$(ISL_VERSION)
128 mpfr-installflag := $(CROSSTOOLSDIR)/.installflag-mpfr-$(MPFR_VERSION)
129 mpc-installflag := $(CROSSTOOLSDIR)/.installflag-mpc-$(MPC_VERSION)
130 gcc-installflag := $(CROSSTOOLSDIR)/.installflag-gcc-$(GCC_VERSION)-$(AROS_TARGET_CPU)
131 libatomic-installflag := $(CROSSTOOLSDIR)/.installflag-libatomic-$(GCC_VERSION)-$(AROS_TARGET_CPU)
132 gdb-installflag := $(CROSSTOOLSDIR)/.installflag-gdb-$(GDB_VERSION)
134 #MM- tools-crosstools-gnu-m68k : tools-crosstools-gcc crosstools-gcc
135 #MM- tools-crosstools-gnu-i386 : tools-crosstools-gcc crosstools-gcc
136 #MM- tools-crosstools-gnu-x86_64 : tools-crosstools-gcc crosstools-gcc
137 #MM- tools-crosstools-gnu-ppc : tools-crosstools-gcc crosstools-gcc
138 #MM- tools-crosstools-gnu-arm : tools-crosstools-gcc crosstools-gcc
139 #MM- tools-crosstools-gnu-armeb : tools-crosstools-gcc crosstools-gcc
140 #MM- tools-crosstools-gnu-aarch64 : tools-crosstools-gcc crosstools-gcc
142 #MM tools-crosstools-gcc : tools-crosstools-binutils tools-crosstools-collect-aros \
143 #MM tools-crosstools-gmp \
144 #MM tools-crosstools-isl \
145 #MM tools-crosstools-mpfr \
146 #MM tools-crosstools-mpc
148 # We intentionally bypass the usual fetch_and_build macro below and call mmakefile and gcc makefile
149 # targets directly. This is in order to not build the core-linklibs target during binutils and gcc
150 # builds because we want these static linker libraries be generated by the cross tool chain we are building
151 # right here. Additionally, we also want to maintain our own install flag files inside the directory
152 # specified by --with-aros-toolchain-install. This directory may even reside outside of the usual aros
153 # build directory and can be reused between complete rebuilds.
158 tools-crosstools-gmp :
159 @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
160 || ! $(TEST) -f $(gmp-installflag) ; then \
161 $(RM) $(HOSTGENDIR)/$(CURDIR)/gmp/.files-touched \
162 && $(MAKE) -f ./mmakefile crosstools-gmp--fetch \
163 && $(MAKE) -f ./mmakefile crosstools-gmp--build_and_install-quick \
164 && $(TOUCH) $(gmp-installflag) ; \
167 %fetch_and_build mmake=crosstools-gmp package=gmp version=$(GMP_VERSION) compiler=host \
168 package_repo="$(GNU_REPOSITORY)/gmp" \
170 prefix="$(CROSSTOOLSDIR)" usecppflags=no \
171 extraoptions="--bindir=$(CROSSTOOLSDIR) --libdir=$(CROSSTOOLSDIR)/lib --disable-shared"
176 tools-crosstools-isl :
177 @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
178 || ! $(TEST) -f $(isl-installflag) ; then \
179 $(RM) $(HOSTGENDIR)/$(CURDIR)/isl/.files-touched \
180 && $(MAKE) -f ./mmakefile crosstools-isl--fetch \
181 && $(MAKE) -f ./mmakefile crosstools-isl--build_and_install-quick \
182 && $(TOUCH) $(isl-installflag) ; \
185 %fetch_and_build mmake=crosstools-isl package=isl version=$(ISL_VERSION) compiler=host \
186 package_repo="$(ISL_REPOSITORY)" \
188 prefix="$(CROSSTOOLSDIR)" usecppflags=no \
189 extraoptions="--bindir=$(CROSSTOOLSDIR) --libdir=$(CROSSTOOLSDIR)/lib --without-piplib --disable-shared"
194 tools-crosstools-mpfr :
195 @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
196 || ! $(TEST) -f $(mpfr-installflag) ; then \
197 $(RM) $(HOSTGENDIR)/$(CURDIR)/mpfr/.files-touched \
198 && $(MAKE) -f ./mmakefile crosstools-mpfr--fetch \
199 && $(MAKE) -f ./mmakefile crosstools-mpfr--build_and_install-quick \
200 && $(TOUCH) $(mpfr-installflag) ; \
203 %fetch_and_build mmake=crosstools-mpfr package=mpfr version=$(MPFR_VERSION) compiler=host \
204 package_repo="$(GNU_REPOSITORY)/mpfr" \
206 prefix="$(CROSSTOOLSDIR)" usecppflags=no \
207 extraoptions="--bindir=$(CROSSTOOLSDIR) --libdir=$(CROSSTOOLSDIR)/lib --disable-shared"
212 tools-crosstools-mpc :
213 @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
214 || ! $(TEST) -f $(mpc-installflag) ; then \
215 $(RM) $(HOSTGENDIR)/$(CURDIR)/mpc/.files-touched \
216 && $(MAKE) -f ./mmakefile crosstools-mpc--fetch \
217 && $(MAKE) -f ./mmakefile crosstools-mpc--build_and_install-quick \
218 && $(TOUCH) $(mpc-installflag) ; \
221 %fetch_and_build mmake=crosstools-mpc package=mpc version=$(MPC_VERSION) compiler=host \
222 package_repo="$(MPC_REPOSITORY)" suffixes="tar.gz" \
224 prefix="$(CROSSTOOLSDIR)" usecppflags=no \
225 extraoptions="--bindir=$(CROSSTOOLSDIR) --libdir=$(CROSSTOOLSDIR)/lib --disable-shared"
230 tools-crosstools-binutils :
231 @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
232 || ! $(TEST) -f $(binutils-installflag) ; then \
233 $(RM) $(HOSTGENDIR)/$(CURDIR)/binutils/.files-touched \
234 && $(MAKE) -f ./mmakefile crosstools-binutils--fetch \
235 && $(MAKE) -f ./mmakefile crosstools-binutils--build_and_install-quick \
236 && $(TOUCH) $(binutils-installflag) ; \
239 %fetch_and_build mmake=crosstools-binutils package=binutils version=$(BINUTILS_VERSION) compiler=host \
240 package_repo="$(GNU_REPOSITORY)/binutils" \
242 prefix="$(CROSSTOOLSDIR)" usecppflags=no \
243 extraoptions="$(BINUTILS_EXTRA_OPTS)"
247 HOST_CFLAGS := $(HOST_CFLAGS) $(HOST_GNU89_INLINE)
250 tools-crosstools-gcc :
251 @$(IF) ! $(TEST) -f $(gcc-installflag) ; then \
252 $(MAKE) -C $(HOSTGENDIR)/$(CURDIR)/gcc all-gcc \
253 && $(MAKE) -j1 -C $(HOSTGENDIR)/$(CURDIR)/gcc install-gcc \
254 && $(TOUCH) $(gcc-installflag) ; \
256 @$(IF) $(TEST) -f $(gcc-installflag); then \
257 $(SED) -i -e "s|@aros_target_cc_path@|$(GCC_PATH)|g" $(TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX)-aros-ld ; \
260 #MM tools-crosstools-gcc : crosstools-gcc--fetch crosstools-gcc--configure
262 #MM tools-crosstools-gcc-libatomic : crosstools-gcc--fetch gnu-gcc-autolibs
263 #MM- linklibs-gnu-libatomic : tools-crosstools-gcc-libatomic
265 #MM- gnu-gcc-autolibs : \
266 #MM linklibs-startup \
268 #MM linklibs-arossupport \
270 #MM linklibs-posixc \
271 #MM linklibs-stdcio \
273 #MM linklibs-codesets \
274 #MM linklibs-keymap \
275 #MM linklibs-expansion \
276 #MM linklibs-commodities \
277 #MM linklibs-diskfont \
279 #MM linklibs-muimaster \
280 #MM linklibs-datatypes \
281 #MM linklibs-cybergraphics \
282 #MM linklibs-workbench \
284 #MM linklibs-intuition \
285 #MM linklibs-gadtools \
286 #MM linklibs-layers \
288 #MM linklibs-partition \
289 #MM linklibs-iffparse \
290 #MM linklibs-graphics \
291 #MM linklibs-locale \
293 #MM linklibs-utility \
296 #MM linklibs-autoinit \
297 #MM linklibs-libinit \
300 %fetch_and_build mmake=crosstools-gcc package=gcc version=$(GCC_VERSION) compiler=host \
301 package_repo="$(GCC_REPOSITORY)" suffixes="tar.bz2 tar.gz tar.xz" \
302 patch=yes prefix="$(CROSSTOOLSDIR)" \
303 usecppflags=no usecflags=no usecxxflags=no \
304 extraoptions="$(GCC_EXTRA_OPTS)" config_env_extra="$(GCC_ENV)"
307 tools-crosstools-gcc-libatomic :
308 @$(IF) ! $(TEST) -f $(libatomic-installflag) ; then \
309 $(IF) $(TEST) -f $(crosstools-gcc--configflag) ; then \
310 $(RM) $(crosstools-gcc--configflag) ; \
312 gcc_build_libatomic="" $(MAKE) -f ./mmakefile crosstools-gcc--configure \
313 && $(MAKE) -C $(HOSTGENDIR)/$(CURDIR)/gcc all-target-libatomic \
314 && $(MAKE) -j1 -C $(HOSTGENDIR)/$(CURDIR)/gcc install-target-libatomic \
315 && $(TOUCH) $(libatomic-installflag) ; \
321 tools-crosstools-gdb :
322 @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
323 || ! $(TEST) -f $(gdb-installflag) ; then \
324 $(RM) $(HOSTGENDIR)/$(CURDIR)/gdb/.files-touched \
325 && $(MAKE) -f ./mmakefile crosstools-gdb--fetch \
326 && $(MAKE) -f ./mmakefile crosstools-gdb--build_and_install-quick \
327 && $(TOUCH) $(gdb-installflag) ; \
330 %fetch_and_build mmake=crosstools-gdb package=gdb version=$(GDB_VERSION) compiler=host \
331 package_repo="$(GNU_REPOSITORY)/gdb" \
333 prefix="$(CROSSTOOLSDIR)" \
334 extraoptions="$(GDB_EXTRA_OPTS)"