cmvr-es/dependency/arm/third_party/jrl-cmakemodules/v1.1.2/share/jrl-cmakemodules/version-script.cmake

80 lines
2.6 KiB
CMake

# Copyright (C) 2017-2020 LAAS-CNRS, JRL AIST-CNRS.
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
include(CheckCCompilerFlag)
# Introduced in 3.18.0 but VERSION_GREAT_OR_EQUAL is not available in CMake 3.1
if(${CMAKE_VERSION} VERSION_LESS 3.18.0)
# Do nothing
else()
include(CheckLinkerFlag)
endif()
# _CHECK_VERSION_SCRIPT_SUPPORT
# -----------------------------
#
# Internal macro to check if version scripts are supported by the current
# linker.
macro(_CHECK_VERSION_SCRIPT_SUPPORT)
set(VERSION_SCRIPT "${PROJECT_JRL_CMAKE_MODULE_DIR}/version-script-test.lds")
if(COMMAND check_linker_flag)
check_linker_flag(
"C"
"-Wl,--version-script=${VERSION_SCRIPT}"
HAS_VERSION_SCRIPT_SUPPORT
)
else()
check_c_compiler_flag(
"-Wl,--version-script=${VERSION_SCRIPT}"
HAS_VERSION_SCRIPT_SUPPORT
)
endif()
set(
_HAS_VERSION_SCRIPT_SUPPORT
${HAS_VERSION_SCRIPT_SUPPORT}
CACHE INTERNAL
"Linker supports version scripts"
)
endmacro(_CHECK_VERSION_SCRIPT_SUPPORT)
# .rst: .. command:: ADD_VERSION_SCRIPT(TARGET VERSION_SCRIPT)
#
# This macro adds a version script to a given target and a link-time dependency
# between the target and the version script.
#
# See
# https://www.gnu.org/software/gnulib/manual/html_node/LD-Version-Scripts.html
#
# It has no effect on platforms that do not support version script.
#
# :param TARGET: Name of the target, the macro does nothing if TARGET is
# not a cmake target. :param VERSION_SCRIPT: Version script to add to the
# library.
#
macro(ADD_VERSION_SCRIPT TARGET VERSION_SCRIPT)
if(NOT DEFINED _HAS_VERSION_SCRIPT_SUPPORT)
_CHECK_VERSION_SCRIPT_SUPPORT()
endif()
if(_HAS_VERSION_SCRIPT_SUPPORT)
if(TARGET ${TARGET})
set_property(
TARGET ${TARGET}
APPEND_STRING
PROPERTY LINK_FLAGS " -Wl,--version-script=${VERSION_SCRIPT}"
)
set_target_properties(${TARGET} PROPERTIES LINK_DEPENDS ${VERSION_SCRIPT})
endif()
endif()
endmacro(ADD_VERSION_SCRIPT)