Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add clang14 for IGC #3

Merged
merged 11 commits into from
Dec 3, 2024
Merged
175 changes: 175 additions & 0 deletions classes/clang14.bbclass
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
# Add the necessary override
CCACHE_COMPILERCHECK:toolchain-clang14 ?= "%compiler% -v"
HOST_CC_ARCH:prepend:toolchain-clang14 = "-target ${HOST_SYS} "
CC:toolchain-clang14 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
CXX:toolchain-clang14 = "${CCACHE}${HOST_PREFIX}clang++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
CPP:toolchain-clang14 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -E"
CCLD:toolchain-clang14 = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
RANLIB:toolchain-clang14 = "${HOST_PREFIX}llvm-ranlib"
AR:toolchain-clang14 = "${HOST_PREFIX}llvm-ar"
NM:toolchain-clang14 = "${HOST_PREFIX}llvm-nm"
OBJDUMP:toolchain-clang14 = "${HOST_PREFIX}llvm-objdump"
OBJCOPY:toolchain-clang14 = "${HOST_PREFIX}llvm-objcopy"
STRIP:toolchain-clang14 = "${HOST_PREFIX}llvm-strip"
STRINGS:toolchain-clang14 = "${HOST_PREFIX}llvm-strings"
READELF:toolchain-clang14 = "${HOST_PREFIX}llvm-readelf"

LTO:toolchain-clang14 = "${@bb.utils.contains('DISTRO_FEATURES', 'thin-lto', '-flto=thin', '-flto -fuse-ld=lld', d)}"
PACKAGE_DEBUG_SPLIT_STYLE:toolchain-clang14 = "debug-without-src"

COMPILER_RT ??= ""
COMPILER_RT:class-native = "-rtlib=libgcc ${UNWINDLIB}"
COMPILER_RT:armeb = "-rtlib=libgcc ${UNWINDLIB}"
COMPILER_RT:libc-klibc = "-rtlib=libgcc ${UNWINDLIB}"

UNWINDLIB ??= ""
UNWINDLIB:class-native = "--unwindlib=libgcc"
UNWINDLIB:armeb = "--unwindlib=libgcc"
UNWINDLIB_libc-klibc = "--unwindlib=libgcc"

LIBCPLUSPLUS ??= ""
LIBCPLUSPLUS:armv5 = "-stdlib=libstdc++"

CXXFLAGS:append:toolchain-clang14 = " ${LIBCPLUSPLUS}"
LDFLAGS:append:toolchain-clang14 = " ${COMPILER_RT} ${LIBCPLUSPLUS}"

TUNE_CCARGS:remove:toolchain-clang14 = "-meb"
TUNE_CCARGS:remove:toolchain-clang14 = "-mel"
TUNE_CCARGS:append:toolchain-clang14 = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", " -mbig-endian", " -mlittle-endian", d)}"

# Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes
TUNE_CCARGS:remove:toolchain-clang14 = "\
-mcpu=cortex-a57.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a72.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a15.cortex-a7${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a17.cortex-a7${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a72.cortex-a35${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a73.cortex-a53${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a75.cortex-a55${TUNE_CCARGS_MARCH_OPTS} \
-mcpu=cortex-a76.cortex-a55${TUNE_CCARGS_MARCH_OPTS}"
TUNE_CCARGS:append:toolchain-clang14 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa72-cortexa53 cortexa57-cortexa53 cortexa73-cortexa53", " -mcpu=cortex-a53${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang14 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa15-cortexa7 cortexa17-cortexa7", " -mcpu=cortex-a7${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang14 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa72-cortexa35", " -mcpu=cortex-a35${TUNE_CCARGS_MARCH_OPTS}", "", d)}"
TUNE_CCARGS:append:toolchain-clang14 = "${@bb.utils.contains_any("TUNE_FEATURES", "cortexa75-cortexa55 cortexa76-cortexa55", " -mcpu=cortex-a55${TUNE_CCARGS_MARCH_OPTS}", "", d)}"

# Workaround for https://github.com/llvm/llvm-project/issues/85699
# needed for 64bit rpi3/rpi4 machines
TUNE_CCARGS_MARCH_OPTS:append:toolchain-clang14 = "${@bb.utils.contains_any("DEFAULTTUNE", "cortexa72 cortexa53", "+nocrypto", "", d)}"

# Clang does not support octeontx2 processor
TUNE_CCARGS:remove:toolchain-clang14 = "-mcpu=octeontx2${TUNE_CCARGS_MARCH_OPTS}"

# LLD does not yet support relaxation for RISCV e.g. https://reviews.freebsd.org/D25210
TUNE_CCARGS:append:toolchain-clang14:riscv32 = " -mno-relax"
TUNE_CCARGS:append:toolchain-clang14:riscv64 = " -mno-relax"

# Reconcile some ppc anamolies
TUNE_CCARGS:remove:toolchain-clang14:powerpc = "-mhard-float -mno-spe"
TUNE_CCARGS:append:toolchain-clang14:libc-musl:powerpc64 = " -mlong-double-64"
TUNE_CCARGS:append:toolchain-clang14:libc-musl:powerpc64le = " -mlong-double-64"
TUNE_CCARGS:append:toolchain-clang14:libc-musl:powerpc = " -mlong-double-64"
# usrmerge workaround
TUNE_CCARGS:append:toolchain-clang14 = "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-prefix=/usr", "", d)}"

TUNE_CCARGS:append:toolchain-clang14 = " -Qunused-arguments"

LDFLAGS:append:toolchain-clang14:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2"
LDFLAGS:append:toolchain-clang14:class-nativesdk:x86 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux.so.2"
LDFLAGS:append:toolchain-clang14:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1"

LDFLAGS:toolchain-clang14:class-nativesdk = "${BUILDSDK_LDFLAGS} \
-Wl,-rpath-link,${STAGING_LIBDIR}/.. \
-Wl,-rpath,${libdir}/.. "

# Enable lld globally"
LDFLAGS:append:toolchain-clang14 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' -fuse-ld=lld', '', d)}"

# Remove gcc specific -fcanon-prefix-map option, added in gcc-13+
# clang does not support it yet
DEBUG_PREFIX_MAP:remove:toolchain-clang14 = "-fcanon-prefix-map"

# choose between 'gcc' 'clang' an empty '' can be used as well
TOOLCHAIN ??= "gcc"
# choose between 'gnu' 'llvm'
TC_CXX_RUNTIME ??= "gnu"
#TC_CXX_RUNTIME:toolchain-gcc = "gnu"
TC_CXX_RUNTIME:armeb = "gnu"
TC_CXX_RUNTIME:armv5 = "gnu"

TOOLCHAIN:class-native = "gcc"
TOOLCHAIN:class-nativesdk = "gcc"
TOOLCHAIN:class-cross-canadian = "gcc"
TOOLCHAIN:class-crosssdk = "gcc"
TOOLCHAIN:class-cross = "gcc"

OVERRIDES =. "${@['', 'toolchain-${TOOLCHAIN}:']['${TOOLCHAIN}' != '']}"
OVERRIDES =. "${@['', 'runtime-${TC_CXX_RUNTIME}:']['${TC_CXX_RUNTIME}' != '']}"
OVERRIDES[vardepsexclude] += "TOOLCHAIN TC_CXX_RUNTIME"


YOCTO_ALTERNATE_EXE_PATH:toolchain-clang14:class-target = "${STAGING_BINDIR}/llvm-config"
YOCTO_ALTERNATE_LIBDIR:toolchain-clang14:class-target = "/${BASELIB}"

#YOCTO_ALTERNATE_EXE_PATH:toolchain-clang14:class-target[export] = "1"
#YOCTO_ALTERNATE_LIBDIR:toolchain-clang14:class-target[export] = "1"

#DEPENDS:append:toolchain-clang14:class-target = " clang14-cross-${TARGET_ARCH} "
#DEPENDS:remove:toolchain-clang14:allarch = "clang14-cross-${TARGET_ARCH}"

