Move back the llvm setup to the main cmake config as suggested by llvm itself

This commit is contained in:
Sameer Rahmani 2023-05-17 21:27:15 +01:00
parent 66da4b5401
commit 990de49c23
Signed by: lxsameer
GPG Key ID: B0A4AF28AB9FD90B
3 changed files with 54 additions and 43 deletions

View File

@ -141,6 +141,49 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
list(APPEND CMAKE_MODULE_PATH ${catch2_SOURCE_DIR}/extras)
endif()
# LLVM setup ==================================================================
# Why not specify the version?
# Since we use the development version of the LLVM all the time it doesn't
# make sense to use a version here
find_package(LLVM REQUIRED CONFIG)
find_package(MLIR REQUIRED CONFIG)
find_package(LLD REQUIRED CONFIG)
find_program(LLD_PROGRAM REQUIRED NAMES lld)
find_program(MLIRTBLGEN_PROGRAM REQUIRED NAMES mlir-tblgen)
find_package(Clang REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
message(STATUS "Using MLIRConfig.cmake in: ${MLIR_DIR}")
message(STATUS "Using LLDConfig.cmake in: ${LLD_DIR}")
message(STATUS "Using CLANGConfig.cmake in: ${Clang_DIR}")
set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/lib)
set(MLIR_BINARY_DIR ${CMAKE_BINARY_DIR})
# Make cmake modules available to load
list(APPEND CMAKE_MODULE_PATH "${MLIR_DIR}")
list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}")
list(APPEND CMAKE_MODULE_PATH "${LLD_DIR}")
list(APPEND CMAKE_MODULE_PATH "${Clang_DIR}")
include(TableGen)
include(AddLLVM)
include(AddMLIR)
include(HandleLLVMOptions)
include(AddClang)
# This goes against the CMake's best practices to add
# these kind of settings to the targets only. But this
# is what LLVM recommends and we will stick to their
# recommendation.
include_directories(SYSTEM ${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
# /LLVM setup =================================================================
add_subdirectory(serene)
# include(tablegen-serene)
# Create the tools we use to compile Serene

View File

@ -228,8 +228,8 @@ function clean() { ## Cleans up the source dir and removes the build
git clean -dxf
}
function run() { ## Runs `serenec` and passes all the given aruguments to it
"$BUILD_DIR"/serenec/serenec "$@"
function run() { ## Runs `serene` and passes all the given aruguments to it
"$BUILD_DIR"/serene/serene "$@"
}
function lldb-run() { ## Runs `serenec` under lldb

View File

@ -14,41 +14,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# LLVM setup ==================================================================
# Why not specify the version?
# Since we use the development version of the LLVM all the time it doesn't
# make sense to use a version here
find_package(LLVM REQUIRED CONFIG)
find_package(MLIR REQUIRED CONFIG)
find_package(LLD REQUIRED CONFIG)
find_program(LLD_PROGRAM REQUIRED NAMES lld)
find_package(BDWgc 8.2.0 REQUIRED)
find_program(MLIRTBLGEN_PROGRAM REQUIRED NAMES mlir-tblgen)
find_package(Clang REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
message(STATUS "Using MLIRConfig.cmake in: ${MLIR_DIR}")
message(STATUS "Using LLDConfig.cmake in: ${LLD_DIR}")
message(STATUS "Using CLANGConfig.cmake in: ${Clang_DIR}")
set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/lib)
set(MLIR_BINARY_DIR ${CMAKE_BINARY_DIR})
# Make cmake modules available to load
list(APPEND CMAKE_MODULE_PATH "${MLIR_DIR}")
list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}")
list(APPEND CMAKE_MODULE_PATH "${LLD_DIR}")
list(APPEND CMAKE_MODULE_PATH "${Clang_DIR}")
include(TableGen)
include(AddLLVM)
include(AddMLIR)
include(HandleLLVMOptions)
include(AddClang)
# /LLVM setup =================================================================
# Main Binary =================================================================
add_executable(serene)
@ -74,12 +40,14 @@ target_include_directories(serene
${CMAKE_CURRENT_SOURCE_DIR}/include
)
# We don't want the generated files from table gen
# to be treated as local since the contain warnings
target_include_directories(serene SYSTEM PRIVATE
${PROJECT_BINARY_DIR}/include
)
target_include_directories(serene SYSTEM PUBLIC
# We don't want the generated files from table gen
# to be treated as local since the contain warnings
${PROJECT_BINARY_DIR}/serene/include)
target_link_libraries(serene PRIVATE
LLVMSupport
)
# Autogenerate the `config.h` file
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/serene/config.h.in include/serene/config.h)
@ -118,8 +86,7 @@ target_compile_options(serene
$<$<CONFIG:RELEASE>:-fmerge-all-constants>
)
target_link_options(serene
PRIVATE
target_link_options(serene PRIVATE
$<$<NOT:$<BOOL:${SERENE_DISABLE_LIBCXX}>>:-stdlib=libc++>
$<$<NOT:$<BOOL:${SERENE_DISABLE_LIBCXX}>>:-lc++abi>
$<$<NOT:$<BOOL:${SERENE_DISABLE_COMPILER_RT}>>:--rtlib=compiler-rt>
@ -133,6 +100,7 @@ target_link_options(serene
--static
)
if(SERENE_ENABLE_BUILDID)
target_link_options(serene -Wl,--build-id)
endif()