JuliaMath / openlibm

High quality system independent, portable, open source libm implementation
https://openlibm.org
Other
507 stars 139 forks source link

Build shared lib with CMake #289

Closed inkydragon closed 8 months ago

inkydragon commented 8 months ago
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4da8046..7a4ee75 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,7 +4,7 @@ project(openlibm
         VERSION 0.8.0
         LANGUAGES C ASM)

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

It compiles fine, but there are errors when linking.

cmake build log ```log [100%] Linking C shared library libopenlibm.so /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_remainder.S.o: in function `remainder': (.text+0x0): multiple definition of `remainder'; CMakeFiles/openlibm.dir/src/e_remainder.c.o:e_remainder.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_remainderf.S.o: in function `remainderf': (.text+0x0): multiple definition of `remainderf'; CMakeFiles/openlibm.dir/src/e_remainderf.c.o:e_remainderf.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_remainderl.S.o: in function `remainderl': (.text+0x0): multiple definition of `remainderl'; CMakeFiles/openlibm.dir/src/e_remainderl.c.o:e_remainderl.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_sqrt.S.o: in function `sqrt': (.text+0x0): multiple definition of `sqrt'; CMakeFiles/openlibm.dir/src/e_sqrt.c.o:e_sqrt.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_sqrtf.S.o: in function `sqrtf': (.text+0x0): multiple definition of `sqrtf'; CMakeFiles/openlibm.dir/src/e_sqrtf.c.o:e_sqrtf.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_sqrtl.S.o: in function `sqrtl': (.text+0x0): multiple definition of `sqrtl'; CMakeFiles/openlibm.dir/src/e_sqrtl.c.o:e_sqrtl.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_llrint.S.o: in function `llrint': (.text+0x0): multiple definition of `llrint'; CMakeFiles/openlibm.dir/src/s_llrint.c.o:s_llrint.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_llrintf.S.o: in function `llrintf': (.text+0x0): multiple definition of `llrintf'; CMakeFiles/openlibm.dir/src/s_llrintf.c.o:s_llrintf.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_llrintl.S.o: in function `llrintl': (.text+0x0): multiple definition of `llrintl'; CMakeFiles/openlibm.dir/src/s_llrintl.c.o:s_llrintl.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_logbl.S.o: in function `logbl': (.text+0x0): multiple definition of `logbl'; CMakeFiles/openlibm.dir/src/s_logbl.c.o:s_logbl.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_lrint.S.o: in function `lrint': (.text+0x0): multiple definition of `lrint'; CMakeFiles/openlibm.dir/src/s_lrint.c.o:s_lrint.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_lrintf.S.o: in function `lrintf': (.text+0x0): multiple definition of `lrintf'; CMakeFiles/openlibm.dir/src/s_lrintf.c.o:s_lrintf.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_lrintl.S.o: in function `lrintl': (.text+0x0): multiple definition of `lrintl'; CMakeFiles/openlibm.dir/src/s_lrintl.c.o:s_lrintl.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_remquo.S.o: in function `remquo': (.text+0x0): multiple definition of `remquo'; CMakeFiles/openlibm.dir/src/s_remquo.c.o:s_remquo.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_remquof.S.o: in function `remquof': (.text+0x0): multiple definition of `remquof'; CMakeFiles/openlibm.dir/src/s_remquof.c.o:s_remquof.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_remquol.S.o: in function `remquol': (.text+0x0): multiple definition of `remquol'; CMakeFiles/openlibm.dir/src/s_remquol.c.o:s_remquol.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_rintl.S.o: in function `rintl': (.text+0x0): multiple definition of `rintl'; CMakeFiles/openlibm.dir/src/s_rintl.c.o:s_rintl.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbn.S.o: in function `scalbn': (.text+0x0): multiple definition of `scalbn'; CMakeFiles/openlibm.dir/src/s_scalbn.c.o:s_scalbn.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbn.S.o: in function `scalbn': (.text+0x0): multiple definition of `ldexp'; CMakeFiles/openlibm.dir/src/s_scalbn.c.o:s_scalbn.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbnf.S.o: in function `scalbnf': (.text+0x0): multiple definition of `scalbnf'; CMakeFiles/openlibm.dir/src/s_scalbnf.c.o:s_scalbnf.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbnf.S.o: in function `scalbnf': (.text+0x0): multiple definition of `ldexpf'; CMakeFiles/openlibm.dir/src/s_scalbnf.c.o:s_scalbnf.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbnl.S.o: in function `scalbnl': (.text+0x0): multiple definition of `scalbnl'; CMakeFiles/openlibm.dir/src/s_scalbnl.c.o:s_scalbnl.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/s_scalbnl.S.o: in function `scalbnl': (.text+0x0): multiple definition of `ldexpl'; CMakeFiles/openlibm.dir/src/s_scalbnl.c.o:s_scalbnl.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_fmod.S.o: in function `fmod': (.text+0x0): multiple definition of `fmod'; CMakeFiles/openlibm.dir/src/e_fmod.c.o:e_fmod.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_fmodf.S.o: in function `fmodf': (.text+0x0): multiple definition of `fmodf'; CMakeFiles/openlibm.dir/src/e_fmodf.c.o:e_fmodf.c:(.text+0x0): first defined here /usr/bin/ld: CMakeFiles/openlibm.dir/amd64/e_fmodl.S.o: in function `fmodl': (.text+0x0): multiple definition of `fmodl'; CMakeFiles/openlibm.dir/src/e_fmodl.c.o:e_fmodl.c:(.text+0x0): first defined here collect2: error: ld returned 1 exit status gmake[2]: *** [CMakeFiles/openlibm.dir/build.make:4522: libopenlibm.so] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/openlibm.dir/all] Error 2 gmake: *** [Makefile:91: all] Error 2 ```

Maybe we don't need the generic C implementation in src/ when there is a native assembly implementation for the corresponding architecture.