65 lines
2.4 KiB
CMake
65 lines
2.4 KiB
CMake
project(rjp++)
|
|
cmake_minimum_required(VERSION 3.0.2)
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
set(rjp++_VERSION_MAJOR 0)
|
|
set(rjp++_VERSION_MINOR 9)
|
|
set(rjp++_VERSION_REVISION 0)
|
|
set(INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
include_directories("${INCLUDE_PATH}")
|
|
|
|
option(ENABLE_SHARED "Build shared library" OFF)
|
|
option(BUILD_TESTS "Build test programs" OFF)
|
|
option(ENABLE_PROFILING "Enable asan" OFF)
|
|
mark_as_advanced(ENABLE_PROFILING)
|
|
|
|
set(SOURCE_LIST "src/allocator.cpp" "src/array.cpp" "src/integral.cpp" "src/object.cpp" "src/rjp.cpp" "src/string.cpp" "src/string_val.cpp" "src/value.cpp" "src/vget_proxy.cpp" "src/container.cpp")
|
|
if(ENABLE_SHARED)
|
|
set(RJP++_LIBFLAGS "-lrjp++ -lrexy")
|
|
add_library(rjp++ SHARED ${SOURCE_LIST})
|
|
set_target_properties(rjp++ PROPERTIES SOVERSION "${rjp_VERSION_MAJOR}.${rjp_VERSION_MINOR}.${rjp_VERSION_REVISION}")
|
|
else()
|
|
set(RJP++_LIBFLAGS "-lrjp++ -lrjp -lrexy")
|
|
add_library(rjp++ STATIC ${SOURCE_LIST})
|
|
endif()
|
|
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp++.pc.cmake.in"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp++.pc"
|
|
@ONLY
|
|
)
|
|
set_target_properties(rjp++ PROPERTIES PUBLIC_HEADER ${INCLUDE_PATH}/rjp.hpp)
|
|
set(CPP_HEADERS ${INCLUDE_PATH}/array.hpp ${INCLUDE_PATH}/integral.hpp ${INCLUDE_PATH}/iterator.hpp
|
|
${INCLUDE_PATH}/member.hpp ${INCLUDE_PATH}/object.hpp ${INCLUDE_PATH}/parse.hpp
|
|
${INCLUDE_PATH}/string.hpp ${INCLUDE_PATH}/string_val.hpp ${INCLUDE_PATH}/value.hpp
|
|
${INCLUDE_PATH}/rjp_util.hpp ${INCLUDE_PATH}/dispatch.hpp ${INCLUDE_PATH}/container.hpp)
|
|
|
|
|
|
if(ENABLE_PROFILING)
|
|
target_compile_options(rjp++ PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls)
|
|
target_link_options(rjp++ PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls)
|
|
endif()
|
|
if(BUILD_TESTS)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
|
|
set_target_properties(rjp++ PROPERTIES COMPILE_FLAGS -std=c++17)
|
|
target_compile_options(rjp++ PRIVATE -Wall -Wextra -pedantic)
|
|
target_link_libraries(rjp++ rjp -lrexy)
|
|
|
|
install(TARGETS rjp++
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
)
|
|
install(FILES ${CPP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rjp++)
|
|
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp++.pc"
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
|
|
)
|
|
|
|
|
|
add_custom_target(uninstall_rjp++ cat install_manifest.txt | xargs rm)
|