Optimized lib type switching

This commit is contained in:
JackCarterSmith 2022-08-12 22:44:14 +02:00
parent e10e74b8a1
commit 78147d3d10
Signed by: JackCarterSmith
GPG Key ID: 832E52F4E23F8F24
5 changed files with 44 additions and 29 deletions

View File

@ -25,6 +25,9 @@ else() # Standalone project mode, should not be used for release.
endif() endif()
set(RSP_MODEL_LIB_NAME RSPModel${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}) set(RSP_MODEL_LIB_NAME RSPModel${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR})
# Compilation option
option(RSPMODEL_SHARED "Build shared lib" ON)
# Push compile infos to source # Push compile infos to source
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/RSPModelLib/src/config.h @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/RSPModelLib/src/config.h @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/RSEModel/src/config.h @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/RSEModel/src/config.h @ONLY)
@ -57,7 +60,12 @@ add_subdirectory(RSEModel)
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
install(TARGETS rse-model rsp-model-lib rsp-model-libstatic if(RSPMODEL_SHARED)
set(RSE_MODEL_TARGETS_LIST rse-model rsp-model-lib rsp-model-libstatic)
else()
set(RSE_MODEL_TARGETS_LIST rse-model rsp-model-libstatic)
endif()
install(TARGETS ${RSE_MODEL_TARGETS_LIST}
RUNTIME DESTINATION ${INSTALL_BIN_DIR} RUNTIME DESTINATION ${INSTALL_BIN_DIR}
LIBRARY DESTINATION ${INSTALL_LIB_DIR} LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR} ARCHIVE DESTINATION ${INSTALL_LIB_DIR}

View File

@ -29,18 +29,20 @@ endif()
# Declare the shared library instance # Declare the shared library instance
add_library(rsp-model-lib SHARED ${RSP_MOD_SOURCES}) if(RSPMODEL_SHARED)
set_property(TARGET rsp-model-lib PROPERTY C_STANDARD 90) add_library(rsp-model-lib SHARED ${RSP_MOD_SOURCES})
set_property(TARGET rsp-model-lib PROPERTY C_STANDARD 90)
target_include_directories(rsp-model-lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) target_include_directories(rsp-model-lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
set_target_properties(rsp-model-lib PROPERTIES OUTPUT_NAME ${RSP_MODEL_LIB_NAME}) set_target_properties(rsp-model-lib PROPERTIES OUTPUT_NAME ${RSP_MODEL_LIB_NAME})
set_target_properties(rsp-model-lib PROPERTIES DEFINE_SYMBOL RSPMODEL_DLL) set_target_properties(rsp-model-lib PROPERTIES DEFINE_SYMBOL RSPMODEL_DLL)
if(MSVC) if(MSVC)
# msvc does not append 'lib' - do it here to have consistent name # msvc does not append 'lib' - do it here to have consistent name
set_target_properties(rsp-model-lib PROPERTIES PREFIX "lib") set_target_properties(rsp-model-lib PROPERTIES PREFIX "lib")
set_target_properties(rsp-model-lib PROPERTIES IMPORT_PREFIX "lib") set_target_properties(rsp-model-lib PROPERTIES IMPORT_PREFIX "lib")
endif()
endif() endif()

View File

@ -14,25 +14,28 @@
#define RSPMODEL_H_ #define RSPMODEL_H_
#if defined(RSPMODEL_SHARED) || defined(RSPMODEL_DLL) #if defined(_MSC_VER)
# if defined(_MSC_VER)
# define RSPMODEL_ABI_EXPORT __declspec(dllexport) # define RSPMODEL_ABI_EXPORT __declspec(dllexport)
# define RSPMODEL_ABI_IMPORT __declspec(dllimport) # define RSPMODEL_ABI_IMPORT __declspec(dllimport)
# elif __GNUC__ >= 4 #elif __GNUC__ >= 4
# define RSPMODEL_ABI_EXPORT __attribute__ ((visibility("default"))) # define RSPMODEL_ABI_EXPORT __attribute__ ((visibility("default")))
# define RSPMODEL_ABI_IMPORT __attribute__ ((visibility("default"))) # define RSPMODEL_ABI_IMPORT __attribute__ ((visibility("default")))
# else #else
# define RSPMODEL_ABI_EXPORT # define RSPMODEL_ABI_EXPORT
# define RSPMODEL_ABI_IMPORT # define RSPMODEL_ABI_IMPORT
# endif #endif
# if defined(WINDOWS) || defined(WIN32)
# ifdef RSPMODEL_DLL #if defined(RSPMODEL_DLL)
# if defined(WIN32)
# if defined(RSPMODEL_DLLBUILD)
# define RSPMODEL_EXTERN extern RSPMODEL_ABI_EXPORT # define RSPMODEL_EXTERN extern RSPMODEL_ABI_EXPORT
# else # else
# define RSPMODEL_EXTERN extern RSPMODEL_ABI_IMPORT # define RSPMODEL_EXTERN extern RSPMODEL_ABI_IMPORT
# endif # endif
# endif # endif
#else #endif
#ifndef RSPMODEL_EXTERN
# define RSPMODEL_EXTERN extern # define RSPMODEL_EXTERN extern
#endif #endif

View File

@ -1,9 +1,9 @@
/** /**
* \file RSPModel.c * @file RSPModel.c
* \date 11/08/2022 * @date 11/08/2022
* \author JackCarterSmith * @author JackCarterSmith
* \copyright GPL-v3.0 * @copyright GPL-v3.0
* \brief HOB model parser and export to Waveform OBJ format. * @brief HOB model parser and export to Waveform OBJ format.
* *
*/ */

View File

@ -9,6 +9,8 @@
#ifndef OPTIONS_H_ #ifndef OPTIONS_H_
#define OPTIONS_H_ #define OPTIONS_H_
#define RSPMODEL_DLLBUILD
/// Options structure /// Options structure
typedef union u_prog_options { typedef union u_prog_options {
struct { struct {