blob: eb3afc596b93c8f16df11796032a07a05bbc4550 [file] [log] [blame]
Julian Hallb1d5d5f2020-11-23 18:23:48 +01001#-------------------------------------------------------------------------------
Gyorgy Szing82cd4732022-02-08 23:50:26 +01002# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
Julian Hallb1d5d5f2020-11-23 18:23:48 +01003#
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 Szingec62ea72022-07-20 12:36:52 +000014option(CFG_FORCE_PREBUILT_LIBTS Off)
15# Try to find a pre-build package.
Gyorgyb27d4162023-09-28 13:58:36 +000016version_semver_read(FILE "${CMAKE_CURRENT_LIST_DIR}/version.txt" MAJOR _major MINOR _minor PATCH _patch)
17set(_verstring "${_major}.${_minor}.${_patch}")
18
19find_package(libts "${_verstring}" QUIET PATHS ${CMAKE_CURRENT_BINARY_DIR}/libts_install/${TS_ENV}/lib/cmake/libts)
Gyorgy Szingec62ea72022-07-20 12:36:52 +000020if(NOT libts_FOUND)
21 if (CFG_FORCE_PREBUILT_LIBTS)
22 string(CONCAT _msg "find_package() failed to find the \"libts\" package. Please pass -Dlibts_ROOT=<path> or"
23 " -DCMAKE_FIND_ROOT_PATH=<path> cmake variable, where <path> is the INSTALL_PREFIX used"
24 " when building libts. libts_ROOT can be set in the environment too."
25 "If you wish to debug the search process pass -DCMAKE_FIND_DEBUG_MODE=ON to cmake.")
26 message(FATAL_ERROR ${_msg})
27 endif()
Gyorgy Szing09daade2024-09-18 13:45:26 +020028 # Set build type, if a specific value is required. This leaves the default value in the hands of the
29 # libts deployment being built.
30 if (DEFINED LIBTS_BUILD_TYPE)
31 set(_libts_build_type_arg "-DCMAKE_BUILD_TYPE=${LIBTS_BUILD_TYPE}")
32 endif()
33
Gyorgy Szingec62ea72022-07-20 12:36:52 +000034 # If not successful, build libts as a sub-project.
35 execute_process(COMMAND
36 ${CMAKE_COMMAND} -E env "CROSS_COMPILE=${CROSS_COMPILE}"
37 ${CMAKE_COMMAND}
Gyorgy Szing09daade2024-09-18 13:45:26 +020038 ${_libts_build_type_arg}
Gyorgy Szingec62ea72022-07-20 12:36:52 +000039 -S ${TS_ROOT}/deployments/libts/${TS_ENV}
40 -B ${CMAKE_CURRENT_BINARY_DIR}/libts
41 RESULT_VARIABLE
42 _exec_error
43 )
Gyorgy Szing09daade2024-09-18 13:45:26 +020044 unset(_libts_build_type_arg)
Gyorgy Szingec62ea72022-07-20 12:36:52 +000045 if (NOT _exec_error EQUAL 0)
46 message(FATAL_ERROR "Configuring libts failed. ${_exec_error}")
47 endif()
48 execute_process(COMMAND
49 ${CMAKE_COMMAND} -E env "CROSS_COMPILE=${CROSS_COMPILE}"
50 ${CMAKE_COMMAND}
51 --build ${CMAKE_CURRENT_BINARY_DIR}/libts
52 --parallel ${PROCESSOR_COUNT}
53 RESULT_VARIABLE
54 _exec_error
55 )
56 if (NOT _exec_error EQUAL 0)
57 message(FATAL_ERROR "Installing libts failed. ${_exec_error}")
58 endif()
59 execute_process(COMMAND
60 ${CMAKE_COMMAND} -E env "CROSS_COMPILE=${CROSS_COMPILE}"
61 ${CMAKE_COMMAND}
62 --install ${CMAKE_CURRENT_BINARY_DIR}/libts
63 --prefix ${CMAKE_CURRENT_BINARY_DIR}/libts_install
64 RESULT_VARIABLE
65 _exec_error
66 )
67 if (NOT _exec_error EQUAL 0)
68 message(FATAL_ERROR "Installing libts failed. ${_exec_error}")
69 endif()
Gyorgy Szing2247d242021-09-03 16:17:25 +020070
Gyorgy Szingec62ea72022-07-20 12:36:52 +000071 install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/libts/cmake_install.cmake)
72
Gyorgyb27d4162023-09-28 13:58:36 +000073 find_package(libts "${_verstring}" QUIET REQUIRED PATHS ${CMAKE_CURRENT_BINARY_DIR}/libts_install/${TS_ENV}/lib/cmake/libts)
Gyorgy Szingec62ea72022-07-20 12:36:52 +000074else()
75 message(STATUS "Using prebuilt libts from ${libts_DIR}")
Gyorgy Szing2247d242021-09-03 16:17:25 +020076endif()
Gyorgy Szing09daade2024-09-18 13:45:26 +020077
78# Cmake will use the same build type of the imported target as used by the main project. If no mapping is configured and
79# the matching build type is not found, cmake will fall back to any build type. Details of the fall back mechanism are not
80# documented.
81# If a mapping is defined, and the imported target does not define the mapped build type, cmake will treat the library
82# as not found.
83#
84# If LIBTS_BUILD_TYPE is set and the main project wants to use a specific build type, configure build type mapping to
85# only allow using the requested build type.
86if (DEFINED LIBTS_BUILD_TYPE)
87 set_target_properties(libts::ts PROPERTIES
88 MAP_IMPORTED_CONFIG_DEBUG ${LIBTS_BUILD_TYPE}
89 MAP_IMPORTED_CONFIG_MINSIZEREL ${LIBTS_BUILD_TYPE}
90 MAP_IMPORTED_CONFIG_MINSIZWITHDEBINFO ${LIBTS_BUILD_TYPE}
91 MAP_IMPORTED_CONFIG_RELEASE ${LIBTS_BUILD_TYPE}
92 MAP_IMPORTED_CONFIG_RELWITHDEBINFO ${LIBTS_BUILD_TYPE}
93 MAP_IMPORTED_CONFIG_DEBUGCOVERAGE ${LIBTS_BUILD_TYPE}
94 )
95
96 # Do a manual check and issue a better message than the default one.
97 get_property(_libts_build_type TARGET libts::ts PROPERTY IMPORTED_CONFIGURATIONS)
98 string(TOUPPER ${LIBTS_BUILD_TYPE} _uc_libts_build_type)
99 if(${_uc_libts_build_type} IN_LIST _libts_build_type)
100 else()
101 message(FATAL_ERROR "Installed libts package does not supports required build type ${LIBTS_BUILD_TYPE}.")
102 endif()
103 unset(_libts_build_type)
104 unset(_uc_libts_build_type)
105endif()