Fix: change libts to export a CMake package
libts install content was not compatible to find_module() which made
using a pre-built libts binary from CMake less than ideal.
This change adds the missing files and updates export and install
commands to make libts generate a proper CMake package.
From now on an external project will be able to use find_module() to
integrate libts into its build.
Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
Change-Id: I9e86e02030f6fb3c86af45252110f939cb82670c
diff --git a/tools/cmake/common/ExportLibrary.cmake b/tools/cmake/common/ExportLibrary.cmake
index fed4e75..c171c5b 100644
--- a/tools/cmake/common/ExportLibrary.cmake
+++ b/tools/cmake/common/ExportLibrary.cmake
@@ -1,5 +1,5 @@
#-------------------------------------------------------------------------------
-# Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
@@ -10,7 +10,7 @@
.. code:: cmake
- export_library(TARGET LIB_NAME INTERFACE_FILES)
+ export_library(TARGET <target name> LIB_NAME <library name> PKG_CONFIG_FILE <file name>)
INPUTS:
@@ -20,23 +20,30 @@
``LIB_NAME``
The name of the library.
- ``INTERFACE_FILES``
- List of header files to declare the library's public interface.
+ ``PKG_CONFIG_FILE``
+ Name of the package configuration file to generate.
#]===]
function(export_library)
set(options )
- set(oneValueArgs TARGET LIB_NAME)
- set(multiValueArgs INTERFACE_FILES)
+ set(oneValueArgs TARGET LIB_NAME PKG_CONFIG_FILE)
+ set(multiValueArgs)
cmake_parse_arguments(MY_PARAMS "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN} )
- if(NOT DEFINED MY_PARAMS_TARGET)
- message(FATAL_ERROR "export_library: mandatory parameter TARGET not defined!")
+ foreach(_param IN ITEMS MY_PARAMS_TARGET MY_PARAMS_LIB_NAME MY_PARAMS_PKG_CONFIG_FILE)
+ if(NOT DEFINED ${_param})
+ list(APPEND _miss_params "${_param}" )
+ endif()
+ endforeach()
+
+ if (_miss_params)
+ string(REPLACE ";" ", " _miss_params "${_miss_params}")
+ message(FATAL_ERROR "export_library: mandatory parameter(s) ${_miss_params} not defined!")
endif()
- if(NOT DEFINED MY_PARAMS_LIB_NAME)
- message(FATAL_ERROR "export_library: mandatory parameter LIB_NAME not defined!")
- endif()
+
+
+ string(TOLOWER "${MY_PARAMS_LIB_NAME}" LC_LIB_NAME)
# Set default install location if none specified
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
@@ -55,18 +62,56 @@
DESTINATION ${TS_ENV}/include
)
- # Install library header files files
- install(
- FILES ${MY_PARAMS_INTERFACE_FILES}
- DESTINATION ${TS_ENV}/include
+ # Create targets file.
+ export(
+ EXPORT
+ ${MY_PARAMS_LIB_NAME}_targets
+ FILE
+ "${CMAKE_CURRENT_BINARY_DIR}/${MY_PARAMS_LIB_NAME}Targets.cmake"
+ NAMESPACE
+ ${MY_PARAMS_LIB_NAME}::
+ )
+
+ # Create a config file package.
+ include(CMakePackageConfigHelpers)
+ get_target_property(_ver ${MY_PARAMS_TARGET} VERSION)
+ write_basic_package_version_file(
+ "${CMAKE_CURRENT_BINARY_DIR}/${LC_LIB_NAME}ConfigVersion.cmake"
+ VERSION "${_ver}"
+ COMPATIBILITY SameMajorVersion
+ )
+
+ # Finalize config file.
+ # Config package location relative to install root.
+ set(ConfigPackageLocation ${TS_ENV}/lib/cmake/${MY_PARAMS_LIB_NAME})
+
+ get_filename_component(_configured_pkgcfg_name "${MY_PARAMS_PKG_CONFIG_FILE}" NAME_WLE)
+ set(_configured_pkgcfg_name "${CMAKE_CURRENT_BINARY_DIR}/${_configured_pkgcfg_name}")
+ configure_package_config_file(
+ "${MY_PARAMS_PKG_CONFIG_FILE}"
+ "${_configured_pkgcfg_name}"
+ INSTALL_DESTINATION
+ ${ConfigPackageLocation}
)
# Install the export details
install(
EXPORT ${MY_PARAMS_LIB_NAME}_targets
- FILE ${MY_PARAMS_LIB_NAME}_targets.cmake
+ FILE ${MY_PARAMS_LIB_NAME}Targets.cmake
NAMESPACE ${MY_PARAMS_LIB_NAME}::
- DESTINATION ${TS_ENV}/lib/cmake
+ DESTINATION ${ConfigPackageLocation}
COMPONENT ${MY_PARAMS_LIB_NAME}
)
+
+
+ # install config and version files
+ install(
+ FILES
+ "${_configured_pkgcfg_name}"
+ "${CMAKE_CURRENT_BINARY_DIR}/${LC_LIB_NAME}ConfigVersion.cmake"
+ DESTINATION
+ ${ConfigPackageLocation}
+ COMPONENT
+ ${MY_PARAMS_LIB_NAME}
+ )
endfunction()