c-capnproto/CMakeLists.txt
2023-09-25 16:07:35 -07:00

107 lines
3.2 KiB
CMake

cmake_minimum_required(VERSION 3.22)
if(BUILD_TESTING)
# The tests are C++
set(languages C CXX)
else()
set(languages C)
endif()
project(c-capnproto LANGUAGES ${languages})
include(CTest)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_EXTENSIONS NO)
if(BUILD_TESTING)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS NO)
endif()
# Stop noise if CXX compiler is set.
set(ignoreAndAvoidCMakeUnusedWarning "${CMAKE_CXX_COMPILER}")
# Boilerplate DK CMAKE PROJ 2023-05-17.1
if(APPLE)
set(CMAKE_MACOSX_RPATH OFF)
endif()
# Boilerplate DK CMAKE PROJ 2023-09-25.1
set(default_build_shared)
if(NOT (ANDROID OR IOS))
set(default_build_shared ON)
endif()
option(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" ${default_build_shared})
# Build hygiene: Tools for keeping the source code clean. By default
# we try to enforce build hygiene.
# You can override with either BUILD_HYGIENE=DISABLED or
# BUILD_HYGIENE=ENABLED.
if(NOT BUILD_HYGIENE STREQUAL DISABLED)
if(BUILD_HYGIENE STREQUAL ENABLED)
set(find_program_args REQUIRED)
else()
set(find_program_args)
endif()
find_program(CLANG_TIDY_PROGRAM
NAMES clang-tidy
PATHS
# On macOS the easiest way to get clang-tidy is to install the
# keg-only (not installed into PATH) big `llvm` package.
/opt/homebrew/opt/llvm/bin
/usr/local/opt/llvm/bin
${find_program_args})
endif()
add_library(CapnC_Runtime
lib/capn.c
lib/capn-malloc.c
lib/capn-stream.c
lib/capnp_c.h)
add_library(CapnC::Runtime ALIAS CapnC_Runtime)
set_target_properties(CapnC_Runtime PROPERTIES
EXPORT_NAME Runtime
POSITION_INDEPENDENT_CODE ON
WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_include_directories(CapnC_Runtime
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/compiler>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib>
$<INSTALL_INTERFACE:include>)
add_executable(capnpc-c
compiler/capnpc-c.c
compiler/schema.capnp.c
compiler/str.c)
target_link_libraries(capnpc-c CapnC_Runtime)
target_include_directories(capnpc-c
PRIVATE lib)
# Boilerplate DK CMAKE PROJ 2023-05-17.3
if(BUILD_SHARED_LIBS)
if(APPLE)
set(base @loader_path)
else()
set(base $ORIGIN)
endif()
file(RELATIVE_PATH relDir
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_INSTALL_RPATH
# best practice RPATH locations when installed
${base}
${base}/${relDir})
endif()
option(C_CAPNPROTO_ENABLE_INSTALL "Add instructions for 'cmake --install' of CapnC_Runtime library and capnpc-c executable" ON)
if(C_CAPNPROTO_ENABLE_INSTALL)
install(TARGETS CapnC_Runtime capnpc-c
EXPORT CapnC)
install(EXPORT CapnC
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/CapnC
NAMESPACE CapnC::
FILE CapnCConfig.cmake)
install(FILES lib/capnp_c.h TYPE INCLUDE)
endif()
if(BUILD_TESTING AND CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
add_subdirectory(tests)
endif()