* [OE-core][PATCH] cmake: support to create per-toolchain cmake file in SDK
@ 2022-03-31 2:46 Jagadeesh Krishnanjanappa
0 siblings, 0 replies; only message in thread
From: Jagadeesh Krishnanjanappa @ 2022-03-31 2:46 UTC (permalink / raw)
To: openembedded-core; +Cc: Jagadeesh Krishnanjanappa
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>
Signed-off-by: Jagadeesh Krishnanjanappa <workjagadeesh@gmail.com>
---
meta/classes/toolchain-scripts.bbclass | 1 +
.../cmake/SDKToolchainConfig.cmake.template | 31 +++++++++++++++++
.../cmake/cmake/cmake-setup.py | 33 +++++++++++++++++++
meta/recipes-devtools/cmake/cmake_3.22.3.bb | 7 ++++
4 files changed, 72 insertions(+)
create mode 100644 meta/recipes-devtools/cmake/cmake/SDKToolchainConfig.cmake.template
create mode 100755 meta/recipes-devtools/cmake/cmake/cmake-setup.py
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 () {
echo 'export OECORE_SDK_VERSION="${SDK_VERSION}"' >> $script
echo 'export ARCH=${ARCH}' >> $script
echo 'export CROSS_COMPILE=${TARGET_PREFIX}' >> $script
+ echo 'export OECORE_TUNE_CCARGS="${TUNE_CCARGS}"' >> $script
cat >> $script <<EOF
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 @@
+set(SDK_INSTALL_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../..")
+set(HOST_SYSROOT "${SDK_INSTALL_DIR}/sysroots/@OECORE_SDK_SYS")
+set(TARGET_SYSROOT "${SDK_INSTALL_DIR}/sysroots/@OECORE_TARGET_SYS")
+set(HOST_BIN "${HOST_SYSROOT}/usr/bin")
+set(TOOLCHAIN_NAME "@OECORE_TARGET_ALIAS")
+set(GCC_DIR "${HOST_BIN}/${TOOLCHAIN_NAME}")
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR "@OECORE_TARGET_ARCH")
+
+set(CMAKE_C_COMPILER "${GCC_DIR}/${TOOLCHAIN_NAME}-gcc")
+set(CMAKE_CXX_COMPILER "${GCC_DIR}/${TOOLCHAIN_NAME}-g++")
+
+set(ARCH_FLAGS "@OECORE_TUNE_CCARGS")
+set(CMAKE_C_FLAGS "${ARCH_FLAGS}" CACHE STRING "" FORCE )
+set(CMAKE_CXX_FLAGS "${ARCH_FLAGS}" CACHE STRING "" FORCE )
+set(CMAKE_ASM_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE )
+set(CMAKE_LDFLAGS_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE )
+
+set(CMAKE_SYSROOT "${TARGET_SYSROOT}")
+
+set(CMAKE_FIND_ROOT_PATH "${TARGET_SYSROOT}" )
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
+
+set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "")
+
+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 @@
+#!/usr/bin/env python3
+
+import os
+import string
+import sys
+
+class Template(string.Template):
+ delimiter = "@"
+
+class Environ():
+ def __getitem__(self, name):
+ if name == "OECORE_SDK_SYS":
+ return os.path.basename(os.environ["OECORE_NATIVE_SYSROOT"])
+ elif name == "OECORE_TARGET_SYS":
+ return os.path.basename(os.environ["OECORE_TARGET_SYSROOT"])
+ elif name == "OECORE_TARGET_ALIAS":
+ return os.path.basename(os.environ["TARGET_PREFIX"].strip("-"))
+ else:
+ return os.environ[name]
+
+try:
+ sysroot = os.environ['OECORE_NATIVE_SYSROOT']
+except KeyError:
+ print("Not in environment setup, bailing")
+ sys.exit(1)
+
+template_file = os.path.join(sysroot, 'usr/share/cmake/SDKToolchainConfig.cmake.template')
+cross_file = os.path.join(sysroot, 'usr/share/cmake/%s-toolchain.cmake' % (os.path.basename(os.environ["OECORE_TARGET_SYSROOT"])))
+with open(template_file) as in_file:
+ template = in_file.read()
+ output = Template(template).substitute(Environ())
+ with open(cross_file, "w") as out_file:
+ 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"
SRC_URI:append:class-nativesdk = " \
file://OEToolchainConfig.cmake \
+ file://SDKToolchainConfig.cmake.template \
+ file://cmake-setup.py \
file://environment.d-cmake.sh \
file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch \
"
@@ -42,6 +44,11 @@ do_install:append:class-nativesdk() {
mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake.sh
+
+ # install cmake-setup.py to create arch-specific toolchain cmake file from template
+ install -m 0644 ${WORKDIR}/SDKToolchainConfig.cmake.template ${D}${datadir}/cmake/
+ install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d
+ install -m 0755 ${WORKDIR}/cmake-setup.py ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
}
FILES:${PN}:append:class-nativesdk = " ${SDKPATHNATIVE}"
--
2.17.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2022-03-31 2:46 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-31 2:46 [OE-core][PATCH] cmake: support to create per-toolchain cmake file in SDK Jagadeesh Krishnanjanappa
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox