add aarch64 gcc target
[AROS.git] / tools / crosstools / mmakefile.src
blob724399e32c9e99e5311d9a298a32d5ec8255e085
1 include $(SRCDIR)/config/aros.cfg
3 LN ?= ln
5 GMP_VERSION=6.0.0a
6 ISL_VERSION=0.14
7 MPFR_VERSION=3.1.2
8 MPC_VERSION=1.0.3
9 ICU_VERSION := 4.2.1
10 ICU_PKGNAME := icu4c
11 ICU_PKGVERSION=$(subst .,_,$(ICU_VERSION))
13 ICU_EXTRA_OPTS= \
14         --bindir=$(CROSSTOOLSDIR) \
15         --sbindir=$(CROSSTOOLSDIR) \
16         --enable-static \
17         --disable-dyload \
18         --disable-shared \
19         --disable-tests \
20         --disable-samples \
21         --disable-extras \
22         --with-data-packaging=static
24 BINUTILS_VERSION = $(TARGET_BINUTILS_VER)
26 BINUTILS_EXTRA_OPTS := --target=$(AROS_TARGET_CPU)-aros
27 BINUTILS_EXTRA_OPTS += -bindir=$(CROSSTOOLSDIR)
28 BINUTILS_EXTRA_OPTS += --libdir=$(CROSSTOOLSDIR)/lib
29 BINUTILS_EXTRA_OPTS += --with-sysroot=$(AROS_DEVELOPMENT)
30 BINUTILS_EXTRA_OPTS += --disable-werror
32 GCC_VERSION     = $(TARGET_GCC_VER)
33 $(eval UNUSEDREMAINDER := $$$(GCC_VERSION))
34 GCC_VERSION_MAJOR := $(subst $(UNUSEDREMAINDER),,$(GCC_VERSION))
36 GCC_LANGUAGES:=c,c++
37 ifneq (no-objc,$(OBJC_TARGET))
38 GCC_LANGUAGES:=$(GCC_LANGUAGES),objc
39 endif
40 ifneq (no-java,$(JAVA_TARGET))
41 GCC_LANGUAGES:=$(GCC_LANGUAGES),java
42 endif
44 GCC_EXTRA_OPTS := --target=$(AROS_TARGET_CPU)-aros
46 # ARM requires additional flags to determine CPU type and FP model
47 ifneq (,$(findstring $(AROS_TARGET_CPU),arm))
48 GCC_EXTRA_OPTS += --with-arch=$(GCC_DEFAULT_CPU)
49 GCC_EXTRA_OPTS += --with-float=$(GCC_DEFAULT_FLOAT_ABI)
50 GCC_EXTRA_OPTS += --with-fpu=$(GCC_DEFAULT_FPU)
51 GCC_EXTRA_OPTS += --with-mode=$(GCC_DEFAULT_MODE)
52 GCC_EXTRA_OPTS += --disable-libunwind-exceptions
53 else
54 # If we are building GCC >= 5, for x86 targets, enable libmpx
55 # ifeq ($(shell test $(GCC_VERSION_MAJOR) -gt 4; echo $$?),0)
56 # ifeq ($(AROS_TARGET_CPU),i386)
57 # GCC_EXTRA_OPTS += --enable-libmpx
58 # endif
59 # ifeq ($(AROS_TARGET_CPU),x86_64)
60 # GCC_EXTRA_OPTS += --enable-libmpx
61 # endif
62 # endif
63 GCC_EXTRA_OPTS += --with-dwarf2
64 endif
66 GCC_EXTRA_OPTS += --with-sysroot=$(AROS_DEVELOPMENT)
67 GCC_EXTRA_OPTS += --with-native-system-header-dir=/include
68 GCC_EXTRA_OPTS += --bindir=$(CROSSTOOLSDIR)
69 GCC_EXTRA_OPTS += --libdir=$(CROSSTOOLSDIR)/lib
70 GCC_EXTRA_OPTS += --enable-languages=$(strip $(GCC_LANGUAGES))
71 GCC_EXTRA_OPTS += --enable-long-long
72 GCC_EXTRA_OPTS += --enable-version-specific-runtime-libs
73 GCC_EXTRA_OPTS += --enable-frame-pointer
74 GCC_EXTRA_OPTS += --with-isl=$(CROSSTOOLSDIR)
75 GCC_EXTRA_OPTS += --disable-isl-version-check
76 GCC_EXTRA_OPTS += --disable-bootstrap 
77 GCC_EXTRA_OPTS += --disable-sjlj-exceptions
78 GCC_EXTRA_OPTS += --disable-tls
79 GCC_EXTRA_OPTS += --disable-plugins
80 GCC_EXTRA_OPTS += --disable-libssp
81 GCC_EXTRA_OPTS += --disable-libstdcxx-pch
82 GCC_EXTRA_OPTS += --disable-build-with-cxx
83 GCC_EXTRA_OPTS += --disable-build-poststage1-with-cxx
85 GCC_PATH        = `LANG=en_US $(CROSSTOOLSDIR)/$(AROS_TARGET_CPU)-aros-gcc -print-search-dirs | grep "programs: =" | cut -c 12-`
87 GDB_VERSION=7.9
89 GDB_EXTRA_OPTS := --target=$(AROS_TARGET_CPU)-aros
90 GDB_EXTRA_OPTS += --bindir=$(CROSSTOOLSDIR)
91 GDB_EXTRA_OPTS += --libdir=$(CROSSTOOLSDIR)/lib
93 GNU_REPOSITORY := gnu://
94 ISL_REPOSITORY :=  ftp://gcc.gnu.org/pub/gcc/infrastructure
95 MPC_REPOSITORY := http://www.multiprecision.org/mpc/download http://ftp.osuosl.org/pub/lfs/lfs-packages/7.3
96 ICU_REPOSITORY := http://download.icu-project.org/files/$(ICU_PKGNAME)/$(ICU_VERSION)
98 binutils-installflag := $(CROSSTOOLSDIR)/.installflag-binutils-$(BINUTILS_VERSION)-$(AROS_TARGET_CPU)
99 gmp-installflag := $(CROSSTOOLSDIR)/.installflag-gmp-$(GMP_VERSION)
100 isl-installflag := $(CROSSTOOLSDIR)/.installflag-isl-$(ISL_VERSION)
101 mpfr-installflag := $(CROSSTOOLSDIR)/.installflag-mpfr-$(MPFR_VERSION)
102 mpc-installflag := $(CROSSTOOLSDIR)/.installflag-mpc-$(MPC_VERSION)
103 gcc-installflag      := $(CROSSTOOLSDIR)/.installflag-gcc-$(GCC_VERSION)-$(AROS_TARGET_CPU)
104 icu-installflag := $(CROSSTOOLSDIR)/.installflag-icu-$(ICU_VERSION)
105 gdb-installflag := $(CROSSTOOLSDIR)/.installflag-gdb-$(GDB_VERSION)
107 #MM- tools-crosstools : tools-crosstools-$(AROS_TOOLCHAIN)-$(AROS_TARGET_CPU)
109 #MM- tools-crosstools-gnu-m68k     : tools-crosstools-gcc crosstools-gcc
110 #MM- tools-crosstools-gnu-i386     : tools-crosstools-gcc crosstools-gcc
111 #MM- tools-crosstools-gnu-x86_64   : tools-crosstools-gcc crosstools-gcc
112 #MM- tools-crosstools-gnu-ppc      : tools-crosstools-gcc crosstools-gcc
113 #MM- tools-crosstools-gnu-arm      : tools-crosstools-gcc crosstools-gcc
114 #MM- tools-crosstools-gnu-aarch64  : tools-crosstools-gcc crosstools-gcc
116 #MM tools-crosstools-gcc : tools-crosstools-binutils tools-crosstools-collect-aros \
117 #MM                        tools-crosstools-gmp \
118 #MM                        tools-crosstools-isl \
119 #MM                        tools-crosstools-mpfr \
120 #MM                        tools-crosstools-mpc
122 # We intentionally bypass the usual fetch_and_build macro below and call mmakefile and gcc makefile
123 # targets directly. This is in order to not build the core-linklibs target during binutils and gcc
124 # builds because we want these static linker libraries be generated by the cross tool chain we are building
125 # right here. Additionally, we also want to maintain our own install flag files inside the directory
126 # specified by --with-aros-toolchain-install. This directory may even reside outside of the usual aros
127 # build directory and can be reused between complete rebuilds.
130 tools-crosstools-gmp :
131         @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
132             || ! $(TEST) -f $(gmp-installflag) ; then \
133                $(RM) $(HOSTGENDIR)/$(CURDIR)/gmp/.files-touched \
134             && $(MAKE) -f ./mmakefile crosstools-gmp--fetch \
135             && $(MAKE) -f ./mmakefile crosstools-gmp--build_and_install-quick \
136             && $(TOUCH) $(gmp-installflag) ; \
137         fi
139 %fetch_and_build mmake=crosstools-gmp package=gmp version=$(GMP_VERSION) compiler=host \
140         package_repo="$(GNU_REPOSITORY)/gmp" \
141         srcdir=gmp-6.0.0 patch=no \
142         prefix="$(CROSSTOOLSDIR)" \
143         extraoptions="--bindir=$(CROSSTOOLSDIR) --libdir=$(CROSSTOOLSDIR)/lib --disable-shared"
146 tools-crosstools-isl :
147         @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
148             || ! $(TEST) -f $(isl-installflag) ; then \
149                $(RM) $(HOSTGENDIR)/$(CURDIR)/isl/.files-touched \
150             && $(MAKE) -f ./mmakefile crosstools-isl--fetch \
151             && $(MAKE) -f ./mmakefile crosstools-isl--build_and_install-quick \
152             && $(TOUCH) $(isl-installflag) ; \
153         fi
155 %fetch_and_build mmake=crosstools-isl package=isl version=$(ISL_VERSION) compiler=host \
156         package_repo="$(ISL_REPOSITORY)" \
157         patch=no \
158         prefix="$(CROSSTOOLSDIR)" \
159         extraoptions="--bindir=$(CROSSTOOLSDIR) --libdir=$(CROSSTOOLSDIR)/lib --without-piplib --disable-shared"
162 tools-crosstools-mpfr :
163         @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
164             || ! $(TEST) -f $(mpfr-installflag) ; then \
165                $(RM) $(HOSTGENDIR)/$(CURDIR)/mpfr/.files-touched \
166             && $(MAKE) -f ./mmakefile crosstools-mpfr--fetch \
167             && $(MAKE) -f ./mmakefile crosstools-mpfr--build_and_install-quick \
168             && $(TOUCH) $(mpfr-installflag) ; \
169         fi
171 %fetch_and_build mmake=crosstools-mpfr package=mpfr version=$(MPFR_VERSION) compiler=host \
172         package_repo="$(GNU_REPOSITORY)/mpfr" \
173         patch=no \
174         prefix="$(CROSSTOOLSDIR)" \
175         extraoptions="--bindir=$(CROSSTOOLSDIR) --libdir=$(CROSSTOOLSDIR)/lib --disable-shared"
178 tools-crosstools-mpc :
179         @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
180             || ! $(TEST) -f $(mpc-installflag) ; then \
181                $(RM) $(HOSTGENDIR)/$(CURDIR)/mpc/.files-touched \
182             && $(MAKE) -f ./mmakefile crosstools-mpc--fetch \
183             && $(MAKE) -f ./mmakefile crosstools-mpc--build_and_install-quick \
184             && $(TOUCH) $(mpc-installflag) ; \
185         fi
187 %fetch_and_build mmake=crosstools-mpc package=mpc version=$(MPC_VERSION) compiler=host \
188         package_repo="$(MPC_REPOSITORY)" suffixes="tar.gz" \
189         patch=no \
190         prefix="$(CROSSTOOLSDIR)" \
191         extraoptions="--bindir=$(CROSSTOOLSDIR) --libdir=$(CROSSTOOLSDIR)/lib --disable-shared"
194 tools-crosstools-binutils :
195         @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
196             || ! $(TEST) -f $(binutils-installflag) ; then \
197                $(RM) $(HOSTGENDIR)/$(CURDIR)/binutils/.files-touched \
198             && $(MAKE) -f ./mmakefile crosstools-binutils--fetch \
199             && $(MAKE) -f ./mmakefile crosstools-binutils--build_and_install-quick \
200             && $(TOUCH) $(binutils-installflag) ; \
201         fi
203 %fetch_and_build mmake=crosstools-binutils package=binutils version=$(BINUTILS_VERSION) compiler=host \
204         package_repo="$(GNU_REPOSITORY)/binutils" \
205         patch=yes \
206         prefix="$(CROSSTOOLSDIR)" \
207         extraoptions="$(BINUTILS_EXTRA_OPTS)"
209 HOST_CFLAGS := $(HOST_CFLAGS) $(HOST_GNU89_INLINE)
212 tools-crosstools-gcc :
213         @$(IF) ! $(TEST) -f $(gcc-installflag) ; then \
214                $(RM) $(HOSTGENDIR)/$(CURDIR)/gcc/.files-touched \
215             && $(MAKE) -f ./mmakefile crosstools-gcc--fetch \
216             && $(MAKE) -f ./mmakefile crosstools-gcc--configure \
217             && $(MAKE) -C $(HOSTGENDIR)/$(CURDIR)/gcc all-gcc \
218             && $(MAKE) -j1 -C $(HOSTGENDIR)/$(CURDIR)/gcc install-gcc \
219             && $(TOUCH) $(gcc-installflag) ; \
220         fi
221         @$(IF) $(TEST) -f $(gcc-installflag); then \
222             $(SED) -i -e "s|@aros_target_cc_path@|$(GCC_PATH)|g" $(TOOLDIR)/$(AROS_TARGET_CPU)-$(AROS_TARGET_ARCH)$(AROS_TARGET_SUFFIX)-aros-ld ; \
223         fi
225 %fetch_and_build mmake=crosstools-gcc package=gcc version=$(GCC_VERSION) compiler=host \
226         package_repo="$(GNU_REPOSITORY)/gcc/gcc-$(GCC_VERSION)" \
227         patch=yes \
228         prefix="$(CROSSTOOLSDIR)" \
229         extraoptions="$(GCC_EXTRA_OPTS)"
232 tools-crosstools-icu :
233         @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
234             || ! $(TEST) -f $(icu-installflag) ; then \
235                $(RM) $(HOSTGENDIR)/$(CURDIR)/icu/.files-touched \
236             && $(MAKE) -f ./mmakefile crosstools-icu--fetch \
237             && $(MAKE) -f ./mmakefile crosstools-icu--build_and_install-quick \
238             && $(TOUCH) $(icu-installflag) ; \
239         fi
241 HOST_CXXFLAGS := $(subst -Wno-pointer-sign,, $(subst -Werror-implicit-function-declaration,, $(HOST_CXXFLAGS)))
243 # specify the gendir for icu to be in the crosstools directory so it can be reused
244 %fetch_and_build mmake=crosstools-icu package=icu4c version=$(ICU_PKGVERSION)-src compiler=host \
245         package_repo="$(ICU_REPOSITORY)" suffixes="tgz" \
246         patch=yes srcdir=icu builddir=source gendir=$(CROSSTOOLSDIR) \
247         prefix="$(CROSSTOOLSDIR)" \
248         extraoptions="$(ICU_EXTRA_OPTS)"
251 tools-crosstools-gdb :
252         @$(IF) ! $(TEST) -d $(CROSSTOOLSDIR) \
253             || ! $(TEST) -f $(gdb-installflag) ; then \
254                $(RM) $(HOSTGENDIR)/$(CURDIR)/gdb/.files-touched \
255             && $(MAKE) -f ./mmakefile crosstools-gdb--fetch \
256             && $(MAKE) -f ./mmakefile crosstools-gdb--build_and_install-quick \
257             && $(TOUCH) $(gdb-installflag) ; \
258         fi
260 %fetch_and_build mmake=crosstools-gdb package=gdb version=$(GDB_VERSION) compiler=host \
261         package_repo="$(GNU_REPOSITORY)/gdb" \
262         patch=yes \
263         prefix="$(CROSSTOOLSDIR)" \
264         extraoptions="$(GDB_EXTRA_OPTS)"
268 # LLVM toolchain
271 LLVM_VERSION      :=3.8.0
272 LLVM_REPOSITORY   := http://llvm.org/releases/$(LLVM_VERSION)
273 LLVM_ARCHBASE     := llvm-$(LLVM_VERSION).src
274 LLVMLLD_ARCHBASE  := lld-$(LLVM_VERSION).src
275 CLANG_ARCHBASE    := cfe-$(LLVM_VERSION).src
277 LLVM_TARGETS      := "X86;ARM;PowerPC"
278 LLVM_HOST         := "$(AROS_TARGET_CPU)"
280 LLVM_CMAKETARGET  :=
281 LLVM_CMAKEOPTIONS :=  \
282     -DDEFAULT_SYSROOT="$(AROS_DEVELOPMENT)" \
283     -DCMAKE_INSTALL_BINDIR="$(CROSSTOOLSDIR)" \
284     -DLLVM_EXTERNAL_LLD_SOURCE_DIR:PATH="$(HOSTDIR)/Ports/host/llvm-lld/$(LLVMLLD_ARCHBASE)" \
285     -DLLVM_EXTERNAL_CLANG_SOURCE_DIR:PATH="$(HOSTDIR)/Ports/host/clang/$(CLANG_ARCHBASE)" \
286     -DLLVM_TARGETS_TO_BUILD=$(LLVM_TARGETS) \
287     -DLLVM_DEFAULT_TARGET_TRIPLE=$(AROS_TARGET_CPU)-unknown-aros \
288     -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF
289 ifeq ($(AROS_HOST_ARCH),linux)
290 LLVM_CMAKEOPTIONS += -DBUILD_SHARED_LIBS=ON
291 # LLVM_CMAKEOPTIONS += -DLLVM_LINK_LLVM_DYLIB=ON
292 endif
294 %fetch mmake=crosstools-clang-fetch archive=$(CLANG_ARCHBASE)  \
295     archive_origins=$(LLVM_REPOSITORY) suffixes="tar.xz" \
296     location=$(PORTSSOURCEDIR) destination=$(HOSTDIR)/Ports/host/clang \
297     patches_specs=$(CLANG_ARCHBASE)-aros.diff:$(CLANG_ARCHBASE):-p1
299 %create_patch mmake=crosstools-clang-create-patch \
300     archive=$(CLANG_ARCHBASE) suffixes="tar.xz" \
301     destination=$(HOSTDIR)/Ports/host/clang
303 %fetch mmake=crosstools-llvm-lld-fetch archive=$(LLVMLLD_ARCHBASE) \
304     archive_origins=$(LLVM_REPOSITORY) suffixes="tar.xz" \
305     location=$(PORTSSOURCEDIR) destination=$(HOSTDIR)/Ports/host/llvm-lld
307 %create_patch mmake=crosstools-llvm-lld-create-patch \
308     archive=$(LLVMLLD_ARCHBASE) suffixes="tar.xz" \
309     destination=$(HOSTDIR)/Ports/host/llvm-lld
311 %fetch mmake=crosstools-llvm-fetch archive=$(LLVM_ARCHBASE) \
312     archive_origins=$(LLVM_REPOSITORY) suffixes="tar.xz" \
313     location=$(PORTSSOURCEDIR) destination=$(HOSTDIR)/Ports/host/llvm \
314     patches_specs=$(LLVM_ARCHBASE)-aros.diff:$(LLVM_ARCHBASE):-p1
316 %create_patch mmake=crosstools-llvm-create-patch \
317     archive=$(LLVM_ARCHBASE) suffixes="tar.xz" \
318     destination=$(HOSTDIR)/Ports/host/llvm
320 #MM crosstools-llvm-fetch : crosstools-clang-fetch crosstools-llvm-lld-fetch
322 #MM- tools-crosstools-llvm-i386   : crosstools-llvm-quick
323 #MM- tools-crosstools-llvm-x86_64 : crosstools-llvm-quick
324 #MM- tools-crosstools-llvm-ppc    : crosstools-llvm-quick
325 #MM- tools-crosstools-llvm-arm    : crosstools-llvm-quick
327 #MM- crosstools-llvm-quick : setup crosstools-llvm-fetch
329 %build_with_cmake mmake=crosstools-llvm package=llvm srcdir=$(HOSTDIR)/Ports/host/llvm/$(LLVM_ARCHBASE) \
330         prefix="$(CROSSTOOLSDIR)" maketarget=$(LLVM_CMAKETARGET) \
331         extraoptions="$(LLVM_CMAKEOPTIONS)" compiler=host