From a60ffe6c8bf8bbe5ec72aa6b46bd5ebb3efc747c Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Sun, 11 Aug 2019 03:42:14 -0700 Subject: [PATCH] Have OSX build staticly link everything but Codec2 and LPCNet. This is needed to guarantee minimum OSX version of 10.9 and usage of libc++ by wxWidgets. --- build_osx_macports.sh | 15 ++++++++++++++- cmake/BuildPortaudio.cmake | 15 +++++++++++++-- cmake/BuildSamplerate.cmake | 6 +++++- cmake/BuildSndfile.cmake | 4 +++- cmake/BuildWxWidgets.cmake | 2 +- patch-samplerate.diff | 11 +++++++++++ src/CMakeLists.txt | 2 +- 7 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 patch-samplerate.diff diff --git a/build_osx_macports.sh b/build_osx_macports.sh index 6bfc25bd..fc5352d6 100755 --- a/build_osx_macports.sh +++ b/build_osx_macports.sh @@ -7,6 +7,15 @@ export FREEDVGUIDIR=${PWD} export CODEC2DIR=$FREEDVGUIDIR/codec2 export LPCNETDIR=$FREEDVGUIDIR/LPCNet +export HAMLIBDIR=$FREEDVGUIDIR/hamlib + +# Prerequisite: build hamlib +git clone git://git.code.sf.net/p/hamlib/code hamlib-code +cd hamlib-code && git checkout master && git pull +./bootstrap +CFLAGS="-g -O2 -mmacosx-version-min=10.9" CXXFLAGS="-g -O2 -mmacosx-version-min=10.9" ./configure --disable-shared --prefix $HAMLIBDIR +make +make install # First build and install vanilla codec2 as we need -lcodec2 to build LPCNet cd $FREEDVGUIDIR @@ -36,6 +45,10 @@ export LD_LIBRARY_PATH=$LPCNETDIR/build_osx/src # Finally, build freedv-gui cd $FREEDVGUIDIR && git pull mkdir -p build_osx && cd build_osx && rm -Rf * -cmake -DCMAKE_BUILD_TYPE=Debug -DWXCONFIG=/opt/local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.0/lib/wx/config/osx_cocoa-unicode-3.0 -DHAMLIB_INCLUDE_DIR=/opt/local/include -DHAMLIB_LIBRARY=/opt/local/lib/libhamlib.dylib -DCODEC2_BUILD_DIR=$CODEC2DIR/build_osx -DLPCNET_BUILD_DIR=$LPCNETDIR/build_osx .. +cmake -DCMAKE_BUILD_TYPE=Debug -DBOOTSTRAP_WXWIDGETS=1 -DUSE_STATIC_DEPS=1 -DUSE_STATIC_SPEEXDSP=1 -DHAMLIB_INCLUDE_DIR=${HAMLIBDIR}/include -DHAMLIB_LIBRARY=${HAMLIBDIR}/lib/libhamlib.a -DCODEC2_BUILD_DIR=$CODEC2DIR/build_osx -DLPCNET_BUILD_DIR=$LPCNETDIR/build_osx .. +make VERBOSE=1 + +# Rebuild now that wxWidgets is bootstrapped +cmake -DCMAKE_BUILD_TYPE=Debug -DBOOTSTRAP_WXWIDGETS=1 -DUSE_STATIC_DEPS=1 -DUSE_STATIC_SPEEXDSP=1 -DHAMLIB_INCLUDE_DIR=${HAMLIBDIR}/include -DHAMLIB_LIBRARY=${HAMLIBDIR}/lib/libhamlib.a -DCODEC2_BUILD_DIR=$CODEC2DIR/build_osx -DLPCNET_BUILD_DIR=$LPCNETDIR/build_osx .. make VERBOSE=1 diff --git a/cmake/BuildPortaudio.cmake b/cmake/BuildPortaudio.cmake index 2c96d101..4928e053 100644 --- a/cmake/BuildPortaudio.cmake +++ b/cmake/BuildPortaudio.cmake @@ -3,7 +3,7 @@ set(PORTAUDIO_TARBALL "pa_stable_v190600_20161030") # required linking libraries on linux. Not sure about windows. find_library(ALSA_LIBRARIES asound) -if(UNIX AND NOT ALSA_LIBRARIES) +if(UNIX AND NOT APPLE AND NOT ALSA_LIBRARIES) message(ERROR "Could not find alsa library which is required for portaudio. On Linux systems try installing: alsa-lib-devel (RPM based systems) @@ -15,6 +15,8 @@ endif() if(MINGW AND CMAKE_CROSSCOMPILING) include(cmake/MinGW.cmake) set(CONFIGURE_COMMAND ./configure --host=${HOST} --target=${HOST} --disable-cxx --disable-shared --with-winapi=wmme,directx --prefix=${CMAKE_BINARY_DIR}/external/dist) +elseif(APPLE) + set(CONFIGURE_COMMAND ./configure --disable-mac-universal --enable-cxx --enable-option-checking --without-alsa --without-jack --without-oss --without-asihpi --without-winapi --disable-shared --prefix=${CMAKE_BINARY_DIR}/external/dist CFLAGS=-g\ -O2\ -mmacosx-version-min=10.9 LDFLAGS=-framework\ CoreServices\ -framework\ AudioUnit\ -framework\ CoreFoundation\ -framework\ AudioToolbox\ -framework\ CoreAudio) else() set(CONFIGURE_COMMAND ./configure --enable-cxx --without-jack --disable-shared --prefix=${CMAKE_BINARY_DIR}/external/dist) endif() @@ -35,7 +37,8 @@ if(WIN32) find_library(DSOUND dsound) list(APPEND PORTAUDIO_LIBRARIES ${WINMM} ${DSOUND} ) -else(WIN32) +elseif(NOT APPLE) +#else(WIN32) find_library(RT rt) find_library(ASOUND asound) set(PORTAUDIO_LIBRARIES ${RT} ${ASOUND} @@ -45,6 +48,14 @@ include_directories(${CMAKE_BINARY_DIR}/external/dist/include) # Add the portaudio library to the list of libraries that must be linked. list(APPEND FREEDV_LINK_LIBS ${PORTAUDIO_LIBRARIES}) +if (APPLE) + list(APPEND FREEDV_LINK_LIBS + "-framework CoreServices" + "-framework AudioUnit" + "-framework CoreFoundation" + "-framework AudioToolbox" + "-framework CoreAudio") +endif() # Setup a dependency so that this gets built before linking to freedv. list(APPEND FREEDV_STATIC_DEPS portaudio) diff --git a/cmake/BuildSamplerate.cmake b/cmake/BuildSamplerate.cmake index b728a6f0..3a09dc2d 100644 --- a/cmake/BuildSamplerate.cmake +++ b/cmake/BuildSamplerate.cmake @@ -1,7 +1,10 @@ -set(SAMPLERATE_TARBALL "libsamplerate-0.1.8") +set(SAMPLERATE_TARBALL "libsamplerate-0.1.9") +set(PATCH_COMMAND patch -p0 < ${CMAKE_BINARY_DIR}/../patch-samplerate.diff) if(MINGW AND CMAKE_CROSSCOMPILING) set(CONFIGURE_COMMAND ./configure --host=${HOST} --target=${HOST} --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-sndfile --disable-fftw) +elseif(APPLE) + set(CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist CFLAGS=-g\ -O2\ -mmacosx-version-min=10.9) else() set(CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist) endif() @@ -11,6 +14,7 @@ ExternalProject_Add(samplerate URL http://www.mega-nerd.com/SRC/${SAMPLERATE_TARBALL}.tar.gz BUILD_IN_SOURCE 1 INSTALL_DIR external/dist + PATCH_COMMAND ${PATCH_COMMAND} CONFIGURE_COMMAND ${CONFIGURE_COMMAND} BUILD_COMMAND $(MAKE) INSTALL_COMMAND $(MAKE) install diff --git a/cmake/BuildSndfile.cmake b/cmake/BuildSndfile.cmake index a63146ad..e8dca622 100644 --- a/cmake/BuildSndfile.cmake +++ b/cmake/BuildSndfile.cmake @@ -1,7 +1,9 @@ -set(SNDFILE_TARBALL "libsndfile-1.0.25") +set(SNDFILE_TARBALL "libsndfile-1.0.28") if(MINGW AND CMAKE_CROSSCOMPILING) set(CONFIGURE_COMMAND ./configure --host=${HOST} --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-external-libs --disable-shared --disable-sqlite) +elseif(APPLE) + set(CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-external-libs --disable-shared --disable-external-libs CFLAGS=-g\ -O2\ -mmacosx-version-min=10.9) else() set(CONFIGURE_COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/external/dist --disable-external-libs --disable-shared --disable-external-libs) endif() diff --git a/cmake/BuildWxWidgets.cmake b/cmake/BuildWxWidgets.cmake index b1ad5464..0ffd3f8d 100644 --- a/cmake/BuildWxWidgets.cmake +++ b/cmake/BuildWxWidgets.cmake @@ -10,7 +10,7 @@ endif() if(MINGW AND CMAKE_CROSSCOMPILING) set(CONFIGURE_COMMAND ./configure --build=${HOST} --host=${HOST} --target=${HOST} --disable-shared --prefix=${CMAKE_BINARY_DIR}/external/dist) elseif(APPLE) - set(CONFIGURE_COMMAND ./configure --disable-shared --with-macosx-version-min=10.9 --prefix=${CMAKE_BINARY_DIR}/external/dist) + set(CONFIGURE_COMMAND ./configure --disable-shared --with-macosx-version-min=10.9 --prefix=${CMAKE_BINARY_DIR}/external/dist CXXFLAGS=-stdlib=libc++\ -std=c++11\ -DWX_PRECOMP\ -O2\ -fno-strict-aliasing\ -fno-common) else() # set(CONFIGURE_COMMAND "true") # set(MAKE_COMMAND $(MAKE) -C build/msw -f makefile.gcc SHARED=0 UNICODE=1 BUILD=release PREFIX=${CMAKE_BINARY_DIR}/external/dist) diff --git a/patch-samplerate.diff b/patch-samplerate.diff new file mode 100644 index 00000000..ed5bcdd3 --- /dev/null +++ b/patch-samplerate.diff @@ -0,0 +1,11 @@ +--- examples/Makefile.in.orig 2011-08-15 22:12:30.000000000 +1000 ++++ examples/Makefile.in 2012-03-25 15:31:07.000000000 +1100 +@@ -56,7 +56,7 @@ + CONFIG_CLEAN_FILES = + CONFIG_CLEAN_VPATH_FILES = + am__installdirs = "$(DESTDIR)$(bindir)" +-PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) ++PROGRAMS = $(bin_PROGRAMS) + am_sndfile_resample_OBJECTS = sndfile-resample.$(OBJEXT) + sndfile_resample_OBJECTS = $(am_sndfile_resample_OBJECTS) + am__DEPENDENCIES_1 = diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 99e174ab..42e267d3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -86,7 +86,7 @@ if(APPLE) COMMAND cp ARGS ${CMAKE_CURRENT_SOURCE_DIR}/freedv.icns FreeDV.app/Contents/Resources COMMAND echo ARGS -n "APPL????" > FreeDV.app/Contents/PkgInfo COMMAND cp ARGS freedv FreeDV.app/Contents/MacOS/FreeDV - COMMAND dylibbundler ARGS -od -b -x FreeDV.app/Contents/MacOS/FreeDV -d FreeDV.app/Contents/libs -p @executable_path/../libs/ + COMMAND DYLD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src:${LPCNET_BUILD_DIR}/src:${DYLD_LIBRARY_PATH} dylibbundler ARGS -od -b -x FreeDV.app/Contents/MacOS/FreeDV -d FreeDV.app/Contents/libs -p @executable_path/../libs/ COMMAND mkdir dist_tmp COMMAND cp -r FreeDV.app dist_tmp COMMAND hdiutil create -srcfolder dist_tmp/ -volname FreeDV -format UDZO ./FreeDV.dmg