Fixes ... -- Configuring done CMake Error in CMakeLists.txt: No known features for CXX compiler "" version .
107 lines
3.2 KiB
CMake
107 lines
3.2 KiB
CMake
cmake_minimum_required(VERSION 3.22)
|
|
if(BUILD_TESTING OR NOT DEFINED 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()
|