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