Skip to content

Commit f3eec73

Browse files
Correct long double check in CMakeLists.txt and remove duplicate definitions for static library builds too (#293)
* Fix mistake in CMakeLists.txt, only add sources in ld128 if long double isn't the same as double + aarch64 * Update README to mention that cmake build now defaults to shared library
1 parent b31c645 commit f3eec73

File tree

2 files changed

+51
-56
lines changed

2 files changed

+51
-56
lines changed

CMakeLists.txt

Lines changed: 48 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ project(openlibm
44
VERSION 0.8.0
55
LANGUAGES C ASM)
66

7-
add_library("${PROJECT_NAME}" STATIC)
7+
add_library("${PROJECT_NAME}" SHARED)
88

99

1010
# Find the relevant folder depending on the architecture
@@ -361,39 +361,38 @@ if (LONG_DOUBLE_NOT_DOUBLE)
361361
"${PROJECT_SRC}/ld80/s_nanl.c"
362362
)
363363
endif()
364-
endif()
365-
366-
else()
367-
if(${OPENLIBM_ARCH_FOLDER} STREQUAL "aarch64")
368-
list(APPEND OPENLIBM_C_SOURCE
369-
# ld128
370-
"${PROJECT_SRC}/ld128/invtrig.c"
371-
"${PROJECT_SRC}/ld128/e_acoshl.c"
372-
"${PROJECT_SRC}/ld128/e_powl.c"
373-
"${PROJECT_SRC}/ld128/k_tanl.c"
374-
"${PROJECT_SRC}/ld128/s_exp2l.c"
375-
"${PROJECT_SRC}/ld128/e_atanhl.c"
376-
"${PROJECT_SRC}/ld128/e_lgammal_r.c"
377-
"${PROJECT_SRC}/ld128/e_sinhl.c"
378-
"${PROJECT_SRC}/ld128/s_asinhl.c"
379-
"${PROJECT_SRC}/ld128/s_expm1l.c"
380-
"${PROJECT_SRC}/ld128/e_coshl.c"
381-
"${PROJECT_SRC}/ld128/e_log10l.c"
382-
"${PROJECT_SRC}/ld128/e_tgammal.c"
383-
"${PROJECT_SRC}/ld128/e_expl.c"
384-
"${PROJECT_SRC}/ld128/e_log2l.c"
385-
"${PROJECT_SRC}/ld128/k_cosl.c"
386-
"${PROJECT_SRC}/ld128/s_log1pl.c"
387-
"${PROJECT_SRC}/ld128/s_tanhl.c"
388-
"${PROJECT_SRC}/ld128/e_logl.c"
389-
"${PROJECT_SRC}/ld128/k_sinl.c"
390-
"${PROJECT_SRC}/ld128/s_erfl.c"
391-
)
392-
393-
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
364+
else()
365+
if(${OPENLIBM_ARCH_FOLDER} STREQUAL "aarch64")
394366
list(APPEND OPENLIBM_C_SOURCE
395-
"${PROJECT_SRC}/ld128/s_nanl.c"
367+
# ld128
368+
"${PROJECT_SRC}/ld128/invtrig.c"
369+
"${PROJECT_SRC}/ld128/e_acoshl.c"
370+
"${PROJECT_SRC}/ld128/e_powl.c"
371+
"${PROJECT_SRC}/ld128/k_tanl.c"
372+
"${PROJECT_SRC}/ld128/s_exp2l.c"
373+
"${PROJECT_SRC}/ld128/e_atanhl.c"
374+
"${PROJECT_SRC}/ld128/e_lgammal_r.c"
375+
"${PROJECT_SRC}/ld128/e_sinhl.c"
376+
"${PROJECT_SRC}/ld128/s_asinhl.c"
377+
"${PROJECT_SRC}/ld128/s_expm1l.c"
378+
"${PROJECT_SRC}/ld128/e_coshl.c"
379+
"${PROJECT_SRC}/ld128/e_log10l.c"
380+
"${PROJECT_SRC}/ld128/e_tgammal.c"
381+
"${PROJECT_SRC}/ld128/e_expl.c"
382+
"${PROJECT_SRC}/ld128/e_log2l.c"
383+
"${PROJECT_SRC}/ld128/k_cosl.c"
384+
"${PROJECT_SRC}/ld128/s_log1pl.c"
385+
"${PROJECT_SRC}/ld128/s_tanhl.c"
386+
"${PROJECT_SRC}/ld128/e_logl.c"
387+
"${PROJECT_SRC}/ld128/k_sinl.c"
388+
"${PROJECT_SRC}/ld128/s_erfl.c"
396389
)
390+
391+
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
392+
list(APPEND OPENLIBM_C_SOURCE
393+
"${PROJECT_SRC}/ld128/s_nanl.c"
394+
)
395+
endif()
397396
endif()
398397
endif()
399398
endif()
@@ -505,28 +504,24 @@ endif()
505504

506505

507506
# Filter out C implementation from compilation list if a native implementation exists
508-
# when generating a shared library to avoid multiple definitions
509-
get_target_property(TARGET_TYPE "${PROJECT_NAME}" TYPE)
510-
if (TARGET_TYPE STREQUAL SHARED_LIBRARY)
511-
foreach(FILE_TO_REMOVE ${OPENLIBM_ASM_SOURCE})
512-
# Get filename and strip out extension
513-
cmake_path(GET FILE_TO_REMOVE FILENAME FILENAME_TO_REMOVE)
514-
cmake_path(REMOVE_EXTENSION FILENAME_TO_REMOVE OUTPUT_VARIABLE FILENAME_TO_REMOVE)
515-
message(DEBUG "Filename to remove: ${FILENAME_TO_REMOVE}")
516-
517-
# Go through files and remove one with the same name
518-
foreach(CUR_FILE ${OPENLIBM_C_SOURCE})
519-
cmake_path(GET CUR_FILE FILENAME CUR_FILENAME)
520-
cmake_path(REMOVE_EXTENSION CUR_FILENAME OUTPUT_VARIABLE CUR_FILENAME)
521-
522-
if(${CUR_FILENAME} STREQUAL ${FILENAME_TO_REMOVE})
523-
list(REMOVE_ITEM OPENLIBM_C_SOURCE ${CUR_FILE})
524-
message(DEBUG "Removed source file from compilation list: ${CUR_FILE}")
525-
break()
526-
endif()
527-
endforeach()
507+
foreach(FILE_TO_REMOVE ${OPENLIBM_ASM_SOURCE})
508+
# Get filename and strip out extension
509+
cmake_path(GET FILE_TO_REMOVE FILENAME FILENAME_TO_REMOVE)
510+
cmake_path(REMOVE_EXTENSION FILENAME_TO_REMOVE OUTPUT_VARIABLE FILENAME_TO_REMOVE)
511+
message(DEBUG "Filename to remove: ${FILENAME_TO_REMOVE}")
512+
513+
# Go through files and remove one with the same name
514+
foreach(CUR_FILE ${OPENLIBM_C_SOURCE})
515+
cmake_path(GET CUR_FILE FILENAME CUR_FILENAME)
516+
cmake_path(REMOVE_EXTENSION CUR_FILENAME OUTPUT_VARIABLE CUR_FILENAME)
517+
518+
if(${CUR_FILENAME} STREQUAL ${FILENAME_TO_REMOVE})
519+
list(REMOVE_ITEM OPENLIBM_C_SOURCE ${CUR_FILE})
520+
message(DEBUG "Removed source file from compilation list: ${CUR_FILE}")
521+
break()
522+
endif()
528523
endforeach()
529-
endif()
524+
endforeach()
530525

531526

532527
# Add sources

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ consistently across compilers and operating systems, and in 32-bit and
1818
OpenLibm builds on Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, and
1919
DragonFly BSD. It builds with both GCC and clang. Although largely
2020
tested and widely used on the x86 and x86-64 architectures, OpenLibm
21-
also supports arm, aarch64, ppc64le, mips, wasm32, riscv, s390(x) and
21+
also supports arm, aarch64, ppc64le, mips, wasm32, riscv, s390(x) and
2222
loongarch64.
2323

2424
## Build instructions
@@ -43,8 +43,8 @@ loongarch64.
4343
or generate project with build system of choice e.g. `cmake /path/to/openlib/ -G "MinGW Makefiles"`.
4444
3. Build with the build system with `cmake --build .`.
4545

46-
Default CMake configuration builds a `STATIC` library. To build a `SHARED` library,
47-
replace the keyword the `add_library()`in the `CMakeLists.txt`.
46+
Default CMake configuration builds a shared library, this can easily be changed by replacing
47+
the keyword in the `add_library()` command in the `CMakeLists.txt`.
4848

4949

5050
## Acknowledgements

0 commit comments

Comments
 (0)