xref: /llvm-project/compiler-rt/lib/orc/CMakeLists.txt (revision 8daf4f16fa08b5d876e98108721dd1743a360326)
1# Build for all components of the ORC runtime support library.
2
3# ORC runtime library common implementation files.
4set(ORC_COMMON_SOURCES
5  debug.cpp
6  dlfcn_wrapper.cpp
7  extensible_rtti.cpp
8  log_error_to_stderr.cpp
9  run_program_wrapper.cpp
10  resolve.cpp
11  )
12
13# Common implementation headers will go here.
14set(ORC_COMMON_IMPL_HEADERS
15  adt.h
16  common.h
17  compiler.h
18  endianness.h
19  error.h
20  executor_address.h
21  extensible_rtti.h
22  simple_packed_serialization.h
23  stl_extras.h
24  wrapper_function_utils.h
25  )
26
27# Now put it all together...
28include_directories(..)
29include_directories(../../include)
30
31set(ORC_CFLAGS
32  ${COMPILER_RT_COMMON_CFLAGS}
33  ${COMPILER_RT_CXX_CFLAGS})
34set(ORC_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS})
35set(ORC_LINK_LIBS
36  ${COMPILER_RT_UNWINDER_LINK_LIBS}
37  ${COMPILER_RT_CXX_LINK_LIBS})
38
39# Allow the ORC runtime to reference LLVM headers.
40foreach (DIR ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})
41  list(APPEND ORC_CFLAGS -I${DIR})
42endforeach()
43
44add_compiler_rt_component(orc)
45
46# ORC uses C++ standard library headers.
47if (TARGET cxx-headers OR HAVE_LIBCXX)
48  set(ORC_DEPS cxx-headers)
49endif()
50
51if (APPLE)
52  set(ORC_ASM_SOURCES
53    macho_tlv.x86-64.S
54    macho_tlv.arm64.S
55    sysv_reenter.arm64.S
56    sysv_reenter.x86-64.S
57    )
58
59  set(ORC_IMPL_HEADERS
60    ${ORC_COMMON_IMPL_HEADERS}
61    macho_platform.h
62    )
63
64  set(ORC_SOURCES
65    ${ORC_COMMON_SOURCES}
66    macho_platform.cpp
67    )
68
69  add_compiler_rt_object_libraries(RTOrc
70    OS ${ORC_SUPPORTED_OS}
71    ARCHS ${ORC_SUPPORTED_ARCH}
72    SOURCES ${ORC_SOURCES} ${ORC_ASM_SOURCES}
73    ADDITIONAL_HEADERS ${ORC_IMPL_HEADERS}
74    CFLAGS ${ORC_CFLAGS}
75    DEPS ${ORC_DEPS})
76
77  add_compiler_rt_runtime(orc_rt
78    STATIC
79    OS ${ORC_SUPPORTED_OS}
80    ARCHS ${ORC_SUPPORTED_ARCH}
81    OBJECT_LIBS RTOrc
82    CFLAGS ${ORC_CFLAGS}
83    LINK_FLAGS ${ORC_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}
84    LINK_LIBS ${ORC_LINK_LIBS}
85    PARENT_TARGET orc)
86else() # not Apple
87  if (WIN32)
88    set(ORC_BUILD_TYPE STATIC)
89
90    set(ORC_IMPL_HEADERS
91      ${ORC_COMMON_IMPL_HEADERS}
92      coff_platform.h
93      )
94
95    set(ORC_SOURCES
96      ${ORC_COMMON_SOURCES}
97      coff_platform.cpp
98      coff_platform.per_jd.cpp
99      )
100
101    if (MSVC)
102      set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
103      set(ORC_CFLAGS ${ORC_CFLAGS} /D_HAS_EXCEPTIONS=0 )
104    endif()
105  else()
106    set(ORC_BUILD_TYPE STATIC)
107
108    set(ORC_IMPL_HEADERS
109      ${ORC_COMMON_IMPL_HEADERS}
110      elfnix_platform.h
111      )
112
113    set(ORC_SOURCES
114      ${ORC_COMMON_SOURCES}
115      elfnix_platform.cpp
116      )
117
118    set(ORC_ASM_SOURCES
119      elfnix_tls.x86-64.S
120      elfnix_tls.aarch64.S
121      elfnix_tls.ppc64.S
122      sysv_reenter.arm64.S
123      sysv_reenter.x86-64.S
124      )
125  endif()
126
127  foreach(arch ${ORC_SUPPORTED_ARCH})
128    if(NOT CAN_TARGET_${arch})
129      continue()
130    endif()
131
132    add_compiler_rt_object_libraries(RTOrc
133      ARCHS ${arch}
134      SOURCES ${ORC_SOURCES} ${ORC_ASM_SOURCES}
135      ADDITIONAL_HEADERS ${ORC_IMPL_HEADERS}
136      CFLAGS ${ORC_CFLAGS}
137      DEPS ${ORC_DEPS})
138
139    # Common ORC archive for instrumented binaries.
140    add_compiler_rt_runtime(orc_rt
141      ${ORC_BUILD_TYPE}
142      ARCHS ${arch}
143      CFLAGS ${ORC_CFLAGS}
144      LINK_FLAGS ${ORC_LINK_FLAGS}
145      LINK_LIBS ${ORC_LINK_LIBS}
146      OBJECT_LIBS ${ORC_COMMON_RUNTIME_OBJECT_LIBS} RTOrc
147      PARENT_TARGET orc)
148  endforeach()
149endif() # not Apple
150
151add_subdirectory(tests)
152