def clang_base_deps(d):
if not d.getVar('INHIBIT_DEFAULT_DEPS', False):
if not oe.utils.inherits(d, 'allarch') :
ret = " ${MLPREFIX}clang14-cross-${TARGET_ARCH} virtual/libc "
if (d.getVar('TC_CXX_RUNTIME').find('android') != -1):
ret += " libcxx"
return ret
if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1):
ret += " compiler-rt14"
elif (d.getVar('COMPILER_RT').find('-rtlib=compiler-rt') != -1):
ret += " compiler-rt14 "
else:
ret += " libgcc "
if (d.getVar('TC_CXX_RUNTIME').find('llvm') != -1):
ret += " libcxx"
elif (d.getVar('COMPILER_RT').find('--unwindlib=libunwind') != -1):
ret += " libcxx "
elif (d.getVar('LIBCPLUSPLUS').find('-stdlib=libc++') != -1):
ret += " libcxx "
else:
ret += " virtual/${TARGET_PREFIX}compilerlibs "
return ret
return ""

BASE_DEFAULT_DEPS:append:class-target:toolchain-clang14:class-target = " ${@clang_base_deps(d)}"
BASE_DEFAULT_DEPS:append:class-native:toolchain-clang14:runtime-llvm = " libcxx-native compiler-rt14-native"
BASE_DEFAULT_DEPS:append:class-nativesdk:toolchain-clang14:runtime-llvm = " clang14-native nativesdk-libcxx nativesdk-compiler-rt14"

# do_populate_sysroot needs STRIP
POPULATESYSROOTDEPS:toolchain-clang14:class-target = "${MLPREFIX}clang14-cross-${TARGET_ARCH}:do_populate_sysroot"

cmake_do_generate_toolchain_file:append:toolchain-clang14 () {
cat >> ${WORKDIR}/toolchain.cmake <<EOF
set( CMAKE_CLANG_TIDY ${HOST_PREFIX}clang-tidy )
EOF
sed -i 's/ -mmusl / /g' ${WORKDIR}/toolchain.cmake
}

RECIPESYSROOTFUNCS = ""
RECIPESYSROOTFUNCS:toolchain-clang14 = "recipe_sysroot_check_ld_is_lld"

recipe_sysroot_check_ld_is_lld () {
if ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'true', 'false', d)} && \
[ -e ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld.lld ]; then
ln -srf ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld.lld ${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld
fi
}
do_prepare_recipe_sysroot[postfuncs] += "${RECIPESYSROOTFUNCS}"
#
# dump recipes which still use gcc
#python __anonymous() {
# toolchain = d.getVar("TOOLCHAIN")
# if not toolchain or toolchain == "clang" or 'class-target' not in d.getVar('OVERRIDES').split(':'):
# return
# pkgn = d.getVar("PN")
# bb.warn("%s - %s" % (pkgn, toolchain))
#}
5 changes: 5 additions & 0 deletions conf/layer.conf
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,8 @@ LAYERRECOMMENDS_clang-revival-layer = "intel"
LLVM17VERSION = "17.0.6"
LLVM16VERSION = "16.0.6"
LLVM15VERSION = "15.0.7"
LLVM14VERSION = "14.0.6"

# vulkan-sdk-1.3.290.0
SPIRV_HEADERS_SRCREV = "2acb319af38d43be3ea76bfabf3998e5281d8d12"
SPIRV_TOOLS_SRCREV = "0cfe9e7219148716dfd30b37f4d21753f098707a"
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ DEPENDS:remove = "libva"
DEPENDS:append = " libva-initial"

PV = "24.35.30872.32"
PR = "r1"
SRC_URI:remove = "git://github.com/intel/compute-runtime.git;protocol=https;branch=releases/24.26"
SRC_URI:prepend = "git://github.com/intel/compute-runtime.git;protocol=https;branch=releases/24.35 "
SRCREV = "0361ca456469bed559af08e4f731c5b8754c76f1"
Expand All @@ -15,3 +16,5 @@ EXTRA_OECMAKE += " \
-DNEO_CURRENT_PLATFORMS_SUPPORT=TRUE \
-DNEO_FORCE_ENABLE_PLATFORMS_FOR_OCLOC=TRUE \
"

