diff options
| author | Khem Raj <raj.khem@gmail.com> | 2025-04-28 14:26:16 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-05-01 14:22:53 +0100 |
| commit | c34bbe5fa9024655180c5949515e457ca0e74c78 (patch) | |
| tree | f41a1370f5a381cf2cca4b67f1025ef35ce72906 /meta/classes-recipe | |
| parent | 75436b4047b160ff1810253a83e52a07303e2103 (diff) | |
| download | poky-c34bbe5fa9024655180c5949515e457ca0e74c78.tar.gz | |
cmake.bbclass: Enhance to emit a native toolchain cmake file
Some components e.g. clang and its runtime needs the native toolchain
defines especially when doing nativesdk builds it uses
CROSS_TOOLCHAIN_FLAGS_NATIVE to pass native toolchain file, which is
then used to build native llvm tools needed during nativesdk builds
Moreover this would enable using OE built native toolchain e.g.
clang-native to build cmake based packages. e.g. libcxx and other llvm
runtime plus it can be used for build native packages which require clang
(From OE-Core rev: 79dc6a23234a34403157dec10d0cdd839ca76b3e)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes-recipe')
| -rw-r--r-- | meta/classes-recipe/cmake.bbclass | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/meta/classes-recipe/cmake.bbclass b/meta/classes-recipe/cmake.bbclass index b342deb671..449fe2bb44 100644 --- a/meta/classes-recipe/cmake.bbclass +++ b/meta/classes-recipe/cmake.bbclass | |||
| @@ -50,11 +50,34 @@ OECMAKE_C_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('CC', d)[1]}" | |||
| 50 | OECMAKE_CXX_COMPILER ?= "${@oecmake_map_compiler('CXX', d)[0]}" | 50 | OECMAKE_CXX_COMPILER ?= "${@oecmake_map_compiler('CXX', d)[0]}" |
| 51 | OECMAKE_CXX_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('CXX', d)[1]}" | 51 | OECMAKE_CXX_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('CXX', d)[1]}" |
| 52 | 52 | ||
| 53 | # Native C/C++ Compiler (without cpu arch/tune arguments) | ||
| 54 | OECMAKE_NATIVE_C_COMPILER ?= "${@oecmake_map_compiler('BUILD_CC', d)[0]}" | ||
| 55 | OECMAKE_NATIVE_C_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('BUILD_CC', d)[1]}" | ||
| 56 | OECMAKE_NATIVE_CXX_COMPILER ?= "${@oecmake_map_compiler('BUILD_CXX', d)[0]}" | ||
| 57 | OECMAKE_NATIVE_CXX_COMPILER_LAUNCHER ?= "${@oecmake_map_compiler('BUILD_CXX', d)[1]}" | ||
| 58 | OECMAKE_NATIVE_AR ?= "${BUILD_AR}" | ||
| 59 | OECMAKE_NATIVE_RANLIB ?= "${BUILD_RANLIB}" | ||
| 60 | OECMAKE_NATIVE_NM ?= "${BUILD_NM}" | ||
| 61 | |||
| 62 | # Native compiler flags | ||
| 63 | OECMAKE_NATIVE_C_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CFLAGS}" | ||
| 64 | OECMAKE_NATIVE_CXX_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CXXFLAGS}" | ||
| 65 | OECMAKE_NATIVE_C_FLAGS_RELEASE ?= "-DNDEBUG" | ||
| 66 | OECMAKE_NATIVE_CXX_FLAGS_RELEASE ?= "-DNDEBUG" | ||
| 67 | OECMAKE_NATIVE_C_LINK_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CPPFLAGS} ${BUILD_LDFLAGS}" | ||
| 68 | OECMAKE_NATIVE_CXX_LINK_FLAGS ?= "${BUILD_CC_ARCH} ${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}" | ||
| 69 | BUILD_CXXFLAGS += "${BUILD_CC_ARCH}" | ||
| 70 | BUILD_CFLAGS += "${BUILD_CC_ARCH}" | ||
| 71 | |||
| 53 | # clear compiler vars for allarch to avoid sig hash difference | 72 | # clear compiler vars for allarch to avoid sig hash difference |
| 54 | OECMAKE_C_COMPILER:allarch = "" | 73 | OECMAKE_C_COMPILER:allarch = "" |
| 55 | OECMAKE_C_COMPILER_LAUNCHER:allarch = "" | 74 | OECMAKE_C_COMPILER_LAUNCHER:allarch = "" |
| 56 | OECMAKE_CXX_COMPILER:allarch = "" | 75 | OECMAKE_CXX_COMPILER:allarch = "" |
| 57 | OECMAKE_CXX_COMPILER_LAUNCHER:allarch = "" | 76 | OECMAKE_CXX_COMPILER_LAUNCHER:allarch = "" |
| 77 | OECMAKE_NATIVE_C_COMPILER:allarch = "" | ||
| 78 | OECMAKE_NATIVE_C_COMPILER_LAUNCHER:allarch = "" | ||
| 79 | OECMAKE_NATIVE_CXX_COMPILER:allarch = "" | ||
| 80 | OECMAKE_NATIVE_CXX_COMPILER_LAUNCHER:allarch = "" | ||
| 58 | 81 | ||
| 59 | OECMAKE_RPATH ?= "" | 82 | OECMAKE_RPATH ?= "" |
| 60 | OECMAKE_PERLNATIVE_DIR ??= "" | 83 | OECMAKE_PERLNATIVE_DIR ??= "" |
| @@ -156,6 +179,41 @@ list(APPEND CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES ${includedir}) | |||
| 156 | list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES ${includedir}) | 179 | list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES ${includedir}) |
| 157 | 180 | ||
| 158 | EOF | 181 | EOF |
| 182 | cat > ${WORKDIR}/toolchain-native.cmake <<EOF | ||
| 183 | set( CMAKE_SYSTEM_NAME ${@map_host_os_to_system_name(d.getVar('BUILD_OS'))} ) | ||
| 184 | set( CMAKE_SYSTEM_PROCESSOR ${@map_host_arch_to_uname_arch(d.getVar('BUILD_ARCH'))} ) | ||
| 185 | set( CMAKE_C_COMPILER ${OECMAKE_NATIVE_C_COMPILER} ) | ||
| 186 | set( CMAKE_CXX_COMPILER ${OECMAKE_NATIVE_CXX_COMPILER} ) | ||
| 187 | set( CMAKE_ASM_COMPILER ${OECMAKE_NATIVE_C_COMPILER} ) | ||
| 188 | set( CMAKE_AR ${OECMAKE_NATIVE_AR} CACHE FILEPATH "Archiver" ) | ||
| 189 | set( CMAKE_RANLIB ${OECMAKE_NATIVE_RANLIB} CACHE FILEPATH "Archive Indexer" ) | ||
| 190 | set( CMAKE_NM ${OECMAKE_NATIVE_NM} CACHE FILEPATH "Symbol Lister" ) | ||
| 191 | set( CMAKE_C_FLAGS "${OECMAKE_NATIVE_C_FLAGS}" CACHE STRING "CFLAGS" ) | ||
| 192 | set( CMAKE_CXX_FLAGS "${OECMAKE_NATIVE_CXX_FLAGS}" CACHE STRING "CXXFLAGS" ) | ||
| 193 | set( CMAKE_ASM_FLAGS "${OECMAKE_NATIVE_C_FLAGS}" CACHE STRING "ASM FLAGS" ) | ||
| 194 | set( CMAKE_C_FLAGS_RELEASE "${OECMAKE_NATIVE_C_FLAGS_RELEASE}" CACHE STRING "Additional CFLAGS for release" ) | ||
| 195 | set( CMAKE_CXX_FLAGS_RELEASE "${OECMAKE_NATIVE_CXX_FLAGS_RELEASE}" CACHE STRING "Additional CXXFLAGS for release" ) | ||
| 196 | set( CMAKE_ASM_FLAGS_RELEASE "${OECMAKE_NATIVE_C_FLAGS_RELEASE}" CACHE STRING "Additional ASM FLAGS for release" ) | ||
| 197 | set( CMAKE_C_LINK_FLAGS "${OECMAKE_NATIVE_C_LINK_FLAGS}" CACHE STRING "LDFLAGS" ) | ||
| 198 | set( CMAKE_CXX_LINK_FLAGS "${OECMAKE_NATIVE_CXX_LINK_FLAGS}" CACHE STRING "LDFLAGS" ) | ||
| 199 | |||
| 200 | set( CMAKE_FIND_ROOT_PATH ${STAGING_DIR_NATIVE} ) | ||
| 201 | set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY ) | ||
| 202 | set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH ) | ||
| 203 | set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) | ||
| 204 | set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) | ||
| 205 | |||
| 206 | # Use native cmake modules | ||
| 207 | list(APPEND CMAKE_MODULE_PATH "${STAGING_DATADIR_NATIVE}/cmake/Modules/") | ||
| 208 | |||
| 209 | # add for non /usr/lib libdir, e.g. /usr/lib64 | ||
| 210 | set( CMAKE_LIBRARY_PATH ${STAGING_BASE_LIBDIR_NATIVE} ${STAGING_LIBDIR_NATIVE}) | ||
| 211 | |||
| 212 | # add include dir to implicit includes in case it differs from /usr/include | ||
| 213 | list(APPEND CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES ${STAGING_INCDIR_NATIVE}) | ||
| 214 | list(APPEND CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES ${STAGING_INCDIR_NATIVE}) | ||
| 215 | |||
| 216 | EOF | ||
| 159 | } | 217 | } |
| 160 | 218 | ||
| 161 | addtask generate_toolchain_file after do_patch before do_configure | 219 | addtask generate_toolchain_file after do_patch before do_configure |
