cmake_minimum_required(VERSION 3.10) project(Bluebell VERSION 0.1) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED True) include(FindPkgConfig) find_package(Boost 1.74 COMPONENTS log) list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/vendor/llvm/llvm/CMakeLists.txt") set(PATH_TO_LLVM "${CMAKE_CURRENT_LIST_DIR}/vendor/llvm/llvm") message(STATUS "Using vendored LLVM") set(LLVM_ENABLE_PROJECTS "" CACHE STRING "" FORCE) set(LLVM_ENABLE_RUNTIMES "" CACHE STRING "" FORCE) set(LLVM_BUILD_TOOLS YES CACHE BOOL "" FORCE) set(LLVM_TARGETS_TO_BUILD "X86;ARM;AArch64" CACHE STRING "" FORCE) set(LLVM_INCLUDE_BENCHMARKS NO CACHE BOOL "" FORCE) add_subdirectory(vendor/llvm/llvm llvm-build) get_target_property(LLVM_INCLUDE_DIRS LLVMSupport INCLUDE_DIRECTORIES) list(APPEND CMAKE_MODULE_PATH "${PATH_TO_LLVM}/cmake/modules") else() message(STATUS "Using system LLVM") find_package(LLVM 14 REQUIRED CONFIG) endif() include(AddLLVM) include(HandleLLVMOptions) if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/vendor/shaderc/CMakeLists.txt") set(SHADERC_SKIP_TESTS ON) set(SHADERC_ENABLE_WERROR_COMPILE OFF) add_subdirectory(vendor/shaderc) else() pkg_check_modules(shaderc REQUIRED IMPORTED_TARGET shaderc) endif() message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") include_directories(${LLVM_INCLUDE_DIRS}) add_definitions(${LLVM_DEFINITIONS}) add_executable(bluebell src/bluebell.cpp src/bluebell.hpp src/pre-compiler.cpp src/pre-compiler.hpp src/compiler.cpp src/compiler.hpp src/spv_meta.cpp src/spv_meta.hpp src/runtime.cpp src/runtime.hpp src/runtime_support.c) add_executable(render_stub src/render_frame/render_stub.c) message(STATUS "Include dirs are ${LLVM_INCLUDE_DIRS}") #target_link_libraries(bluebell PkgConfig::shaderc) #print(${LLVM_AVAILABLE_LIBS}) llvm_map_components_to_libnames(llvm_libs core native passes nativecodegen OrcJIT X86CodeGen X86Disassembler) target_link_libraries(bluebell shaderc_shared Boost::boost Boost::log ${llvm_libs})