1 # This file is part of the OpenADK project. OpenADK is copyrighted
2 # material, please see the LICENCE file in the top-level directory.
4 include $(ADK_TOPDIR
)/rules.mk
8 # disable SSP for libstdc++
9 ifeq ($(ADK_TARGET_LIB_MUSL
),y
)
10 TARGET_CFLAGS
:= $(filter-out -fstack-protector-all
,$(TARGET_CFLAGS
))
11 TARGET_CXXFLAGS
:= $(filter-out -fstack-protector-all
,$(TARGET_CXXFLAGS
))
15 TARGET_CFLAGS
:= $(filter-out -flto
,$(TARGET_CFLAGS
))
16 TARGET_CXXFLAGS
:= $(filter-out -flto
,$(TARGET_CXXFLAGS
))
18 # for uClinux, we need to filter out some flags
19 ifeq ($(ADK_TARGET_UCLINUX
),y
)
20 TARGET_CFLAGS
:= $(filter-out -msep-data
,$(TARGET_CFLAGS
))
21 TARGET_CXXFLAGS
:= $(filter-out -msep-data
,$(TARGET_CXXFLAGS
))
24 ifeq ($(ADK_TARGET_USE_STATIC_AND_SHARED_LIBS
),y
)
25 TARGET_CFLAGS
:= $(filter-out -static
,$(TARGET_CFLAGS
))
26 TARGET_CXXFLAGS
:= $(filter-out -static
,$(TARGET_CXXFLAGS
))
29 GCC_CONFOPTS
:= --prefix=$(TOOLCHAIN_DIR
)/usr \
30 --with-bugurl
="https://openadk.org/" \
31 --build
=$(GNU_HOST_NAME
) \
32 --host
=$(GNU_HOST_NAME
) \
33 --target
=$(GNU_TARGET_NAME
) \
34 --with-gmp
=$(STAGING_HOST_DIR
)/usr \
35 --with-mpfr
=$(STAGING_HOST_DIR
)/usr \
36 --disable-__cxa_atexit \
40 --disable-libsanitizer \
41 --disable-install-libiberty \
43 --disable-libmudflap \
46 --disable-libcilkrts \
47 --disable-libquadmath \
48 --disable-libquadmath-support \
49 --disable-decimal-float \
50 --disable-libstdcxx-pch \
51 --disable-ppl-version-check \
52 --disable-cloog-version-check \
59 ifeq ($(ADK_TARGET_WITH_NPTL
),y
)
60 GCC_FINAL_CONFOPTS
:= --enable-tls
--enable-threads
--enable-libatomic
61 GCC_TLS_CONFOPTS
:= --enable-tls
63 ifeq ($(ADK_TARGET_WITH_LT
),y
)
64 GCC_FINAL_CONFOPTS
:= --disable-tls
--enable-threads
--disable-libatomic
65 GCC_TLS_CONFOPTS
:= --disable-tls
67 ifeq ($(ADK_TARGET_LIB_WITHOUT_THREADS
)$(ADK_TARGET_WITHOUT_THREADS
),y
)
68 GCC_FINAL_CONFOPTS
:= --disable-tls
--disable-threads
--disable-libatomic
69 GCC_TLS_CONFOPTS
:= --disable-tls
72 ifeq ($(ADK_TARGET_LIB_NEWLIB
),y
)
73 GCC_FINAL_CONFOPTS
+= --with-newlib
76 ifeq ($(ADK_TARGET_OS_FROSTED
)$(ADK_TARGET_USE_STATIC_LIBS_ONLY
),y
)
77 GCC_FINAL_CONFOPTS
+= --disable-shared
79 GCC_FINAL_CONFOPTS
+= --enable-shared
--enable-cxx-flags
='-fPIC'
82 ifeq ($(ADK_TOOLCHAIN_WITH_SSP
),y
)
83 GCC_FINAL_CONFOPTS
+= --enable-libssp
85 GCC_FINAL_CONFOPTS
+= --disable-libssp
88 ifeq ($(ADK_TOOLCHAIN_WITH_LTO
),y
)
89 GCC_CONFOPTS
+= --enable-lto
91 GCC_CONFOPTS
+= --disable-lto
95 # architecture specific
97 ifneq ($(ADK_TARGET_GCC_CPU
),)
98 GCC_CONFOPTS
+= --with-cpu
=$(ADK_TARGET_GCC_CPU
)
101 ifneq ($(ADK_TARGET_GCC_ARCH
),)
102 GCC_CONFOPTS
+= --with-arch
=$(ADK_TARGET_GCC_ARCH
)
105 ifneq ($(ADK_TARGET_FLOAT
),)
106 GCC_CONFOPTS
+= --with-float
=$(ADK_TARGET_FLOAT
)
109 ifneq ($(ADK_TARGET_FPU
),)
110 GCC_CONFOPTS
+= --with-fpu
=$(ADK_TARGET_FPU
)
113 ifneq ($(ADK_TARGET_INSTRUCTION_SET
),)
114 GCC_CONFOPTS
+= --with-mode
=$(ADK_TARGET_INSTRUCTION_SET
)
117 ifneq ($(ADK_TARGET_NAN_MODE
),)
118 GCC_CONFOPTS
+= --with-nan
=$(ADK_TARGET_NAN_MODE
)
121 # .symver is broken for Blackfin, simple C++ apps fail to link
122 ifeq ($(ADK_TARGET_ARCH_BFIN
),y
)
123 GCC_CONFOPTS
+= --disable-symvers
126 ifeq ($(ADK_TARGET_ARCH_CSKY
),y
)
127 ifeq ($(ADK_TARGET_CPU_CSKY_CK610
),y
)
128 GCC_CONFOPTS
+= --with-cskyabi
=abiv1
130 GCC_CONFOPTS
+= --with-cskyabi
=abiv2
134 ifeq ($(ADK_TARGET_ARCH_METAG
),y
)
135 GCC_CONFOPTS
+= --with-cpu
=2.1 --enable-meta-default
--disable-symvers
138 ifeq ($(ADK_TARGET_CPU_CF
),y
)
139 GCC_CONFOPTS
+= --with-arch
=cf
--disable-multilib
142 ifeq ($(ADK_TARGET_ARCH_NDS32
),y
)
143 GCC_CONFOPTS
+= --with-arch
=v3
146 ifeq ($(ADK_TARGET_ARCH_M68K
)$(ADK_TARGET_ARCH_X86_64
)$(ADK_TARGET_ARCH_X86
),)
147 GCC_FINAL_CONFOPTS
+= --disable-biarch
--disable-multilib
150 ifeq ($(ADK_TARGET_ARCH_SH
),y
)
152 ifeq ($(ADK_TARGET_LITTLE_ENDIAN
),y
)
153 GCC_CONFOPTS
+= --with-endian
=little
155 GCC_CONFOPTS
+= --with-endian
=big
157 ifeq ($(ADK_TARGET_BINFMT_FDPIC
),y
)
158 GCC_CONFOPTS
+= --enable-fdpic
161 ifeq ($(ADK_TARGET_CPU_SH_J2
),y
)
162 GCC_CONFOPTS
+= --with-multilib-list
=mj2
164 ifeq ($(ADK_TARGET_CPU_SH_SH2
),y
)
165 GCC_CONFOPTS
+= --with-multilib-list
=m2
167 ifeq ($(ADK_TARGET_CPU_SH_SH2A
),y
)
168 GCC_CONFOPTS
+= --with-multilib-list
=m2a
,m2a-nofpu
170 ifeq ($(ADK_TARGET_CPU_SH_SH3
),y
)
171 GCC_CONFOPTS
+= --with-multilib-list
=m3
173 ifeq ($(ADK_TARGET_CPU_SH_SH4
),y
)
174 GCC_CONFOPTS
+= --with-multilib-list
=m4
,m4-nofpu
176 ifeq ($(ADK_TARGET_CPU_SH_SH4A
),y
)
177 GCC_CONFOPTS
+= --with-multilib-list
=m4a
,m4a-nofpu
182 ifeq ($(ADK_TARGET_ARCH_X86
),y
)
183 ifeq ($(ADK_TARGET_KERNEL_64
),y
)
184 GCC_FINAL_CONFOPTS
+= --enable-biarch
--enable-targets
=all --disable-multilib
186 GCC_FINAL_CONFOPTS
+= --disable-biarch
--disable-multilib
190 ifeq ($(ADK_TARGET_ARCH_X86_64
),y
)
191 ifneq ($(ADK_TARGET_ABI_X32
),)
192 GCC_CONFOPTS
+= --with-abi
=x32
--enable-multilib
194 GCC_CONFOPTS
+= --disable-biarch
--disable-multilib
198 ifeq ($(ADK_TARGET_ARCH_ALPHA
),y
)
199 GCC_CONFOPTS
+= --without-long-double-128
202 ifeq ($(ADK_TARGET_ARCH_PPC
),y
)
203 GCC_CONFOPTS
+= --with-long-double-64
--enable-secureplt
206 ifeq ($(ADK_TARGET_ARCH_PPC64
),y
)
207 ifeq ($(ADK_TARGET_LIB_GLIBC
),y
)
208 GCC_CONFOPTS
+= --with-long-double-128
--with-abi
=elfv2
210 GCC_CONFOPTS
+= --without-long-double-128
--with-abi
=elfv2
214 ifneq ($(ADK_TARGET_MIPS_ABI
),)
215 GCC_CONFOPTS
+= --with-abi
=${ADK_TARGET_MIPS_ABI}
218 ifneq ($(ADK_TARGET_ABI_RISCV
),)
219 GCC_CONFOPTS
+= --with-abi
=${ADK_TARGET_ABI_RISCV}
222 ifeq (${ADK_MAKE_PARALLEL},y
)
223 GCC_MAKEOPTS
+= -j
${ADK_MAKE_JOBS}
227 ifeq ($(ADK_TOOLCHAIN_WITH_CXX
),y
)
230 ifeq ($(ADK_TOOLCHAIN_WITH_OBJC
),y
)
233 ifeq ($(ADK_TOOLCHAIN_WITH_FORTRAN
),y
)
236 ifeq ($(ADK_TOOLCHAIN_WITH_GO
),y
)
240 LANGUAGES
=$(shell echo
${USE_LANG} |tr
' ' ',')
242 include ${ADK_TOPDIR}/mk
/buildhlp.mk
244 GCC_BUILD_DIR_INITIAL
:= $(WRKBUILD
)-initial
245 GCC_BUILD_DIR_FINAL
:= $(WRKBUILD
)-final
247 $(GCC_BUILD_DIR_INITIAL
)/.configured
:
248 ifeq ($(ADK_TARGET_ARCH_XTENSA
),y
)
249 tar xf
$(ADK_TOPDIR
)/target
/xtensa
/overlay
/xtensa_
$(ADK_TARGET_CPU_TYPE
).
tar \
250 --strip-components
=1 -C
$(WRKSRC
) gcc
252 mkdir
-p
$(GCC_BUILD_DIR_INITIAL
)
253 # these symlinks are very important, do not remove
254 rm -rf
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)/sys-include
255 mkdir
-p
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)
256 (cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
); \
257 ln
-s ..
/$(STAGING_HOST2TARGET
)/usr
/include sys-include
)
258 rm -rf
${TOOLCHAIN_DIR}/usr
/$(GNU_TARGET_NAME
)/lib
259 (cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
); \
260 ln
-s ..
/$(STAGING_HOST2TARGET
)/usr
/lib lib
)
261 ifeq ($(ADK_TARGET_ARCH_SH
),y
)
262 ifeq ($(ADK_TARGET_CPU_SH_J2
),y
)
263 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . mj2
)
265 ifeq ($(ADK_TARGET_CPU_SH_SH2
),y
)
266 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m2
)
268 ifeq ($(ADK_TARGET_CPU_SH_SH2A
),y
)
269 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m2a
)
271 ifeq ($(ADK_TARGET_CPU_SH_SH3
),y
)
272 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m3
)
274 ifeq ($(ADK_TARGET_CPU_SH_SH4
),y
)
275 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m4
)
277 ifeq ($(ADK_TARGET_CPU_SH_SH4A
),y
)
278 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m4a
)
281 $(SED
) '/k prot/agcc_cv_libc_provides_ssp=yes' $(WRKBUILD
)/gcc
/configure
282 cd
$(GCC_BUILD_DIR_INITIAL
); \
283 PATH
='$(TARGET_PATH)' \
286 CFLAGS
="-O0 -g0 -fomit-frame-pointer" \
287 CXXFLAGS
="-O0 -g0 -fomit-frame-pointer" \
288 $(WRKBUILD
)/configure \
290 ${GCC_TLS_CONFOPTS} \
291 --enable-languages
=c \
299 $(GCC_BUILD_DIR_INITIAL
)/.compiled
: $(GCC_BUILD_DIR_INITIAL
)/.configured
300 ifeq ($(ADK_TOOLCHAIN_GCC_OLD
),y
)
301 PATH
='$(TARGET_PATH)' \
302 $(MAKE
) ${GCC_MAKEOPTS} -C
$(GCC_BUILD_DIR_INITIAL
) all-gcc
304 PATH
='$(TARGET_PATH)' \
305 $(MAKE
) ${GCC_MAKEOPTS} -C
$(GCC_BUILD_DIR_INITIAL
) all-gcc all-target-libgcc
309 $(WRKBUILD
)/.configured
: $(GCC_BUILD_DIR_INITIAL
)/.compiled
310 ifeq ($(ADK_TOOLCHAIN_GCC_OLD
),y
)
311 PATH
='$(TARGET_PATH)' \
312 $(MAKE
) -C
$(GCC_BUILD_DIR_INITIAL
) install-gcc
314 PATH
='$(TARGET_PATH)' \
315 $(MAKE
) -C
$(GCC_BUILD_DIR_INITIAL
) install-gcc install-target-libgcc
317 # required for newlib
318 (cd
$(TOOLCHAIN_DIR
)/usr
/bin
&& \
319 ln
-sf
$(GNU_TARGET_NAME
)-gcc
$(GNU_TARGET_NAME
)-cc \
323 $(WRKBUILD
)/.compiled
:
324 mkdir
-p
$(GCC_BUILD_DIR_FINAL
)
325 cd
$(GCC_BUILD_DIR_FINAL
); \
326 PATH
='$(TARGET_PATH)' \
329 CFLAGS_FOR_TARGET
='$(TARGET_CFLAGS)' \
330 CXXFLAGS_FOR_TARGET
='$(TARGET_CXXFLAGS)' \
331 $(WRKBUILD
)/configure \
333 ${GCC_FINAL_CONFOPTS} \
334 --enable-languages
=$(LANGUAGES
) \
335 --with-build-sysroot
='$${prefix}/${STAGING_HOST2TARGET}' \
336 --with-sysroot
='$${prefix}/${STAGING_HOST2TARGET}'
337 PATH
='$(TARGET_PATH)' $(MAKE
) -C
$(GCC_BUILD_DIR_FINAL
) configure-host
338 cd
$(GCC_BUILD_DIR_FINAL
); \
339 PATH
='$(TARGET_PATH)' \
340 $(MAKE
) ${GCC_MAKEOPTS} all
343 $(WRKBUILD
)/.installed
: $(WRKBUILD
)/.compiled
344 cd
$(GCC_BUILD_DIR_FINAL
); \
345 PATH
='$(TARGET_PATH)' \
347 # remove duplicate tools, convert hardlinks to symlinks
349 cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)/bin
; \
350 for app in
ar as c
++ g
++ gcc
ld ld.gold
ld.bfd nm objcopy objdump ranlib
strip; do \
351 ln
-sf ..
/..
/bin
/$(GNU_TARGET_NAME
)-$${app} $${app}; \
353 (cd
$(TOOLCHAIN_DIR
)/usr
/bin
&& \
354 ln
-sf
$(GNU_TARGET_NAME
)-gcc
$(GNU_TARGET_NAME
)-gcc-
${PKG_VERSION} && \
355 ln
-sf
$(GNU_TARGET_NAME
)-g
++ $(GNU_TARGET_NAME
)-g
++-${PKG_VERSION} \
360 ifeq ($(ADK_TARGET_CPU_CF
),y
)
361 find
$(STAGING_TARGET_DIR
) -name libgcc.a
-print | while read t
; do
$(GNU_TARGET_NAME
)-ar dv
"$t" _ctors.o
; done
363 # cleanup unneeded docs
364 rm -rf
$(TOOLCHAIN_DIR
)/usr
/share
365 # cleanup unneeded libtool files
366 -find
$(STAGING_TARGET_DIR
) $(STAGING_HOST_DIR
) -name \
*.la
-exec
rm {} \
;
367 # strip target libs and host tools for toolchain builds in non-Debug mode
369 PATH
="$(TARGET_PATH)" debug
='0' prefix='${TARGET_CROSS}' ${BASH} ${SCRIPT_DIR}/rstrip.sh \
370 $(STAGING_TARGET_DIR
) $(TOOLCHAIN_DIR
)/usr
/lib
/gcc
/$(GNU_TARGET_NAME
)
371 debug
='0' prefix=' ' ${BASH} ${SCRIPT_DIR}/rstrip.sh
$(TOOLCHAIN_DIR
)/usr
/bin
375 include ${ADK_TOPDIR}/mk
/toolchain.mk