fix undefined-behavior src/pid_fuzzy.c:119:25
[liba.git] / cmake / TargetStatic.cmake
blob212d07657c95764b980ae6ae24efa9822ea4a7a5
1 get_cmake_property(ENABLED_LANGUAGES ENABLED_LANGUAGES)
2 include(CheckCXXCompilerFlag)
3 include(CheckCCompilerFlag)
5 if(NOT CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL .lib)
6   list(FIND ENABLED_LANGUAGES C index)
7   if(${index} GREATER -1)
8     set(CMAKE_REQUIRED_FLAGS -static-libgcc)
9     check_c_compiler_flag(-static-libgcc ld-static-libgcc)
10     set(CMAKE_REQUIRED_FLAGS)
11   endif()
12   set(index)
13 endif()
15 if(NOT CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL .lib)
16   list(FIND ENABLED_LANGUAGES CXX index)
17   if(${index} GREATER -1)
18     set(CMAKE_REQUIRED_FLAGS -static-libstdc++)
19     check_cxx_compiler_flag(-static-libstdc++ ld-static-libstdcxx)
20     set(CMAKE_REQUIRED_FLAGS)
21   endif()
22   set(index)
23 endif()
25 function(string_append var)
26   foreach(arg ${ARGN})
27     string(FIND "${${var}}" "${arg}" index)
28     if(${index} EQUAL -1)
29       string(STRIP "${${var}} ${arg}" ${var})
30     endif()
31   endforeach()
32   set(${var} "${${var}}" PARENT_SCOPE)
33 endfunction()
35 function(target_link_static_3_13)
36   foreach(target ${ARGN})
37     if(TARGET ${target})
38       get_property(LINK_FLAGS TARGET ${target} PROPERTY LINK_FLAGS)
39       if(ld-static-libgcc)
40         string_append(LINK_FLAGS -static-libgcc)
41       endif()
42       if(ld-static-libstdcxx)
43         string_append(LINK_FLAGS -static-libstdc++)
44       endif()
45       set_property(TARGET ${target} PROPERTY LINK_FLAGS "${LINK_FLAGS}")
46     endif()
47   endforeach()
48 endfunction()
50 function(target_link_static_3_15)
51   foreach(target ${ARGN})
52     if(TARGET ${target})
53       set_property(TARGET ${target} PROPERTY
54         MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
55       )
56     endif()
57   endforeach()
58 endfunction()
60 function(target_link_static)
61   if(CMAKE_VERSION VERSION_LESS 3.13)
62     target_link_static_3_13(${ARGN})
63     return()
64   endif()
65   if(NOT CMAKE_VERSION VERSION_LESS 3.15)
66     target_link_static_3_15(${ARGN})
67   endif()
68   set(scope PRIVATE)
69   foreach(target ${ARGN})
70     if(target MATCHES "^INTERFACE|PUBLIC|PRIVATE")
71       set(scope ${target})
72       continue()
73     endif()
74     if(ld-static-libgcc)
75       target_link_options(${target} ${scope} -static-libgcc)
76     endif()
77     if(ld-static-libstdcxx)
78       target_link_options(${target} ${scope} $<$<COMPILE_LANGUAGE:CXX>:-static-libstdc++>)
79     endif()
80   endforeach()
81 endfunction()