PACKAGECONFIG = "levelzero"
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
DEPENDS:remove = "clang clang-cross-x86_64"
DEPENDS:append = " clang15 clang15-cross-x86_64"
DEPENDS:remove = "clang clang-cross-x86_64 opencl-clang"
DEPENDS:append = " clang14 clang14-cross-x86_64 opencl-clang14"

RDEPENDS:${PN}:remove = "opencl-clang"
RDEPENDS:${PN}:append = " opencl-clang14"

EXTRA_OECMAKE:remove = "-DIGC_OPTION__LLVM_PREFERRED_VERSION=${LLVMVERSION}"
EXTRA_OECMAKE:append = " -DIGC_OPTION__LLVM_PREFERRED_VERSION=${LLVM15VERSION}"
EXTRA_OECMAKE:append = " -DIGC_OPTION__LLVM_PREFERRED_VERSION=${LLVM14VERSION}"

PV = "1.0.17537.24"
PR = "r1"
SRC_URI:remove = "git://github.com/intel/intel-graphics-compiler.git;protocol=https;name=igc;branch=releases/igc-1.0.17193"
SRC_URI:prepend = "git://github.com/intel/intel-graphics-compiler.git;protocol=https;name=igc;branch=releases/igc-1.0.17537 "
SRCREV_igc = "36a6b4e5190a181df613ab4cc6db5115ca8d56f8"
SRCREV_vc = "8d2e809368443305155370573f3c6db8279ed87d"
SRCREV_spirv-tools = "${SPIRV_TOOLS_SRCREV}"
SRCREV_spirv-headers = "${SPIRV_HEADERS_SRCREV}"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
DEPENDS += "python3-pyyaml-native"
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
From 5aea653e611b59c70e529a1bd71885a509831557 Mon Sep 17 00:00:00 2001
From: Anuj Mittal <[email protected]>
Date: Tue, 1 Aug 2023 11:15:31 +0800
Subject: [PATCH] cl_headers/CMakeLists.txt: use clang from native sysroot

Allow clang to be found in target sysroot for target builds and dont try
to compile cross binaries, we do that ourselves.

