blob: 22ed3132e18b802d5130b453e48cbf72d9081610 [file] [log] [blame]
Gyorgy Szing49091802020-11-24 00:33:09 +01001#-------------------------------------------------------------------------------
Gyorgy Szingec62ea72022-07-20 12:36:52 +00002# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
Gyorgy Szing49091802020-11-24 00:33:09 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7
8#[===[.rst:
9.. cmake:command:: export_library
10
11 .. code:: cmake
12
Gyorgy Szingec62ea72022-07-20 12:36:52 +000013 export_library(TARGET <target name> LIB_NAME <library name> PKG_CONFIG_FILE <file name>)
Gyorgy Szing49091802020-11-24 00:33:09 +010014
15 INPUTS:
16
17 ``TARGET``
18 The name of an already defined target that corresponds to the library.
19
20 ``LIB_NAME``
21 The name of the library.
22
Gyorgy Szingec62ea72022-07-20 12:36:52 +000023 ``PKG_CONFIG_FILE``
24 Name of the package configuration file to generate.
Gyorgy Szing49091802020-11-24 00:33:09 +010025
26#]===]
27function(export_library)
28 set(options )
Gyorgy Szingec62ea72022-07-20 12:36:52 +000029 set(oneValueArgs TARGET LIB_NAME PKG_CONFIG_FILE)
30 set(multiValueArgs)
Gyorgy Szing49091802020-11-24 00:33:09 +010031 cmake_parse_arguments(MY_PARAMS "${options}" "${oneValueArgs}"
32 "${multiValueArgs}" ${ARGN} )
33
Gyorgy Szingec62ea72022-07-20 12:36:52 +000034 foreach(_param IN ITEMS MY_PARAMS_TARGET MY_PARAMS_LIB_NAME MY_PARAMS_PKG_CONFIG_FILE)
35 if(NOT DEFINED ${_param})
36 list(APPEND _miss_params "${_param}" )
37 endif()
38 endforeach()
39
40 if (_miss_params)
41 string(REPLACE ";" ", " _miss_params "${_miss_params}")
42 message(FATAL_ERROR "export_library: mandatory parameter(s) ${_miss_params} not defined!")
Gyorgy Szing49091802020-11-24 00:33:09 +010043 endif()
Gyorgy Szingec62ea72022-07-20 12:36:52 +000044
45
46 string(TOLOWER "${MY_PARAMS_LIB_NAME}" LC_LIB_NAME)
Gyorgy Szing09daade2024-09-18 13:45:26 +020047 set(_version_file_name "${LC_LIB_NAME}ConfigVersion.cmake")
Gyorgy Szing49091802020-11-24 00:33:09 +010048
49 # Set default install location if none specified
50 if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
51 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
52 endif()
53
54 # Specify export name and destinations for install
55 install(
56 TARGETS ${MY_PARAMS_TARGET}
57 EXPORT ${MY_PARAMS_LIB_NAME}_targets
58 ARCHIVE
Gyorgy Szingc31afbf2021-02-12 01:51:55 +010059 DESTINATION ${TS_ENV}/lib
Gyorgy Szing49091802020-11-24 00:33:09 +010060 LIBRARY
Gyorgy Szingc31afbf2021-02-12 01:51:55 +010061 DESTINATION ${TS_ENV}/lib
Gyorgy Szing49091802020-11-24 00:33:09 +010062 PUBLIC_HEADER
Gyorgy Szingc31afbf2021-02-12 01:51:55 +010063 DESTINATION ${TS_ENV}/include
Gyorgy Szing49091802020-11-24 00:33:09 +010064 )
65
Gyorgy Szingec62ea72022-07-20 12:36:52 +000066 # Create targets file.
67 export(
68 EXPORT
69 ${MY_PARAMS_LIB_NAME}_targets
70 FILE
71 "${CMAKE_CURRENT_BINARY_DIR}/${MY_PARAMS_LIB_NAME}Targets.cmake"
72 NAMESPACE
73 ${MY_PARAMS_LIB_NAME}::
74 )
75
76 # Create a config file package.
77 include(CMakePackageConfigHelpers)
78 get_target_property(_ver ${MY_PARAMS_TARGET} VERSION)
79 write_basic_package_version_file(
Gyorgy Szing09daade2024-09-18 13:45:26 +020080 "${CMAKE_CURRENT_BINARY_DIR}/${_version_file_name}"
Gyorgy Szingec62ea72022-07-20 12:36:52 +000081 VERSION "${_ver}"
82 COMPATIBILITY SameMajorVersion
83 )
84
85 # Finalize config file.
86 # Config package location relative to install root.
87 set(ConfigPackageLocation ${TS_ENV}/lib/cmake/${MY_PARAMS_LIB_NAME})
88
89 get_filename_component(_configured_pkgcfg_name "${MY_PARAMS_PKG_CONFIG_FILE}" NAME_WLE)
90 set(_configured_pkgcfg_name "${CMAKE_CURRENT_BINARY_DIR}/${_configured_pkgcfg_name}")
Gyorgy Szing09daade2024-09-18 13:45:26 +020091
Gyorgy Szingec62ea72022-07-20 12:36:52 +000092 configure_package_config_file(
93 "${MY_PARAMS_PKG_CONFIG_FILE}"
94 "${_configured_pkgcfg_name}"
95 INSTALL_DESTINATION
96 ${ConfigPackageLocation}
Gyorgy Szing49091802020-11-24 00:33:09 +010097 )
98
99 # Install the export details
100 install(
101 EXPORT ${MY_PARAMS_LIB_NAME}_targets
Gyorgy Szingec62ea72022-07-20 12:36:52 +0000102 FILE ${MY_PARAMS_LIB_NAME}Targets.cmake
Gyorgy Szing49091802020-11-24 00:33:09 +0100103 NAMESPACE ${MY_PARAMS_LIB_NAME}::
Gyorgy Szingec62ea72022-07-20 12:36:52 +0000104 DESTINATION ${ConfigPackageLocation}
Gyorgy Szing49091802020-11-24 00:33:09 +0100105 COMPONENT ${MY_PARAMS_LIB_NAME}
106 )
Gyorgy Szingec62ea72022-07-20 12:36:52 +0000107
108
109 # install config and version files
110 install(
111 FILES
112 "${_configured_pkgcfg_name}"
Gyorgy Szing09daade2024-09-18 13:45:26 +0200113 "${CMAKE_CURRENT_BINARY_DIR}/${_version_file_name}"
Gyorgy Szingec62ea72022-07-20 12:36:52 +0000114 DESTINATION
115 ${ConfigPackageLocation}
116 COMPONENT
117 ${MY_PARAMS_LIB_NAME}
118 )
Gyorgy Szing49091802020-11-24 00:33:09 +0100119endfunction()