runtime/CMakeLists.txt
2024-11-10 05:26:16 -05:00

57 lines
1.3 KiB
CMake

cmake_minimum_required(VERSION 3.17.0)
# Start Project
project(runtime)
# Headers
add_library(trampoline-headers INTERFACE)
target_include_directories(trampoline-headers INTERFACE include)
# Check Architecture
include(CheckSymbolExists)
check_symbol_exists("__arm__" "" NO_RUNTIME_NEEDED)
if(NO_RUNTIME_NEEDED)
return()
endif()
# Only Headers
option(TRAMPOLINE_HEADERS_ONLY "Skip Building Runtime" FALSE)
if(TRAMPOLINE_HEADERS_ONLY)
return()
endif()
target_compile_definitions(trampoline-headers INTERFACE MCPI_BUILD_RUNTIME)
# Build
add_executable(runtime
src/main.cpp
src/trampoline.cpp
src/pipe/loop.cpp
src/pipe/main.cpp
src/pipe/memory.cpp
)
# QEMU
check_symbol_exists("__x86_64__" "" USE_QEMU)
if(USE_QEMU)
add_subdirectory(qemu)
target_sources(runtime PRIVATE
src/syscall/main.cpp
src/syscall/handler.cpp
src/qemu/qemu.cpp
)
endif()
# Warnings
target_compile_options(runtime PRIVATE -Wall -Wextra -Werror -Wpointer-arith -Wshadow -Wnull-dereference)
# Link
target_link_libraries(runtime dl rt trampoline-headers)
# RPath
set_target_properties(runtime PROPERTIES INSTALL_RPATH "$ORIGIN/../lib/native")
target_link_options(runtime PRIVATE "LINKER:--disable-new-dtags")
# Install
if(DEFINED MCPI_BIN_DIR)
install(TARGETS runtime DESTINATION "${MCPI_BIN_DIR}")
endif()