From f98ce8f45c959f016b5ee0e4f2fe6ae7b754f163 Mon Sep 17 00:00:00 2001 From: Xu Han Date: Wed, 7 Feb 2024 19:42:15 +0800 Subject: [PATCH] * add SLEEF_BUILD_SHARED_LIBS build config. * default build sleef in shared mode. * fix install files to dummy folder. --- CMakeLists.txt | 10 ++++----- Configure.cmake | 4 ++-- docs/build-with-cmake.md | 2 +- src/common/CMakeLists.txt | 2 +- src/dft/CMakeLists.txt | 20 ++++++----------- src/libm/CMakeLists.txt | 47 ++++++++++++++------------------------- src/quad/CMakeLists.txt | 19 ++++++---------- 7 files changed, 40 insertions(+), 64 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ecd272d8..047df622 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ # Options - +option(SLEEF_BUILD_SHARED_LIBS "Build sleef as static library" ON) 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) @@ -157,9 +157,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 SLEEF_BUILD_SHARED_LIBS) + message(FATAL_ERROR "SLEEF_ENABLE_LTO and SLEEF_BUILD_SHARED_LIBS cannot be specified at the same time") +endif(SLEEF_ENABLE_LTO AND SLEEF_BUILD_SHARED_LIBS) if(SLEEF_ENABLE_LTO) cmake_policy(SET CMP0069 NEW) @@ -305,7 +305,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 : " ${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..3f455258 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(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 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..17f69c18 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 (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 86f57c0a..1bc522ff 100644 --- a/src/dft/CMakeLists.txt +++ b/src/dft/CMakeLists.txt @@ -174,7 +174,7 @@ set(COMMON_TARGET_PROPERTIES C_STANDARD 99 # -std=gnu99 ) -if (BUILD_SHARED_LIBS) +if (SLEEF_BUILD_SHARED_LIBS) list(APPEND COMMON_TARGET_PROPERTIES POSITION_INDEPENDENT_CODE ON) # -fPIC endif() @@ -323,8 +323,11 @@ foreach(T ${LIST_SUPPORTED_FPTYPE}) endforeach() # Target libdft - -add_library(${TARGET_LIBDFT} $ $) +if(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}) @@ -372,13 +375,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 25e11775..70a6ae48 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 (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(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(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 -add_library(sleefscalar sleefdp.c sleefsp.c rempitab.c) +if(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} @@ -1005,15 +1018,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() # -------------------------------------------------------------------- @@ -1039,14 +1043,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" @@ -1069,13 +1065,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 ee996268..48aac145 100644 --- a/src/quad/CMakeLists.txt +++ b/src/quad/CMakeLists.txt @@ -100,7 +100,7 @@ if(COMPILER_SUPPORTS_BUILTIN_MATH) list(APPEND COMMON_TARGET_DEFINITIONS ENABLE_BUILTIN_MATH=1) endif() -if (BUILD_SHARED_LIBS) +if (SLEEF_BUILD_SHARED_LIBS) list(APPEND COMMON_TARGET_PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -202,7 +202,11 @@ foreach(SIMD ${SLEEF_SUPPORTED_QUAD_EXTENSIONS}) endif() endforeach() -add_library(sleefquad rempitabqp.c ${SLEEFQUAD_OBJECTS}) +if(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} @@ -489,13 +493,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