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