mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 22:00:10 +00:00
Initial, very rough cut at a new CMake build system for compiler-rt.
Some high-level notes: 1) An explicit goal is to support building compiler-rt as a subproject build, checked out into the projects/compiler-rt directory. There are many other possible ways of building the code here, but this is optimized for development on LLVM/Clang/compiler-rt, and incremental trial and testing of the toolchain. 2) The current support is targeted at Linux. I would love to see this generalized to other platforms, but for the sake of simplicity in testing, I'm focusing here first. Much of this patch was paired with Manuel, and I credit him with the majority of the work here. Some important caveats that I'll be working on in subsequent patches: 1) This uses the host compiler rather than using the just-built-clang. 2) Currently only x86 is supported. 3) Currently, none of the tests are built or run. 4) Uses CMake's builtin globbing which doesn't update correctly. 5) This is still turned off from LLVM's CMake build until these issues are addressed llvm-svn: 154060
This commit is contained in:
parent
6acfaaf3aa
commit
1f5d5c0e13
49
compiler-rt/CMakeLists.txt
Normal file
49
compiler-rt/CMakeLists.txt
Normal file
@ -0,0 +1,49 @@
|
||||
# CMake build for CompilerRT.
|
||||
#
|
||||
# This build assumes that CompilerRT is checked out into the
|
||||
# 'projects/compiler-rt' inside of an LLVM tree, it is not a stand-alone build
|
||||
# system.
|
||||
#
|
||||
# An important constraint of the build is that it only produces libraries
|
||||
# based on the ability of the host toolchain to target various platforms.
|
||||
|
||||
include(LLVMParseArguments)
|
||||
|
||||
# FIXME: Below we assume that the target build of LLVM/Clang is x86, which is
|
||||
# not at all valid. Much of this can be fixed just by switching to use
|
||||
# a just-built-clang binary for the compiles.
|
||||
|
||||
# Detect whether the current target platform is 32-bit or 64-bit, and setup
|
||||
# the correct commandline flags needed to attempt to target 32-bit and 64-bit.
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
set(TARGET_X86_64_CFLAGS "-m64")
|
||||
set(TARGET_I386_CFLAGS "")
|
||||
else()
|
||||
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
message(FATAL_ERROR "Please use a sane architecture with 4 or 8 byte pointers.")
|
||||
endif()
|
||||
set(TARGET_X86_64_CFLAGS "")
|
||||
set(TARGET_I386_CFLAGS "-m32")
|
||||
endif()
|
||||
|
||||
# Try to compile a very simple source file to ensure we can target the given
|
||||
# platform. We use the results of these tests to build only the various target
|
||||
# runtime libraries supported by our current compilers cross-compiling
|
||||
# abilities.
|
||||
set(SIMPLE_SOURCE64 ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/simple64.c)
|
||||
file(WRITE ${SIMPLE_SOURCE64} "#include <stdlib.h>\nint main() {}")
|
||||
try_compile(CAN_TARGET_X86_64 ${CMAKE_BINARY_DIR} ${SIMPLE_SOURCE64}
|
||||
COMPILE_DEFINITIONS "${TARGET_X86_64_CFLAGS}"
|
||||
CMAKE_FLAGS "-DCMAKE_EXE_LINKER_FLAGS:STRING=${TARGET_X86_64_CFLAGS}")
|
||||
|
||||
set(SIMPLE_SOURCE32 ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/simple32.c)
|
||||
file(WRITE ${SIMPLE_SOURCE32} "#include <stdlib.h>\nint main() {}")
|
||||
try_compile(CAN_TARGET_I386 ${CMAKE_BINARY_DIR} ${SIMPLE_SOURCE32}
|
||||
COMPILE_DEFINITIONS "${TARGET_I386_CFLAGS}"
|
||||
CMAKE_FLAGS "-DCMAKE_EXE_LINKER_FLAGS:STRING=${TARGET_I386_CFLAGS}")
|
||||
|
||||
add_subdirectory(lib)
|
||||
|
||||
if(LLVM_INCLUDE_TESTS)
|
||||
add_subdirectory(test)
|
||||
endif()
|
28
compiler-rt/lib/CMakeLists.txt
Normal file
28
compiler-rt/lib/CMakeLists.txt
Normal file
@ -0,0 +1,28 @@
|
||||
# The top-level lib directory contains a large amount of C code which provides
|
||||
# generic implementations of the core runtime library along with optimized
|
||||
# architecture-specific code in various subdirectories.
|
||||
|
||||
file(GLOB GENERIC_SOURCES . "*.c")
|
||||
|
||||
# FIXME: We don't currently support building an atomic library, and as it must
|
||||
# be a separate library from the runtime library, we need to remove its source
|
||||
# code from the glob.
|
||||
file(GLOB ATOMIC . "atomic.c")
|
||||
list(REMOVE_ITEM GENERIC_SOURCES ${ATOMIC})
|
||||
|
||||
if(CAN_TARGET_X86_64)
|
||||
file(GLOB X86_64_SOURCES . "*.c" "*.S")
|
||||
add_library(clang_rt.x86_64 STATIC ${X86_64_SOURCES} ${GENERIC_SOURCES})
|
||||
set_target_properties(clang_rt.x86_64 PROPERTIES COMPILE_FLAGS "${TARGET_X86_64_CFLAGS}")
|
||||
endif()
|
||||
if(CAN_TARGET_I386)
|
||||
file(GLOB I386_SOURCES . "*.c" "*.S")
|
||||
add_library(clang_rt.i386 STATIC ${I386_SOURCES} ${GENERIC_SOURCES})
|
||||
set_target_properties(clang_rt.i386 PROPERTIES COMPILE_FLAGS "${TARGET_I386_CFLAGS}")
|
||||
endif()
|
||||
|
||||
# Also support building feature-based runtime libraries in their various
|
||||
# subdircetories.
|
||||
add_subdirectory(asan)
|
||||
|
||||
# FIXME: Add support for the profile library.
|
12
compiler-rt/lib/asan/CMakeLists.txt
Normal file
12
compiler-rt/lib/asan/CMakeLists.txt
Normal file
@ -0,0 +1,12 @@
|
||||
# Build for the AddressSanitizer runtime support library.
|
||||
|
||||
file(GLOB ASAN_SOURCES "*.cc")
|
||||
|
||||
if(CAN_TARGET_X86_64)
|
||||
add_library(clang_rt.asan-x86_64 STATIC ${ASAN_SOURCES})
|
||||
set_target_properties(clang_rt.asan-x86_64 PROPERTIES COMPILE_FLAGS "${TARGET_X86_64_CFLAGS}")
|
||||
endif()
|
||||
if(CAN_TARGET_I386)
|
||||
add_library(clang_rt.asan-i386 STATIC ${ASAN_SOURCES})
|
||||
set_target_properties(clang_rt.asan-i386 PROPERTIES COMPILE_FLAGS "${TARGET_I386_CFLAGS}")
|
||||
endif()
|
Loading…
Reference in New Issue
Block a user