diff options
author | Cyber Knight <cyberknight755@gmail.com> | 2023-05-07 06:08:51 +0800 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2024-02-04 14:56:40 +0800 |
commit | 6b76a33b965f6f3425386f1551641eb5fdbe6874 (patch) | |
tree | e5c45857a84306eaf876c9f5df4638daa0ff5499 | |
parent | a116e62226ef47e48c036519288348ab25db6da2 (diff) |
kernelscripts: Allow devices to use GCC
- This patch is heavily inspired by [1].
- It was made to facilitate support for devices that build the kernel with GCC.
[1]: https://gerrit.aospa.co/c/AOSPA/android_vendor_pa/+/8673
Also squashes:
Author: Mashopy <eliasgheeraert@gmail.com>
Date: Mon Apr 24 18:40:07 2023 +0200
kernelscript: Enforce KERNEL_CROSS_COMPILE to aarch64-linux-gnu- and properly support vdso32
KERNEL_CROSS_COMPILE should not been set to arm-eabi- since arm64 kernels expect an aarch64 GNU binary for CROSS_COMPILER.
CROSS_COMPILE_ARM32 is currently used by Linux kernels who have an outdated vdso backport like 4.9, but is unused on
Linux kernel 4.19 and newer since it got renamed to CROSS_COMPILE_COMPAT during vdso32 bringup.
Add CROSS_COMPILE_COMPAT variable for properly support vdso32 on these newer Linux kernels.
This also fix an issue where some CC related features like SCS, STACKPROTECTOR, INIT_STACK_ZERO and KASAN weren't available
on some kernels despite that some of them depends over clang binary and not GNU binary.
Also make sure llvm-objcopy is used as some kernels try to look for aarch64-linux-gnu-objcopy and fail to build.
Change-Id: I093a6c7f798c0d111bd04d1cf089c4d5bc9a3028
Change-Id: Icaa9251a8e151d92f84fa10fa14b6b7becfd8927
-rwxr-xr-x | build.sh | 2 | ||||
-rwxr-xr-x | buildkernel.sh | 2 | ||||
-rw-r--r-- | kernel_definitions.mk | 21 |
3 files changed, 16 insertions, 9 deletions
@@ -171,7 +171,7 @@ export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging cd ${ROOT_DIR} -export CLANG_TRIPLE CROSS_COMPILE CROSS_COMPILE_ARM32 ARCH SUBARCH +export CLANG_TRIPLE CROSS_COMPILE CROSS_COMPILE_ARM32 CROSS_COMPILE_COMPAT ARCH SUBARCH # Restore the previously saved CC argument that might have been overridden by # the BUILD_CONFIG. diff --git a/buildkernel.sh b/buildkernel.sh index e71e454..d1243c1 100755 --- a/buildkernel.sh +++ b/buildkernel.sh @@ -33,7 +33,7 @@ export KERNEL_PREBUILT_DIR=$(readlink -m ${KERNEL_DIR}/../ship_prebuilt) export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private) export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist}) export UNSTRIPPED_DIR=${KERNEL_MODULES_OUT}/unstripped -export CLANG_TRIPLE CROSS_COMPILE CROSS_COMPILE_ARM32 ARCH SUBARCH +export CLANG_TRIPLE CROSS_COMPILE CROSS_COMPILE_ARM32 CROSS_COMPILE_COMPAT ARCH SUBARCH #Setting up for build PREBUILT_KERNEL_IMAGE=$(basename ${TARGET_PREBUILT_INT_KERNEL}) diff --git a/kernel_definitions.mk b/kernel_definitions.mk index 91e16e6..38991ef 100644 --- a/kernel_definitions.mk +++ b/kernel_definitions.mk @@ -89,11 +89,12 @@ KERNEL_CONFIG_OVERRIDE := CONFIG_ANDROID_BINDER_IPC_32BIT=y endif endif -TARGET_KERNEL_CROSS_COMPILE_PREFIX := $(strip $(TARGET_KERNEL_CROSS_COMPILE_PREFIX)) -ifeq ($(TARGET_KERNEL_CROSS_COMPILE_PREFIX),) -KERNEL_CROSS_COMPILE := arm-eabi- +ifeq ($(KERNEL_NEW_GCC_SUPPORT),true) +KERNEL_CROSS_COMPILE := aarch64-none-linux-gnu- +KERNEL_CROSS_COMPILE_ARM32 := arm-none-eabi- else -KERNEL_CROSS_COMPILE := $(shell pwd)/$(TARGET_TOOLS_PREFIX) +KERNEL_CROSS_COMPILE := aarch64-linux-gnu- +KERNEL_CROSS_COMPILE_ARM32 := arm-linux-gnueabi- endif ifeq ($(TARGET_PREBUILT_KERNEL),) @@ -107,7 +108,12 @@ CLANG_ARCH := arm-linux-gnueabi- endif cc_args := -ifeq ($(KERNEL_LLVM_SUPPORT),true) +ifeq ($(KERNEL_NEW_GCC_SUPPORT), true) #Using gcc compiler + KERNEL_ARM64_GCC_BIN := $(SOURCE_ROOT)/prebuilts/gcc/$(BUILD_OS)-x86/aarch64/aarch64-none-linux-gnu/bin + KERNEL_ARM32_GCC_BIN := $(SOURCE_ROOT)/prebuilts/gcc/$(BUILD_OS)-x86/arm/arm-none-eabi/bin + $(warning "Using latest gcc" $(KERNEL_ARM64_GCC_BIN)/gcc) + cc_args := PATH=$(KERNEL_ARM64_GCC_BIN):$(KERNEL_ARM32_GCC_BIN):$$PATH +else ifeq ($(KERNEL_LLVM_SUPPORT),true) ifeq ($(KERNEL_SD_LLVM_SUPPORT), true) #Using sd-llvm compiler ifeq ($(shell echo $(SDCLANG_PATH) | head -c 1),/) KERNEL_LLVM_BIN := $(SDCLANG_PATH) @@ -124,7 +130,7 @@ ifeq ($(KERNEL_LLVM_SUPPORT),true) $(warning "Not using latest aosp-llvm" $(KERNEL_LLVM_BIN)/clang) endif endif - cc_args := PATH=$(KERNEL_LLVM_BIN):$$PATH CC=clang REAL_CC=clang CLANG_TRIPLE=$(CLANG_ARCH) AR=llvm-ar LD=ld.lld NM=llvm-nm LLVM=1 LLVM_IAS=1 + cc_args := PATH=$(KERNEL_LLVM_BIN):$$PATH CC=clang REAL_CC=clang CLANG_TRIPLE=$(CLANG_ARCH) AR=llvm-ar LD=ld.lld NM=llvm-nm OBJCOPY=llvm-objcopy LLVM=1 LLVM_IAS=1 else ifeq ($(strip $(KERNEL_GCC_NOANDROID_CHK)),0) KERNEL_CFLAGS := KCFLAGS=-mno-android @@ -278,7 +284,8 @@ define build-kernel MAKE_PATH=$(MAKE_PATH)\ ARCH=$(KERNEL_ARCH) \ CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) \ - CROSS_COMPILE_ARM32=$(TARGET_KERNEL_CROSS_COMPILE_ARM32_PREFIX) \ + CROSS_COMPILE_ARM32=$(KERNEL_CROSS_COMPILE_ARM32) \ + CROSS_COMPILE_COMPAT=$(KERNEL_CROSS_COMPILE_ARM32) \ KERNEL_MODULES_OUT=$(3) \ KERNEL_HEADERS_INSTALL=$(4) \ HEADERS_INSTALL=$(5) \ |