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