1#-------------------------------------------------------------------------------
2# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7
8#[===[.rst:
9.. cmake:command:: export_library
10
11	.. code:: cmake
12
13		export_library(TARGET <target name> LIB_NAME <library name> PKG_CONFIG_FILE <file name>)
14
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
23	``PKG_CONFIG_FILE``
24	Name of the package configuration file to generate.
25
26#]===]
27function(export_library)
28	set(options  )
29	set(oneValueArgs TARGET LIB_NAME PKG_CONFIG_FILE)
30	set(multiValueArgs)
31	cmake_parse_arguments(MY_PARAMS "${options}" "${oneValueArgs}"
32						"${multiValueArgs}" ${ARGN} )
33
34	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!")
43	endif()
44
45
46	string(TOLOWER "${MY_PARAMS_LIB_NAME}" LC_LIB_NAME)
47	set(_version_file_name "${LC_LIB_NAME}ConfigVersion.cmake")
48
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
59			DESTINATION ${TS_ENV}/lib
60		LIBRARY
61			DESTINATION ${TS_ENV}/lib
62		PUBLIC_HEADER
63			DESTINATION ${TS_ENV}/include
64	)
65
66	# 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(
80		"${CMAKE_CURRENT_BINARY_DIR}/${_version_file_name}"
81		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}")
91
92	configure_package_config_file(
93			"${MY_PARAMS_PKG_CONFIG_FILE}"
94			"${_configured_pkgcfg_name}"
95		INSTALL_DESTINATION
96			${ConfigPackageLocation}
97	)
98
99	# Install the export details
100	install(
101		EXPORT ${MY_PARAMS_LIB_NAME}_targets
102		FILE ${MY_PARAMS_LIB_NAME}Targets.cmake
103		NAMESPACE ${MY_PARAMS_LIB_NAME}::
104		DESTINATION ${ConfigPackageLocation}
105		COMPONENT ${MY_PARAMS_LIB_NAME}
106	)
107
108
109	# install config and version files
110	install(
111		FILES
112			"${_configured_pkgcfg_name}"
113			"${CMAKE_CURRENT_BINARY_DIR}/${_version_file_name}"
114		DESTINATION
115			${ConfigPackageLocation}
116		COMPONENT
117			${MY_PARAMS_LIB_NAME}
118	)
119endfunction()
120