diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ba81e8..122a132 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,25 +1,22 @@ cmake_minimum_required(VERSION 3.10) -project(open_simulation_interface) - # Toplevel check set(OSI_IS_TOP_LEVEL OFF) if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) set(OSI_IS_TOP_LEVEL ON) endif() -# Set the C++ standard -set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to be used") -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -if(MSVC) - add_compile_options(/wd4141 /wd4244 /wd4251 /wd4267 /wd4305 /wd4355 /wd4800 /wd4996) -endif() - # Set a default build type if none was specified set(default_build_type "Release") -if(EXISTS "${CMAKE_SOURCE_DIR}/.git") - set(default_build_type "Debug") + +if(OSI_IS_TOP_LEVEL AND NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE + STRING "Choose the type of build." FORCE) + set(CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo;MinSizeRel;Debug" CACHE STRING "" FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Release" "MinSizeRel" "RelWithDebInfo" "Debug") endif() # read the version number from the file "VERSION" @@ -32,19 +29,26 @@ foreach(LINE ${VERSION_CONTENTS}) endforeach() set(OPEN_SIMULATION_INTERFACE_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) -set(${PROJECT_NAME}_SOVERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") -set(${PROJECT_NAME}_LIBVERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") +project( + open_simulation_interface + DESCRIPTION "A generic interface for the environmental perception of automated driving functions in virtual scenarios." + HOMEPAGE_URL "https://github.com/OpenSimulationInterface/open-simulation-interface" + VERSION ${OPEN_SIMULATION_INTERFACE_VERSION} + LANGUAGES CXX +) -# configure build version -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message(STATUS "Setting build type to '${default_build_type}' as none was specified.") - set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE - STRING "Choose the type of build." FORCE) - # Set the possible values of build type for cmake-gui - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +# Set the C++ standard +set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to be used") +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Suppress protobuf code warnings for MSVC +if(MSVC) + add_compile_options(/wd4141 /wd4244 /wd4251 /wd4267 /wd4305 /wd4355 /wd4800 /wd4996) endif() +set(${PROJECT_NAME}_SOVERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") +set(${PROJECT_NAME}_LIBVERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") + # Offer the user the choice of overriding the installation directories set(OSI_INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") set(OSI_INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files") @@ -56,22 +60,24 @@ else() endif() set(OSI_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") -set(OSI_INSTALL_LIB_DIR ${OSI_INSTALL_LIB_DIR}/osi${VERSION_MAJOR}) +set(OSI_INSTALL_LIB_DIR ${OSI_INSTALL_LIB_DIR}) set(OSI_INSTALL_INCLUDE_DIR ${OSI_INSTALL_INCLUDE_DIR}/osi${VERSION_MAJOR}) configure_file(open-simulation-interface/osi_version.proto.in osi_version.proto) find_package(Protobuf REQUIRED) -include_directories(${Protobuf_INCLUDE_DIRS}) file(GLOB OSI_PROTO_FILES open-simulation-interface/*.proto) list(INSERT OSI_PROTO_FILES 0 ${CMAKE_CURRENT_BINARY_DIR}/osi_version.proto) protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES}) +# Static library add_library(${PROJECT_NAME}_static STATIC ${PROTO_SRCS} ${PROTO_HEADERS}) add_library(${PROJECT_NAME}::${PROJECT_NAME}_static ALIAS ${PROJECT_NAME}_static) target_include_directories(${PROJECT_NAME}_static + PRIVATE + ${Protobuf_INCLUDE_DIRS} PUBLIC ${PROTOBUF_INCLUDE_DIR} $ @@ -82,10 +88,12 @@ install(TARGETS ${PROJECT_NAME}_static EXPORT ${PROJECT_NAME}_targets ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib) - +# Position independent object library for shared/pic libraries add_library(${PROJECT_NAME}_obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS}) add_library(${PROJECT_NAME}::${PROJECT_NAME}_obj ALIAS ${PROJECT_NAME}_obj) target_include_directories(${PROJECT_NAME}_obj + PRIVATE + ${Protobuf_INCLUDE_DIRS} PUBLIC ${PROTOBUF_INCLUDE_DIR} $ @@ -93,42 +101,37 @@ target_include_directories(${PROJECT_NAME}_obj ) set_property(TARGET ${PROJECT_NAME}_obj PROPERTY POSITION_INDEPENDENT_CODE ON) - +# Static position independent code library for use in shared libraries add_library(${PROJECT_NAME}_pic STATIC $) add_library(${PROJECT_NAME}::${PROJECT_NAME}_pic ALIAS ${PROJECT_NAME}_pic) target_include_directories(${PROJECT_NAME}_pic + PRIVATE + ${Protobuf_INCLUDE_DIRS} PUBLIC ${PROTOBUF_INCLUDE_DIR} $ $ ) target_link_libraries(${PROJECT_NAME}_pic PUBLIC protobuf::libprotobuf) - set_property(TARGET ${PROJECT_NAME}_pic PROPERTY POSITION_INDEPENDENT_CODE ON) - install(TARGETS ${PROJECT_NAME}_pic EXPORT ${PROJECT_NAME}_targets ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib) +# Shared library add_library(${PROJECT_NAME} SHARED $) add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) target_include_directories(${PROJECT_NAME} + PRIVATE + ${Protobuf_INCLUDE_DIRS} PUBLIC ${PROTOBUF_INCLUDE_DIR} $ $ ) - -set_property( - TARGET ${PROJECT_NAME} - PROPERTY SOVERSION ${${PROJECT_NAME}_SOVERSION} -) -set_property( - TARGET ${PROJECT_NAME} - PROPERTY VERSION ${${PROJECT_NAME}_LIBVERSION} -) - target_link_libraries(${PROJECT_NAME} PUBLIC protobuf::libprotobuf) +set_property(TARGET ${PROJECT_NAME} PROPERTY SOVERSION ${${PROJECT_NAME}_SOVERSION}) +set_property(TARGET ${PROJECT_NAME} PROPERTY VERSION ${${PROJECT_NAME}_LIBVERSION}) install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}_targets DESTINATION "${OSI_INSTALL_LIB_DIR}" COMPONENT lib) diff --git a/CMakePresets.json b/CMakePresets.json index 2a5e479..a808990 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -23,7 +23,8 @@ }, { "name": "vcpkg-windows", - "configurePreset": "vcpkg-windows" + "configurePreset": "vcpkg-windows", + "configuration": "Release" } ] }