blob: c171c5b162badc9da74c1ac70c097ac8cc8df52c [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 Szing49091802020-11-24 00:33:09 +010047
48 # Set default install location if none specified
49 if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
50 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
51 endif()
52
53 # Specify export name and destinations for install
54 install(
55 TARGETS ${MY_PARAMS_TARGET}
56 EXPORT ${MY_PARAMS_LIB_NAME}_targets
57 ARCHIVE
Gyorgy Szingc31afbf2021-02-12 01:51:55 +010058 DESTINATION ${TS_ENV}/lib
Gyorgy Szing49091802020-11-24 00:33:09 +010059 LIBRARY
Gyorgy Szingc31afbf2021-02-12 01:51:55 +010060 DESTINATION ${TS_ENV}/lib
Gyorgy Szing49091802020-11-24 00:33:09 +010061 PUBLIC_HEADER
Gyorgy Szingc31afbf2021-02-12 01:51:55 +010062 DESTINATION ${TS_ENV}/include
Gyorgy Szing49091802020-11-24 00:33:09 +010063 )
64
Gyorgy Szingec62ea72022-07-20 12:36:52 +000065 # Create targets file.
66 export(
67 EXPORT
68 ${MY_PARAMS_LIB_NAME}_targets
69 FILE
70 "${CMAKE_CURRENT_BINARY_DIR}/${MY_PARAMS_LIB_NAME}Targets.cmake"
71 NAMESPACE
72 ${MY_PARAMS_LIB_NAME}::
73 )
74
75 # Create a config file package.
76 include(CMakePackageConfigHelpers)
77 get_target_property(_ver ${MY_PARAMS_TARGET} VERSION)
78 write_basic_package_version_file(
79 "${CMAKE_CURRENT_BINARY_DIR}/${LC_LIB_NAME}ConfigVersion.cmake"
80 VERSION "${_ver}"
81 COMPATIBILITY SameMajorVersion
82 )
83
84 # Finalize config file.
85 # Config package location relative to install root.
86 set(ConfigPackageLocation ${TS_ENV}/lib/cmake/${MY_PARAMS_LIB_NAME})
87
88 get_filename_component(_configured_pkgcfg_name "${MY_PARAMS_PKG_CONFIG_FILE}" NAME_WLE)
89 set(_configured_pkgcfg_name "${CMAKE_CURRENT_BINARY_DIR}/${_configured_pkgcfg_name}")
90 configure_package_config_file(
91 "${MY_PARAMS_PKG_CONFIG_FILE}"
92 "${_configured_pkgcfg_name}"
93 INSTALL_DESTINATION
94 ${ConfigPackageLocation}
Gyorgy Szing49091802020-11-24 00:33:09 +010095 )
96
97 # Install the export details
98 install(
99 EXPORT ${MY_PARAMS_LIB_NAME}_targets
Gyorgy Szingec62ea72022-07-20 12:36:52 +0000100 FILE ${MY_PARAMS_LIB_NAME}Targets.cmake
Gyorgy Szing49091802020-11-24 00:33:09 +0100101 NAMESPACE ${MY_PARAMS_LIB_NAME}::
Gyorgy Szingec62ea72022-07-20 12:36:52 +0000102 DESTINATION ${ConfigPackageLocation}
Gyorgy Szing49091802020-11-24 00:33:09 +0100103 COMPONENT ${MY_PARAMS_LIB_NAME}
104 )
Gyorgy Szingec62ea72022-07-20 12:36:52 +0000105
106
107 # install config and version files
108 install(
109 FILES
110 "${_configured_pkgcfg_name}"
111 "${CMAKE_CURRENT_BINARY_DIR}/${LC_LIB_NAME}ConfigVersion.cmake"
112 DESTINATION
113 ${ConfigPackageLocation}
114 COMPONENT
115 ${MY_PARAMS_LIB_NAME}
116 )
Gyorgy Szing49091802020-11-24 00:33:09 +0100117endfunction()