summaryrefslogtreecommitdiff
path: root/indra/cmake/Boost.cmake
blob: af3e23a00301a8297391034d3ba35ee93043e2ad (plain)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# -*- cmake -*-
include(Prebuilt)
include(Linking)

include_guard()

add_library( ll::boost INTERFACE IMPORTED )

if (DARWIN)
  target_include_directories( ll::boost SYSTEM INTERFACE /opt/local/libexec/boost/1.88/include)
  target_link_directories( ll::boost INTERFACE /opt/local/libexec/boost/1.88/lib)
  set(sfx -mt)
elseif (WINDOWS)
  target_include_directories( ll::boost SYSTEM INTERFACE ${prefix_result}/../include)
  target_link_directories( ll::boost INTERFACE ${prefix_result})
  # Detect the actual toolset/version suffix from whatever vcpkg installed.
  # Glob for boost_context-*.lib and strip the known prefix to get the suffix.
  file(GLOB _boost_context_libs "${prefix_result}/boost_context-*.lib")
  if (_boost_context_libs)
    list(GET _boost_context_libs 0 _boost_context_lib)
    get_filename_component(_boost_context_name "${_boost_context_lib}" NAME_WE)
    string(REPLACE "boost_context" "" sfx "${_boost_context_name}")
  else ()
    if ($ENV{MSYSTEM_CARCH} MATCHES aarch64)
      set(sfx -vc145-mt-a64-1_92)
    else ()
      set(sfx -vc145-mt-x64-1_92)
    endif ()
    message(WARNING "Could not detect Boost suffix via glob; using fallback '${sfx}'. "
                    "Check that vcpkg installed boost into ${prefix_result}.")
  endif ()
elseif (NOT (${LINUX_DISTRO} MATCHES freedesktop))
  find_package( Boost )
endif ()
if (NOT (${LINUX_DISTRO} MATCHES freedesktop))
  target_link_libraries( ll::boost INTERFACE
    boost_context${sfx}
    boost_fiber${sfx}
    boost_filesystem${sfx}
    boost_process${sfx}
    boost_program_options${sfx}
    boost_thread${sfx}
    boost_url${sfx}
    )
  if (WINDOWS)
    target_link_libraries( ll::boost INTERFACE boost_json${sfx})
  else ()
    target_link_libraries( ll::boost INTERFACE boost_regex${sfx})
  endif ()
  if (${LINUX_DISTRO} MATCHES debian OR (${LINUX_DISTRO} MATCHES fedora) OR DARWIN)
    target_link_libraries( ll::boost INTERFACE boost_system${sfx})
  endif ()
  target_compile_definitions( ll::boost INTERFACE BOOST_BIND_GLOBAL_PLACEHOLDERS )
  return()
endif ()

if( USE_CONAN )
  target_link_libraries( ll::boost INTERFACE CONAN_PKG::boost )
  target_compile_definitions( ll::boost INTERFACE BOOST_ALLOW_DEPRECATED_HEADERS BOOST_BIND_GLOBAL_PLACEHOLDERS )
  return()
endif()

use_prebuilt_binary(boost)

# As of sometime between Boost 1.67 and 1.72, Boost libraries are suffixed
# with the address size.
set(addrsfx "-x${ADDRESS_SIZE}")

find_library(BOOST_CONTEXT_LIBRARY
    NAMES
    libboost_context
    libboost_context-mt
    libboost_context-mt${addrsfx}
    boost_context
    boost_context-mt
    boost_context-mt${addrsfx}
    PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH)

find_library(BOOST_FIBER_LIBRARY
    NAMES
    libboost_fiber
    libboost_fiber-mt
    libboost_fiber-mt${addrsfx}
    boost_fiber
    boost_fiber-mt
    boost_fiber-mt${addrsfx}
    PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH)

find_library(BOOST_FILESYSTEM_LIBRARY
    NAMES
    libboost_filesystem
    libboost_filesystem-mt
    libboost_filesystem-mt${addrsfx}
    boost_filesystem
    boost_filesystem-mt
    boost_filesystem-mt${addrsfx}
    PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH)

find_library(BOOST_PROGRAMOPTIONS_LIBRARY
    NAMES
    libboost_program_options
    libboost_program_options-mt
    libboost_program_options-mt${addrsfx}
    boost_program_options
    boost_program_options-mt
    boost_program_options-mt${addrsfx}
    PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH)

find_library(BOOST_URL_LIBRARY
    NAMES
    libboost_url
    libboost_url-mt
    libboost_url-mt${addrsfx}
    boost_url
    boost_url-mt
    boost_url-mt${addrsfx}
    PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH)

find_library(BOOST_PROCESS_LIBRARY
    NAMES
    libboost_process
    libboost_process-mt
    libboost_process-mt${addrsfx}
    boost_process
    boost_process-mt
    boost_process-mt${addrsfx}
    PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH)

target_link_libraries(ll::boost INTERFACE
    ${BOOST_FIBER_LIBRARY}
    ${BOOST_CONTEXT_LIBRARY}
    ${BOOST_FILESYSTEM_LIBRARY}
    ${BOOST_PROGRAMOPTIONS_LIBRARY}
    ${BOOST_URL_LIBRARY}
    ${BOOST_PROCESS_LIBRARY})

if (WINDOWS)
    # Boost.Process v2 needs ntdll (NtSuspendProcess/NtResumeProcess)
    target_link_libraries(ll::boost INTERFACE ntdll)
endif (WINDOWS)

if (LINUX)
    target_link_libraries(ll::boost INTERFACE rt)
endif (LINUX)

target_include_directories(ll::boost SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)