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  extensible_rtti.cpp
7  log_error_to_stderr.cpp
8  run_program_wrapper.cpp
9  dlfcn_wrapper.cpp
10  )
11
12# ORC runtime library implementation files for all ORC architectures.s
13set(ALL_ORC_SOURCES
14  ${ORC_COMMON_SOURCES}
15  coff_platform.cpp
16  coff_platform.per_jd.cpp
17  elfnix_platform.cpp
18  macho_platform.cpp
19  )
20
21# Implementation files for all ORC architectures.
22set(ALL_ORC_ASM_SOURCES
23  macho_tlv.x86-64.S
24  macho_tlv.arm64.S
25  elfnix_tls.x86-64.S
26  elfnix_tls.aarch64.S
27  )
28
29# Common implementation headers will go here.
30set(ORC_COMMON_IMPL_HEADERS
31  adt.h
32  common.h
33  compiler.h
34  endianness.h
35  error.h
36  executor_address.h
37  extensible_rtti.h
38  simple_packed_serialization.h
39  stl_extras.h
40  wrapper_function_utils.h
41  )
42
43# Implementation headers for all ORC architectures.
44set(ALL_ORC_IMPL_HEADERS
45  ${ORC_COMMON_IMPL_HEADERS}
46  macho_platform.h
47  coff_platform.h
48  elfnix_platform.h
49  )
50
51# Create list of all source files for
52# consumption by tests.
53set(ORC_ALL_SOURCE_FILES
54  ${ALL_ORC_SOURCES}
55  ${ALL_ORC_ASM_SOURCES}
56  ${ALL_ORC_IMPL_HEADERS}
57  )
58
59list(REMOVE_DUPLICATES ORC_ALL_SOURCE_FILES)
60
61# Now put it all together...
62include_directories(..)
63include_directories(../../include)
64
65set(ORC_CFLAGS
66  ${COMPILER_RT_COMMON_CFLAGS}
67  ${COMPILER_RT_CXX_CFLAGS})
68set(ORC_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS})
69set(ORC_LINK_LIBS
70  ${COMPILER_RT_UNWINDER_LINK_LIBS}
71  ${COMPILER_RT_CXX_LINK_LIBS})
72
73# Allow the ORC runtime to reference LLVM headers.
74foreach (DIR ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})
75  list(APPEND ORC_CFLAGS -I${DIR})
76endforeach()
77
78add_compiler_rt_component(orc)
79
80# ORC uses C++ standard library headers.
81if (TARGET cxx-headers OR HAVE_LIBCXX)
82  set(ORC_DEPS cxx-headers)
83endif()
84
85if (APPLE)
86  add_asm_sources(ORC_ASM_SOURCES
87    macho_tlv.x86-64.S
88    macho_tlv.arm64.S
89    )
90
91  set(ORC_IMPL_HEADERS
92    ${ORC_COMMON_IMPL_HEADERS}
93    macho_platform.h
94    )
95
96  set(ORC_SOURCES
97    ${ORC_COMMON_SOURCES}
98    macho_platform.cpp
99    )
100
101  add_compiler_rt_object_libraries(RTOrc
102    OS ${ORC_SUPPORTED_OS}
103    ARCHS ${ORC_SUPPORTED_ARCH}
104    SOURCES ${ORC_SOURCES} ${ORC_ASM_SOURCES}
105    ADDITIONAL_HEADERS ${ORC_IMPL_HEADERS}
106    CFLAGS ${ORC_CFLAGS}
107    DEPS ${ORC_DEPS})
108
109  add_compiler_rt_runtime(orc_rt
110    STATIC
111    OS ${ORC_SUPPORTED_OS}
112    ARCHS ${ORC_SUPPORTED_ARCH}
113    OBJECT_LIBS RTOrc
114    CFLAGS ${ORC_CFLAGS}
115    LINK_FLAGS ${ORC_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}
116    LINK_LIBS ${ORC_LINK_LIBS}
117    PARENT_TARGET orc)
118else() # not Apple
119  if (WIN32)
120    set(ORC_BUILD_TYPE STATIC)
121
122    set(ORC_IMPL_HEADERS
123      ${ORC_COMMON_IMPL_HEADERS}
124      coff_platform.h
125      )
126
127    set(ORC_SOURCES
128      ${ORC_COMMON_SOURCES}
129      coff_platform.cpp
130      coff_platform.per_jd.cpp
131      )
132
133    if (MSVC)
134      set(ORC_CFLAGS "${ORC_CFLAGS} /MD")
135    endif()
136  else()
137    set(ORC_BUILD_TYPE STATIC)
138
139    set(ORC_IMPL_HEADERS
140      ${ORC_COMMON_IMPL_HEADERS}
141      elfnix_platform.h
142      )
143
144    set(ORC_SOURCES
145      ${ORC_COMMON_SOURCES}
146      elfnix_platform.cpp
147      )
148
149    add_asm_sources(ORC_ASM_SOURCES
150      elfnix_tls.x86-64.S
151      elfnix_tls.aarch64.S
152      )
153  endif()
154
155  foreach(arch ${ORC_SUPPORTED_ARCH})
156    if(NOT CAN_TARGET_${arch})
157      continue()
158    endif()
159
160    add_compiler_rt_object_libraries(RTOrc
161      ARCHS ${arch}
162      SOURCES ${ORC_SOURCES} ${ORC_ASM_SOURCES}
163      ADDITIONAL_HEADERS ${ORC_IMPL_HEADERS}
164      CFLAGS ${ORC_CFLAGS}
165      DEPS ${ORC_DEPS})
166
167    # Common ORC archive for instrumented binaries.
168    add_compiler_rt_runtime(orc_rt
169      ${ORC_BUILD_TYPE}
170      ARCHS ${arch}
171      CFLAGS ${ORC_CFLAGS}
172      LINK_FLAGS ${ORC_LINK_FLAGS}
173      LINK_LIBS ${ORC_LINK_LIBS}
174      OBJECT_LIBS ${ORC_COMMON_RUNTIME_OBJECT_LIBS} RTOrc
175      PARENT_TARGET orc)
176  endforeach()
177endif() # not Apple
178
179add_subdirectory(tests)
180