initial commit

This commit is contained in:
Ayman El Didi 2026-01-08 22:51:45 -07:00
commit 8385bbb030
7 changed files with 562 additions and 0 deletions

83
CMakeLists.txt Normal file
View file

@ -0,0 +1,83 @@
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
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:
-Wall -Wextra>
$<$<CXX_COMPILER_ID:MSVC>:
/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()