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
="http://www.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 ifeq (${ADK_MAKE_PARALLEL},y
)
219 GCC_MAKEOPTS
+= -j
${ADK_MAKE_JOBS}
223 ifeq ($(ADK_TOOLCHAIN_WITH_CXX
),y
)
226 ifeq ($(ADK_TOOLCHAIN_WITH_OBJC
),y
)
229 ifeq ($(ADK_TOOLCHAIN_WITH_FORTRAN
),y
)
232 ifeq ($(ADK_TOOLCHAIN_WITH_GO
),y
)
236 LANGUAGES
=$(shell echo
${USE_LANG} |tr
' ' ',')
238 include ${ADK_TOPDIR}/mk
/buildhlp.mk
240 GCC_BUILD_DIR_INITIAL
:= $(WRKBUILD
)-initial
241 GCC_BUILD_DIR_FINAL
:= $(WRKBUILD
)-final
243 $(GCC_BUILD_DIR_INITIAL
)/.configured
:
244 ifeq ($(ADK_TARGET_ARCH_XTENSA
),y
)
245 tar xf
$(ADK_TOPDIR
)/target
/xtensa
/overlay
/xtensa_
$(ADK_TARGET_CPU_TYPE
).
tar \
246 --strip-components
=1 -C
$(WRKSRC
) gcc
248 mkdir
-p
$(GCC_BUILD_DIR_INITIAL
)
249 # these symlinks are very important, do not remove
250 rm -rf
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)/sys-include
251 mkdir
-p
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)
252 (cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
); \
253 ln
-s ..
/$(STAGING_HOST2TARGET
)/usr
/include sys-include
)
254 rm -rf
${TOOLCHAIN_DIR}/usr
/$(GNU_TARGET_NAME
)/lib
255 (cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
); \
256 ln
-s ..
/$(STAGING_HOST2TARGET
)/usr
/lib lib
)
257 ifeq ($(ADK_TARGET_ARCH_SH
),y
)
258 ifeq ($(ADK_TARGET_CPU_SH_J2
),y
)
259 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . mj2
)
261 ifeq ($(ADK_TARGET_CPU_SH_SH2
),y
)
262 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m2
)
264 ifeq ($(ADK_TARGET_CPU_SH_SH2A
),y
)
265 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m2a
)
267 ifeq ($(ADK_TARGET_CPU_SH_SH3
),y
)
268 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m3
)
270 ifeq ($(ADK_TARGET_CPU_SH_SH4
),y
)
271 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m4
)
273 ifeq ($(ADK_TARGET_CPU_SH_SH4A
),y
)
274 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m4a
)
277 $(SED
) '/k prot/agcc_cv_libc_provides_ssp=yes' $(WRKBUILD
)/gcc
/configure
278 cd
$(GCC_BUILD_DIR_INITIAL
); \
279 PATH
='$(TARGET_PATH)' \
282 CFLAGS
="-O0 -g0 -fomit-frame-pointer" \
283 CXXFLAGS
="-O0 -g0 -fomit-frame-pointer" \
284 $(WRKBUILD
)/configure \
286 ${GCC_TLS_CONFOPTS} \
287 --enable-languages
=c \
295 $(GCC_BUILD_DIR_INITIAL
)/.compiled
: $(GCC_BUILD_DIR_INITIAL
)/.configured
296 ifeq ($(ADK_TOOLCHAIN_GCC_OLD
),y
)
297 PATH
='$(TARGET_PATH)' \
298 $(MAKE
) ${GCC_MAKEOPTS} -C
$(GCC_BUILD_DIR_INITIAL
) all-gcc
300 PATH
='$(TARGET_PATH)' \
301 $(MAKE
) ${GCC_MAKEOPTS} -C
$(GCC_BUILD_DIR_INITIAL
) all-gcc all-target-libgcc
305 $(WRKBUILD
)/.configured
: $(GCC_BUILD_DIR_INITIAL
)/.compiled
306 ifeq ($(ADK_TOOLCHAIN_GCC_OLD
),y
)
307 PATH
='$(TARGET_PATH)' \
308 $(MAKE
) -C
$(GCC_BUILD_DIR_INITIAL
) install-gcc
310 PATH
='$(TARGET_PATH)' \
311 $(MAKE
) -C
$(GCC_BUILD_DIR_INITIAL
) install-gcc install-target-libgcc
313 # required for newlib
314 (cd
$(TOOLCHAIN_DIR
)/usr
/bin
&& \
315 ln
-sf
$(GNU_TARGET_NAME
)-gcc
$(GNU_TARGET_NAME
)-cc \
319 $(WRKBUILD
)/.compiled
:
320 mkdir
-p
$(GCC_BUILD_DIR_FINAL
)
321 cd
$(GCC_BUILD_DIR_FINAL
); \
322 PATH
='$(TARGET_PATH)' \
325 CFLAGS_FOR_TARGET
='$(TARGET_CFLAGS)' \
326 CXXFLAGS_FOR_TARGET
='$(TARGET_CXXFLAGS)' \
327 $(WRKBUILD
)/configure \
329 ${GCC_FINAL_CONFOPTS} \
330 --enable-languages
=$(LANGUAGES
) \
331 --with-build-sysroot
='$${prefix}/${STAGING_HOST2TARGET}' \
332 --with-sysroot
='$${prefix}/${STAGING_HOST2TARGET}'
333 PATH
='$(TARGET_PATH)' $(MAKE
) -C
$(GCC_BUILD_DIR_FINAL
) configure-host
334 cd
$(GCC_BUILD_DIR_FINAL
); \
335 PATH
='$(TARGET_PATH)' \
336 $(MAKE
) ${GCC_MAKEOPTS} all
339 $(WRKBUILD
)/.installed
: $(WRKBUILD
)/.compiled
340 cd
$(GCC_BUILD_DIR_FINAL
); \
341 PATH
='$(TARGET_PATH)' \
343 # remove duplicate tools, convert hardlinks to symlinks
345 cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)/bin
; \
346 for app in
ar as c
++ g
++ gcc
ld ld.gold
ld.bfd nm objcopy objdump ranlib
strip; do \
347 ln
-sf ..
/..
/bin
/$(GNU_TARGET_NAME
)-$${app} $${app}; \
349 (cd
$(TOOLCHAIN_DIR
)/usr
/bin
&& \
350 ln
-sf
$(GNU_TARGET_NAME
)-gcc
$(GNU_TARGET_NAME
)-gcc-
${PKG_VERSION} && \
351 ln
-sf
$(GNU_TARGET_NAME
)-g
++ $(GNU_TARGET_NAME
)-g
++-${PKG_VERSION} \
356 ifeq ($(ADK_TARGET_CPU_CF
),y
)
357 find
$(STAGING_TARGET_DIR
) -name libgcc.a
-print | while read t
; do
$(GNU_TARGET_NAME
)-ar dv
"$t" _ctors.o
; done
359 # remove any libiberty.a, breaking package/binutils later
360 -rm $(STAGING_TARGET_DIR
)/usr
/lib
/libiberty.a
361 # cleanup unneeded docs
362 rm -rf
$(TOOLCHAIN_DIR
)/usr
/share
363 # cleanup unneeded libtool files
364 -find
$(STAGING_TARGET_DIR
) $(STAGING_HOST_DIR
) -name \
*.la
-exec
rm {} \
;
365 # strip target libs and host tools for toolchain builds in non-Debug mode
367 PATH
="$(TARGET_PATH)" debug
='0' prefix='${TARGET_CROSS}' ${BASH} ${SCRIPT_DIR}/rstrip.sh \
368 $(STAGING_TARGET_DIR
) $(TOOLCHAIN_DIR
)/usr
/lib
/gcc
/$(GNU_TARGET_NAME
)
369 debug
='0' prefix=' ' ${BASH} ${SCRIPT_DIR}/rstrip.sh
$(TOOLCHAIN_DIR
)/usr
/bin
373 include ${ADK_TOPDIR}/mk
/toolchain.mk