diff options
author | Jagadeesh Krishnanjanappa <workjagadeesh@gmail.com> | 2022-03-31 02:46:45 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-03-31 17:52:59 +0100 |
commit | ee5f9d9fdd7d09aa3a86a19d07e3e64851ddc686 (patch) | |
tree | c7631f0a975de356aa5282ebcdd47d17af335eb1 /meta | |
parent | 90862733ed0da3738554cf51c35e687412840c5f (diff) | |
download | poky-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.bbclass | 1 | ||||
-rw-r--r-- | meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template | 31 | ||||
-rwxr-xr-x | meta/recipes-devtools/cmake/cmake/cmake-setup.py | 33 | ||||
-rw-r--r-- | meta/recipes-devtools/cmake/cmake_3.22.3.bb | 7 |
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 @@ | |||
1 | set(SDK_INSTALL_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..") | ||
2 | set(HOST_SYSROOT "${SDK_INSTALL_DIR}/sysroots/@OECORE_SDK_SYS") | ||
3 | set(TARGET_SYSROOT "${SDK_INSTALL_DIR}/sysroots/@OECORE_TARGET_SYS") | ||
4 | set(HOST_BIN "${HOST_SYSROOT}/usr/bin") | ||
5 | set(TOOLCHAIN_NAME "@OECORE_TARGET_ALIAS") | ||
6 | set(GCC_DIR "${HOST_BIN}/${TOOLCHAIN_NAME}") | ||
7 | |||
8 | set(CMAKE_SYSTEM_NAME Linux) | ||
9 | set(CMAKE_SYSTEM_PROCESSOR "@OECORE_TARGET_ARCH") | ||
10 | |||
11 | set(CMAKE_C_COMPILER "${GCC_DIR}/${TOOLCHAIN_NAME}-gcc") | ||
12 | set(CMAKE_CXX_COMPILER "${GCC_DIR}/${TOOLCHAIN_NAME}-g++") | ||
13 | |||
14 | set(ARCH_FLAGS "@OECORE_TUNE_CCARGS") | ||
15 | set(CMAKE_C_FLAGS "${ARCH_FLAGS}" CACHE STRING "" FORCE ) | ||
16 | set(CMAKE_CXX_FLAGS "${ARCH_FLAGS}" CACHE STRING "" FORCE ) | ||
17 | set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE ) | ||
18 | set(CMAKE_LDFLAGS_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE ) | ||
19 | |||
20 | set(CMAKE_SYSROOT "${TARGET_SYSROOT}") | ||
21 | |||
22 | set(CMAKE_FIND_ROOT_PATH "${TARGET_SYSROOT}" ) | ||
23 | |||
24 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) | ||
25 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) | ||
26 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) | ||
27 | set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY ) | ||
28 | |||
29 | set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "") | ||
30 | |||
31 | set(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 | |||
3 | import os | ||
4 | import string | ||
5 | import sys | ||
6 | |||
7 | class Template(string.Template): | ||
8 | delimiter = "@" | ||
9 | |||
10 | class 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 | |||
21 | try: | ||
22 | sysroot = os.environ['OECORE_NATIVE_SYSROOT'] | ||
23 | except KeyError: | ||
24 | print("Not in environment setup, bailing") | ||
25 | sys.exit(1) | ||
26 | |||
27 | template_file = os.path.join(sysroot, 'usr/share/cmake/SDKToolchainConfig.cmake.template') | ||
28 | cross_file = os.path.join(sysroot, 'usr/share/cmake/%s-toolchain.cmake' % (os.path.basename(os.environ["OECORE_TARGET_SYSROOT"]))) | ||
29 | with 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 | ||
7 | SRC_URI:append:class-nativesdk = " \ | 7 | SRC_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 | ||
47 | FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}" | 54 | FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}" |