mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 03:47:02 -05:00
Introduce x86_64-linux-gnuabi32
Enable a 32-bit "native" toolchain on x86_64-*-linux-gnu and x86_64-*-mingw32, i.e., one that targets -m32 by default, despite supporting and potentially running in 64-bit mode, by appending abi32 to the triplet, and/or by setting the default ABI to 32 or m32. Adjust libada and gnattools build machinery to support this configuration in both bootstrap and non-bootstrap modes. Co-Authored-By: Alexandre Oliva <oliva@adacore.com> for gcc/ChangeLog * config.gcc [x86_64-*-*]: Match *abi32 target, default to m32 abi. Accept 32 or m32 for --with-abi. for gcc/ada/ChangeLog * gcc-interface/Make-lang.in (m32_target): Set. (not_m32_target, native_target, native_gnattools1): Set. (ADA_TOOLS_FLAGS_TO_PASS, gnattools): Handle x86_64 natives defaulting to -m32 as cross for gnattools. * gcc-interface/Makefile.in (target_cpu): Set to i686 for x86_64 configurations defaulting to -m32. for gnattools/ChangeLog * configure.ac (default_gnattools_target): Use gnattools-cross when not bootstrapping x86_64 configurations defaulting to -m32. * configure: Rebuild.
This commit is contained in:
committed by
Alexandre Oliva
parent
feaabf9735
commit
6686cfb7dc
@@ -190,10 +190,20 @@ GNATLS_FOR_HOST = $(subst gnatmake,gnatls,$(GNATMAKE))
|
||||
|
||||
# There are too many Ada sources to check against here. Let's
|
||||
# always force the recursive make.
|
||||
|
||||
# A native x86_64 compiler defaulting to -m32 is not suitable to build
|
||||
# 64bit host tools. Arrange to build the tools with the base compiler
|
||||
# in this case, as we do for cross configurations.
|
||||
|
||||
m32_target=$(filter x86_64%abi32, $(target))
|
||||
not_m32_target=$(if $(m32_target),,$(target))
|
||||
|
||||
ifeq ($(build), $(host))
|
||||
ifeq ($(host), $(target))
|
||||
# This is a regular native. So use the compiler from our current build
|
||||
# tree.
|
||||
native_target=$(filter $(host), $(target))
|
||||
|
||||
ifneq ($(and $(native_target), $(not_m32_target)),)
|
||||
# This is a regular native. Use the compiler from our
|
||||
# current build tree.
|
||||
ADA_TOOLS_FLAGS_TO_PASS=\
|
||||
CC="../../xgcc -B../../" \
|
||||
CXX="$(CXX)" \
|
||||
@@ -203,8 +213,8 @@ ifeq ($(build), $(host))
|
||||
GNATLINK="../../gnatlink" \
|
||||
GNATBIND="../../gnatbind"
|
||||
else
|
||||
# This is a regular cross compiler. Use the native compiler to compile
|
||||
# the tools.
|
||||
# This is a regular cross compiler or a 64bit native defaulting to -m32.
|
||||
# Use the base native compiler to compile the tools.
|
||||
|
||||
# put the host RTS dir first in the PATH to hide the default runtime
|
||||
# files that are among the sources
|
||||
@@ -790,8 +800,11 @@ gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) $(EXTRA_HOST_OBJS)
|
||||
+$(GCC_LINK) -o $@ $(CFLAGS) ada/b_gnatb.o $(GNATBIND_OBJS) $(EXTRA_HOST_OBJS) ggc-none.o libcommon-target.a $(LIBS) $(SYSLIBS) $(GNATLIB)
|
||||
|
||||
# use target-gcc target-gnatmake target-gnatbind target-gnatlink
|
||||
|
||||
native_gnattools1=$(if $(not_m32_target),gnattools1,gnattools1-re)
|
||||
|
||||
gnattools: $(CONFIG_H) prefix.o force
|
||||
$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1
|
||||
$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) $(native_gnattools1)
|
||||
$(MAKE) -C ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
|
||||
|
||||
regnattools:
|
||||
|
||||
@@ -358,6 +358,13 @@ ifeq ($(strip $(filter-out x86_64 linux-gnux32%, $(target_cpu) $(target_os))),)
|
||||
endif
|
||||
endif
|
||||
|
||||
# The x86_64-*abi32 compilers are x86_64 compilers defaulting to -m32
|
||||
ifeq ($(strip $(filter-out x86_64 %abi32, $(target_cpu) $(target_os))),)
|
||||
ifneq ($(strip $(MULTISUBDIR)),/64)
|
||||
target_cpu:=i686
|
||||
endif
|
||||
endif
|
||||
|
||||
# Configuration of host tools
|
||||
|
||||
# Under linux, host tools need to be linked with -ldl
|
||||
|
||||
@@ -678,6 +678,28 @@ i[34567]86-*-*)
|
||||
x86_64-*-darwin*)
|
||||
;;
|
||||
x86_64-*-*)
|
||||
# Pick a default with_abi and with_multilib_list for m32
|
||||
# restricted toolchains
|
||||
case ${target} in
|
||||
*abi32)
|
||||
case ${with_abi} in
|
||||
"" | 32 | m32)
|
||||
with_abi=m32
|
||||
;;
|
||||
*)
|
||||
echo "Invalid --with-abi=$with_abi for m32 target"
|
||||
exit 1
|
||||
esac
|
||||
case ${with_multilib_list} in
|
||||
default | *m32*)
|
||||
;;
|
||||
*)
|
||||
echo "Invalid multilib list for abi32 target"
|
||||
exit 1
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
case ${with_abi} in
|
||||
"")
|
||||
if test "x$with_multilib_list" = xmx32; then
|
||||
@@ -692,6 +714,9 @@ x86_64-*-*)
|
||||
x32 | mx32)
|
||||
tm_file="i386/biarchx32.h ${tm_file}"
|
||||
;;
|
||||
32 | m32)
|
||||
tm_defines="${tm_defines} TARGET_BI_ARCH=1"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown ABI used in --with-abi=$with_abi"
|
||||
exit 1
|
||||
|
||||
10
gnattools/configure
vendored
10
gnattools/configure
vendored
@@ -3683,6 +3683,16 @@ fi
|
||||
# ../gcc/ada/gcc-interface/config-lang.in as well.
|
||||
if test "x$cross_compiling/$build/$host" = "xno/$host/$target" ; then
|
||||
default_gnattools_target="gnattools-native"
|
||||
# When natively-building x86_64-*abi32 tools without bootstrap,
|
||||
# use the native toolchain to build gnattools, expecting its
|
||||
# libraries to be compatible with whichever multilib was used to
|
||||
# build other tools. This requires the compiler being built to be
|
||||
# gnatbind-compatible with the one used for the build.
|
||||
case $enable_bootstrap/$target in
|
||||
no/x86_64-*abi32)
|
||||
default_gnattools_target="gnattools-cross"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
default_gnattools_target="gnattools-cross"
|
||||
fi
|
||||
|
||||
@@ -125,6 +125,16 @@ AC_SUBST(LD_PICFLAG)
|
||||
# ../gcc/ada/gcc-interface/config-lang.in as well.
|
||||
if test "x$cross_compiling/$build/$host" = "xno/$host/$target" ; then
|
||||
default_gnattools_target="gnattools-native"
|
||||
# When natively-building x86_64-*abi32 tools without bootstrap,
|
||||
# use the native toolchain to build gnattools, expecting its
|
||||
# libraries to be compatible with whichever multilib was used to
|
||||
# build other tools. This requires the compiler being built to be
|
||||
# gnatbind-compatible with the one used for the build.
|
||||
case $enable_bootstrap/$target in
|
||||
no/x86_64-*abi32)
|
||||
default_gnattools_target="gnattools-cross"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
default_gnattools_target="gnattools-cross"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user