[PATCH] librtlsdr: cmake: add options to enable/disable static or shared target in build

Gwenhael Goavec-Merou gwenhael.goavec-merou at trabucayre.com
Fri May 15 14:24:14 UTC 2020


When librtlsdr is build with an environment with static libraries, the
build fails with messages like:

/buildroot/librtl/output/host/lib/gcc/aarch64-buildroot-linux-uclibc/8.4.0/../../../../aarch64-buildroot-linux-uclibc/bin/ld: /buildroot/librtl/output/host/aarch64-buildroot-linux-uclibc/sysroot/usr/lib/libusb-1.0.a(libusb_1_0_la-core.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `stderr' which may bind externally can not be used when making a shared object; recompile with -fPIC
/buildroot/librtl/output/host/aarch64-buildroot-linux-uclibc/sysroot/usr/lib/libusb-1.0.a(libusb_1_0_la-core.o): in function `usbi_log_str':
core.c:(.text+0xf8): dangerous relocation: unsupported relocation

This patch add options to select if librtlsdr must be build in static mode,
shared mode or both.

Adapted from https://github.com/steve-m/librtlsdr/pull/46 and
https://git.buildroot.net/buildroot/tree/package/librtlsdr/0001-disable_shared_library_target_in_build.patch?h=2020.02.x

Signed-off-by: Yuvaraj Patil <yuvaraj.patil at wipro.com>
Signed-off-by: Fabrice Fontaine <fontaine.fabrice at gmail.com>
Signed-off-by: Gwenhael Goavec-Merou <gwenhael.goavec-merou at trabucayre.com>
---
 src/CMakeLists.txt | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 33faee7..d82fc87 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -18,6 +18,8 @@
 ########################################################################
 # Setup shared library variant
 ########################################################################
+option(BUILD_SHARED_LIBS "Build shared library" ON)
+if(BUILD_SHARED_LIBS)
 add_library(rtlsdr SHARED librtlsdr.c
   tuner_e4k.c tuner_fc0012.c tuner_fc0013.c tuner_fc2580.c tuner_r82xx.c)
 target_link_libraries(rtlsdr PkgConfig::LIBUSB)
@@ -30,10 +32,14 @@ set_target_properties(rtlsdr PROPERTIES OUTPUT_NAME rtlsdr)
 set_target_properties(rtlsdr PROPERTIES SOVERSION ${MAJOR_VERSION})
 set_target_properties(rtlsdr PROPERTIES VERSION ${LIBVER})
 generate_export_header(rtlsdr)
+list(APPEND rtlsdr_lib rtlsdr)
+endif()
 
 ########################################################################
 # Setup static library variant
 ########################################################################
+option(BUILD_STATIC_LIBS "Build static library" ON)
+if(BUILD_STATIC_LIBS)
 add_library(rtlsdr_static STATIC librtlsdr.c
   tuner_e4k.c tuner_fc0012.c tuner_fc0013.c tuner_fc2580.c tuner_r82xx.c)
 target_link_libraries(rtlsdr_static PkgConfig::LIBUSB)
@@ -47,6 +53,8 @@ if(NOT WIN32)
 set_target_properties(rtlsdr_static PROPERTIES OUTPUT_NAME rtlsdr)
 endif()
 generate_export_header(rtlsdr_static)
+list(APPEND rtlsdr_lib rtlsdr_static)
+endif()
 
 ########################################################################
 # Set up Windows DLL resource files
@@ -90,37 +98,37 @@ add_executable(rtl_eeprom rtl_eeprom.c)
 add_executable(rtl_adsb rtl_adsb.c)
 add_executable(rtl_power rtl_power.c)
 add_executable(rtl_biast rtl_biast.c)
-set(INSTALL_TARGETS rtlsdr rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast)
+set(INSTALL_TARGETS ${rtlsdr_lib} rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast)
 
-target_link_libraries(rtl_sdr rtlsdr convenience_static
+target_link_libraries(rtl_sdr ${rtlsdr_lib} convenience_static
     ${LIBUSB_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
-target_link_libraries(rtl_tcp rtlsdr convenience_static
+target_link_libraries(rtl_tcp ${rtlsdr_lib} convenience_static
     ${LIBUSB_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
-target_link_libraries(rtl_test rtlsdr convenience_static
+target_link_libraries(rtl_test ${rtlsdr_lib} convenience_static
     ${LIBUSB_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
-target_link_libraries(rtl_fm rtlsdr convenience_static
+target_link_libraries(rtl_fm ${rtlsdr_lib} convenience_static
     ${LIBUSB_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
-target_link_libraries(rtl_eeprom rtlsdr convenience_static
+target_link_libraries(rtl_eeprom ${rtlsdr_lib} convenience_static
     ${LIBUSB_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
-target_link_libraries(rtl_adsb rtlsdr convenience_static
+target_link_libraries(rtl_adsb ${rtlsdr_lib} convenience_static
     ${LIBUSB_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
-target_link_libraries(rtl_power rtlsdr convenience_static
+target_link_libraries(rtl_power ${rtlsdr_lib} convenience_static
     ${LIBUSB_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
-target_link_libraries(rtl_biast rtlsdr convenience_static
+target_link_libraries(rtl_biast ${rtlsdr_lib} convenience_static
     ${LIBUSB_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
 )
@@ -156,12 +164,16 @@ endif()
 ########################################################################
 # Install built library files & utilities
 ########################################################################
+if(BUILD_SHARED_LIBS)
 install(TARGETS rtlsdr EXPORT RTLSDR-export
   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file
   )
+endif()
+if(BUILD_STATIC_LIBS)
 install(TARGETS rtlsdr_static EXPORT RTLSDR-export
   ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file
   )
+endif()
 install(TARGETS rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power
   DESTINATION ${CMAKE_INSTALL_BINDIR}
   )
-- 
2.26.2



More information about the osmocom-sdr mailing list