Julian Hall | b1d5d5f | 2020-11-23 18:23:48 +0100 | [diff] [blame] | 1 | #------------------------------------------------------------------------------- |
Gyorgy Szing | 82cd473 | 2022-02-08 23:50:26 +0100 | [diff] [blame] | 2 | # Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved. |
Julian Hall | b1d5d5f | 2020-11-23 18:23:48 +0100 | [diff] [blame] | 3 | # |
| 4 | # SPDX-License-Identifier: BSD-3-Clause |
| 5 | # |
| 6 | #------------------------------------------------------------------------------- |
| 7 | |
| 8 | #------------------------------------------------------------------------------- |
| 9 | # Import libts into a dependent in-tree deployment build. Where another |
| 10 | # deployment uses libts, including this file in the dependent deployment |
| 11 | # CMake build file allows libts to be built and installed into the binary |
| 12 | # directory of the dependent. |
| 13 | #------------------------------------------------------------------------------- |
Gyorgy Szing | ec62ea7 | 2022-07-20 12:36:52 +0000 | [diff] [blame] | 14 | option(CFG_FORCE_PREBUILT_LIBTS Off) |
| 15 | # Try to find a pre-build package. |
Gyorgy | b27d416 | 2023-09-28 13:58:36 +0000 | [diff] [blame] | 16 | version_semver_read(FILE "${CMAKE_CURRENT_LIST_DIR}/version.txt" MAJOR _major MINOR _minor PATCH _patch) |
| 17 | set(_verstring "${_major}.${_minor}.${_patch}") |
| 18 | |
Gabor Toth | ed8305b | 2024-09-24 12:47:26 +0200 | [diff] [blame] | 19 | if (COVERAGE) |
| 20 | set(LIBTS_BUILD_TYPE "DebugCoverage" CACHE STRING "Build type." FORCE) |
| 21 | endif() |
| 22 | |
Gyorgy | b27d416 | 2023-09-28 13:58:36 +0000 | [diff] [blame] | 23 | find_package(libts "${_verstring}" QUIET PATHS ${CMAKE_CURRENT_BINARY_DIR}/libts_install/${TS_ENV}/lib/cmake/libts) |
Gyorgy Szing | ec62ea7 | 2022-07-20 12:36:52 +0000 | [diff] [blame] | 24 | if(NOT libts_FOUND) |
| 25 | if (CFG_FORCE_PREBUILT_LIBTS) |
| 26 | string(CONCAT _msg "find_package() failed to find the \"libts\" package. Please pass -Dlibts_ROOT=<path> or" |
| 27 | " -DCMAKE_FIND_ROOT_PATH=<path> cmake variable, where <path> is the INSTALL_PREFIX used" |
| 28 | " when building libts. libts_ROOT can be set in the environment too." |
| 29 | "If you wish to debug the search process pass -DCMAKE_FIND_DEBUG_MODE=ON to cmake.") |
| 30 | message(FATAL_ERROR ${_msg}) |
| 31 | endif() |
Gyorgy Szing | 09daade | 2024-09-18 13:45:26 +0200 | [diff] [blame] | 32 | # Set build type, if a specific value is required. This leaves the default value in the hands of the |
| 33 | # libts deployment being built. |
| 34 | if (DEFINED LIBTS_BUILD_TYPE) |
| 35 | set(_libts_build_type_arg "-DCMAKE_BUILD_TYPE=${LIBTS_BUILD_TYPE}") |
| 36 | endif() |
| 37 | |
Gyorgy Szing | ec62ea7 | 2022-07-20 12:36:52 +0000 | [diff] [blame] | 38 | # If not successful, build libts as a sub-project. |
| 39 | execute_process(COMMAND |
| 40 | ${CMAKE_COMMAND} -E env "CROSS_COMPILE=${CROSS_COMPILE}" |
| 41 | ${CMAKE_COMMAND} |
Gyorgy Szing | 09daade | 2024-09-18 13:45:26 +0200 | [diff] [blame] | 42 | ${_libts_build_type_arg} |
Gyorgy Szing | ec62ea7 | 2022-07-20 12:36:52 +0000 | [diff] [blame] | 43 | -S ${TS_ROOT}/deployments/libts/${TS_ENV} |
| 44 | -B ${CMAKE_CURRENT_BINARY_DIR}/libts |
| 45 | RESULT_VARIABLE |
| 46 | _exec_error |
| 47 | ) |
Gyorgy Szing | 09daade | 2024-09-18 13:45:26 +0200 | [diff] [blame] | 48 | unset(_libts_build_type_arg) |
Gyorgy Szing | ec62ea7 | 2022-07-20 12:36:52 +0000 | [diff] [blame] | 49 | if (NOT _exec_error EQUAL 0) |
| 50 | message(FATAL_ERROR "Configuring libts failed. ${_exec_error}") |
| 51 | endif() |
| 52 | execute_process(COMMAND |
| 53 | ${CMAKE_COMMAND} -E env "CROSS_COMPILE=${CROSS_COMPILE}" |
| 54 | ${CMAKE_COMMAND} |
| 55 | --build ${CMAKE_CURRENT_BINARY_DIR}/libts |
| 56 | --parallel ${PROCESSOR_COUNT} |
| 57 | RESULT_VARIABLE |
| 58 | _exec_error |
| 59 | ) |
| 60 | if (NOT _exec_error EQUAL 0) |
| 61 | message(FATAL_ERROR "Installing libts failed. ${_exec_error}") |
| 62 | endif() |
| 63 | execute_process(COMMAND |
| 64 | ${CMAKE_COMMAND} -E env "CROSS_COMPILE=${CROSS_COMPILE}" |
| 65 | ${CMAKE_COMMAND} |
| 66 | --install ${CMAKE_CURRENT_BINARY_DIR}/libts |
| 67 | --prefix ${CMAKE_CURRENT_BINARY_DIR}/libts_install |
| 68 | RESULT_VARIABLE |
| 69 | _exec_error |
| 70 | ) |
| 71 | if (NOT _exec_error EQUAL 0) |
| 72 | message(FATAL_ERROR "Installing libts failed. ${_exec_error}") |
| 73 | endif() |
Gyorgy Szing | 2247d24 | 2021-09-03 16:17:25 +0200 | [diff] [blame] | 74 | |
Gyorgy Szing | ec62ea7 | 2022-07-20 12:36:52 +0000 | [diff] [blame] | 75 | install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/libts/cmake_install.cmake) |
| 76 | |
Gyorgy | b27d416 | 2023-09-28 13:58:36 +0000 | [diff] [blame] | 77 | find_package(libts "${_verstring}" QUIET REQUIRED PATHS ${CMAKE_CURRENT_BINARY_DIR}/libts_install/${TS_ENV}/lib/cmake/libts) |
Gyorgy Szing | ec62ea7 | 2022-07-20 12:36:52 +0000 | [diff] [blame] | 78 | else() |
| 79 | message(STATUS "Using prebuilt libts from ${libts_DIR}") |
Gyorgy Szing | 2247d24 | 2021-09-03 16:17:25 +0200 | [diff] [blame] | 80 | endif() |
Gyorgy Szing | 09daade | 2024-09-18 13:45:26 +0200 | [diff] [blame] | 81 | |
| 82 | # Cmake will use the same build type of the imported target as used by the main project. If no mapping is configured and |
| 83 | # the matching build type is not found, cmake will fall back to any build type. Details of the fall back mechanism are not |
| 84 | # documented. |
| 85 | # If a mapping is defined, and the imported target does not define the mapped build type, cmake will treat the library |
| 86 | # as not found. |
| 87 | # |
| 88 | # If LIBTS_BUILD_TYPE is set and the main project wants to use a specific build type, configure build type mapping to |
| 89 | # only allow using the requested build type. |
| 90 | if (DEFINED LIBTS_BUILD_TYPE) |
| 91 | set_target_properties(libts::ts PROPERTIES |
| 92 | MAP_IMPORTED_CONFIG_DEBUG ${LIBTS_BUILD_TYPE} |
| 93 | MAP_IMPORTED_CONFIG_MINSIZEREL ${LIBTS_BUILD_TYPE} |
| 94 | MAP_IMPORTED_CONFIG_MINSIZWITHDEBINFO ${LIBTS_BUILD_TYPE} |
| 95 | MAP_IMPORTED_CONFIG_RELEASE ${LIBTS_BUILD_TYPE} |
| 96 | MAP_IMPORTED_CONFIG_RELWITHDEBINFO ${LIBTS_BUILD_TYPE} |
| 97 | MAP_IMPORTED_CONFIG_DEBUGCOVERAGE ${LIBTS_BUILD_TYPE} |
| 98 | ) |
| 99 | |
| 100 | # Do a manual check and issue a better message than the default one. |
| 101 | get_property(_libts_build_type TARGET libts::ts PROPERTY IMPORTED_CONFIGURATIONS) |
| 102 | string(TOUPPER ${LIBTS_BUILD_TYPE} _uc_libts_build_type) |
| 103 | if(${_uc_libts_build_type} IN_LIST _libts_build_type) |
| 104 | else() |
| 105 | message(FATAL_ERROR "Installed libts package does not supports required build type ${LIBTS_BUILD_TYPE}.") |
| 106 | endif() |
| 107 | unset(_libts_build_type) |
| 108 | unset(_uc_libts_build_type) |
| 109 | endif() |