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 GCC_CONFOPTS
:= --prefix=$(TOOLCHAIN_DIR
)/usr \
25 --with-bugurl
="http://www.openadk.org/" \
26 --build
=$(GNU_HOST_NAME
) \
27 --host
=$(GNU_HOST_NAME
) \
28 --target
=$(GNU_TARGET_NAME
) \
29 --with-gmp
=$(STAGING_HOST_DIR
)/usr \
30 --with-mpfr
=$(STAGING_HOST_DIR
)/usr \
31 --disable-__cxa_atexit \
35 --disable-libsanitizer \
36 --disable-install-libiberty \
38 --disable-libmudflap \
41 --disable-libcilkrts \
42 --disable-libquadmath \
43 --disable-libquadmath-support \
44 --disable-decimal-float \
45 --disable-libstdcxx-pch \
46 --disable-ppl-version-check \
47 --disable-cloog-version-check \
54 ifeq ($(ADK_TARGET_WITH_NPTL
),y
)
55 GCC_FINAL_CONFOPTS
:= --enable-tls
--enable-threads
--enable-libatomic
56 GCC_TLS_CONFOPTS
:= --enable-tls
58 ifeq ($(ADK_TARGET_WITH_LT
),y
)
59 GCC_FINAL_CONFOPTS
:= --disable-tls
--enable-threads
--disable-libatomic
60 GCC_TLS_CONFOPTS
:= --disable-tls
62 ifeq ($(ADK_TARGET_LIB_WITHOUT_THREADS
)$(ADK_TARGET_WITHOUT_THREADS
),y
)
63 GCC_FINAL_CONFOPTS
:= --disable-tls
--disable-threads
--disable-libatomic
64 GCC_TLS_CONFOPTS
:= --disable-tls
67 ifeq ($(ADK_TARGET_LIB_NEWLIB
),y
)
68 GCC_FINAL_CONFOPTS
+= --with-newlib
71 ifeq ($(ADK_TARGET_OS_FROSTED
)$(ADK_TARGET_USE_STATIC_LIBS_ONLY
),y
)
72 GCC_FINAL_CONFOPTS
+= --disable-shared
74 GCC_FINAL_CONFOPTS
+= --enable-shared
--enable-cxx-flags
='-fPIC'
77 ifeq ($(ADK_TOOLCHAIN_WITH_SSP
),y
)
78 GCC_FINAL_CONFOPTS
+= --enable-libssp
80 GCC_FINAL_CONFOPTS
+= --disable-libssp
83 ifeq ($(ADK_TOOLCHAIN_WITH_LTO
),y
)
84 GCC_CONFOPTS
+= --enable-lto
86 GCC_CONFOPTS
+= --disable-lto
90 # architecture specific
92 ifneq ($(ADK_TARGET_GCC_CPU
),)
93 GCC_CONFOPTS
+= --with-cpu
=$(ADK_TARGET_GCC_CPU
)
96 ifneq ($(ADK_TARGET_GCC_ARCH
),)
97 GCC_CONFOPTS
+= --with-arch
=$(ADK_TARGET_GCC_ARCH
)
100 ifneq ($(ADK_TARGET_FLOAT
),)
101 GCC_CONFOPTS
+= --with-float
=$(ADK_TARGET_FLOAT
)
104 ifneq ($(ADK_TARGET_FPU
),)
105 GCC_CONFOPTS
+= --with-fpu
=$(ADK_TARGET_FPU
)
108 ifneq ($(ADK_TARGET_INSTRUCTION_SET
),)
109 GCC_CONFOPTS
+= --with-mode
=$(ADK_TARGET_INSTRUCTION_SET
)
112 ifneq ($(ADK_TARGET_NAN_MODE
),)
113 GCC_CONFOPTS
+= --with-nan
=$(ADK_TARGET_NAN_MODE
)
116 # .symver is broken for Blackfin, simple C++ apps fail to link
117 ifeq ($(ADK_TARGET_ARCH_BFIN
),y
)
118 GCC_CONFOPTS
+= --disable-symvers
121 ifeq ($(ADK_TARGET_ARCH_CSKY
),y
)
122 GCC_CONFOPTS
+= --with-cskyabi
=abiv1
125 ifeq ($(ADK_TARGET_ARCH_METAG
),y
)
126 GCC_CONFOPTS
+= --with-cpu
=2.1 --enable-meta-default
--disable-symvers
129 ifeq ($(ADK_TARGET_CPU_CF
),y
)
130 GCC_CONFOPTS
+= --with-arch
=cf
--disable-multilib
133 ifeq ($(ADK_TARGET_ARCH_NDS32
),y
)
134 GCC_CONFOPTS
+= --with-arch
=v3
137 ifeq ($(ADK_TARGET_ARCH_M68K
)$(ADK_TARGET_ARCH_X86_64
)$(ADK_TARGET_ARCH_X86
),)
138 GCC_FINAL_CONFOPTS
+= --disable-biarch
--disable-multilib
141 ifeq ($(ADK_TARGET_ARCH_SH
),y
)
143 ifeq ($(ADK_TARGET_LITTLE_ENDIAN
),y
)
144 GCC_CONFOPTS
+= --with-endian
=little
146 GCC_CONFOPTS
+= --with-endian
=big
148 ifeq ($(ADK_TARGET_BINFMT_FDPIC
),y
)
149 GCC_CONFOPTS
+= --enable-fdpic
152 ifeq ($(ADK_TARGET_CPU_SH_J2
),y
)
153 GCC_CONFOPTS
+= --with-multilib-list
=mj2
155 ifeq ($(ADK_TARGET_CPU_SH_SH2
),y
)
156 GCC_CONFOPTS
+= --with-multilib-list
=m2
158 ifeq ($(ADK_TARGET_CPU_SH_SH2A
),y
)
159 GCC_CONFOPTS
+= --with-multilib-list
=m2a
,m2a-nofpu
161 ifeq ($(ADK_TARGET_CPU_SH_SH3
),y
)
162 GCC_CONFOPTS
+= --with-multilib-list
=m3
164 ifeq ($(ADK_TARGET_CPU_SH_SH4
),y
)
165 GCC_CONFOPTS
+= --with-multilib-list
=m4
,m4-nofpu
167 ifeq ($(ADK_TARGET_CPU_SH_SH4A
),y
)
168 GCC_CONFOPTS
+= --with-multilib-list
=m4a
,m4a-nofpu
173 ifeq ($(ADK_TARGET_ARCH_X86
),y
)
174 ifeq ($(ADK_TARGET_KERNEL_64
),y
)
175 GCC_FINAL_CONFOPTS
+= --enable-biarch
--enable-targets
=all --disable-multilib
177 GCC_FINAL_CONFOPTS
+= --disable-biarch
--disable-multilib
181 ifeq ($(ADK_TARGET_ARCH_X86_64
),y
)
182 ifneq ($(ADK_TARGET_ABI_X32
),)
183 GCC_CONFOPTS
+= --with-abi
=x32
--enable-multilib
185 GCC_CONFOPTS
+= --disable-biarch
--disable-multilib
189 ifeq ($(ADK_TARGET_ARCH_ALPHA
),y
)
190 GCC_CONFOPTS
+= --without-long-double-128
193 ifeq ($(ADK_TARGET_ARCH_PPC
),y
)
194 GCC_CONFOPTS
+= --with-long-double-64
--enable-secureplt
197 ifeq ($(ADK_TARGET_ARCH_PPC64
),y
)
198 ifeq ($(ADK_TARGET_LIB_GLIBC
),y
)
199 GCC_CONFOPTS
+= --with-long-double-128
--with-abi
=elfv2
201 GCC_CONFOPTS
+= --without-long-double-128
--with-abi
=elfv2
205 ifneq ($(ADK_TARGET_MIPS_ABI
),)
206 GCC_CONFOPTS
+= --with-abi
=${ADK_TARGET_MIPS_ABI}
209 ifeq (${ADK_MAKE_PARALLEL},y
)
210 GCC_MAKEOPTS
+= -j
${ADK_MAKE_JOBS}
214 ifeq ($(ADK_TOOLCHAIN_WITH_CXX
),y
)
217 ifeq ($(ADK_TOOLCHAIN_WITH_OBJC
),y
)
220 ifeq ($(ADK_TOOLCHAIN_WITH_FORTRAN
),y
)
223 ifeq ($(ADK_TOOLCHAIN_WITH_GO
),y
)
227 LANGUAGES
=$(shell echo
${USE_LANG} |tr
' ' ',')
229 include ${ADK_TOPDIR}/mk
/buildhlp.mk
231 GCC_BUILD_DIR_INITIAL
:= $(WRKBUILD
)-initial
232 GCC_BUILD_DIR_FINAL
:= $(WRKBUILD
)-final
234 $(GCC_BUILD_DIR_INITIAL
)/.configured
:
235 ifeq ($(ADK_TARGET_ARCH_XTENSA
),y
)
236 tar xf
$(ADK_TOPDIR
)/target
/xtensa
/overlay
/xtensa_
$(ADK_TARGET_CPU_TYPE
).
tar \
237 --strip-components
=1 -C
$(WRKSRC
) gcc
239 mkdir
-p
$(GCC_BUILD_DIR_INITIAL
)
240 # these symlinks are very important, do not remove
241 rm -rf
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)/sys-include
242 mkdir
-p
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)
243 (cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
); \
244 ln
-s ..
/$(STAGING_HOST2TARGET
)/usr
/include sys-include
)
245 rm -rf
${TOOLCHAIN_DIR}/usr
/$(GNU_TARGET_NAME
)/lib
246 (cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
); \
247 ln
-s ..
/$(STAGING_HOST2TARGET
)/usr
/lib lib
)
248 ifeq ($(ADK_TARGET_ARCH_SH
),y
)
249 ifeq ($(ADK_TARGET_CPU_SH_J2
),y
)
250 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . mj2
)
252 ifeq ($(ADK_TARGET_CPU_SH_SH2
),y
)
253 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m2
)
255 ifeq ($(ADK_TARGET_CPU_SH_SH2A
),y
)
256 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m2a
)
258 ifeq ($(ADK_TARGET_CPU_SH_SH3
),y
)
259 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m3
)
261 ifeq ($(ADK_TARGET_CPU_SH_SH4
),y
)
262 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m4
)
264 ifeq ($(ADK_TARGET_CPU_SH_SH4A
),y
)
265 (cd
${STAGING_TARGET_DIR}/ && ln
-sf . m4a
)
268 $(SED
) '/k prot/agcc_cv_libc_provides_ssp=yes' $(WRKBUILD
)/gcc
/configure
269 cd
$(GCC_BUILD_DIR_INITIAL
); \
270 PATH
='$(TARGET_PATH)' \
273 CFLAGS
="-O0 -g0 -fomit-frame-pointer" \
274 CXXFLAGS
="-O0 -g0 -fomit-frame-pointer" \
275 $(WRKBUILD
)/configure \
277 ${GCC_TLS_CONFOPTS} \
278 --enable-languages
=c \
286 $(GCC_BUILD_DIR_INITIAL
)/.compiled
: $(GCC_BUILD_DIR_INITIAL
)/.configured
287 ifeq ($(ADK_TOOLCHAIN_GCC_OLD
),y
)
288 PATH
='$(TARGET_PATH)' \
289 $(MAKE
) ${GCC_MAKEOPTS} -C
$(GCC_BUILD_DIR_INITIAL
) all-gcc
291 PATH
='$(TARGET_PATH)' \
292 $(MAKE
) ${GCC_MAKEOPTS} -C
$(GCC_BUILD_DIR_INITIAL
) all-gcc all-target-libgcc
296 $(WRKBUILD
)/.configured
: $(GCC_BUILD_DIR_INITIAL
)/.compiled
297 ifeq ($(ADK_TOOLCHAIN_GCC_OLD
),y
)
298 PATH
='$(TARGET_PATH)' \
299 $(MAKE
) -C
$(GCC_BUILD_DIR_INITIAL
) install-gcc
301 PATH
='$(TARGET_PATH)' \
302 $(MAKE
) -C
$(GCC_BUILD_DIR_INITIAL
) install-gcc install-target-libgcc
304 # required for newlib
305 (cd
$(TOOLCHAIN_DIR
)/usr
/bin
&& \
306 ln
-sf
$(GNU_TARGET_NAME
)-gcc
$(GNU_TARGET_NAME
)-cc \
310 $(WRKBUILD
)/.compiled
:
311 mkdir
-p
$(GCC_BUILD_DIR_FINAL
)
312 cd
$(GCC_BUILD_DIR_FINAL
); \
313 PATH
='$(TARGET_PATH)' \
316 CFLAGS_FOR_TARGET
='$(TARGET_CFLAGS)' \
317 CXXFLAGS_FOR_TARGET
='$(TARGET_CXXFLAGS)' \
318 $(WRKBUILD
)/configure \
320 ${GCC_FINAL_CONFOPTS} \
321 --enable-languages
=$(LANGUAGES
) \
322 --with-build-sysroot
='$${prefix}/${STAGING_HOST2TARGET}' \
323 --with-sysroot
='$${prefix}/${STAGING_HOST2TARGET}'
324 PATH
='$(TARGET_PATH)' $(MAKE
) -C
$(GCC_BUILD_DIR_FINAL
) configure-host
325 cd
$(GCC_BUILD_DIR_FINAL
); \
326 PATH
='$(TARGET_PATH)' \
327 $(MAKE
) ${GCC_MAKEOPTS} all
330 $(WRKBUILD
)/.installed
: $(WRKBUILD
)/.compiled
331 cd
$(GCC_BUILD_DIR_FINAL
); \
332 PATH
='$(TARGET_PATH)' \
334 # remove duplicate tools, convert hardlinks to symlinks
336 cd
$(TOOLCHAIN_DIR
)/usr
/$(GNU_TARGET_NAME
)/bin
; \
337 for app in
ar as c
++ g
++ gcc
ld ld.gold
ld.bfd nm objcopy objdump ranlib
strip; do \
338 ln
-sf ..
/..
/bin
/$(GNU_TARGET_NAME
)-$${app} $${app}; \
340 (cd
$(TOOLCHAIN_DIR
)/usr
/bin
&& \
341 ln
-sf
$(GNU_TARGET_NAME
)-gcc
$(GNU_TARGET_NAME
)-gcc-
${PKG_VERSION} && \
342 ln
-sf
$(GNU_TARGET_NAME
)-g
++ $(GNU_TARGET_NAME
)-g
++-${PKG_VERSION} \
347 ifeq ($(ADK_TARGET_CPU_CF
),y
)
348 find
$(STAGING_TARGET_DIR
) -name libgcc.a
-print | while read t
; do
$(GNU_TARGET_NAME
)-ar dv
"$t" _ctors.o
; done
350 # remove any libiberty.a, breaking package/binutils later
351 -rm $(STAGING_TARGET_DIR
)/usr
/lib
/libiberty.a
352 # cleanup unneeded docs
353 rm -rf
$(TOOLCHAIN_DIR
)/usr
/share
354 # cleanup unneeded libtool files
355 -find
$(STAGING_TARGET_DIR
) $(STAGING_HOST_DIR
) -name \
*.la
-exec
rm {} \
;
356 # strip target libs and host tools for toolchain builds in non-Debug mode
358 PATH
="$(TARGET_PATH)" debug
='0' prefix='${TARGET_CROSS}' ${BASH} ${SCRIPT_DIR}/rstrip.sh \
359 $(STAGING_TARGET_DIR
) $(TOOLCHAIN_DIR
)/usr
/lib
/gcc
/$(GNU_TARGET_NAME
)
360 debug
='0' prefix=' ' ${BASH} ${SCRIPT_DIR}/rstrip.sh
$(TOOLCHAIN_DIR
)/usr
/bin
364 include ${ADK_TOPDIR}/mk
/toolchain.mk