diff --git a/CMakeLists.txt b/CMakeLists.txt index 742912b3..59b43288 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,5 @@ # Options - option(SLEEF_BUILD_STATIC_TEST_BINS "Build statically linked test executables" OFF) option(SLEEF_ENABLE_LTO "Enable LTO on GCC or ThinLTO on clang" OFF) option(SLEEF_BUILD_LIBM "libsleef will be built." ON) @@ -29,6 +28,13 @@ option(SLEEF_DISABLE_SSL "Disable testing with the SSL library" OFF) option(SLEEF_ENABLE_CUDA "Enable CUDA" OFF) option(SLEEF_ENABLE_CXX "Enable C++" OFF) +set(_INTERNAL_SLEEF_BUILD_SHARED_LIBS) +if(NOT DEFINED ${SLEEF_BUILD_SHARED_LIBS}) + set(_INTERNAL_SLEEF_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) +else() + set(_INTERNAL_SLEEF_BUILD_SHARED_LIBS ${SLEEF_BUILD_SHARED_LIBS}) +endif() + # Function used to generate safe command arguments for add_custom_command function(command_arguments PROPNAME) set(quoted_args "") @@ -157,9 +163,9 @@ separate build directory. Note: Please remove autogenerated file \ `CMakeCache.txt` and directory `CMakeFiles` in the current directory.") endif() -if(SLEEF_ENABLE_LTO AND BUILD_SHARED_LIBS) - message(FATAL_ERROR "SLEEF_ENABLE_LTO and BUILD_SHARED_LIBS cannot be specified at the same time") -endif(SLEEF_ENABLE_LTO AND BUILD_SHARED_LIBS) +if(SLEEF_ENABLE_LTO AND _INTERNAL_SLEEF_BUILD_SHARED_LIBS) + message(FATAL_ERROR "SLEEF_ENABLE_LTO and _INTERNAL_SLEEF_BUILD_SHARED_LIBS cannot be specified at the same time") +endif(SLEEF_ENABLE_LTO AND _INTERNAL_SLEEF_BUILD_SHARED_LIBS) if(SLEEF_ENABLE_LTO) cmake_policy(SET CMP0069 NEW) @@ -305,7 +311,7 @@ if(SLEEF_SHOW_CONFIG) message(" Native build dir: ${NATIVE_BUILD_DIR}") endif(CMAKE_CROSSCOMPILING) message(STATUS "Using option `${SLEEF_C_FLAGS}` to compile libsleef") - message(STATUS "Building shared libs : " ${BUILD_SHARED_LIBS}) + message(STATUS "Building shared libs : " ${_INTERNAL_SLEEF_BUILD_SHARED_LIBS}) message(STATUS "Building static test bins: " ${SLEEF_BUILD_STATIC_TEST_BINS}) message(STATUS "MPFR : " ${LIB_MPFR}) if (MPFR_INCLUDE_DIR) diff --git a/Configure.cmake b/Configure.cmake index 19a153f0..8a5e4780 100644 --- a/Configure.cmake +++ b/Configure.cmake @@ -7,7 +7,7 @@ include(CheckLanguage) if (SLEEF_BUILD_STATIC_TEST_BINS) set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") - set(BUILD_SHARED_LIBS OFF) + set(_INTERNAL_SLEEF_BUILD_SHARED_LIBS OFF) set(CMAKE_EXE_LINKER_FLAGS "-static") endif() @@ -834,7 +834,7 @@ endif() # Set common definitions -if (NOT BUILD_SHARED_LIBS) +if (NOT _INTERNAL_SLEEF_BUILD_SHARED_LIBS) set(COMMON_TARGET_DEFINITIONS SLEEF_STATIC_LIBS=1) set(SLEEF_STATIC_LIBS 1) endif() diff --git a/docs/build-with-cmake.md b/docs/build-with-cmake.md index 2dfaa79e..a6beb8fb 100644 --- a/docs/build-with-cmake.md +++ b/docs/build-with-cmake.md @@ -133,7 +133,7 @@ optimized, or any other special set of flags. - `SLEEF_SHOW_CONFIG` : Show relevant CMake variables upon configuring a build - `SLEEF_SHOW_ERROR_LOG` : Show the content of CMakeError.log -- `BUILD_SHARED_LIBS` : Static libs are built if set to FALSE +- `SLEEF_BUILD_SHARED_LIBS` : Static libs are built if set to FALSE - `SLEEF_BUILD_GNUABI_LIBS` : Avoid building libraries with GNU ABI if set to FALSE - `SLEEF_BUILD_INLINE_HEADERS` : Generate header files for inlining whole SLEEF functions diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index ac9d163c..797f9bc3 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -4,7 +4,7 @@ set(COMMON_TARGET_PROPERTIES C_STANDARD 99 # -std=gnu99 ) -if (BUILD_SHARED_LIBS) +if (_INTERNAL_SLEEF_BUILD_SHARED_LIBS) list(APPEND COMMON_TARGET_PROPERTIES POSITION_INDEPENDENT_CODE ON) # -fPIC endif() diff --git a/src/dft/CMakeLists.txt b/src/dft/CMakeLists.txt index f3097447..d6fa018b 100644 --- a/src/dft/CMakeLists.txt +++ b/src/dft/CMakeLists.txt @@ -224,7 +224,7 @@ set(COMMON_TARGET_PROPERTIES C_STANDARD 99 # -std=gnu99 ) -if (BUILD_SHARED_LIBS) +if (_INTERNAL_SLEEF_BUILD_SHARED_LIBS) list(APPEND COMMON_TARGET_PROPERTIES POSITION_INDEPENDENT_CODE ON) # -fPIC endif() @@ -373,8 +373,11 @@ foreach(T ${LIST_SUPPORTED_FPTYPE}) endforeach() # Target libdft - -add_library(${TARGET_LIBDFT} $ $) +if(_INTERNAL_SLEEF_BUILD_SHARED_LIBS) + add_library(${TARGET_LIBDFT} SHARED $ $) +else() + add_library(${TARGET_LIBDFT} STATIC $ $) +endif() target_link_libraries(${TARGET_LIBDFT} ${TARGET_LIBSLEEF} ${LIBM}) foreach(T ${LIST_SUPPORTED_FPTYPE}) @@ -422,13 +425,4 @@ install( COMPONENT sleef_Runtime INCLUDES # DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" -) - -install( - TARGETS ${TARGET_LIBDFT} - DESTINATION dummy # provided above already - LIBRARY # - DESTINATION "${CMAKE_INSTALL_LIBDIR}" - COMPONENT sleef_Development - NAMELINK_ONLY -) +) \ No newline at end of file diff --git a/src/libm/CMakeLists.txt b/src/libm/CMakeLists.txt index d0938750..c8d9d07f 100644 --- a/src/libm/CMakeLists.txt +++ b/src/libm/CMakeLists.txt @@ -348,7 +348,7 @@ set(COMMON_TARGET_PROPERTIES C_STANDARD 99 # -std=gnu99 ) -if (BUILD_SHARED_LIBS) +if (_INTERNAL_SLEEF_BUILD_SHARED_LIBS) list(APPEND COMMON_TARGET_PROPERTIES POSITION_INDEPENDENT_CODE ON) # -fPIC endif() @@ -359,7 +359,12 @@ endif() # Original sleef sources set(STANDARD_SOURCES rempitab.c) -add_library(${TARGET_LIBSLEEF} ${STANDARD_SOURCES}) +if(_INTERNAL_SLEEF_BUILD_SHARED_LIBS) + add_library(${TARGET_LIBSLEEF} SHARED ${STANDARD_SOURCES}) +else() + add_library(${TARGET_LIBSLEEF} STATIC ${STANDARD_SOURCES}) +endif() + add_dependencies(${TARGET_LIBSLEEF} ${TARGET_HEADERS}) set_target_properties(${TARGET_LIBSLEEF} PROPERTIES VERSION ${SLEEF_VERSION} @@ -884,7 +889,11 @@ if(ENABLE_GNUABI) endforeach() # Create library - add_library(${TARGET_LIBSLEEFGNUABI} ${TARGET_LIBSLEEFGNUABI_OBJECTS} rempitab.c) + if(_INTERNAL_SLEEF_BUILD_SHARED_LIBS) + add_library(${TARGET_LIBSLEEFGNUABI} SHARED ${TARGET_LIBSLEEFGNUABI_OBJECTS} rempitab.c) + else() + add_library(${TARGET_LIBSLEEFGNUABI} STATIC ${TARGET_LIBSLEEFGNUABI_OBJECTS} rempitab.c) + endif() # Library properties set_target_properties(${TARGET_LIBSLEEFGNUABI} PROPERTIES @@ -973,7 +982,11 @@ endif() # -------------------------------------------------------------------- # Build scalar-only library from sleefdp.c and sleefsp.c if(SLEEF_BUILD_SCALAR_LIB) - add_library(sleefscalar sleefdp.c sleefsp.c rempitab.c) + if(_INTERNAL_SLEEF_BUILD_SHARED_LIBS) + add_library(sleefscalar SHARED sleefdp.c sleefsp.c rempitab.c) + else() + add_library(sleefscalar STATIC sleefdp.c sleefsp.c rempitab.c) + endif() add_dependencies(sleefscalar ${TARGET_HEADERS}) set_target_properties(sleefscalar PROPERTIES VERSION ${SLEEF_VERSION} @@ -1004,15 +1017,6 @@ if(SLEEF_BUILD_SCALAR_LIB) DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT sleef_Runtime ) - - install( - TARGETS sleefscalar - DESTINATION dummy # provided above already - LIBRARY # - DESTINATION "${CMAKE_INSTALL_LIBDIR}" - COMPONENT sleef_Development - NAMELINK_ONLY - ) endif() # -------------------------------------------------------------------- @@ -1038,14 +1042,6 @@ install( INCLUDES # DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) -install( - TARGETS ${TARGET_LIBSLEEF} - DESTINATION dummy # provided above already - LIBRARY # - DESTINATION "${CMAKE_INSTALL_LIBDIR}" - COMPONENT sleef_Development - NAMELINK_ONLY -) configure_file("sleef.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/sleef.pc" @ONLY) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/sleef.pc" @@ -1068,13 +1064,4 @@ if(ENABLE_GNUABI) DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT sleef_Runtime ) - - install( - TARGETS ${TARGET_LIBSLEEF} - DESTINATION dummy # provided above already - LIBRARY # - DESTINATION "${CMAKE_INSTALL_LIBDIR}" - COMPONENT sleef_Development - NAMELINK_ONLY - ) endif() diff --git a/src/quad/CMakeLists.txt b/src/quad/CMakeLists.txt index bf422763..61035662 100644 --- a/src/quad/CMakeLists.txt +++ b/src/quad/CMakeLists.txt @@ -112,7 +112,7 @@ if(COMPILER_SUPPORTS_BUILTIN_MATH) list(APPEND COMMON_TARGET_DEFINITIONS ENABLE_BUILTIN_MATH=1) endif() -if (BUILD_SHARED_LIBS) +if (_INTERNAL_SLEEF_BUILD_SHARED_LIBS) list(APPEND COMMON_TARGET_PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -214,7 +214,11 @@ foreach(SIMD ${SLEEF_SUPPORTED_QUAD_EXTENSIONS}) endif() endforeach() -add_library(sleefquad rempitabqp.c ${SLEEFQUAD_OBJECTS}) +if(_INTERNAL_SLEEF_BUILD_SHARED_LIBS) + add_library(sleefquad SHARED rempitabqp.c ${SLEEFQUAD_OBJECTS}) +else() + add_library(sleefquad STATIC rempitabqp.c ${SLEEFQUAD_OBJECTS}) +endif() set_target_properties(sleefquad PROPERTIES VERSION ${SLEEF_VERSION} @@ -501,13 +505,4 @@ install( COMPONENT sleef_Runtime INCLUDES # DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" -) - -install( - TARGETS sleefquad - DESTINATION dummy # provided above already - LIBRARY # - DESTINATION "${CMAKE_INSTALL_LIBDIR}" - COMPONENT sleef_Development - NAMELINK_ONLY -) +) \ No newline at end of file