rjp/CMakeLists.txt
2020-03-03 17:49:39 -08:00

62 lines
2.4 KiB
CMake

include(CMakeDependentOption)
include(GNUInstallDirs)
cmake_minimum_required(VERSION 3.0.2)
project(rjp)
set(rjp_VERSION_MAJOR 0)
set(rjp_VERSION_MINOR 9)
set(rjp_VERSION_REVISION 0)
set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include)
set(INCLUDE_PATH_CPP ${CMAKE_SOURCE_DIR}/rjp++/include)
configure_file(
"${INCLUDE_PATH}/config.h.in"
"${INCLUDE_PATH}/config.h"
)
include_directories("${INCLUDE_PATH}")
option(ENABLE_DIAGNOSTICS "Print diagnostic messages when parsing json to help identify issues" ON)
option(ENABLE_SHARED "Build shared library" OFF)
option(ENABLE_C++ "Build C++ wrapper library" ON)
set(SOURCE_LIST "src/rjp_ordered_object.c" "src/rjp_unordered_object.c" "src/input.c" "src/output.c" "src/rjp_array.c" "src/rjp.c" "src/rjp_object.c" "src/rjp_string.c" "src/tree.c")
set(SOURCE_LIST_CPP "rjp++/src/allocator.cpp" "rjp++/src/array.cpp" "rjp++/src/integral.cpp" "rjp++/src/object.cpp" "rjp++/src/rjp.cpp" "rjp++/src/string.cpp" "rjp++/src/value.cpp")
if(ENABLE_SHARED)
add_library(rjp SHARED ${SOURCE_LIST})
if(ENABLE_C++)
add_library(rjp++ SHARED ${SOURCE_LIST_CPP})
set_target_properties(rjp++ PROPERTIES SOVERSION "${rjp_VERSION_MAJOR}.${rjp_VERSION_MINOR}.${rjp_VERSION_REVISION}")
endif()
set_target_properties(rjp PROPERTIES SOVERSION "${rjp_VERSION_MAJOR}.${rjp_VERSION_MINOR}.${rjp_VERSION_REVISION}")
else()
add_library(rjp STATIC ${SOURCE_LIST})
if(ENABLE_C++)
add_library(rjp++ STATIC ${SOURCE_LIST_CPP})
endif()
endif()
set_target_properties(rjp PROPERTIES PUBLIC_HEADER ${INCLUDE_PATH}/rjp.h)
target_compile_options(rjp PRIVATE -Wall -Wextra -pedantic)
if(ENABLE_DIAGNOSTICS)
target_compile_definitions(rjp PRIVATE RJP_DIAGNOSTICS)
endif()
install(TARGETS rjp
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
if(ENABLE_C++)
target_include_directories(rjp++ PRIVATE ${INCLUDE_PATH_CPP} ${INCLUDE_PATH})
set_target_properties(rjp++ PROPERTIES PUBLIC_HEADER ${INCLUDE_PATH_CPP}/rjp.hpp)
set_target_properties(rjp++ PROPERTIES COMPILE_FLAGS -std=c++17)
target_compile_options(rjp++ PRIVATE -Wall -Wextra -pedantic)
install(TARGETS rjp++
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
endif()
add_custom_target(uninstall cat install_manifest.txt | xargs rm)