Skip to content

Commit

Permalink
Add compilers for bookworm (#64)
Browse files Browse the repository at this point in the history
* initial work

* fix patches

* add bookworm to ci

* actually update ci

* add bookworm sysroot to ci

* add bookworm host

* add raspi-bookworm

* link against libatomic in test

* add raspi-bookworm consts
  • Loading branch information
rzblue authored Nov 12, 2024
1 parent a30881e commit 799c560
Show file tree
Hide file tree
Showing 21 changed files with 1,024 additions and 7 deletions.
418 changes: 416 additions & 2 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .github/workflows/ci.yml.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
matrix:
host:
[
{%- if not ((target.os == "bullseye" and target.port == "arm64") or target.os == "raspi-bullseye") %}
{%- if not ((target.os in ["bullseye", "bookworm"] and target.port == "arm64") or (target.os in ["raspi-bullseye", "raspi-bookworm"])) %}
{
os-cfg: linux_x86_64,
runner: ubuntu-latest,
Expand Down
64 changes: 64 additions & 0 deletions .github/workflows/targets.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,18 @@
{
"os": "raspi-bullseye",
"port": "armhf"
},
{
"os": "bookworm",
"port": "armhf"
},
{
"os": "bookworm",
"port": "arm64"
},
{
"os": "raspi-bookworm",
"port": "armhf"
}
],
"single_stage": [
Expand All @@ -33,6 +45,18 @@
{
"os": "raspi-bullseye",
"port": "armhf"
},
{
"os": "bookworm",
"port": "armhf"
},
{
"os": "bookworm",
"port": "arm64"
},
{
"os": "raspi-bookworm",
"port": "armhf"
}
],
"two_stage": [
Expand Down Expand Up @@ -75,6 +99,46 @@
"os": "bullseye",
"port": "arm64"
}
},
{
"target": {
"os": "raspi-bookworm",
"port": "armhf"
},
"host": {
"os": "linux",
"port": "x86_64"
}
},
{
"target": {
"os": "roborio-academic",
"port": "cortexa9_vfpv3"
},
"host": {
"os": "raspi-bookworm",
"port": "armhf"
}
},
{
"target": {
"os": "bookworm",
"port": "arm64"
},
"host": {
"os": "linux",
"port": "x86_64"
}
},
{
"target": {
"os": "roborio-academic",
"port": "cortexa9_vfpv3"
},
"host": {
"os": "bookworm",
"port": "arm64"
}
}
]
}
3 changes: 3 additions & 0 deletions hosts/bookworm_arm64.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export WPI_HOST_NAME=Linux
export WPI_HOST_TUPLE=aarch64-bookworm-linux-gnu
export WPI_HOST_PREFIX=/tmp/frc
3 changes: 3 additions & 0 deletions hosts/raspi-bookworm_armhf.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export WPI_HOST_NAME=Linux
export WPI_HOST_TUPLE=armv6-bookworm-linux-gnueabihf
export WPI_HOST_PREFIX=/tmp/frc
232 changes: 232 additions & 0 deletions patches/gcc/12.2.0/0010-debian-gcc-multiarch.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
# DP: - Remaining multiarch patches, not yet submitted upstream.
# DP: - Add MULTIARCH_DIRNAME definitions for multilib configurations,
# DP: which are used for the non-multilib builds.

2013-06-12 Matthias Klose <[email protected]>

* config/i386/t-linux64: Set MULTIARCH_DIRNAME.
* config/i386/t-kfreebsd: Set MULTIARCH_DIRNAME.
* config.gcc (i[34567]86-*-linux* | x86_64-*-linux*): Prepend
i386/t-linux to $tmake_file;
set default ABI to N64 for mips64el.
* config/mips/t-linux64: Set MULTIARCH_DIRNAME.
* config/rs6000/t-linux64: Set MULTIARCH_DIRNAME.
* config/s390/t-linux64: Set MULTIARCH_DIRNAME.
* config/sparc/t-linux64: Set MULTIARCH_DIRNAME.
* gcc/config/mips/mips.h: (/usr)/lib as default path.

