C++17: use an OBJECT_LIBRARY to build HLA

This allows us to easily have different CXX version for the HLA code,
to the rest of the project.
This commit is contained in:
James Turner 2020-06-21 19:31:35 +01:00
parent 26b207f20c
commit 346344ee09
4 changed files with 39 additions and 33 deletions

View File

@ -213,7 +213,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD
endif() endif()
find_package(Boost REQUIRED) find_package(Boost REQUIRED)
set (BOOST_CXX_FLAGS "-DBOOST_BIMAP_DISABLE_SERIALIZATION -DBOOST_NO_STDLIB_CONFIG") set (BOOST_CXX_FLAGS "-DBOOST_BIMAP_DISABLE_SERIALIZATION -DBOOST_NO_STDLIB_CONFIG -DBOOST_NO_AUTO_PTR -DBOOST_NO_CXX98_BINDERS")
include(BoostTestTargets) include(BoostTestTargets)
if(SIMGEAR_HEADLESS) if(SIMGEAR_HEADLESS)
@ -287,7 +287,7 @@ if(ENABLE_RTI)
find_package(PkgConfig) find_package(PkgConfig)
if(PKG_CONFIG_FOUND) if(PKG_CONFIG_FOUND)
SET(ENV{PKG_CONFIG_PATH} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig:$ENV{PKG_CONFIG_PATH}") SET(ENV{PKG_CONFIG_PATH} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig:$ENV{PKG_CONFIG_PATH}")
pkg_check_modules(RTI hla-rti13) pkg_check_modules(RTI IMPORTED_TARGET hla-rti13)
endif(PKG_CONFIG_FOUND) endif(PKG_CONFIG_FOUND)
if(RTI_FOUND) if(RTI_FOUND)
message(STATUS "RTI: ENABLED") message(STATUS "RTI: ENABLED")
@ -360,16 +360,6 @@ SET(CMAKE_RELEASE_POSTFIX "" CACHE STRING "add a postfix, usually empty on windo
SET(CMAKE_RELWITHDEBINFO_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows") SET(CMAKE_RELWITHDEBINFO_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows")
SET(CMAKE_MINSIZEREL_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows") SET(CMAKE_MINSIZEREL_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows")
# isnan might not be real symbol, so can't check using function_exists
check_cxx_source_compiles(
"#include <cmath>
int main() { return std::isnan(0.0);} "
HAVE_STD_ISNAN)
if (NOT ${HAVE_STD_ISNAN})
message(FATAL_ERROR "Your compiler lacks C++11 std::isnan, please update it")
endif()
# Check if the <regex> implementation in the C++ standard library is usable. # Check if the <regex> implementation in the C++ standard library is usable.
# This is necessary because g++ 4.8 lies about its C++11 compliance: its # This is necessary because g++ 4.8 lies about its C++11 compliance: its
# <regex> is utterly unusable, cf. [1]. # <regex> is utterly unusable, cf. [1].

View File

@ -2,6 +2,7 @@ include(CMakeFindDependencyMacro)
find_dependency(ZLIB) find_dependency(ZLIB)
find_dependency(Threads) find_dependency(Threads)
find_dependency(CURL)
# OSG # OSG
@ -21,11 +22,10 @@ set(ENABLE_SIMD @ENABLE_SIMD@)
# OpenRTI support # OpenRTI support
set(ENABLE_RTI @ENABLE_RTI@) set(ENABLE_RTI @ENABLE_RTI@)
if(ENABLE_RTI) if(ENABLE_RTI)
set(RTI_FOUND @RTI_FOUND@) find_dependency(PkgConfig)
if(RTI_FOUND) if(PKG_CONFIG_FOUND)
set(RTI_INCLUDE_DIRS @RTI_INCLUDE_DIRS@) pkg_check_modules(RTI IMPORTED_TARGET hla-rti13)
set(RTI_LDFLAGS @RTI_LDFLAGS@) endif(PKG_CONFIG_FOUND)
endif(RTI_FOUND)
endif(ENABLE_RTI) endif(ENABLE_RTI)
# Alternative terrain engine based on pagedLOD # Alternative terrain engine based on pagedLOD

View File

@ -124,9 +124,9 @@ target_include_directories(SimGearCore BEFORE PUBLIC
$<INSTALL_INTERFACE:include>) $<INSTALL_INTERFACE:include>)
target_include_directories(SimGearCore PUBLIC target_include_directories(SimGearCore PUBLIC
${Boost_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}) ${Boost_INCLUDE_DIRS})
target_include_directories(SimGearCore PRIVATE target_include_directories(SimGearCore PRIVATE
${EXPAT_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) ${EXPAT_INCLUDE_DIRS} )
if (NOT SYSTEM_EXPAT) if (NOT SYSTEM_EXPAT)
# XML_STATIC is important to avoid sg_expat_external.h # XML_STATIC is important to avoid sg_expat_external.h
@ -159,14 +159,19 @@ if (NOT SIMGEAR_HEADLESS)
endif() endif()
# we expose ZLib in some of our headers # we expose ZLib in some of our headers
target_link_libraries(SimGearCore PUBLIC ${ZLIB_LIBRARY}) target_link_libraries(SimGearCore PUBLIC ZLIB::ZLIB)
if (ENABLE_RTI)
target_sources(SimGearCore PRIVATE $<TARGET_OBJECTS:rti> $<TARGET_OBJECTS:rti13>)
target_link_libraries(SimGearCore PRIVATE PkgConfig::RTI)
endif()
target_link_libraries(SimGearCore PRIVATE target_link_libraries(SimGearCore PRIVATE
${RT_LIBRARY} ${RT_LIBRARY}
${DL_LIBRARY} ${DL_LIBRARY}
${CMAKE_THREAD_LIBS_INIT} ${CMAKE_THREAD_LIBS_INIT}
${COCOA_LIBRARY} ${COCOA_LIBRARY}
${CURL_LIBRARIES} CURL::libcurl
${WINSOCK_LIBRARY}) ${WINSOCK_LIBRARY})
if(SYSTEM_EXPAT) if(SYSTEM_EXPAT)
@ -186,7 +191,7 @@ if(NOT SIMGEAR_HEADLESS)
) )
target_link_libraries(SimGearScene PRIVATE target_link_libraries(SimGearScene PRIVATE
${ZLIB_LIBRARY} ZLIB::ZLIB
${OPENAL_LIBRARY} ${OPENAL_LIBRARY}
${OPENGL_LIBRARY} ${OPENGL_LIBRARY}
${JPEG_LIBRARY}) ${JPEG_LIBRARY})
@ -198,11 +203,3 @@ if(NOT SIMGEAR_HEADLESS)
# only actually needed by canvas/KeyboardEvent.cxx # only actually needed by canvas/KeyboardEvent.cxx
target_include_directories(SimGearScene PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/utf8/source) target_include_directories(SimGearScene PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/utf8/source)
endif() endif()
if(ENABLE_RTI)
# Ugly first aid to make hla compile agian
set_property(SOURCE hla/RTI13InteractionClass.cxx hla/RTI13ObjectClass.cxx
hla/RTI13ObjectInstance.cxx hla/RTI13Federate.cxx
hla/RTI13FederateFactory.cxx
APPEND PROPERTY COMPILE_FLAGS "-I${RTI_INCLUDE_DIRS}")
endif(ENABLE_RTI)

