Imported Upstream version 3.25.0
[platform/upstream/cmake.git] / Modules / Platform / FreeBSD.cmake
1 set(BSD "FreeBSD")
2 set(CMAKE_DL_LIBS "")
3 set(CMAKE_C_COMPILE_OPTIONS_PIC "-fPIC")
4 set(CMAKE_C_COMPILE_OPTIONS_PIE "-fPIE")
5 # PIE link options are managed in Compiler/<compiler>.cmake file
6 set(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC")            # -pic
7 set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")       # -shared
8 set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")         # +s, flag for exe link to use shared lib
9 set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")       # -rpath
10 set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")   # : or empty
11 # Does not require -z origin since 10.2-RELEASE
12 set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN")
13 set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,")
14 set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
15 set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic")
16
17 # Shared libraries with no builtin soname may not be linked safely by
18 # specifying the file path.
19 set(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1)
20
21 # Initialize C link type selection flags.  These flags are used when
22 # building a shared library, shared module, or executable that links
23 # to other libraries to select whether to use the static or shared
24 # versions of the libraries.
25 foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
26   set(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-Bstatic")
27   set(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic")
28 endforeach()
29
30
31 # Features for LINK_LIBRARY generator expression
32 ## check linker capabilities
33 if(NOT DEFINED _CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED)
34   execute_process(COMMAND "${CMAKE_LINKER}" --help
35                   OUTPUT_VARIABLE __linker_help
36                   ERROR_VARIABLE __linker_help)
37   if(__linker_help MATCHES "--push-state" AND __linker_help MATCHES "--pop-state")
38     set(_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED TRUE CACHE INTERNAL "linker supports push/pop state")
39   else()
40     set(_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED FALSE CACHE INTERNAL "linker supports push/pop state")
41   endif()
42   unset(__linker_help)
43 endif()
44 ## WHOLE_ARCHIVE: Force loading all members of an archive
45 if(_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED)
46   set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE "LINKER:--push-state,--whole-archive"
47                                              "<LINK_ITEM>"
48                                              "LINKER:--pop-state")
49 else()
50   set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE "LINKER:--whole-archive"
51                                              "<LINK_ITEM>"
52                                              "LINKER:--no-whole-archive")
53 endif()
54 set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED TRUE)
55
56
57 # Features for LINK_GROUP generator expression
58 ## RESCAN: request the linker to rescan static libraries until there is
59 ## no pending undefined symbols
60 set(CMAKE_LINK_GROUP_USING_RESCAN "LINKER:--start-group" "LINKER:--end-group")
61 set(CMAKE_LINK_GROUP_USING_RESCAN_SUPPORTED TRUE)
62
63
64 include(Platform/UnixPaths)