cmake_minimum_required(VERSION 3.20) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE) endif() project(errorck LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(REQUIRED_LLVM_VERSION "18.1.8" CACHE STRING "Required LLVM/Clang version") set(LLVM_ROOT "" CACHE PATH "Prefix containing lib/cmake/llvm and lib/cmake/clang") set(LLVM_TAG "llvmorg-18.1.8" CACHE STRING "llvm-project git tag/commit to fetch") if(LLVM_ROOT) list(PREPEND CMAKE_PREFIX_PATH "${LLVM_ROOT}") endif() find_package(LLVM CONFIG QUIET) find_package(Clang CONFIG QUIET) if(LLVM_FOUND AND DEFINED LLVM_PACKAGE_VERSION AND NOT (LLVM_PACKAGE_VERSION VERSION_EQUAL REQUIRED_LLVM_VERSION)) if(LLVM_ROOT) message(FATAL_ERROR "Found LLVM ${LLVM_PACKAGE_VERSION} at LLVM_ROOT, but required ${REQUIRED_LLVM_VERSION}.") else() set(LLVM_FOUND FALSE) set(Clang_FOUND FALSE) endif() endif() if(NOT (LLVM_FOUND AND Clang_FOUND)) include(FetchContent) FetchContent_Declare( llvm_project GIT_REPOSITORY https://github.com/llvm/llvm-project.git GIT_TAG ${LLVM_TAG} SOURCE_SUBDIR llvm ) set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra" CACHE STRING "" FORCE) FetchContent_MakeAvailable(llvm_project) endif() add_executable(errorck "${CMAKE_CURRENT_LIST_DIR}/main.cpp") target_compile_options(errorck PRIVATE $<$,$,$>: -Wall -Wextra> $<$: /W4>) target_include_directories(errorck PRIVATE ${LLVM_INCLUDE_DIRS}) target_compile_definitions(errorck PRIVATE ${LLVM_DEFINITIONS}) if(DEFINED CLANG_INCLUDE_DIRS) target_include_directories(errorck PRIVATE ${CLANG_INCLUDE_DIRS}) endif() if(NOT (LLVM_FOUND AND Clang_FOUND)) target_include_directories(errorck PRIVATE ${LLVM_SOURCE_DIR}/include ${LLVM_BINARY_DIR}/include ${LLVM_EXTERNAL_CLANG_SOURCE_DIR}/include ${LLVM_BINARY_DIR}/tools/clang/include ) endif() if(TARGET clang-cpp) target_link_libraries(errorck PRIVATE clang-cpp) else() target_link_libraries(errorck PRIVATE clangTooling clangFrontend clangSerialization clangDriver clangParse clangSema clangAnalysis clangRewrite clangAST clangASTMatchers clangEdit clangLex clangBasic ) endif()