From bf56be1e86677f05c96898be418d312bff022b17 Mon Sep 17 00:00:00 2001 From: YBronst <157227982+YBronst@users.noreply.github.com> Date: Sat, 4 Jul 2026 02:15:33 +0300 Subject: [PATCH] Full implementation of GCC 16.1.0 All necessary compilation conditions to use gcc 16.1 are included. --- BaseTools/Conf/tools_def.template | 64 +++++++++++++++++++++++++++++++ buildme | 8 ++-- ebuild.sh | 16 ++++---- hebuild.sh | 18 +++++---- makeall.sh | 4 +- xbuildme | 4 +- 6 files changed, 91 insertions(+), 23 deletions(-) diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index 4fc8bd2ba7..20bf42afd0 100644 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -134,6 +134,7 @@ DEFINE GCC53_X64_PREFIX = ENV(GCC53_BIN) DEFINE GCC131_X64_PREFIX = ENV(GCC131_BIN) DEFINE GCC151_X64_PREFIX = ENV(GCC151_BIN) DEFINE GCC152_X64_PREFIX = ENV(GCC152_BIN) +DEFINE GCC161_X64_PREFIX = ENV(GCC161_BIN) DEFINE UNIX_IASL_BIN = ENV(IASL_PREFIX)iasl DEFINE WIN_IASL_BIN = ENV(IASL_PREFIX)iasl.exe @@ -2134,6 +2135,13 @@ DEFINE GCC152_IA32_X64_DLINK_FLAGS = DEF(GCC152_IA32_X64_DLINK_COMMON),--entr DEFINE GCC152_X64_DLINK_FLAGS = DEF(GCC152_IA32_X64_DLINK_FLAGS),-melf_x86_64,-znoexecstack,--oformat=elf64-x86-64,-pie DEFINE GCC152_ASM_FLAGS = DEF(GCC49_ASM_FLAGS) +DEFINE GCC161_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS) -fno-unwind-tables -Wno-misleading-indentation -mms-bitfields -fno-ms-extensions -ffreestanding -fno-exceptions +DEFINE GCC161_IA32_X64_DLINK_COMMON = -nostdlib -Wl,--no-warn-rwx-segments,--gc-sections,-n,-q,--gc-sections,-z,common-page-size=0x40,--defsym=PECOFF_HEADER_SIZE=0x240,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds +DEFINE GCC161_IA32_X64_ASLDLINK_FLAGS = DEF(GCC161_IA32_X64_DLINK_COMMON),--entry,ReferenceAcpiTable,-u,ReferenceAcpiTable +DEFINE GCC161_IA32_X64_DLINK_FLAGS = DEF(GCC161_IA32_X64_DLINK_COMMON),--entry,$(IMAGE_ENTRY_POINT),-u,$(IMAGE_ENTRY_POINT),-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map +DEFINE GCC161_X64_DLINK_FLAGS = DEF(GCC161_IA32_X64_DLINK_FLAGS),-melf_x86_64,-znoexecstack,--oformat=elf64-x86-64,-pie +DEFINE GCC161_ASM_FLAGS = DEF(GCC49_ASM_FLAGS) + #################################################################################### # # LLVM - This configuration is used to compile under OSX to produce @@ -2769,6 +2777,62 @@ RELEASE_GCC152_X64_CC_FLAGS = DEF(GCC152_X64_CC_FLAGS) -Os -Werror DEBUG_GCC152_X64_CXX_FLAGS = DEF(GCC152_X64_CC_FLAGS) -g3 -O0 RELEASE_GCC152_X64_CXX_FLAGS = DEF(GCC152_X64_CC_FLAGS) -Os -Werror +#################################################################################### +# +# GCC 16.1 - This configuration is used to compile under Linux/MacOSX to produce +# PE/COFF binaries using GCC 16.1. +# +#################################################################################### +*_GCC161_*_*_FAMILY = GCC +*_GCC161_*_*_BUILDRULEORDER = nasm S s + +*_GCC161_*_MAKE_PATH = make + +*_GCC161_*_*_DLL = ENV(GCC161_DLL) + +*_GCC161_X64_GCCLINK_PREFIX = -Wl, + +*_GCC161_*_ASL_PATH = DEF(UNIX_IASL_BIN) + +*_GCC161_*_NASM_PATH = ENV(NASM_PREFIX)nasm + +*_GCC161_*_PP_FLAGS = DEF(GCC_PP_FLAGS) +*_GCC161_*_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS) +*_GCC161_*_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) +*_GCC161_*_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS) +*_GCC161_*_APP_FLAGS = +*_GCC161_*_ASL_FLAGS = DEF(IASL_FLAGS) +*_GCC161_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) + +################## +# GCC161 X64 definitions +################## +*_GCC161_X64_OBJCOPY_PATH = DEF(GCC161_X64_PREFIX)objcopy +*_GCC161_X64_CC_PATH = DEF(GCC161_X64_PREFIX)gcc +*_GCC161_X64_CXX_PATH = DEF(GCC161_X64_PREFIX)g++ +*_GCC161_X64_SLINK_PATH = DEF(GCC161_X64_PREFIX)gcc-ar +*_GCC161_X64_DLINK_PATH = DEF(GCC161_X64_PREFIX)gcc +*_GCC161_X64_ASLDLINK_PATH = DEF(GCC161_X64_PREFIX)gcc +*_GCC161_X64_ASM_PATH = DEF(GCC161_X64_PREFIX)gcc +*_GCC161_X64_PP_PATH = DEF(GCC161_X64_PREFIX)gcc +*_GCC161_X64_VFRPP_PATH = DEF(GCC161_X64_PREFIX)gcc +*_GCC161_X64_ASLCC_PATH = DEF(GCC161_X64_PREFIX)gcc +*_GCC161_X64_ASLPP_PATH = DEF(GCC161_X64_PREFIX)gcc +*_GCC161_X64_RC_PATH = DEF(GCC161_X64_PREFIX)objcopy + +*_GCC161_X64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m64 +*_GCC161_X64_ASLDLINK_FLAGS = DEF(GCC161_IA32_X64_ASLDLINK_FLAGS),-m,elf_x86_64 +*_GCC161_X64_ASM_FLAGS = DEF(GCC161_ASM_FLAGS) -m64 +*_GCC161_X64_DLINK_FLAGS = DEF(GCC161_X64_DLINK_FLAGS) DEF(GCC161_X64_CC_FLAGS) ENV(GCC161_X64_EXTRA_CC_FLAGS) +*_GCC161_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) +*_GCC161_X64_OBJCOPY_FLAGS = +*_GCC161_X64_NASM_FLAGS = -f elf64 + + DEBUG_GCC161_X64_CC_FLAGS = DEF(GCC161_X64_CC_FLAGS) -g3 -O0 +RELEASE_GCC161_X64_CC_FLAGS = DEF(GCC161_X64_CC_FLAGS) -Os -Werror + DEBUG_GCC161_X64_CXX_FLAGS = DEF(GCC161_X64_CC_FLAGS) -g3 -O0 +RELEASE_GCC161_X64_CXX_FLAGS = DEF(GCC161_X64_CC_FLAGS) -Os -Werror + # # # XCODE5 support diff --git a/buildme b/buildme index 71d72f3e85..108f2d1fe5 100755 --- a/buildme +++ b/buildme @@ -43,7 +43,7 @@ fi cd "$(dirname $([ -L $0 ] && readlink $0 || echo $0))" declare -r CLOVERROOT="$PWD" declare -r SYSNAME="$(uname)" -MYTOOLCHAIN=${1:-GCC152} +MYTOOLCHAIN=${1:-GCC161} revision=$(git describe --tags $(git rev-list --tags --max-count=1)) lsha1="not a git repo" pyversion=$(echo $COL_CYAN"Current Python version: "$COL_WHITE$($(which python3) --version)) @@ -122,9 +122,9 @@ checkTools() { if [[ "$SYSNAME" == Darwin ]]; then checkXCODE exportPaths - local GCC152_BIN="$PREFIX/cross/bin/x86_64-clover-linux-gnu-gcc" - if [[ $MYTOOLCHAIN == GCC* ]] && [[ ! -x "${GCC152_BIN}" ]]; then - if [[ $MYTOOLCHAIN == GCC152 ]]; then + local GCC161_BIN="$PREFIX/cross/bin/x86_64-clover-linux-gnu-gcc" + if [[ $MYTOOLCHAIN == GCC* ]] && [[ ! -x "${GCC161_BIN}" ]]; then + if [[ $MYTOOLCHAIN == GCC161 ]]; then cd "${CLOVERROOT}" ./build_gcc16.sh else diff --git a/ebuild.sh b/ebuild.sh index 8b83cfd24e..02d3718a6f 100755 --- a/ebuild.sh +++ b/ebuild.sh @@ -55,7 +55,7 @@ export PYTHON_COMMAND=python3 # if building through Xcode, then TOOLCHAIN_DIR is not defined # checking if it is where CloverGrowerPro put it #if [[ "$SYSNAME" == Linux ]]; then -# export TOOLCHAIN=GCC152 +# export TOOLCHAIN=GCC161 # TOOLCHAIN_DIR=${TOOLCHAIN_DIR:-/usr} #else # if [[ "$TOOLCHAIN" == XCLANG ]]; then @@ -255,6 +255,7 @@ usage() { print_option_help "-gcc131" "use GCC 13.1 toolchain, including gcc-14.2" print_option_help "-gcc151" "use GCC 15.1 toolchain" print_option_help "-gcc152" "use GCC 15.2 toolchain" + print_option_help "-gcc161" "use GCC 16.1 toolchain" # print_option_help "-unixgcc" "use UNIXGCC toolchain, unsupported" # print_option_help "-xcode" "use XCode 3.2 toolchain" print_option_help "-xcode5" "use XCode 5 toolchain, " @@ -324,6 +325,7 @@ checkCmdlineArguments() { -gcc131 | --gcc131) TOOLCHAIN=GCC131 ;; -gcc151 | --gcc151) TOOLCHAIN=GCC151 ;; -gcc152 | --gcc152) TOOLCHAIN=GCC152 ;; + -gcc161 | --gcc161) TOOLCHAIN=GCC161 ;; -xcode | --xcode ) TOOLCHAIN=XCODE32 ;; -x64 | --x64) # printf "\`%s' is deprecated because Clover is 64 bit only. This message will be removed soon\n" "$option" 1>&2 @@ -438,17 +440,17 @@ checkToolchain() { esac if [[ "$SYSNAME" == Linux ]]; then - export GCC152_BIN="$TOOLCHAIN_DIR/bin/" - if [[ ! -x "${GCC152_BIN}gcc" ]]; then + export GCC161_BIN="$TOOLCHAIN_DIR/bin/" + if [[ ! -x "${GCC161_BIN}gcc" ]]; then echo "No clover toolchain for Linux found !" >&2 echo "Install on your system or define the TOOLCHAIN_DIR variable." >&2 exit 1 fi else - export GCC152_BIN="$TOOLCHAIN_DIR/cross/bin/x86_64-clover-linux-gnu-" - if [[ $TOOLCHAIN == GCC* ]] && [[ ! -x "${GCC152_BIN}gcc" ]]; then + export GCC161_BIN="$TOOLCHAIN_DIR/cross/bin/x86_64-clover-linux-gnu-" + if [[ $TOOLCHAIN == GCC* ]] && [[ ! -x "${GCC161_BIN}gcc" ]]; then echo "No clover toolchain found !" >&2 - echo "Build it with the build_gcc15.sh script or define the TOOLCHAIN_DIR variable." >&2 + echo "Build it with the build_gcc16.sh script or define the TOOLCHAIN_DIR variable." >&2 exit 1 fi fi @@ -962,7 +964,7 @@ startBuildEpoch=$(date -u "+%s") checkCmdlineArguments $@ if [[ "$SYSNAME" == Linux ]]; then - export TOOLCHAIN=GCC152 + export TOOLCHAIN=GCC161 TOOLCHAIN_DIR=${TOOLCHAIN_DIR:-/usr} else if [[ "$TOOLCHAIN" == XCLANG ]]; then diff --git a/hebuild.sh b/hebuild.sh index 9d9948567e..1204659103 100755 --- a/hebuild.sh +++ b/hebuild.sh @@ -43,7 +43,7 @@ M_NOGRUB=0 M_APPLEHFS=0 # Default values -export TOOLCHAIN=GCC152 +export TOOLCHAIN=GCC161 export TARGETARCH=X64 export BUILDTARGET=RELEASE export BUILDTHREADS=$(( NUMBER_OF_CPUS + 1 )) @@ -55,7 +55,7 @@ export PYTHON_COMMAND=python3 # if building through Xcode, then TOOLCHAIN_DIR is not defined # checking if it is where CloverGrowerPro put it #if [[ "$SYSNAME" == Linux ]]; then -# export TOOLCHAIN=GCC152 +# export TOOLCHAIN=GCC161 # TOOLCHAIN_DIR=${TOOLCHAIN_DIR:-/usr} #else # if [[ "$TOOLCHAIN" == XCLANG ]]; then @@ -256,6 +256,7 @@ usage() { print_option_help "-gcc131" "use GCC 13.1 toolchain, including gcc-14.2" print_option_help "-gcc151" "use GCC 15.1 toolchain" print_option_help "-gcc152" "use GCC 15.2 toolchain" + print_option_help "-gcc161" "use GCC 16.1 toolchain" # print_option_help "-unixgcc" "use UNIXGCC toolchain, unsupported" # print_option_help "-xcode" "use XCode 3.2 toolchain" print_option_help "-xcode5" "use XCode 5 toolchain, " @@ -325,6 +326,7 @@ checkCmdlineArguments() { -gcc131 | --gcc131) TOOLCHAIN=GCC131 ;; -gcc151 | --gcc151) TOOLCHAIN=GCC151 ;; -gcc152 | --gcc152) TOOLCHAIN=GCC152 ;; + -gcc161 | --gcc161) TOOLCHAIN=GCC161 ;; -xcode | --xcode ) TOOLCHAIN=XCODE32 ;; -x64 | --x64) # printf "\`%s' is deprecated because Clover is 64 bit only. This message will be removed soon\n" "$option" 1>&2 @@ -439,17 +441,17 @@ checkToolchain() { esac if [[ "$SYSNAME" == Linux ]]; then - export GCC152_BIN="$TOOLCHAIN_DIR/bin/" - if [[ ! -x "${GCC152_BIN}gcc" ]]; then + export GCC161_BIN="$TOOLCHAIN_DIR/bin/" + if [[ ! -x "${GCC161_BIN}gcc" ]]; then echo "No clover toolchain for Linux found !" >&2 echo "Install on your system or define the TOOLCHAIN_DIR variable." >&2 exit 1 fi else - export GCC152_BIN="$TOOLCHAIN_DIR/cross/bin/x86_64-clover-linux-gnu-" - if [[ $TOOLCHAIN == GCC* ]] && [[ ! -x "${GCC152_BIN}gcc" ]]; then + export GCC161_BIN="$TOOLCHAIN_DIR/cross/bin/x86_64-clover-linux-gnu-" + if [[ $TOOLCHAIN == GCC* ]] && [[ ! -x "${GCC161_BIN}gcc" ]]; then echo "No clover toolchain found !" >&2 - echo "Build it with the build_gcc15.sh script or define the TOOLCHAIN_DIR variable." >&2 + echo "Build it with the build_gcc16.sh script or define the TOOLCHAIN_DIR variable." >&2 exit 1 fi fi @@ -956,7 +958,7 @@ startBuildEpoch=$(date -u "+%s") checkCmdlineArguments $@ if [[ "$SYSNAME" == Linux ]]; then - export TOOLCHAIN=GCC152 + export TOOLCHAIN=GCC161 TOOLCHAIN_DIR=${TOOLCHAIN_DIR:-/usr} else if [[ "$TOOLCHAIN" == XCLANG ]]; then diff --git a/makeall.sh b/makeall.sh index e9241c92a4..ac39a292c4 100755 --- a/makeall.sh +++ b/makeall.sh @@ -1,7 +1,7 @@ #!/bin/bash -./ebuild.sh -gcc152 -fr -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED -./ebuild.sh -gcc152 -fr -D NO_GRUB_DRIVERS_EMBEDDED +./ebuild.sh -gcc161 -fr -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED +./ebuild.sh -gcc161 -fr -D NO_GRUB_DRIVERS_EMBEDDED cd CloverPackage ./makepkg >log.txt ./makeiso diff --git a/xbuildme b/xbuildme index a88dd66fd0..dd36e4545e 100755 --- a/xbuildme +++ b/xbuildme @@ -84,12 +84,12 @@ fi # ====== Display Menu ====== echo -e "${COL_GREEN} ---------------------------------------------------------------------------------" echo -e "${COL_GREEN} 🍀 Clover r${revision} ${COL_WHITE}(SHA: 64d434947)" -echo -e "${COL_WHITE} Default TOOLCHAIN: ${COL_CYAN}GCC152${COL_WHITE}" +echo -e "${COL_WHITE} Default TOOLCHAIN: ${COL_CYAN}GCC161${COL_WHITE}" echo -e "${COL_WHITE} Switch to ${COL_CYAN}XCODE${COL_WHITE} select: ${COL_CYAN}build (with XCode)" echo -e "${COL_WHITE} Depending on your ${COL_CYAN}XCODE version${COL_WHITE} the Toolset will be ${COL_CYAN}automatically chosen" echo -e "${COL_GREEN} ---------------------- ${COL_CYAN}Current Python version: ${COL_WHITE}Python 3.13.7${COL_GREEN} --------------------${COL_RESET}" declare -r CLOVERROOT="$PWD" -declare -r MYTOOLCHAIN=${1:-GCC152} +declare -r MYTOOLCHAIN=${1:-GCC161} TOOLCHAIN_DIR=${TOOLCHAIN_DIR:-"$CLOVERROOT/toolchain"}