--- a/gcc/config/sh/t-linux
+++ b/gcc/config/sh/t-linux
@@ -1,3 +1,11 @@
MULTILIB_DIRNAMES=
MULTILIB_MATCHES=
+
+ifneq (,$(findstring sh4,$(target)))
+MULTILIB_OSDIRNAMES = .:sh4-linux-gnu sh4_nofpu-linux-gnu:sh4-linux-gnu
+MULTIARCH_DIRNAME = $(call if_multiarch,sh4-linux-gnu)
+else
+MULTILIB_OSDIRNAMES = .:sh3-linux-gnu sh3_nofpu-linux-gnu:sh3-linux-gnu
+MULTIARCH_DIRNAME = $(call if_multiarch,sh3-linux-gnu)
+endif
MULTILIB_EXCEPTIONS=m1 mb/m1 m2a
--- a/gcc/config/sparc/t-linux64
+++ b/gcc/config/sparc/t-linux64
@@ -27,3 +27,5 @@ MULTILIB_OPTIONS = m64/m32
MULTILIB_DIRNAMES = 64 32
MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:sparc64-linux-gnu)
MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:sparc-linux-gnu)
+
+MULTIARCH_DIRNAME = $(call if_multiarch,sparc$(if $(findstring 64,$(target)),64)-linux-gnu)
--- a/gcc/config/s390/t-linux64
+++ b/gcc/config/s390/t-linux64
@@ -9,3 +9,5 @@ MULTILIB_OPTIONS = m64/m31
MULTILIB_DIRNAMES = 64 32
MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
+
+MULTIARCH_DIRNAME = $(call if_multiarch,s390$(if $(findstring s390x,$(target)),x)-linux-gnu)
--- a/gcc/config/rs6000/t-linux64
+++ b/gcc/config/rs6000/t-linux64
@@ -31,6 +31,8 @@ MULTILIB_EXTRA_OPTS :=
MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)

+MULTIARCH_DIRNAME = $(call if_multiarch,powerpc$(if $(findstring 64,$(target)),64)-linux-gnu)
+
rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.cc
$(COMPILE) $<
$(POSTCOMPILE)
--- a/gcc/config/i386/t-linux64
+++ b/gcc/config/i386/t-linux64
@@ -36,3 +36,13 @@ MULTILIB_DIRNAMES = $(patsubst m%, %,
MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
+
+ifneq (,$(findstring x86_64,$(target)))
+ ifneq (,$(findstring biarchx32.h,$(tm_include_list)))
+ MULTIARCH_DIRNAME = $(call if_multiarch,x86_64-linux-gnux32)
+ else
+ MULTIARCH_DIRNAME = $(call if_multiarch,x86_64-linux-gnu)
+ endif
+else
+ MULTIARCH_DIRNAME = $(call if_multiarch,i386-linux-gnu)
+endif
--- a/gcc/config/i386/t-kfreebsd
+++ b/gcc/config/i386/t-kfreebsd
@@ -1,5 +1,9 @@
-MULTIARCH_DIRNAME = $(call if_multiarch,i386-kfreebsd-gnu)
+ifeq (,$(MULTIARCH_DIRNAME))
+ MULTIARCH_DIRNAME = $(call if_multiarch,i386-kfreebsd-gnu)
+endif

# MULTILIB_OSDIRNAMES are set in t-linux64.
KFREEBSD_OS = $(filter kfreebsd%, $(word 3, $(subst -, ,$(target))))
MULTILIB_OSDIRNAMES := $(filter-out mx32=%,$(subst linux,$(KFREEBSD_OS),$(MULTILIB_OSDIRNAMES)))
+
+MULTIARCH_DIRNAME := $(subst linux,$(KFREEBSD_OS),$(MULTIARCH_DIRNAME))
--- a/gcc/config/mips/t-linux64
+++ b/gcc/config/mips/t-linux64
@@ -18,9 +18,22 @@

MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
MULTILIB_DIRNAMES = n32 32 64
+MIPS_R6 = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),r6)
+MIPS_32 = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),32)
+MIPS_ISA = $(if $(findstring r6, $(firstword $(subst -, ,$(target)))),isa)
MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft)
MULTILIB_OSDIRNAMES = \
../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+
+ifneq (,$(findstring abin32,$(target)))
+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT))
+else
+ifneq (,$(findstring abi64,$(target)))
+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)64$(MIPS_R6)$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
+else
+MULTIARCH_DIRNAME = $(call if_multiarch,mips$(MIPS_ISA)$(MIPS_32)$(MIPS_R6)$(MIPS_EL)-linux-gnu$(MIPS_SOFT))
+endif
+endif
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2574,6 +2574,11 @@ mips*-*-linux*) # Linux MIPS, either
default_mips_arch=mips64r6
enable_mips_multilibs="yes"
;;
+ mipsisa64r6*-*-linux-gnuabi64)
+ default_mips_abi=64
+ default_mips_arch=mips64r6
+ enable_mips_multilibs="yes"
+ ;;
mipsisa64r6*-*-linux*)
default_mips_abi=n32
default_mips_arch=mips64r6
@@ -2593,6 +2598,10 @@ mips*-*-linux*) # Linux MIPS, either
default_mips_abi=64
enable_mips_multilibs="yes"
;;
+ mips64*-*-linux-gnuabi64 | mipsisa64*-*-linux-gnuabi64)
+ default_mips_abi=64
+ enable_mips_multilibs="yes"
+ ;;
mips64*-*-linux* | mipsisa64*-*-linux*)
default_mips_abi=n32
enable_mips_multilibs="yes"
@@ -3631,6 +3640,16 @@ case ${target} in
;;
esac

