cmake_minimum_required(VERSION 3.14) project(bsdl LANGUAGES C VERSION 0.1.0 DESCRIPTION "Standalone BSDL (IEEE 1149.1) parser — struct + JSON, stable C ABI" ) # --- top-level detection (PROJECT_IS_TOP_LEVEL needs CMake >= 3.21) --- if(NOT DEFINED PROJECT_IS_TOP_LEVEL) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) set(PROJECT_IS_TOP_LEVEL ON) else() set(PROJECT_IS_TOP_LEVEL OFF) endif() endif() # This is a dynamic library by nature; build shared unless told otherwise. if(NOT DEFINED BUILD_SHARED_LIBS) set(BUILD_SHARED_LIBS ON) endif() option(BSDL_BUILD_CLI "Build the bsdl2json command-line tool" ON) option(BSDL_BUILD_TESTS "Build the test suite" ${PROJECT_IS_TOP_LEVEL}) # ---------------------------------------------------------------- library ---- add_library(bsdl src/bsdl.c src/bsdl_parse.c src/bsdl_strings.c src/bsdl_json.c ) add_library(bsdl::bsdl ALIAS bsdl) target_include_directories(bsdl PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) set_target_properties(bsdl PROPERTIES C_STANDARD 11 C_STANDARD_REQUIRED ON C_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/bsdl/bsdl.h ) # Mark exported symbols (dllexport on Windows; default-visibility on ELF). if(BUILD_SHARED_LIBS) target_compile_definitions(bsdl PRIVATE BSDL_BUILD_SHARED) endif() if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") target_compile_options(bsdl PRIVATE -Wall -Wextra -Wpedantic) endif() # -------------------------------------------------------------------- CLI ---- if(BSDL_BUILD_CLI) add_executable(bsdl2json tools/bsdl2json.c) target_link_libraries(bsdl2json PRIVATE bsdl) endif() # ------------------------------------------------------------------ tests ---- if(BSDL_BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() # --------------------------------------------------- install / export ------- include(GNUInstallDirs) include(CMakePackageConfigHelpers) install(TARGETS bsdl EXPORT bsdlTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/bsdl ) if(BSDL_BUILD_CLI) install(TARGETS bsdl2json RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() install(EXPORT bsdlTargets FILE bsdlTargets.cmake NAMESPACE bsdl:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bsdl ) configure_package_config_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/bsdlConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/bsdlConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bsdl ) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/bsdlConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bsdlConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/bsdlConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bsdl )