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