188 lines
5.3 KiB
CMake
188 lines
5.3 KiB
CMake
cmake_minimum_required(VERSION 3.12)
|
|
project(nostr_core VERSION 1.0.0 LANGUAGES C)
|
|
|
|
# Set C standard
|
|
set(CMAKE_C_STANDARD 99)
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
|
|
# Build options
|
|
option(NOSTR_BUILD_STATIC "Build static library" ON)
|
|
option(NOSTR_BUILD_SHARED "Build shared library" ON)
|
|
option(NOSTR_BUILD_EXAMPLES "Build examples" ON)
|
|
option(NOSTR_BUILD_TESTS "Build tests" ON)
|
|
option(NOSTR_ENABLE_WEBSOCKETS "Enable WebSocket support" ON)
|
|
option(NOSTR_USE_MBEDTLS "Use mbedTLS for crypto (otherwise use built-in)" OFF)
|
|
|
|
# Compiler flags
|
|
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror")
|
|
set(CMAKE_C_FLAGS_DEBUG "-g -O0")
|
|
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
endif()
|
|
|
|
# Include directories
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/cjson)
|
|
|
|
# Source files
|
|
set(NOSTR_CORE_SOURCES
|
|
nostr_core/core.c
|
|
nostr_core/core_relays.c
|
|
nostr_core/core_relay_pool.c
|
|
nostr_core/nostr_crypto.c
|
|
nostr_core/nostr_secp256k1.c
|
|
cjson/cJSON.c
|
|
)
|
|
|
|
set(NOSTR_CORE_HEADERS
|
|
nostr_core.h
|
|
nostr_crypto.h
|
|
cjson/cJSON.h
|
|
)
|
|
|
|
# Add mbedTLS if enabled
|
|
if(NOSTR_USE_MBEDTLS)
|
|
add_subdirectory(mbedtls)
|
|
list(APPEND NOSTR_CORE_SOURCES mbedtls_wrapper.c)
|
|
add_definitions(-DNOSTR_USE_MBEDTLS=1)
|
|
endif()
|
|
|
|
# Add WebSocket support if enabled
|
|
if(NOSTR_ENABLE_WEBSOCKETS)
|
|
file(GLOB WEBSOCKET_SOURCES "nostr_websocket/*.c")
|
|
file(GLOB WEBSOCKET_HEADERS "nostr_websocket/*.h")
|
|
list(APPEND NOSTR_CORE_SOURCES ${WEBSOCKET_SOURCES})
|
|
list(APPEND NOSTR_CORE_HEADERS ${WEBSOCKET_HEADERS})
|
|
add_definitions(-DNOSTR_ENABLE_WEBSOCKETS=1)
|
|
endif()
|
|
|
|
# Create static library
|
|
if(NOSTR_BUILD_STATIC)
|
|
add_library(nostr_core_static STATIC ${NOSTR_CORE_SOURCES})
|
|
set_target_properties(nostr_core_static PROPERTIES OUTPUT_NAME nostr_core)
|
|
target_link_libraries(nostr_core_static m)
|
|
|
|
if(NOSTR_USE_MBEDTLS)
|
|
target_link_libraries(nostr_core_static mbedcrypto mbedx509 mbedtls)
|
|
endif()
|
|
endif()
|
|
|
|
# Create shared library
|
|
if(NOSTR_BUILD_SHARED)
|
|
add_library(nostr_core_shared SHARED ${NOSTR_CORE_SOURCES})
|
|
set_target_properties(nostr_core_shared PROPERTIES OUTPUT_NAME nostr_core)
|
|
target_link_libraries(nostr_core_shared m)
|
|
|
|
if(NOSTR_USE_MBEDTLS)
|
|
target_link_libraries(nostr_core_shared mbedcrypto mbedx509 mbedtls)
|
|
endif()
|
|
|
|
# Set version information
|
|
set_target_properties(nostr_core_shared PROPERTIES
|
|
VERSION ${PROJECT_VERSION}
|
|
SOVERSION 1
|
|
)
|
|
endif()
|
|
|
|
# Create alias targets for easier integration
|
|
if(NOSTR_BUILD_STATIC)
|
|
add_library(nostr_core::static ALIAS nostr_core_static)
|
|
endif()
|
|
|
|
if(NOSTR_BUILD_SHARED)
|
|
add_library(nostr_core::shared ALIAS nostr_core_shared)
|
|
endif()
|
|
|
|
# Examples
|
|
if(NOSTR_BUILD_EXAMPLES)
|
|
add_subdirectory(examples)
|
|
endif()
|
|
|
|
# Tests
|
|
if(NOSTR_BUILD_TESTS)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
# Installation
|
|
include(GNUInstallDirs)
|
|
|
|
# Install libraries
|
|
if(NOSTR_BUILD_STATIC)
|
|
install(TARGETS nostr_core_static
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
)
|
|
endif()
|
|
|
|
if(NOSTR_BUILD_SHARED)
|
|
install(TARGETS nostr_core_shared
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
)
|
|
endif()
|
|
|
|
# Install headers
|
|
install(FILES ${NOSTR_CORE_HEADERS}
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/nostr
|
|
)
|
|
|
|
# Install pkg-config file
|
|
configure_file(nostr_core.pc.in nostr_core.pc @ONLY)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/nostr_core.pc
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
|
)
|
|
|
|
# Generate export configuration
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
configure_package_config_file(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/nostr_core-config.cmake.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/nostr_core-config.cmake
|
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nostr_core
|
|
)
|
|
|
|
write_basic_package_version_file(
|
|
${CMAKE_CURRENT_BINARY_DIR}/nostr_core-config-version.cmake
|
|
VERSION ${PROJECT_VERSION}
|
|
COMPATIBILITY SameMajorVersion
|
|
)
|
|
|
|
install(FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/nostr_core-config.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/nostr_core-config-version.cmake
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nostr_core
|
|
)
|
|
|
|
# Export targets
|
|
if(NOSTR_BUILD_STATIC OR NOSTR_BUILD_SHARED)
|
|
set(EXPORT_TARGETS "")
|
|
if(NOSTR_BUILD_STATIC)
|
|
list(APPEND EXPORT_TARGETS nostr_core_static)
|
|
endif()
|
|
if(NOSTR_BUILD_SHARED)
|
|
list(APPEND EXPORT_TARGETS nostr_core_shared)
|
|
endif()
|
|
|
|
install(EXPORT nostr_core-targets
|
|
FILE nostr_core-targets.cmake
|
|
NAMESPACE nostr_core::
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nostr_core
|
|
)
|
|
|
|
export(TARGETS ${EXPORT_TARGETS}
|
|
FILE ${CMAKE_CURRENT_BINARY_DIR}/nostr_core-targets.cmake
|
|
NAMESPACE nostr_core::
|
|
)
|
|
endif()
|
|
|
|
# Summary
|
|
message(STATUS "NOSTR Core Library Configuration:")
|
|
message(STATUS " Version: ${PROJECT_VERSION}")
|
|
message(STATUS " Build static library: ${NOSTR_BUILD_STATIC}")
|
|
message(STATUS " Build shared library: ${NOSTR_BUILD_SHARED}")
|
|
message(STATUS " Build examples: ${NOSTR_BUILD_EXAMPLES}")
|
|
message(STATUS " Build tests: ${NOSTR_BUILD_TESTS}")
|
|
message(STATUS " Enable WebSockets: ${NOSTR_ENABLE_WEBSOCKETS}")
|
|
message(STATUS " Use mbedTLS: ${NOSTR_USE_MBEDTLS}")
|
|
message(STATUS " Install prefix: ${CMAKE_INSTALL_PREFIX}")
|