forked from jrl-umi3218/jrl-cmakemodules
-
Notifications
You must be signed in to change notification settings - Fork 0
/
version-script.cmake
79 lines (76 loc) · 2.55 KB
/
version-script.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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)