View File

@ -50,6 +50,7 @@ set(HLA_SOURCES
HLAVariantRecordDataElement.cxx HLAVariantRecordDataElement.cxx
HLAVariantRecordDataType.cxx HLAVariantRecordDataType.cxx
) )
simgear_component(hla hla "${HLA_SOURCES}" "${HLA_HEADERS}") simgear_component(hla hla "${HLA_SOURCES}" "${HLA_HEADERS}")
if(RTI_FOUND) if(RTI_FOUND)
@ -60,7 +61,16 @@ if(RTI_FOUND)
RTI13Federate.cxx RTI13Federate.cxx
RTI13FederateFactory.cxx RTI13FederateFactory.cxx
) )
simgear_component(rti13 hla "${RTI13_SOURCES}" "")
add_library(rti13 OBJECT ${RTI13_SOURCES})
target_include_directories(rti13 PUBLIC ${PROJECT_SOURCE_DIR})
target_include_directories(rti13 PUBLIC ${PROJECT_BINARY_DIR})
#target_include_directories(rti13 PRIVATE ${RTI_INCLUDE_DIRS})
target_link_libraries(rti13 PRIVATE PkgConfig::RTI)
set_property(TARGET rti13 PROPERTY CXX_STANDARD 11)
#simgear_component(rti13 hla "${RTI13_SOURCES}" "")
endif() endif()
set(RTI_SOURCES set(RTI_SOURCES
@ -71,4 +81,13 @@ set(RTI_SOURCES
RTIFederateFactory.cxx RTIFederateFactory.cxx
RTIFederateFactoryRegistry.cxx RTIFederateFactoryRegistry.cxx
) )
simgear_component(rti hla "${RTI_SOURCES}" "")
add_library(rti OBJECT ${RTI_SOURCES})
target_include_directories(rti PUBLIC ${PROJECT_SOURCE_DIR})
target_include_directories(rti PUBLIC ${PROJECT_BINARY_DIR})
#target_include_directories(rti PRIVATE ${RTI_INCLUDE_DIRS})
target_link_libraries(rti PRIVATE PkgConfig::RTI)
set_property(TARGET rti PROPERTY CXX_STANDARD 11)
#simgear_component(rti hla "${RTI_SOURCES}" "")