Upstream-Status: Inappropriate [oe-specific]
Signed-off-by: Anuj Mittal <[email protected]>
---
CMakeLists.txt | 8 ++++----
cl_headers/CMakeLists.txt | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5864009..60ba39e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,10 +35,10 @@ set(CMAKE_MODULE_PATH

include(CMakeFunctions)

-if(CMAKE_CROSSCOMPILING AND OPENCL_CLANG_BUILD_EXTERNAL)
- include(CrossCompile)
- llvm_create_cross_target(${PROJECT_NAME} NATIVE "" Release)
-endif()
+#if(CMAKE_CROSSCOMPILING AND OPENCL_CLANG_BUILD_EXTERNAL)
+# include(CrossCompile)
+# llvm_create_cross_target(${PROJECT_NAME} NATIVE "" Release)
+#endif()

option(LLVMSPIRV_INCLUDED_IN_LLVM
"Set to ON if libLLVMSPIRVLib is linked into libLLVM" ON)
diff --git a/cl_headers/CMakeLists.txt b/cl_headers/CMakeLists.txt
index 16cabb7..4423536 100644
--- a/cl_headers/CMakeLists.txt
+++ b/cl_headers/CMakeLists.txt
@@ -1,6 +1,6 @@
set(CL_HEADERS_LIB cl_headers)
if(USE_PREBUILT_LLVM)
- find_program(CLANG_COMMAND clang PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH)
+ find_program(CLANG_COMMAND clang PATHS ${LLVM_TOOLS_BINARY_DIR})
else()
set(CLANG_COMMAND $<TARGET_FILE:clang>)
endif()
--
2.37.3

Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
From 43c806ef321b1f677a49d28c89fb7ffecf539c2d Mon Sep 17 00:00:00 2001
From: Tim Creech <[email protected]>
Date: Wed, 28 Jun 2023 03:45:51 -0400
Subject: [PATCH 2/2] Request native clang only when cross-compiling (#464)

* Request native clang only when cross-compiling

LLVM_USE_HOST_TOOLS may be set if LLVM is configured with
LLVM_OPTIMIZED_TABLEGEN, which does not necessarily indicate
cross-compilation or that clang will only execute on the target.

By checking that CMAKE_CROSSCOMPILING is set, we ensure that we only
build/use clang again if necessary for host execution.

* fixup: CMAKE_CROSSCOMPILING implies LLVM_USE_HOST_TOOLS

Co-authored-by: Wenju He <[email protected]>

* fixup: also use CMAKE_CROSSCOMPILING in top-level CMakeLists.txt

---------

Co-authored-by: Wenju He <[email protected]>

Upstream-Status: Backport [https://github.com/intel/opencl-clang/commit/53843eee13cfb2357919ee02714a43bef1af0f86]
Signed-off-by: Anuj Mittal <[email protected]>
---
CMakeLists.txt | 2 +-
cl_headers/CMakeLists.txt | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e772de9..5864009 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,7 +35,7 @@ set(CMAKE_MODULE_PATH

include(CMakeFunctions)

-if(LLVM_USE_HOST_TOOLS AND OPENCL_CLANG_BUILD_EXTERNAL)
+if(CMAKE_CROSSCOMPILING AND OPENCL_CLANG_BUILD_EXTERNAL)
include(CrossCompile)
llvm_create_cross_target(${PROJECT_NAME} NATIVE "" Release)
endif()
diff --git a/cl_headers/CMakeLists.txt b/cl_headers/CMakeLists.txt
index 18296c2..16cabb7 100644
--- a/cl_headers/CMakeLists.txt
+++ b/cl_headers/CMakeLists.txt
@@ -4,7 +4,7 @@ if(USE_PREBUILT_LLVM)
else()
set(CLANG_COMMAND $<TARGET_FILE:clang>)
endif()
-if(LLVM_USE_HOST_TOOLS AND NOT OPENCL_CLANG_BUILD_EXTERNAL)
+if(CMAKE_CROSSCOMPILING AND NOT OPENCL_CLANG_BUILD_EXTERNAL)
build_native_tool(clang CLANG_COMMAND)
endif()

--
2.37.3

31 changes: 31 additions & 0 deletions dynamic-layers/intel/recipes-opencl/opencl-clang/opencl-clang.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
SUMMARY = "Common clang is a thin wrapper library around clang"
DESCRIPTION = "Common clang has OpenCL-oriented API and is capable \
to compile OpenCL C kernels to SPIR-V modules."

LICENSE = "NCSA"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e8a15bf1416762a09ece07e44c79118c"

SRC_URI = "git://github.com/intel/opencl-clang.git;branch=${BRANCH};protocol=https \
file://0002-Request-native-clang-only-when-cross-compiling-464.patch \
file://0001-cl_headers-CMakeLists.txt-use-clang-from-native-sysr.patch \
"
S = "${WORKDIR}/git"

inherit cmake

COMPATIBLE_HOST = '(x86_64).*-linux'
COMPATIBLE_HOST:libc-musl = "null"

EXTRA_OECMAKE += "\
-DLLVM_TABLEGEN_EXE=${STAGING_BINDIR_NATIVE}/llvm-tblgen \
-DCMAKE_SKIP_RPATH=TRUE \
"

do_install:append:class-native() {
install -d ${D}${bindir}
install -m 0755 ${B}/bin/linux_resource_linker ${D}${bindir}/
}

INSANE_SKIP:${PN} = "buildpaths"

BBCLASSEXTEND = "native nativesdk"
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
require opencl-clang.inc

SRCREV = "470cf0018e1ef6fc92eda1356f5f31f7da452abc"

BRANCH = "ocl-open-140"

EXTRA_OECMAKE += "-DPREFERRED_LLVM_VERSION=${LLVM14VERSION}"

DEPENDS += "clang14 spirv-llvm-translator-llvm14"
DEPENDS:append:class-target = " opencl-clang14-native"
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
require opencl-clang.inc

SRCREV = "58242977b4092cf5eb94a10dd144691c12c87001"

BRANCH = "ocl-open-150"

EXTRA_OECMAKE += "-DPREFERRED_LLVM_VERSION=${LLVM15VERSION}"

DEPENDS += "clang15 spirv-llvm-translator-llvm15"
DEPENDS:append:class-target = " opencl-clang15-native"
Loading