summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorJagadeesh Krishnanjanappa <workjagadeesh@gmail.com>2022-03-31 02:46:45 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-03-31 17:52:59 +0100
commitee5f9d9fdd7d09aa3a86a19d07e3e64851ddc686 (patch)
treec7631f0a975de356aa5282ebcdd47d17af335eb1 /meta
parent90862733ed0da3738554cf51c35e687412840c5f (diff)
downloadpoky-ee5f9d9fdd7d09aa3a86a19d07e3e64851ddc686.tar.gz
cmake: support to create per-toolchain cmake file in SDK
The patch creates ${MULTIMACH_TARGET_SYS}-toolchain.cmake file at ${SDK_INSTALL_DIR}/sysroots/${SDK_SYS}/usr/share/cmake/, which is per-toolchain CMake toolchain file containing arch-specific values and independent of OE environment variables. The file gets created after installing SDK toolchain installer ined by running "bitbake -c populate_sdk <image>". The changes are similar to meson-setup.py which is used to create arch-specific ${SDK_INSTALL_DIR}/sysroots/${SDK_SYS}/usr/share/meson/*-meson.cross [YOCTO #14644] Tested-by: Jan Dorniak <jaskij@gmail.com> (From OE-Core rev: 42e68397ec74b3cd8ae5df45355c8f6254b48cd8) Signed-off-by: Jagadeesh Krishnanjanappa <workjagadeesh@gmail.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/toolchain-scripts.bbclass1
-rw-r--r--meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template31
-rwxr-xr-xmeta/recipes-devtools/cmake/cmake/cmake-setup.py33
-rw-r--r--meta/recipes-devtools/cmake/cmake_3.22.3.bb7
4 files changed, 72 insertions, 0 deletions
diff --git a/meta/classes/toolchain-scripts.bbclass b/meta/classes/toolchain-scripts.bbclass
index 8f914cce27..1d7c703748 100644
--- a/meta/classes/toolchain-scripts.bbclass
+++ b/meta/classes/toolchain-scripts.bbclass
@@ -109,6 +109,7 @@ toolchain_shared_env_script () {
109 echo 'export OECORE_SDK_VERSION="${SDK_VERSION}"' >> $script 109 echo 'export OECORE_SDK_VERSION="${SDK_VERSION}"' >> $script
110 echo 'export ARCH=${ARCH}' >> $script 110 echo 'export ARCH=${ARCH}' >> $script
111 echo 'export CROSS_COMPILE=${TARGET_PREFIX}' >> $script 111 echo 'export CROSS_COMPILE=${TARGET_PREFIX}' >> $script
112 echo 'export OECORE_TUNE_CCARGS="${TUNE_CCARGS}"' >> $script
112 113
113 cat >> $script <<EOF 114 cat >> $script <<EOF
114 115
diff --git a/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template b/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template
new file mode 100644
index 0000000000..c69569a843
--- /dev/null
+++ b/meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template
@@ -0,0 +1,31 @@
1set(SDK_INSTALL_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..")
2set(HOST_SYSROOT "${SDK_INSTALL_DIR}/sysroots/@OECORE_SDK_SYS")
3set(TARGET_SYSROOT "${SDK_INSTALL_DIR}/sysroots/@OECORE_TARGET_SYS")
4set(HOST_BIN "${HOST_SYSROOT}/usr/bin")
5set(TOOLCHAIN_NAME "@OECORE_TARGET_ALIAS")
6set(GCC_DIR "${HOST_BIN}/${TOOLCHAIN_NAME}")
7
8set(CMAKE_SYSTEM_NAME Linux)
9set(CMAKE_SYSTEM_PROCESSOR "@OECORE_TARGET_ARCH")
10
11set(CMAKE_C_COMPILER "${GCC_DIR}/${TOOLCHAIN_NAME}-gcc")
12set(CMAKE_CXX_COMPILER "${GCC_DIR}/${TOOLCHAIN_NAME}-g++")
13
14set(ARCH_FLAGS "@OECORE_TUNE_CCARGS")
15set(CMAKE_C_FLAGS "${ARCH_FLAGS}" CACHE STRING "" FORCE )
16set(CMAKE_CXX_FLAGS "${ARCH_FLAGS}" CACHE STRING "" FORCE )
17set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE )
18set(CMAKE_LDFLAGS_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE )
19
20set(CMAKE_SYSROOT "${TARGET_SYSROOT}")
21
22set(CMAKE_FIND_ROOT_PATH "${TARGET_SYSROOT}" )
23
24set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
25set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
26set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
27set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
28
29set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "")
30
31set(CMAKE_PROGRAM_PATH "${HOST_SYSROOT}/usr/bin" CACHE STRING "" FORCE)
diff --git a/meta/recipes-devtools/cmake/cmake/cmake-setup.py b/meta/recipes-devtools/cmake/cmake/cmake-setup.py
new file mode 100755
index 0000000000..af587a44cc
--- /dev/null
+++ b/meta/recipes-devtools/cmake/cmake/cmake-setup.py
@@ -0,0 +1,33 @@
1#!/usr/bin/env python3
2
3import os
4import string
5import sys
6
7class Template(string.Template):
8 delimiter = "@"
9
10class Environ():
11 def __getitem__(self, name):
12 if name == "OECORE_SDK_SYS":
13 return os.path.basename(os.environ["OECORE_NATIVE_SYSROOT"])
14 elif name == "OECORE_TARGET_SYS":
15 return os.path.basename(os.environ["OECORE_TARGET_SYSROOT"])
16 elif name == "OECORE_TARGET_ALIAS":
17 return os.path.basename(os.environ["TARGET_PREFIX"].strip("-"))
18 else:
19 return os.environ[name]
20
21try:
22 sysroot = os.environ['OECORE_NATIVE_SYSROOT']
23except KeyError:
24 print("Not in environment setup, bailing")
25 sys.exit(1)
26
27template_file = os.path.join(sysroot, 'usr/share/cmake/SDKToolchainConfig.cmake.template')
28cross_file = os.path.join(sysroot, 'usr/share/cmake/%s-toolchain.cmake' % (os.path.basename(os.environ["OECORE_TARGET_SYSROOT"])))
29with open(template_file) as in_file:
30 template = in_file.read()
31 output = Template(template).substitute(Environ())
32 with open(cross_file, "w") as out_file:
33 out_file.write(output)
diff --git a/meta/recipes-devtools/cmake/cmake_3.22.3.bb b/meta/recipes-devtools/cmake/cmake_3.22.3.bb
index 36c6357dd8..e111dd3c5a 100644
--- a/meta/recipes-devtools/cmake/cmake_3.22.3.bb
+++ b/meta/recipes-devtools/cmake/cmake_3.22.3.bb
@@ -6,6 +6,8 @@ DEPENDS += "curl expat zlib libarchive xz ncurses bzip2"
6 6
7SRC_URI:append:class-nativesdk = " \ 7SRC_URI:append:class-nativesdk = " \
8 file://OEToolchainConfig.cmake \ 8 file://OEToolchainConfig.cmake \
9 file://SDKToolchainConfig.cmake.template \
10 file://cmake-setup.py \
9 file://environment.d-cmake.sh \ 11 file://environment.d-cmake.sh \
10 file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch \ 12 file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch \
11" 13"
@@ -42,6 +44,11 @@ do_install:append:class-nativesdk() {
42 44
43 mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d 45 mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
44 install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake.sh 46 install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake.sh
47
48 # install cmake-setup.py to create arch-specific toolchain cmake file from template
49 install -m 0644 ${WORKDIR}/SDKToolchainConfig.cmake.template ${D}${datadir}/cmake/
50 install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d
51 install -m 0755 ${WORKDIR}/cmake-setup.py ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
45} 52}
46 53
47FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}" 54FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}"