diff --git a/CMakeLists.txt b/CMakeLists.txt index 42bfab9b..bc9524e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,9 +5,11 @@ option(ENABLE_LOGGING "Enable logging support" ON) option(ENABLE_STACKTRACE "Enable stacktrace support" ON) option(ENABLE_TESTS "Enable tests" ON) option(ENABLE_COMPILER "Enables tracing and backend compilers" ON) +option(USE_EXTERNAL_SPDLOG "Use a externally provided version of spdlog" OFF) +option(USE_EXTERNAL_MLIR "Use a externally provided version of MLIR" OFF) cmake_dependent_option(ENABLE_TRACING "Enable the tracing" ON "ENABLE_COMPILER" OFF) cmake_dependent_option(ENABLE_MLIR_BACKEND "Enable the MLIR compiler backend" ON "ENABLE_COMPILER" OFF) -cmake_dependent_option(NAUTILUS_DOWNLOAD_MLIR "USE_PRE_BUILD_MLIR" ON "ENABLE_MLIR_BACKEND" OFF) +cmake_dependent_option(NAUTILUS_DOWNLOAD_MLIR "USE_PRE_BUILD_MLIR" ON "ENABLE_MLIR_BACKEND;NOT USE_EXTERNAL_MLIR" OFF) cmake_dependent_option(ENABLE_C_BACKEND "Enable the C compiler backend" ON "ENABLE_COMPILER" OFF) cmake_dependent_option(ENABLE_BC_BACKEND "Enable the bytecode interpreter backend" ON "ENABLE_COMPILER" OFF) cmake_dependent_option(ENABLE_ASMJIT_BACKEND "Enable the asmjit interpreter backend" OFF "ENABLE_COMPILER" OFF) @@ -20,7 +22,7 @@ project(nautilus VERSION 0.1) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) -set(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -Werror=extra -Werror=all -fpermissive -fPIC -fno-omit-frame-pointer") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Werror=extra -Werror=all -fpermissive -fPIC -fno-omit-frame-pointer") if (ENABLE_TEST_COVERAGE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcoverage-mapping -fprofile-instr-generate") @@ -45,29 +47,38 @@ include(cmake/macros.cmake) set(THIRD_PARTY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party) -if (ENABLE_MLIR_BACKEND) +if (ENABLE_MLIR_BACKEND AND NOT USE_EXTERNAL_MLIR) include(cmake/ImportMLIR.cmake) endif () +set(EXPORT_TARGETS) if (ENABLE_TESTS) set(CATCH_ENABLE_REPRODUCIBLE_BUILD OFF CACHE INTERNAL "Turn off tests") add_subdirectory(${THIRD_PARTY_DIR}/Catch2) + list(APPEND EXPORT_TARGETS Catch2) endif () if (ENABLE_LOGGING) - set(SPDLOG_COMPILED_LIB ON) - set(SPDLOG_BUILD_SHARED OFF) - add_subdirectory(${THIRD_PARTY_DIR}/spdlog) + if (USE_EXTERNAL_SPDLOG) + find_package(spdlog CONFIG REQUIRED) + else () + set(SPDLOG_COMPILED_LIB ON) + set(SPDLOG_BUILD_SHARED OFF) + add_subdirectory(${THIRD_PARTY_DIR}/spdlog) + list(APPEND EXPORT_TARGETS spdlog) + endif () endif () if (ENABLE_STACKTRACE) # Also requires one of: libbfd (gnu binutils), libdwarf, libdw (elfutils) add_subdirectory(${THIRD_PARTY_DIR}/backward-cpp) + list(APPEND EXPORT_TARGETS backward_interface) endif () if (ENABLE_BC_BACKEND) add_subdirectory(${THIRD_PARTY_DIR}/dyncall) + list(APPEND EXPORT_TARGETS dyncall_s) endif () if (ENABLE_ASMJIT_BACKEND) diff --git a/cmake/AddMLIR.cmake b/cmake/AddMLIR.cmake index 0d87151f..59cf7d93 100644 --- a/cmake/AddMLIR.cmake +++ b/cmake/AddMLIR.cmake @@ -36,10 +36,6 @@ if (MLIR_FOUND) MLIRTargetLLVMIRExport MLIRTransforms ) - - # Include necessary mlir library in the deb package and install it in the lib folder - install(IMPORTED_RUNTIME_ARTIFACTS mlir_float16_utils mlir_runner_utils mlir_c_runner_utils mlir_async_runtime DESTINATION lib) - else () message(FATAL_ERROR "Cannot find mlir") endif (MLIR_FOUND) \ No newline at end of file diff --git a/nautilus/CMakeLists.txt b/nautilus/CMakeLists.txt index 658a1159..bb3d35dd 100644 --- a/nautilus/CMakeLists.txt +++ b/nautilus/CMakeLists.txt @@ -33,7 +33,7 @@ set_target_properties(nautilus PROPERTIES ) if (ENABLE_LOGGING) - target_link_libraries(nautilus PRIVATE spdlog) + target_link_libraries(nautilus PRIVATE spdlog::spdlog) endif () if (ENABLE_STACKTRACE) @@ -46,5 +46,25 @@ if (ENABLE_TESTS) add_subdirectory(test) endif () +# Handle CMake Install +include(GNUInstallDirs) +add_library(${PROJECT_NAME}::nautilus ALIAS nautilus) +install( + TARGETS nautilus ${EXPORT_TARGETS} + EXPORT ${PROJECT_NAME}-config + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" +) + +install( + EXPORT ${PROJECT_NAME}-config + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + NAMESPACE "${PROJECT_NAME}::" +) + +install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/include/${PROJECT_NAME}/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}) +# Install config.hpp +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/${PROJECT_NAME}/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}) diff --git a/nautilus/include/nautilus/Executable.hpp b/nautilus/include/nautilus/Executable.hpp index 780f23b5..71e5f3e3 100644 --- a/nautilus/include/nautilus/Executable.hpp +++ b/nautilus/include/nautilus/Executable.hpp @@ -104,7 +104,7 @@ class Executable { if (hasInvocableFunctionPtr()) { return Invocable(getInvocableFunctionPtr(member)); } else { - return Invocable(std::move(getGenericInvocable(member))); + return Invocable(getGenericInvocable(member)); } } diff --git a/nautilus/src/nautilus/exceptions/Stacktrace.cpp b/nautilus/src/nautilus/exceptions/Stacktrace.cpp index 3b2b50ab..aae25db9 100644 --- a/nautilus/src/nautilus/exceptions/Stacktrace.cpp +++ b/nautilus/src/nautilus/exceptions/Stacktrace.cpp @@ -23,8 +23,9 @@ std::string printAndCollectCurrentStacktrace() { } // namespace nautilus #else namespace nautilus { -void printCurrentStacktrace() { +std::string printAndCollectCurrentStacktrace() { // nop if stacktrace is disabled. + return {}; } } // namespace nautilus #endif