Skip to content

Static Linking #22

Description

@drewbug

With a couple modifications to the build scripts I was able to build all the dependencies statically:

--- a/build.sh
+++ b/build.sh
@@ -122,9 +122,15 @@
 git clean -xdf
 
 export NDK=${TOOLCHAIN_ROOT}
+
+sed -i 's/BUILD_SHARED_LIBRARY/BUILD_STATIC_LIBRARY/' ${BUILD_ROOT}/libusb/android/jni/libusb.mk
+${NDK}/ndk-build
+cp ${BUILD_ROOT}/libusb/android/obj/local/armeabi-v7a/libusb1.0.a ${PREFIX}/lib
+
+sed -i 's/BUILD_STATIC_LIBRARY/BUILD_SHARED_LIBRARY/' ${BUILD_ROOT}/libusb/android/jni/libusb.mk
 ${NDK}/ndk-build
+cp ${BUILD_ROOT}/libusb/android/obj/local/armeabi-v7a/libusb1.0.so ${PREFIX}/lib
 
-cp ${BUILD_ROOT}/libusb/android/libs/armeabi-v7a/* ${PREFIX}/lib
 cp ${BUILD_ROOT}/libusb/libusb/libusb.h ${PREFIX}/include
 
 #############################################################
--- a/build_aarch64.sh
+++ b/build_aarch64.sh
@@ -123,9 +123,15 @@
 
 export NDK=${TOOLCHAIN_ROOT}
 ${NDK}/ndk-build clean
+
+sed -i 's/BUILD_SHARED_LIBRARY/BUILD_STATIC_LIBRARY/' ${BUILD_ROOT}/libusb/android/jni/libusb.mk
+${NDK}/ndk-build -B -r -R
+cp ${BUILD_ROOT}/libusb/android/obj/local/arm64-v8a/libusb1.0.a ${PREFIX}/lib
+
+sed -i 's/BUILD_STATIC_LIBRARY/BUILD_SHARED_LIBRARY/' ${BUILD_ROOT}/libusb/android/jni/libusb.mk
 ${NDK}/ndk-build -B -r -R
+cp ${BUILD_ROOT}/libusb/android/obj/local/arm64-v8a/libusb1.0.so ${PREFIX}/lib
 
-cp ${BUILD_ROOT}/libusb/android/libs/arm64-v8a/* ${PREFIX}/lib
 cp ${BUILD_ROOT}/libusb/libusb/libusb.h ${PREFIX}/include
 
 #############################################################
@@ -167,7 +173,7 @@
   -DBoost_USE_STATIC_LIBS=ON \
   -DBoost_USE_DEBUG_LIBS=OFF \
   -DBoost_ARCHITECTURE=-a64 \
-  -DENABLE_STATIC_LIBS=OFF \
+  -DENABLE_STATIC_LIBS=ON \
   -DENABLE_EXAMPLES=OFF \
   -DENABLE_TESTS=OFF \
   -DENABLE_UTILS=OFF \

and with some hard-coded source code mods I was able to get the gnuradio modules themselves to build statically:

--- a/gnuradio/gnuradio-runtime/lib/CMakeLists.txt
+++ b/gnuradio/gnuradio-runtime/lib/CMakeLists.txt
@@ -53 +53 @@
-add_library(gnuradio-runtime
+add_library(gnuradio-runtime STATIC
--- a/gnuradio/gnuradio-runtime/lib/pmt/CMakeLists.txt
+++ b/gnuradio/gnuradio-runtime/lib/pmt/CMakeLists.txt
@@ -20 +20 @@
-add_library(gnuradio-pmt
+add_library(gnuradio-pmt STATIC
--- a/gnuradio/gr-analog/lib/CMakeLists.txt
+++ b/gnuradio/gr-analog/lib/CMakeLists.txt
@@ -24 +24 @@
-add_library(gnuradio-analog
+add_library(gnuradio-analog STATIC
--- a/gnuradio/gr-audio/lib/CMakeLists.txt
+++ b/gnuradio/gr-audio/lib/CMakeLists.txt
@@ -25 +25 @@
-add_library(gnuradio-audio audio_registry.cc)
+add_library(gnuradio-audio STATIC audio_registry.cc)
--- a/gnuradio/gr-blocks/lib/CMakeLists.txt
+++ b/gnuradio/gr-blocks/lib/CMakeLists.txt
@@ -28 +28 @@
-add_library(gnuradio-blocks
+add_library(gnuradio-blocks STATIC
--- a/gnuradio/gr-channels/lib/CMakeLists.txt
+++ b/gnuradio/gr-channels/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-channels
+add_library(gnuradio-channels STATIC
--- a/gnuradio/gr-digital/lib/CMakeLists.txt
+++ b/gnuradio/gr-digital/lib/CMakeLists.txt
@@ -24 +24 @@
-add_library(gnuradio-digital
+add_library(gnuradio-digital STATIC
--- a/gnuradio/gr-dtv/lib/CMakeLists.txt
+++ b/gnuradio/gr-dtv/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-dtv
+add_library(gnuradio-dtv STATIC
--- a/gnuradio/gr-fec/lib/CMakeLists.txt
+++ b/gnuradio/gr-fec/lib/CMakeLists.txt
@@ -26 +26 @@
-add_library(gnuradio-fec
+add_library(gnuradio-fec STATIC
--- a/gnuradio/gr-fft/lib/CMakeLists.txt
+++ b/gnuradio/gr-fft/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-fft
+add_library(gnuradio-fft STATIC
--- a/gnuradio/gr-filter/lib/CMakeLists.txt
+++ b/gnuradio/gr-filter/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-filter
+add_library(gnuradio-filter STATIC
--- a/gnuradio/gr-qtgui/lib/CMakeLists.txt
+++ b/gnuradio/gr-qtgui/lib/CMakeLists.txt
@@ -25 +25 @@
-add_library(gnuradio-qtgui
+add_library(gnuradio-qtgui STATIC
--- a/gnuradio/gr-trellis/lib/CMakeLists.txt
+++ b/gnuradio/gr-trellis/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-trellis
+add_library(gnuradio-trellis STATIC
--- a/gnuradio/gr-uhd/lib/CMakeLists.txt
+++ b/gnuradio/gr-uhd/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-uhd
+add_library(gnuradio-uhd STATIC
--- a/gnuradio/gr-video-sdl/lib/CMakeLists.txt
+++ b/gnuradio/gr-video-sdl/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-video-sdl
+add_library(gnuradio-video-sdl STATIC
--- a/gnuradio/gr-vocoder/lib/CMakeLists.txt
+++ b/gnuradio/gr-vocoder/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-vocoder
+add_library(gnuradio-vocoder STATIC
--- a/gnuradio/gr-wavelet/lib/CMakeLists.txt
+++ b/gnuradio/gr-wavelet/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-wavelet
+add_library(gnuradio-wavelet STATIC
--- a/gnuradio/gr-zeromq/lib/CMakeLists.txt
+++ b/gnuradio/gr-zeromq/lib/CMakeLists.txt
@@ -23 +23 @@
-add_library(gnuradio-zeromq
+add_library(gnuradio-zeromq STATIC
--- a/gr-grand/lib/CMakeLists.txt
+++ b/gr-grand/lib/CMakeLists.txt
@@ -50 +50 @@
-add_library(gnuradio-grand SHARED ${grand_sources})
+add_library(gnuradio-grand STATIC ${grand_sources})
--- a/gr-ieee802-11/lib/CMakeLists.txt
+++ b/gr-ieee802-11/lib/CMakeLists.txt
@@ -70 +70 @@
-add_library(gnuradio-ieee802_11 SHARED ${ieee802_11_sources})
+add_library(gnuradio-ieee802_11 STATIC ${ieee802_11_sources})
--- a/gr-ieee802-15-4/lib/CMakeLists.txt
+++ b/gr-ieee802-15-4/lib/CMakeLists.txt
@@ -61 +61 @@
-add_library(gnuradio-ieee802_15_4 SHARED ${ieee802_15_4_sources})
+add_library(gnuradio-ieee802_15_4 STATIC ${ieee802_15_4_sources})
--- a/gr-osmosdr/lib/CMakeLists.txt
+++ b/gr-osmosdr/lib/CMakeLists.txt
@@ -43 +43 @@
-add_library(gnuradio-osmosdr SHARED)
+add_library(gnuradio-osmosdr STATIC)
--- a/gr-sched/lib/CMakeLists.txt
+++ b/gr-sched/lib/CMakeLists.txt
@@ -37 +37 @@
-add_library(gnuradio-sched SHARED ${sched_sources})
+add_library(gnuradio-sched STATIC ${sched_sources})

It looks like support for building statically has varied over the years but this seems to be working well on my end as of 12/24/2024. Happy holidays.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions