File: CMakeLists.txt

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (63 lines) | stat: -rw-r--r-- 2,347 bytes parent folder | download | duplicates (2)
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
# Building libclang-cpp.so fails if LLVM_ENABLE_PIC=Off
if (NOT LLVM_ENABLE_PIC)
  return()
endif()

get_property(clang_libs GLOBAL PROPERTY CLANG_STATIC_LIBS)

foreach (lib ${clang_libs})
  if(XCODE)
    # Xcode doesn't support object libraries, so we have to trick it into
    # linking the static libraries instead.
    list(APPEND _DEPS "-force_load" ${lib})
  else()
    list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>)
  endif()
  if (BUILD_SHARED_LIBS)
    # If we are building static libraries, then we don't need to add the static
    # libraries as a dependency, because we are already linking against the
    # individual object files.
    list(APPEND _DEPS $<TARGET_PROPERTY:${lib},INTERFACE_LINK_LIBRARIES>)
  endif()

  # clang libraries are redundant since we are linking all the individual
  # object files into libclang-cpp.so, so filter them out from _DEPS.
  # This avoids problems with LLVM global data when building with
  # BUILD_SHARED_LIBS=ON
  # FIXME: We could use list(FILTER) with cmake >= 3.6
  # FIXME: With cmake >= 3.15 we could use the generator expression
  # $<FILTER:list,INCLUDE|EXCLUDE,regex>
  get_target_property(interface ${lib} LINK_LIBRARIES)
  if (interface)
    foreach(lib ${interface})
      if (NOT ${lib} MATCHES "^clang")
        list(APPEND _DEPS ${lib})
      endif()
    endforeach()
  endif()
endforeach ()

if (CLANG_LINK_CLANG_DYLIB)
  set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN)
endif()

add_clang_library(clang-cpp
                  SHARED
                  ${INSTALL_WITH_TOOLCHAIN}
                  clang-shlib.cpp
                  ${_OBJECTS}
                  LINK_LIBS
                  ${_DEPS})
# Optimize function calls for default visibility definitions to avoid PLT and
# reduce dynamic relocations.
if (NOT APPLE AND NOT MINGW)
  target_link_options(clang-cpp PRIVATE LINKER:-Bsymbolic-functions)
endif()
if (MINGW OR CYGWIN)
  # The clang-cpp DLL is supposed to export all symbols (except for ones
  # that are explicitly hidden). Normally, this is what happens anyway, but
  # if there are symbols that are marked explicitly as dllexport, we'd only
  # export them and nothing else. Therefore, add --export-all-symbols to
  # make sure we export all symbols despite potential dllexports.
  target_link_options(clang-cpp PRIVATE LINKER:--export-all-symbols)
endif()