zeek/auxil/spicy/hilti/runtime/CMakeLists.txt
Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

203 lines
7.9 KiB
CMake

# Copyright (c) 2020-now by the Zeek Project. See LICENSE for details.
set(AUTOGEN_H "${PROJECT_BINARY_DIR}/include/hilti/rt/autogen")
set(AUTOGEN_CC "${PROJECT_BINARY_DIR}/hilti/runtime/src/autogen")
file(MAKE_DIRECTORY "${AUTOGEN_H}" "${AUTOGEN_CC}")
file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/bin" "${PROJECT_BINARY_DIR}/lib")
# Create a version string that's a valid C identifier. We use only the actual
# version number, no development postfix, to make ccache a bit happier.
string(REGEX REPLACE "([0-9]+\.[0-9]+\.[0-9]+).*" "\\1" SPICY_VERSION_C_IDENT
"${CMAKE_PROJECT_VERSION}")
string(REPLACE "." "_" SPICY_VERSION_C_IDENT "${SPICY_VERSION_C_IDENT}")
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
# Distinguish between release and debug builds.
set(SPICY_VERSION_C_IDENT "${SPICY_VERSION_C_IDENT}_debug")
endif ()
##### Runtime libraries
configure_file(include/version.h.in ${AUTOGEN_H}/version.h)
set(SOURCES
src/backtrace.cc
src/configuration.cc
src/context.cc
src/debug-logger.cc
src/exception.cc
src/fiber.cc
src/global-state.cc
src/init.cc
src/library.cc
src/logging.cc
src/main.cc
src/profiler.cc
src/safe-math.cc
src/type-info.cc
src/types/address.cc
src/types/bytes.cc
src/types/integer.cc
src/types/port.cc
src/types/optional.cc
src/types/real.cc
src/types/reference.cc
src/types/regexp.cc
src/types/stream.cc
src/types/string.cc
src/types/time.cc
src/types/tuple.cc
src/unicode.cc
src/util.cc
src/version.cc
${PROJECT_SOURCE_DIR}/3rdparty/utf8proc/utf8proc.c)
foreach (lib hilti-rt hilti-rt-debug)
add_library(${lib}-objects OBJECT ${SOURCES})
target_compile_options(${lib}-objects PRIVATE "-fPIC")
target_link_libraries(${lib}-objects PRIVATE ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})
target_include_directories(${lib}-objects BEFORE
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
target_include_directories(${lib}-objects BEFORE
PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>)
target_include_directories(${lib}-objects BEFORE
PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/3rdparty>)
add_dependencies(${lib}-objects jrx-objects)
target_include_directories(${lib}-objects BEFORE
PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/justrx/include)
add_dependencies(${lib}-objects fiber)
target_include_directories(
${lib}-objects
PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/fiber/include
${PROJECT_SOURCE_DIR}/3rdparty/fiber/deps/cxx-header-utils/include
${PROJECT_SOURCE_DIR}/3rdparty/utfcpp/source)
add_library(${lib} STATIC)
target_link_libraries(${lib} ${lib}-objects)
target_link_libraries(${lib} jrx-objects)
target_link_libraries(${lib} fiber)
endforeach ()
# Build hilti-rt with release flags.
if (CMAKE_CXX_FLAGS_RELEASE)
string(REPLACE " " ";" cxx_flags_release ${CMAKE_CXX_FLAGS_RELEASE})
endif ()
target_compile_options(hilti-rt-objects PRIVATE ${cxx_flags_release})
target_compile_options(hilti-rt-objects PRIVATE "-g;-O3;-DNDEBUG;-Wall")
target_compile_definitions(hilti-rt-objects PRIVATE "HILTI_RT_BUILD_TYPE_RELEASE")
# Build hilti-rt-debug with debug flags.
if (CMAKE_CXX_FLAGS_DEBUG)
string(REPLACE " " ";" cxx_flags_debug ${CMAKE_CXX_FLAGS_DEBUG})
endif ()
target_compile_options(hilti-rt-debug-objects PRIVATE ${cxx_flags_debug})
target_compile_options(hilti-rt-debug-objects PRIVATE "-UNDEBUG;-O0;-Wall")
target_compile_definitions(hilti-rt-debug-objects PRIVATE "HILTI_RT_BUILD_TYPE_DEBUG")
add_library(hilti-rt-tests-library-dummy1 SHARED src/tests/library-dummy.cc)
target_include_directories(hilti-rt-tests-library-dummy1
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_definitions(hilti-rt-tests-library-dummy1 PUBLIC RETURN_VALUE=1)
add_library(hilti-rt-tests-library-dummy2 SHARED src/tests/library-dummy.cc)
target_include_directories(hilti-rt-tests-library-dummy2
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_definitions(hilti-rt-tests-library-dummy2 PUBLIC RETURN_VALUE=2)
##### Configuration files
configure_file(include/config.h.in ${AUTOGEN_H}/config.h)
configure_file(src/tests/config.h.in ${AUTOGEN_H}/tests/config.h)
##### Binaries
##### Installation
install(TARGETS hilti-rt hilti-rt-debug ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
install_headers(include hilti/rt)
install_headers(${PROJECT_BINARY_DIR}/include/hilti/rt hilti/rt)
install(CODE "file(REMOVE \"\$ENV\{DESTDIR\}${CMAKE_INSTALL_FULL_INCLUDEDIR}/hilti/rt/hilti\")"
)# Get rid of symlink.
# Install the 3rdparty headers that we need individually.
install_headers(${PROJECT_SOURCE_DIR}/3rdparty/ArticleEnumClass-v2
hilti/rt/3rdparty/ArticleEnumClass-v2)
install_headers(${PROJECT_SOURCE_DIR}/3rdparty/SafeInt hilti/rt/3rdparty/SafeInt SafeInt.hpp)
install_headers(${PROJECT_SOURCE_DIR}/3rdparty/tinyformat hilti/rt/3rdparty/tinyformat)
install_headers(${PROJECT_SOURCE_DIR}/3rdparty/json/include/nlohmann hilti/rt/3rdparty/nlohmann)
install_headers(${PROJECT_SOURCE_DIR}/3rdparty/json/single_include/nlohmann
hilti/rt/3rdparty/nlohmann)
install_headers(${PROJECT_SOURCE_DIR}/3rdparty/filesystem/include/ghc hilti/rt/3rdparty/ghc)
install_headers(${PROJECT_SOURCE_DIR}/3rdparty/any hilti/rt/3rdparty/any)
##### Tests
add_executable(
hilti-rt-tests
src/tests/main.cc
src/tests/address.cc
src/tests/backtrace.cc
src/tests/bytes.cc
src/tests/context.cc
src/tests/debug-logger.cc
src/tests/enum.cc
src/tests/exception.cc
src/tests/fiber.cc
src/tests/fmt.cc
src/tests/global-state.cc
src/tests/hilti.cc
src/tests/init.cc
src/tests/integer.cc
src/tests/interval.cc
src/tests/iterator.cc
src/tests/intrusive-ptr.cc
src/tests/library.cc
src/tests/logging.cc
src/tests/map.cc
src/tests/network.cc
src/tests/optional.cc
src/tests/port.cc
src/tests/profiler.cc
src/tests/real.cc
src/tests/reference.cc
src/tests/regexp.cc
src/tests/result.cc
src/tests/safe-int.cc
src/tests/set.cc
src/tests/stream.cc
src/tests/string.cc
src/tests/struct.cc
src/tests/time.cc
src/tests/to_string.cc
src/tests/tuple.cc
src/tests/type-info.cc
src/tests/union.cc
src/tests/util.cc
src/tests/vector.cc)
target_compile_options(hilti-rt-tests PRIVATE "-Wall")
target_compile_options(hilti-rt-tests PRIVATE $<$<CONFIG:Debug>:-O0>)
target_link_options(hilti-rt-tests PRIVATE $<$<CONFIG:Debug>:-O0>)
target_link_libraries(hilti-rt-tests
PRIVATE $<IF:$<CONFIG:Debug>,hilti-rt-debug-objects,hilti-rt-objects>)
target_link_libraries(hilti-rt-tests PRIVATE $<IF:$<CONFIG:Debug>,hilti-rt-debug,hilti-rt> doctest)
add_dependencies(hilti-rt-tests hilti-rt-tests-library-dummy1 hilti-rt-tests-library-dummy2)
add_test(NAME hilti-rt-tests COMMAND ${PROJECT_BINARY_DIR}/bin/hilti-rt-tests)
add_executable(hilti-rt-configuration-tests src/tests/configuration.cc)
target_compile_options(hilti-rt-configuration-tests PRIVATE "-Wall")
target_compile_options(hilti-rt-configuration-tests PRIVATE $<$<CONFIG:Debug>:-O0>)
target_link_options(hilti-rt-configuration-tests PRIVATE $<$<CONFIG:Debug>:-O0>)
target_link_libraries(hilti-rt-configuration-tests
PRIVATE $<IF:$<CONFIG:Debug>,hilti-rt-debug,hilti-rt> doctest)
add_test(NAME hilti-rt-configuration-tests
COMMAND ${PROJECT_BINARY_DIR}/bin/hilti-rt-configuration-tests)
add_executable(hilti-rt-fiber-benchmark src/benchmarks/fiber.cc)
target_compile_options(hilti-rt-fiber-benchmark PRIVATE "-Wall")
target_link_libraries(hilti-rt-fiber-benchmark
PRIVATE $<IF:$<CONFIG:Debug>,hilti-rt-debug,hilti-rt>)
target_link_libraries(hilti-rt-fiber-benchmark PRIVATE benchmark)