@@ -13,9 +13,10 @@ if(OSI_IS_TOP_LEVEL AND NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
1313 message (STATUS "Setting build type to '${default_build_type} ' as none was specified." )
1414 set (CMAKE_BUILD_TYPE "${default_build_type} " CACHE
1515 STRING "Choose the type of build." FORCE)
16+ set (CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo;MinSizeRel;Debug" CACHE STRING "" FORCE)
1617 # Set the possible values of build type for cmake-gui
1718 set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
18- "Debug" " Release" "MinSizeRel" "RelWithDebInfo" )
19+ "Release" "MinSizeRel" "RelWithDebInfo" "Debug " )
1920endif ()
2021
2122# read the version number from the file "VERSION"
@@ -40,6 +41,7 @@ project(
4041set (CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to be used" )
4142set (CMAKE_CXX_STANDARD_REQUIRED ON )
4243
44+ # Suppress protobuf code warnings for MSVC
4345if (MSVC )
4446 add_compile_options (/wd4141 /wd4244 /wd4251 /wd4267 /wd4305 /wd4355 /wd4800 /wd4996)
4547endif ()
@@ -64,16 +66,18 @@ set(OSI_INSTALL_INCLUDE_DIR ${OSI_INSTALL_INCLUDE_DIR}/osi${VERSION_MAJOR})
6466configure_file (open-simulation-interface /osi_version.proto.in osi_version.proto)
6567
6668find_package (Protobuf REQUIRED)
67- include_directories (${Protobuf_INCLUDE_DIRS} )
6869
6970file (GLOB OSI_PROTO_FILES open-simulation-interface /*.proto)
7071list (INSERT OSI_PROTO_FILES 0 ${CMAKE_CURRENT_BINARY_DIR} /osi_version.proto)
7172
7273protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES} )
7374
75+ # Static library
7476add_library (${PROJECT_NAME} _static STATIC ${PROTO_SRCS} ${PROTO_HEADERS} )
7577add_library (${PROJECT_NAME} ::${PROJECT_NAME} _static ALIAS ${PROJECT_NAME} _static)
7678target_include_directories (${PROJECT_NAME} _static
79+ PRIVATE
80+ ${Protobuf_INCLUDE_DIRS}
7781 PUBLIC
7882 ${PROTOBUF_INCLUDE_DIR}
7983 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
@@ -84,53 +88,50 @@ install(TARGETS ${PROJECT_NAME}_static
8488 EXPORT ${PROJECT_NAME} _targets
8589 ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR} " COMPONENT lib)
8690
87-
91+ # Position independent object library for shared/pic libraries
8892add_library (${PROJECT_NAME} _obj OBJECT ${PROTO_SRCS} ${PROTO_HEADERS} )
8993add_library (${PROJECT_NAME} ::${PROJECT_NAME} _obj ALIAS ${PROJECT_NAME} _obj)
9094target_include_directories (${PROJECT_NAME} _obj
95+ PRIVATE
96+ ${Protobuf_INCLUDE_DIRS}
9197 PUBLIC
9298 ${PROTOBUF_INCLUDE_DIR}
9399 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
94100 $<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR} >
95101)
96102set_property (TARGET ${PROJECT_NAME} _obj PROPERTY POSITION_INDEPENDENT_CODE ON )
97103
98-
104+ # Static position independent code library for use in shared libraries
99105add_library (${PROJECT_NAME} _pic STATIC $<TARGET_OBJECTS:${PROJECT_NAME} _obj>)
100106add_library (${PROJECT_NAME} ::${PROJECT_NAME} _pic ALIAS ${PROJECT_NAME} _pic)
101107target_include_directories (${PROJECT_NAME} _pic
108+ PRIVATE
109+ ${Protobuf_INCLUDE_DIRS}
102110 PUBLIC
103111 ${PROTOBUF_INCLUDE_DIR}
104112 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
105113 $<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR} >
106114)
107115target_link_libraries (${PROJECT_NAME} _pic PUBLIC protobuf::libprotobuf)
108-
109116set_property (TARGET ${PROJECT_NAME} _pic PROPERTY POSITION_INDEPENDENT_CODE ON )
110-
111117install (TARGETS ${PROJECT_NAME} _pic
112118 EXPORT ${PROJECT_NAME} _targets
113119 ARCHIVE DESTINATION "${OSI_INSTALL_LIB_DIR} " COMPONENT lib)
114120
121+ # Shared library
115122add_library (${PROJECT_NAME} SHARED $<TARGET_OBJECTS:${PROJECT_NAME} _obj>)
116123add_library (${PROJECT_NAME} ::${PROJECT_NAME} ALIAS ${PROJECT_NAME} )
117124target_include_directories (${PROJECT_NAME}
125+ PRIVATE
126+ ${Protobuf_INCLUDE_DIRS}
118127 PUBLIC
119128 ${PROTOBUF_INCLUDE_DIR}
120129 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} >
121130 $<INSTALL_INTERFACE:${OSI_INSTALL_INCLUDE_DIR} >
122131)
123-
124- set_property (
125- TARGET ${PROJECT_NAME}
126- PROPERTY SOVERSION ${${PROJECT_NAME} _SOVERSION}
127- )
128- set_property (
129- TARGET ${PROJECT_NAME}
130- PROPERTY VERSION ${${PROJECT_NAME} _LIBVERSION}
131- )
132-
133132target_link_libraries (${PROJECT_NAME} PUBLIC protobuf::libprotobuf)
133+ set_property (TARGET ${PROJECT_NAME} PROPERTY SOVERSION ${${PROJECT_NAME} _SOVERSION})
134+ set_property (TARGET ${PROJECT_NAME} PROPERTY VERSION ${${PROJECT_NAME} _LIBVERSION})
134135install (TARGETS ${PROJECT_NAME}
135136 EXPORT ${PROJECT_NAME} _targets
136137 DESTINATION "${OSI_INSTALL_LIB_DIR} " COMPONENT lib)
0 commit comments