100 lines
3.4 KiB
CMake
100 lines
3.4 KiB
CMake
cmake_minimum_required(VERSION 3.22)
|
|
project(CLICE)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_RELEASE} -w -fno-rtti -O0")
|
|
|
|
set(LLVM_INSTALL_PATH "${CMAKE_SOURCE_DIR}/deps/llvm/build-install")
|
|
|
|
set(CMAKE_PREFIX_PATH "${LLVM_INSTALL_PATH}")
|
|
find_package(LLVM REQUIRED CONFIG)
|
|
find_package(Clang REQUIRED CONFIG)
|
|
|
|
message(STATUS "Found LLVM: ${LLVM_DIR}, Version: ${LLVM_PACKAGE_VERSION}")
|
|
|
|
# copy clang builtin headers to output directory
|
|
if(NOT EXISTS "${CMAKE_BINARY_DIR}/lib/clang")
|
|
set(CLANG_BUILTIN_HEADERS_SOURCE "${LLVM_INSTALL_PATH}/lib/clang")
|
|
set(CLANG_BUILTIN_HEADERS_OUTPUT "${CMAKE_BINARY_DIR}/lib")
|
|
message(STATUS "Copying clang builtin headers to ${CLANG_BUILTIN_HEADERS_OUTPUT}")
|
|
file(MAKE_DIRECTORY ${CLANG_BUILTIN_HEADERS_OUTPUT})
|
|
file(COPY ${CLANG_BUILTIN_HEADERS_SOURCE} DESTINATION ${CLANG_BUILTIN_HEADERS_OUTPUT})
|
|
endif()
|
|
|
|
set(CLICE_CLANG_EXTRA_OUTPUT "${CMAKE_SOURCE_DIR}/deps/clang-extra/include/clang-extra")
|
|
if(NOT EXISTS ${CLICE_CLANG_EXTRA_OUTPUT})
|
|
set(CLICE_CLANG_EXTRA_SOURCE "${CMAKE_SOURCE_DIR}/deps/llvm/clang/lib/Sema")
|
|
set(CLICE_CLANG_EXTRA_SOURCE_FILES
|
|
${CLICE_CLANG_EXTRA_SOURCE}/CoroutineStmtBuilder.h
|
|
${CLICE_CLANG_EXTRA_SOURCE}/TypeLocBuilder.h
|
|
${CLICE_CLANG_EXTRA_SOURCE}/TreeTransform.h
|
|
)
|
|
message(STATUS "Copying clang extra headers to ${CLICE_CLANG_EXTRA_SOURCE_FILES}")
|
|
file(MAKE_DIRECTORY ${CLICE_CLANG_EXTRA_OUTPUT})
|
|
file(COPY ${CLICE_CLANG_EXTRA_SOURCE_FILES} DESTINATION ${CLICE_CLANG_EXTRA_OUTPUT})
|
|
endif()
|
|
|
|
function(target_clang target)
|
|
target_precompile_headers(${target} PRIVATE
|
|
"${CMAKE_SOURCE_DIR}/include/AST/Diagnostic.h"
|
|
)
|
|
target_include_directories(${target} PRIVATE
|
|
${LLVM_INCLUDE_DIRS}
|
|
${CMAKE_SOURCE_DIR}/include
|
|
${CMAKE_SOURCE_DIR}/deps/clang-extra/include
|
|
)
|
|
target_link_libraries(${target} PRIVATE
|
|
LLVMSupport
|
|
clangAST
|
|
clangASTMatchers
|
|
clangBasic
|
|
clangDependencyScanning
|
|
clangDriver
|
|
clangFormat
|
|
clangFrontend
|
|
clangIndex
|
|
clangLex
|
|
clangSema
|
|
clangSerialization
|
|
clangTooling
|
|
clangToolingCore
|
|
clangToolingInclusions
|
|
clangToolingInclusionsStdlib
|
|
clangToolingSyntax
|
|
)
|
|
endfunction()
|
|
|
|
add_subdirectory(${CMAKE_SOURCE_DIR}/deps/libuv)
|
|
add_subdirectory(${CMAKE_SOURCE_DIR}/deps/spdlog)
|
|
|
|
add_executable(clice)
|
|
|
|
target_clang(clice)
|
|
|
|
file(GLOB_RECURSE SRC_FILES "${CMAKE_SOURCE_DIR}/src/*/*.cpp")
|
|
target_sources(clice PRIVATE ${SRC_FILES} "${CMAKE_SOURCE_DIR}/src/main.cpp")
|
|
|
|
target_include_directories(clice PRIVATE
|
|
"${CMAKE_SOURCE_DIR}/deps/libuv/include"
|
|
"${CMAKE_SOURCE_DIR}/deps/spdlog/include"
|
|
"${CMAKE_SOURCE_DIR}/deps/toml/include"
|
|
)
|
|
|
|
target_link_libraries(clice PRIVATE uv spdlog::spdlog)
|
|
|
|
if(CLICE_ENABLE_TEST)
|
|
add_executable(clice_test)
|
|
|
|
# add googletest
|
|
add_subdirectory("${CMAKE_SOURCE_DIR}/deps/googletest")
|
|
target_include_directories(clice_test PRIVATE "${CMAKE_SOURCE_DIR}/deps/googletest/googletest/include")
|
|
target_link_libraries(clice_test PRIVATE gtest_main)
|
|
|
|
target_clang(clice_test)
|
|
file(GLOB_RECURSE AST_SRC_FILES "${CMAKE_SOURCE_DIR}/src/AST/*.cpp")
|
|
file(GLOB_RECURSE TEST_SRC_FILES "${CMAKE_SOURCE_DIR}/tests/*.cpp")
|
|
target_sources(clice_test PRIVATE ${AST_SRC_FILES} ${TEST_SRC_FILES})
|
|
endif()
|