cmake_minimum_required(VERSION 3.20)
project(colgm-mlir
VERSION 0.0.1
DESCRIPTION "Experimental MLIR-based compiler"
LANGUAGES CXX C
)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif()
set(LLVM_DIR "" CACHE PATH "Path to LLVM cmake directory")
set(MLIR_DIR "" CACHE PATH "Path to MLIR cmake directory")
option(ENABLE_MLIR "Enable MLIR support" OFF)
if(ENABLE_MLIR)
if(NOT LLVM_DIR OR NOT MLIR_DIR)
file(GLOB LLVM_DIRS LIST_DIRECTORIES true
"${CMAKE_SOURCE_DIR}/bin/LLVM-*")
if(LLVM_DIRS)
list(GET LLVM_DIRS 0 LLVM_PREFIX)
set(LLVM_DIR "${LLVM_PREFIX}/lib/cmake/llvm")
set(MLIR_DIR "${LLVM_PREFIX}/lib/cmake/mlir")
endif()
endif()
if(LLVM_DIR AND MLIR_DIR)
find_package(LLVM REQUIRED CONFIG PATHS "${LLVM_DIR}" NO_DEFAULT_PATH)
find_package(MLIR REQUIRED CONFIG PATHS "${MLIR_DIR}" NO_DEFAULT_PATH)
include_directories(${LLVM_INCLUDE_DIRS})
include_directories(${MLIR_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
message(STATUS "MLIR support enabled (LLVM ${LLVM_PACKAGE_VERSION})")
else()
message(FATAL_ERROR "ENABLE_MLIR=ON but LLVM_DIR or MLIR_DIR not found. "
"Run scripts/download_llvm.py first.")
endif()
endif()
set(COLOGM_SOURCES
src/ast/ast.cpp
src/ast/decl.cpp
src/ast/expr.cpp
src/ast/stmt.cpp
src/ast/visitor.cpp
src/lexer/lexer.cpp
src/parse/parser.cpp
src/report/report.cpp
src/utils/misc.cpp
src/utils/span.cpp
src/main.cpp
)
add_library(colgm_mlir_core STATIC
src/ast/ast.cpp
src/ast/decl.cpp
src/ast/expr.cpp
src/ast/stmt.cpp
src/ast/visitor.cpp
src/lexer/lexer.cpp
src/parse/parser.cpp
src/report/report.cpp
src/utils/misc.cpp
src/utils/span.cpp
)
target_include_directories(colgm_mlir_core PUBLIC
"${CMAKE_SOURCE_DIR}/src"
)
if(NOT WIN32)
target_link_libraries(colgm_mlir_core PUBLIC pthread)
endif()
add_executable(colgm-mlir src/main.cpp)
target_include_directories(colgm-mlir PRIVATE
"${CMAKE_SOURCE_DIR}/src"
)
target_link_libraries(colgm-mlir PRIVATE colgm_mlir_core)
if(ENABLE_MLIR)
target_link_libraries(colgm_mlir_core PRIVATE
${LLVM_LIBRARIES}
${MLIR_LIBRARIES}
)
target_link_libraries(colgm-mlir PRIVATE
${LLVM_LIBRARIES}
${MLIR_LIBRARIES}
)
endif()
install(TARGETS colgm_mlir_core colgm-mlir
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib
)
target_compile_definitions(colgm_mlir_core PRIVATE
__colgm_ver__="${PROJECT_VERSION}"
)
target_compile_definitions(colgm-mlir PRIVATE
__colgm_ver__="${PROJECT_VERSION}"
)