cmake_minimum_required(VERSION 3.12) project(toyc) set(CMAKE_CXX_STANDARD 14) find_package(LLVM CONFIG PATHS "${MLIR_INSTALL_PREFIX}" NO_DEFAULT_PATH) if (LLVM_FOUND) message(STATUS "Using LLVM ${LLVM_PACKAGE_VERSION} at ${LLVM_INSTALL_PREFIX}") else() message(FATAL_ERROR "LLVM not found; it is derived from MLIR_INSTALL_PREFIX which has value of ${MLIR_INSTALL_PREFIX}") endif() set (CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR};${CMAKE_MODULE_PATH}") include(AddLLVM) function(whole_archive_link target) if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") set(link_flags "") FOREACH(LIB ${ARGN}) string(CONCAT link_flags ${link_flags} "-Wl,-force_load ${CMAKE_BINARY_DIR}/lib/lib${LIB}.a ") ENDFOREACH(LIB) else() set(link_flags "-Wl,--whole-archive,") FOREACH(LIB ${ARGN}) string(CONCAT link_flags ${link_flags} "-l${LIB},") ENDFOREACH(LIB) string(CONCAT link_flags ${link_flags} "--no-whole-archive") endif() set_target_properties(${target} PROPERTIES LINK_FLAGS "${link_flags}") endfunction(whole_archive_link) llvm_map_components_to_libnames(llvm_libs support) include_directories( include ${LLVM_INCLUDE_DIR}) link_directories( ${LLVM_LIBRARY_DIR} ${CMAKE_BINARY_DIR}) add_definitions(${LLVM_DEFINITIONS}) add_executable(toyc toyc.cpp parser/AST.cpp ) target_link_libraries(toyc PRIVATE ${llvm_libs} Linalg3DialectConstruction Linalg3 Linalg2 Linalg1 MLIRAnalysis MLIREDSC MLIRExecutionEngine MLIRIR MLIRLLVMIR MLIRParser MLIRPass MLIRTargetLLVMIR MLIRTransforms MLIRSupport ) add_dependencies(toyc ToyDialect) llvm_update_compile_flags(toyc) whole_archive_link(toyc ToyDialect MLIRStandardOps MLIRAffineOps) add_subdirectory(toy)