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 | |
| 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>
| -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}" |
