cmake_minimum_required(VERSION 3.15) include(CMakePrintHelpers) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE) endif() # Set C++ standard set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED YES) project(bb) find_package(LLVM REQUIRED CONFIG) find_package(LLD REQUIRED CONFIG) add_executable(bb src/lib.cpp src/entry_point.cpp src/compiler.cpp src/parser.cpp src/emitter.cpp src/llvm.cpp ) target_include_directories(bb PUBLIC src) target_compile_definitions(bb PUBLIC $<$:BB_DEBUG=1> $<$>:BB_DEBUG=0> ) target_link_libraries(bb PUBLIC ${LLVM_AVAILABLE_LIBS}) find_library(LLD_COMMON NAMES liblldCommon.dylib lldCommon.lib lldCommon.a liblldCommon.dll.a liblldCommon.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) find_library(LLD_ELF NAMES liblldELF.dylib lldELF.lib lldELF.a liblldELF.dll.a liblldELF.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) # find_library(LLD_COFF NAMES liblldCOFF.dylib lldCOFF.lib lldCOFF.a liblldCOFF.dll.a liblldCOFF.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) # find_library(LLD_MACHO NAMES liblldMachO.dylib lldMachO.lib lldMachO.a liblldMachO.dll.a liblldMachO.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) # find_library(LLD_MINGW NAMES liblldMinGW.dylib lldMinGW.lib lldMinGW.a liblldMinGW.dll.a liblldMinGW.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) # find_library(LLD_WASM NAMES liblldWasm.dylib lldWasm.lib lldWasm.a liblldWasm.dll.a liblldWasm.a PATHS ${LLVM_LIBRARY_DIRS} NO_DEFAULT_PATH) target_link_libraries(bb PUBLIC ${LLD_COMMON} # ${LLD_COFF} ${LLD_ELF} # ${LLD_MACHO} # ${LLD_MINGW} # ${LLD_WASM} ) target_compile_options(bb PRIVATE -Wall -Wextra -pedantic -Wpedantic -Werror -Wno-c99-extensions -Wno-unused-function -funsigned-char -fwrapv -fno-strict-aliasing) if (NOT APPLE) target_compile_options(bb PRIVATE -Wno-missing-designated-field-initializers) endif() # target_compile_options(bb PRIVATE -fsanitize=address) # target_link_options(bb PRIVATE -fsanitize=address)