Merge branch 'CMakeLibCleanup'

This commit is contained in:
Jorrit Wronski
2015-04-19 23:18:54 +02:00

View File

@@ -158,77 +158,167 @@ ELSEIF(FORCE_BITNESS_64)
SET(BITNESS "64")
ENDIF()
if (!MSVC)
#set_target_properties(${app_name} PROPERTIES COMPILE_FLAGS "-m${BITNESS}" LINK_FLAGS "-m${BITNESS}")
#set_target_properties(${app_name} PROPERTIES COMPILE_FLAGS "-m${BITNESS}" LINK_FLAGS "-m${BITNESS}")
set_target_properties(${app_name} PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS "-m${BITNESS}")
set_target_properties(${app_name} PROPERTIES APPEND_STRING PROPERTY LINK_FLAGS "-m${BITNESS}")
endif()
#######################################
# MAKE ARTIFACTS #
#-------------------------------------#
# In this section we define the #
# artifacts (exes, libs) that will be #
# made for coolprop, these include #
# customisation from earier options. #
# artefacts (exes, libs) that will be #
# made for CoolProp, these include #
# customisation from earlier options. #
#######################################
### FLUIDS, MIXTURES JSON ###
add_custom_target(generate_headers
COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_SOURCE_DIR}/dev/generate_headers.py")
### COOLPROP LIB or DLL ###
if (COOLPROP_SHARED_LIBRARY)
list(APPEND APP_SOURCES "${CMAKE_SOURCE_DIR}/src/CoolPropLib.cpp")
### Library options ###
# We already know the bitness from the earlier
# settings. Let us rely on that and only handle
# calling conventions and shared/static issues.
option (COOLPROP_STDCALL_LIBRARY
"Build CoolProp as a 32bit shared library with stdcall"
OFF)
option (COOLPROP_CDECL_LIBRARY
"Build CoolProp as a 32bit shared library with cdecl"
OFF)
option (COOLPROP_EXTERNC_LIBRARY
"Build CoolProp as a static library with without name mangling"
OFF)
# Overwrite some settings based on the old flags
IF (COOLPROP_STATIC_LIBRARY_MODULE OR COOLPROP_STATIC_LIBRARY)
SET (COOLPROP_STATIC_LIBRARY ON)
SET (COOLPROP_SHARED_LIBRARY OFF)
ENDIF()
IF (COOLPROP_EXTERNC_STATIC_LIBRARY)
SET (COOLPROP_STATIC_LIBRARY ON)
SET (COOLPROP_EXTERNC_LIBRARY ON)
SET (COOLPROP_SHARED_LIBRARY OFF)
ENDIF()
IF (COOLPROP_32BIT_CDECL_SHARED_LIBRARY_MODULE OR COOLPROP_32BIT_CDECL_SHARED_LIBRARY)
SET (COOLPROP_STATIC_LIBRARY OFF)
SET (COOLPROP_SHARED_LIBRARY ON)
SET (COOLPROP_CDECL_LIBRARY ON)
SET (COOLPROP_STDCALL_LIBRARY OFF)
ENDIF()
IF (COOLPROP_32BIT_STDCALL_SHARED_LIBRARY_MODULE OR COOLPROP_32BIT_STDCALL_SHARED_LIBRARY)
SET (COOLPROP_STATIC_LIBRARY OFF)
SET (COOLPROP_SHARED_LIBRARY ON)
SET (COOLPROP_CDECL_LIBRARY OFF)
SET (COOLPROP_STDCALL_LIBRARY ON)
ENDIF()
IF (COOLPROP_64BIT_SHARED_LIBRARY_MODULE OR COOLPROP_64BIT_SHARED_LIBRARY)
SET (COOLPROP_STATIC_LIBRARY OFF)
SET (COOLPROP_SHARED_LIBRARY ON)
ENDIF()
if (COOLPROP_32BIT_SHARED_LIBRARY_LINUX_MODULE OR COOLPROP_32BIT_SHARED_LIBRARY_LINUX)
SET (COOLPROP_STATIC_LIBRARY OFF)
SET (COOLPROP_SHARED_LIBRARY ON)
endif()
if (COOLPROP_STATIC_LIBRARY_MODULE OR COOLPROP_STATIC_LIBRARY OR COOLPROP_EXTERNC_STATIC_LIBRARY)
list(APPEND APP_SOURCES "${CMAKE_SOURCE_DIR}/src/CoolPropLib.cpp")
add_library(${app_name} STATIC ${APP_SOURCES})
add_dependencies (${app_name} generate_headers)
install (TARGETS ${app_name} DESTINATION static_library/${CMAKE_SYSTEM_NAME})
endif()
### Process some more options ###
if (COOLPROP_EXTERNC_STATIC_LIBRARY)
set_target_properties (${app_name} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -DEXTERNC")
endif()
# Rule out cases that do not make sense
IF ("${BITNESS}" STREQUAL "32")
IF (COOLPROP_CDECL_LIBRARY)
SET(CONVENTION "__cdecl")
ELSEIF (COOLPROP_STDCALL_LIBRARY)
SET(CONVENTION "__stdcall")
ELSE()
SET(CONVENTION "")
ENDIF()
ELSEIF ("${BITNESS}" STREQUAL "64")
IF (COOLPROP_CDECL_LIBRARY)
MESSAGE(WARNING "You cannot use cdecl conventions in a 64-bit library.")
ELSEIF (COOLPROP_STDCALL_LIBRARY)
MESSAGE(WARNING "You cannot use stdcall conventions in a 64-bit library.")
ENDIF()
SET(CONVENTION "")
ELSE()
MESSAGE(FATAL_ERROR "Bitness is not defined. Set it and run cmake again.")
ENDIF()
IF ( COOLPROP_STATIC_LIBRARY OR COOLPROP_SHARED_LIBRARY )
#
LIST(APPEND APP_SOURCES "${CMAKE_SOURCE_DIR}/src/CoolPropLib.cpp")
# Static or shared?
IF (COOLPROP_STATIC_LIBRARY)
ADD_LIBRARY(${app_name} STATIC ${APP_SOURCES})
INSTALL(TARGETS ${app_name} DESTINATION static_library/${CMAKE_SYSTEM_NAME}/${BITNESS}bit${CONVENTION} )
INSTALL(FILES ${CMAKE_SOURCE_DIR}/include/CoolPropLib.h DESTINATION static_library)
ELSEIF (COOLPROP_SHARED_LIBRARY)
ADD_LIBRARY(${app_name} SHARED ${APP_SOURCES})
INSTALL(TARGETS ${app_name} DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/${BITNESS}bit${CONVENTION} )
INSTALL(FILES ${CMAKE_SOURCE_DIR}/include/CoolPropLib.h DESTINATION shared_library)
IF (MSVC)
ADD_CUSTOM_COMMAND(TARGET ${app_name} POST_BUILD
COMMAND dumpbin /EXPORTS $<TARGET_FILE:CoolProp> > ${CMAKE_CURRENT_BINARY_DIR}/exports.txt)
INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/exports.txt
DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/${BITNESS}bit${CONVENTION})
ENDIF()
IF ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
SET_TARGET_PROPERTIES (${app_name} PROPERTIES VERSION ${COOLPROP_VERSION} SOVERSION ${COOLPROP_VERSION_MAJOR})
ENDIF()
ELSE()
MESSAGE(FATAL_ERROR "You have to build a static or shared library.")
ENDIF()
#
### All options are set, we are building a library ###
ADD_DEPENDENCIES(${app_name} generate_headers)
SET_TARGET_PROPERTIES (${app_name} PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS "${COMPILE_FLAGS} -DCOOLPROP_LIB")
#
# Set the bitness
IF (!MSVC)
SET_TARGET_PROPERTIES(${app_name} PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS "${COMPILE_FLAGS} -m${BITNESS}")
SET_TARGET_PROPERTIES(${app_name} PROPERTIES APPEND_STRING PROPERTY LINK_FLAGS "${LINK_FLAGS} -m${BITNESS}")
ENDIF()
#
# Name mangling settings
IF (COOLPROP_EXTERNC_LIBRARY)
SET_TARGET_PROPERTIES (${app_name} PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS "${COMPILE_FLAGS} -DEXTERNC")
ENDIF()
#
# calling conventions
SET_TARGET_PROPERTIES (${app_name} PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS "${COMPILE_FLAGS} -DCONVENTION=${CONVENTION}")
#
# Now all the compiler specific settings for Visual Studio
IF (MSVC)
# No lib prefix for the shared library
SET_TARGET_PROPERTIES(${app_name} PROPERTIES PREFIX "")
# Force visual studio to statically link the c runtime to avoid dependency on MSVCRXXX.dll
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
ENDIF()
# For Mac systems
IF ("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
# see https://support.enthought.com/hc/en-us/articles/204469410-OS-X-GCC-Clang-and-Cython-in-10-9-Mavericks
SET_TARGET_PROPERTIES(${app_name} PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS "${COMPILE_FLAGS} -stdlib=libstdc++ -mmacosx-version-min=10.6")
SET_TARGET_PROPERTIES(${app_name} PROPERTIES APPEND_STRING PROPERTY LINK_FLAGS "${LINK_FLAGS} -stdlib=libstdc++ -mmacosx-version-min=10.6")
ENDIF()
#
MESSAGE(STATUS "Library compilation detected:")
MESSAGE(STATUS "BITNESS: ${BITNESS}")
MESSAGE(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
MESSAGE(STATUS "COOLPROP_STATIC_LIBRARY: ${COOLPROP_STATIC_LIBRARY}")
MESSAGE(STATUS "COOLPROP_SHARED_LIBRARY: ${COOLPROP_SHARED_LIBRARY}")
MESSAGE(STATUS "CONVENTION: ${CONVENTION}")
MESSAGE(STATUS "COOLPROP_CDECL_LIBRARY: ${COOLPROP_CDECL_LIBRARY}")
MESSAGE(STATUS "COOLPROP_STDCALL_LIBRARY: ${COOLPROP_STDCALL_LIBRARY}")
MESSAGE(STATUS "COOLPROP_EXTERNC_LIBRARY: ${COOLPROP_EXTERNC_LIBRARY}")
MESSAGE(STATUS "COMPILE_FLAGS: ${COMPILE_FLAGS}")
MESSAGE(STATUS "LINK_FLAGS: ${LINK_FLAGS}")
#
ENDIF()
if (COOLPROP_64BIT_SHARED_LIBRARY_MODULE OR COOLPROP_64BIT_SHARED_LIBRARY)
list(APPEND APP_SOURCES "${CMAKE_SOURCE_DIR}/src/CoolPropLib.cpp")
add_library(${app_name} SHARED ${APP_SOURCES})
set_target_properties (${app_name} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -DCOOLPROP_LIB")
if (!MSVC)
set_target_properties(${app_name} PROPERTIES COMPILE_FLAGS "-m64" LINK_FLAGS "-m64")
endif()
add_dependencies (${app_name} generate_headers)
if (MSVC)
# Force visual studio to statically link the c runtime to avoid dependency on MSVCRXXX.dll
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
# No lib prefix for the shared library
set_target_properties(${app_name} PROPERTIES PREFIX "")
add_custom_command(TARGET ${app_name}
POST_BUILD
COMMAND dumpbin /EXPORTS $<TARGET_FILE:CoolProp> > ${CMAKE_CURRENT_BINARY_DIR}/exports.txt)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/exports.txt DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/64bit)
else()
# see https://support.enthought.com/hc/en-us/articles/204469410-OS-X-GCC-Clang-and-Cython-in-10-9-Mavericks
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -stdlib=libstdc++ -mmacosx-version-min=10.6")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -stdlib=libstdc++ -mmacosx-version-min=10.6")
endif()
endif()
install (TARGETS ${app_name} DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/64bit)
install (FILES ${CMAKE_SOURCE_DIR}/include/CoolPropLib.h DESTINATION shared_library)
endif()
if (COOLPROP_DEBIAN_PACKAGE)
if(!UNIX)
@@ -275,74 +365,6 @@ if (COOLPROP_VXWORKS_LIBRARY_MODULE OR COOLPROP_VXWORKS_LIBRARY)
install (TARGETS ${app_name} DESTINATION "${COOLPROP_INSTALL_PREFIX}/shared_library/VxWorks")
endif()
if (COOLPROP_32BIT_SHARED_LIBRARY_LINUX_MODULE OR COOLPROP_32BIT_SHARED_LIBRARY_LINUX)
if(!UNIX)
message(FATAL_ERROR "COOLPROP_32BIT_SHARED_LIBRARY_LINUX_MODULE can only be used on linux host")
endif()
list(APPEND APP_SOURCES "${CMAKE_SOURCE_DIR}/src/CoolPropLib.cpp")
add_library(${app_name} SHARED ${APP_SOURCES})
set_target_properties (${app_name} PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS "${COMPILE_FLAGS} -DEXTERNC -DCONVENTION= -m32" LINK_FLAGS "-m32")
add_dependencies (${app_name} generate_headers)
if (MSVC)
# Force visual studio to statically link the c runtime to avoid dependency on MSVCRXXX.dll
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
else()
# see https://support.enthought.com/hc/en-us/articles/204469410-OS-X-GCC-Clang-and-Cython-in-10-9-Mavericks
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set_target_properties(${app_name} PROPERTIES APPEND_STRING PROPERTY COMPILE_FLAGS "-stdlib=libstdc++ -mmacosx-version-min=10.6 -DEXTERNC -DCONVENTION= -m32")
set_target_properties(${app_name} PROPERTIES APPEND_STRING PROPERTY LINK_FLAGS "-stdlib=libstdc++ -mmacosx-version-min=10.6 -m32")
endif()
endif()
install (TARGETS ${app_name} DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/32bit__cdecl_calling_convention)
install (FILES ${CMAKE_SOURCE_DIR}/include/CoolPropLib.h DESTINATION shared_library)
endif()
if (COOLPROP_32BIT_CDECL_SHARED_LIBRARY_MODULE OR COOLPROP_32BIT_CDECL_SHARED_LIBRARY)
list(APPEND APP_SOURCES "${CMAKE_SOURCE_DIR}/src/CoolPropLib.cpp")
add_library(${app_name} SHARED ${APP_SOURCES})
set_target_properties (${app_name} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -DCOOLPROP_LIB -DCONVENTION=__cdecl")
if (!MSVC)
set_target_properties(${app_name} PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
endif()
add_dependencies (${app_name} generate_headers)
set_target_properties(${app_name} PROPERTIES PREFIX "")
if (MSVC)
# Force visual studio to statically link the c runtime to avoid dependency on MSVCRXXX.dll
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
add_custom_command(TARGET ${app_name}
POST_BUILD
COMMAND dumpbin /EXPORTS $<TARGET_FILE:CoolProp> > ${CMAKE_CURRENT_BINARY_DIR}/exports.txt)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/exports.txt DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/32bit__cdecl_calling_convention)
endif()
install (TARGETS ${app_name} DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/32bit__cdecl_calling_convention)
install (FILES ${CMAKE_SOURCE_DIR}/include/CoolPropLib.h DESTINATION shared_library)
endif()
if (COOLPROP_32BIT_STDCALL_SHARED_LIBRARY_MODULE OR COOLPROP_32BIT_STDCALL_SHARED_LIBRARY)
list(APPEND APP_SOURCES "${CMAKE_SOURCE_DIR}/src/CoolPropLib.cpp")
add_library(${app_name} SHARED ${APP_SOURCES})
set_target_properties (${app_name} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -DCOOLPROP_LIB -DCONVENTION=__stdcall")
if (!MSVC)
set_target_properties(${app_name} PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
endif()
add_dependencies (${app_name} generate_headers)
set_target_properties(${app_name} PROPERTIES PREFIX "")
if (MSVC)
# Force visual studio to statically link the c runtime to avoid dependency on MSVCRXXX.dll
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
add_custom_command(TARGET ${app_name}
POST_BUILD
COMMAND dumpbin /EXPORTS $<TARGET_FILE:CoolProp> > ${CMAKE_CURRENT_BINARY_DIR}/exports.txt)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/exports.txt DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/32bit__stdcall_calling_convention)
endif()
install (TARGETS ${app_name} DESTINATION shared_library/${CMAKE_SYSTEM_NAME}/32bit__stdcall_calling_convention)
install (FILES ${CMAKE_SOURCE_DIR}/include/CoolPropLib.h DESTINATION shared_library)
endif()
if (COOLPROP_MATHCAD_MODULE)
if(!WIN32)
message(FATAL_ERROR "COOLPROP_MATHCAD_MODULE can only be used on windows host")