+# non-glibc systems
+case ${target} in
+*-linux-musl*)
+ tmake_file="${tmake_file} t-musl"
+ ;;
+*-linux-uclibc*)
+ tmake_file="${tmake_file} t-uclibc"
+ ;;
+esac
+
# Build mkoffload tool
case ${target} in
*-intelmic-* | *-intelmicemul-*)
@@ -5704,7 +5723,7 @@ case ${target} in
;;
i[34567]86-*-linux* | x86_64-*-linux*)
extra_objs="${extra_objs} gnu-property.o"
- tmake_file="$tmake_file i386/t-linux i386/t-gnu-property"
+ tmake_file="i386/t-linux $tmake_file i386/t-gnu-property"
;;
i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
tmake_file="$tmake_file i386/t-kfreebsd"
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -3440,16 +3440,6 @@ struct GTY(()) machine_function {
#define PMODE_INSN(NAME, ARGS) \
(Pmode == SImode ? NAME ## _si ARGS : NAME ## _di ARGS)

-/* If we are *not* using multilibs and the default ABI is not ABI_32 we
- need to change these from /lib and /usr/lib. */
-#if MIPS_ABI_DEFAULT == ABI_N32
-#define STANDARD_STARTFILE_PREFIX_1 "/lib32/"
-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib32/"
-#elif MIPS_ABI_DEFAULT == ABI_64
-#define STANDARD_STARTFILE_PREFIX_1 "/lib64/"
-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/"
-#endif
-
/* Load store bonding is not supported by micromips and fix_24k. The
performance can be degraded for those targets. Hence, do not bond for
micromips or fix_24k. */
--- a/gcc/config/tilegx/t-tilegx
+++ b/gcc/config/tilegx/t-tilegx
@@ -1,6 +1,7 @@
MULTILIB_OPTIONS = m64/m32
MULTILIB_DIRNAMES = 64 32
-MULTILIB_OSDIRNAMES = ../lib ../lib32
+MULTILIB_OSDIRNAMES = ../lib$(call if_multiarch,:tilegx-linux-gnu) ../lib32$(call if_multiarch,:tilegx32-linux-gnu)
+MULTIARCH_DIRNAME = $(call if_multiarch,tilegx-linux-gnu)

LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
--- a/gcc/config/riscv/t-linux
+++ b/gcc/config/riscv/t-linux
@@ -1,3 +1,5 @@
# Only XLEN and ABI affect Linux multilib dir names, e.g. /lib32/ilp32d/
MULTILIB_DIRNAMES := $(patsubst rv32%,lib32,$(patsubst rv64%,lib64,$(MULTILIB_DIRNAMES)))
MULTILIB_OSDIRNAMES := $(patsubst lib%,../lib%,$(MULTILIB_DIRNAMES))
+
+MULTIARCH_DIRNAME := $(call if_multiarch,$(firstword $(subst -, ,$(target)))-linux-gnu)
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -545,7 +545,7 @@ BUILD_SYSTEM_HEADER_DIR = `echo @BUILD_S
STMP_FIXINC = @STMP_FIXINC@

# Test to see whether <limits.h> exists in the system header files.
-LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ]
+LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h -o -f $(BUILD_SYSTEM_HEADER_DIR)/$(MULTIARCH_DIRNAME)/limits.h ]

# Directory for prefix to system directories, for
# each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
--- a/gcc/config/aarch64/t-aarch64-linux
+++ b/gcc/config/aarch64/t-aarch64-linux
@@ -22,7 +22,7 @@ LIB1ASMSRC = aarch64/lib1funcs.asm
LIB1ASMFUNCS = _aarch64_sync_cache_range

AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
-MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
+MULTILIB_OSDIRNAMES = mabi.lp64=../lib$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)

MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32)
--- a/gcc/config/arc/t-multilib-linux
+++ b/gcc/config/arc/t-multilib-linux
@@ -23,3 +23,6 @@ MULTILIB_DIRNAMES = hs archs hs38 hs38_l
# Aliases:
MULTILIB_MATCHES += mcpu?arc700=mA7
MULTILIB_MATCHES += mcpu?arc700=mARC700
+
+MULTILIB_OSDIRNAMES =
+MULTIARCH_DIRNAME = $(call if_multiarch,arc-linux-gnu)
Loading

0 comments on commit 799c560

Please sign in to comment.