@@ -55,11 +55,23 @@ jobs:
5555
5656 - name : Configure
5757 working-directory : ./build
58- run : cmake ../opus -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake -DANDROID_ABI=${{ env.ABI }} -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DBUILD_SHARED_LIBS =ON -DCMAKE_SHARED_LINKER_FLAGS='-Wl,-z,max-page-size=16384,-z,common-page-size=16384' -DCMAKE_EXE_LINKER_FLAGS='-Wl,-z,max-page-size=16384,-z,common-page-size=16384'
58+ run : cmake ../opus -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake -DANDROID_ABI=${{ env.ABI }} -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DCMAKE_POSITION_INDEPENDENT_CODE =ON -DCMAKE_SHARED_LINKER_FLAGS='-Wl,-z,max-page-size=16384,-z,common-page-size=16384' -DCMAKE_EXE_LINKER_FLAGS='-Wl,-z,max-page-size=16384,-z,common-page-size=16384'
5959
6060 - name : Build
6161 working-directory : ./build
62- run : cmake --build . -j 2 --config Release --target package
62+ run : cmake --build . -j 2 --config Release
63+
64+ - name : Build with shim
65+ working-directory : ./build
66+ run : |
67+ ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang \
68+ --target=$(case "${{ env.ABI }}" in x86_64) echo x86_64-linux-android21;; x86) echo i686-linux-android21;; arm64-v8a) echo aarch64-linux-android21;; armeabi-v7a) echo armv7a-linux-androideabi21;; esac) \
69+ --sysroot=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
70+ -shared -o libopus.so \
71+ -I../opus/include \
72+ ../OpusSharp.Natives/opus_shim.c \
73+ -Wl,--whole-archive libopus.a -Wl,--no-whole-archive \
74+ -Wl,-z,max-page-size=16384,-z,common-page-size=16384
6375
6476 - name : Check Alignment
6577 if : ${{ env.CHECK_ALIGNMENT == 'true' }}
@@ -117,18 +129,30 @@ jobs:
117129 working-directory : ./build
118130 run : |
119131 if [[ "${{ matrix.arch }}" == "x64" || "${{ matrix.arch }}" == "x86" ]]; then
120- cmake ../opus -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DCMAKE_C_FLAGS=${{ env.C_FLAGS }} -DCMAKE_CXX_FLAGS=${{ env.CXX_FLAGS }}
132+ cmake ../opus -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DCMAKE_POSITION_INDEPENDENT_CODE =ON -DCMAKE_C_FLAGS=${{ env.C_FLAGS }} -DCMAKE_CXX_FLAGS=${{ env.CXX_FLAGS }}
121133 elif [[ "${{ matrix.arch }}" == "arm64" || "${{ matrix.arch }}" == "arm32" ]]; then
122- cmake ../opus -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DCMAKE_C_COMPILER=${{ env.C_COMPILER }} -DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }}
134+ cmake ../opus -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DCMAKE_POSITION_INDEPENDENT_CODE =ON -DCMAKE_C_COMPILER=${{ env.C_COMPILER }} -DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }}
123135 fi
124136
125137 - name : Build
126138 working-directory : ./build
127- run : cmake --build . -j 2 --config Release --target package
139+ run : cmake --build . -j 2 --config Release
128140
129- - name : Rename file
141+ - name : Build with shim
130142 working-directory : ./build
131- run : mv libopus.so.*.*.* opus.so
143+ run : |
144+ if [[ "${{ matrix.arch }}" == "x64" || "${{ matrix.arch }}" == "x86" ]]; then
145+ CC=gcc
146+ elif [[ "${{ matrix.arch }}" == "arm64" ]]; then
147+ CC=${{ env.C_COMPILER }}
148+ elif [[ "${{ matrix.arch }}" == "arm32" ]]; then
149+ CC=${{ env.C_COMPILER }}
150+ fi
151+ $CC -shared -o opus.so \
152+ -I../opus/include \
153+ ../OpusSharp.Natives/opus_shim.c \
154+ -Wl,--whole-archive libopus.a -Wl,--no-whole-archive \
155+ -lm
132156
133157 - name : Upload Artifact
134158 uses : actions/upload-artifact@v4
@@ -171,21 +195,29 @@ jobs:
171195 working-directory : ./build
172196 run : |
173197 if ( "${{ matrix.arch }}" -eq "arm32" ) {
174- cmake ../opus -G "Visual Studio 17 2022" -A ARM,version=10.0.22621.0 -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DBUILD_SHARED_LIBS=ON
198+ cmake ../opus -G "Visual Studio 17 2022" -A ARM,version=10.0.22621.0 -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DBUILD_SHARED_LIBS=OFF
175199 }
176200 else {
177- cmake ../opus -G "Visual Studio 17 2022" -A ${{ env.ARCH }} -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DBUILD_SHARED_LIBS=ON
201+ cmake ../opus -G "Visual Studio 17 2022" -A ${{ env.ARCH }} -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON -DBUILD_TESTING=ON -DBUILD_SHARED_LIBS=OFF
178202 }
179203
180204 - name : Build
181205 working-directory : ./build
182- run : cmake --build . -j 2 --config Release --target package
206+ run : cmake --build . -j 2 --config Release
207+
208+ - name : Build with shim
209+ working-directory : ./build
210+ shell : cmd
211+ run : |
212+ call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ env.ARCH }}
213+ cl /O2 /I..\opus\include /c ..\OpusSharp.Natives\opus_shim.c /Foopus_shim.obj
214+ link /DLL /OUT:opus.dll /DEF:NUL opus_shim.obj Release\opus.lib
183215
184216 - name : Upload Artifact
185217 uses : actions/upload-artifact@v4
186218 with :
187219 name : win-${{ matrix.arch }}-opus.dll
188- path : ./build/Release/ opus.dll
220+ path : ./build/opus.dll
189221
190222 MacOS :
191223 runs-on : macos-latest
@@ -217,15 +249,20 @@ jobs:
217249
218250 - name : Configure
219251 working-directory : ./build
220- run : cmake ../opus -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_OSX_ARCHITECTURES=${{ env.OSX_ARCH }}
252+ run : cmake ../opus -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_OSX_ARCHITECTURES=${{ env.OSX_ARCH }} -DCMAKE_POSITION_INDEPENDENT_CODE=ON
221253
222254 - name : Build
223255 working-directory : ./build
224256 run : cmake --build .
225257
226- - name : Rename file
258+ - name : Build with shim
227259 working-directory : ./build
228- run : mv libopus.*.*.*.dylib opus.dylib
260+ run : |
261+ cc -arch ${{ env.OSX_ARCH }} -shared -o opus.dylib \
262+ -I../opus/include \
263+ ../OpusSharp.Natives/opus_shim.c \
264+ -Wl,-force_load,libopus.a \
265+ -install_name @rpath/opus.dylib
229266
230267 - name : Upload Artifact
231268 uses : actions/upload-artifact@v4
@@ -307,6 +344,25 @@ jobs:
307344
308345 make -j "$(sysctl -n hw.ncpu)" libopus.la
309346
347+ - name : Compile shim and add to archive
348+ run : |
349+ export PATH="/opt/homebrew/bin:/opt/homebrew/opt/libtool/libexec/gnubin:$PATH"
350+ SDKROOT="$(xcrun --sdk "${{ env.SDK }}" --show-sdk-path)"
351+ CC="$(xcrun --sdk "${{ env.SDK }}" --find clang)"
352+ AR="$(xcrun --sdk "${{ env.SDK }}" --find ar)"
353+ RANLIB="$(xcrun --sdk "${{ env.SDK }}" --find ranlib)"
354+
355+ if [[ "${{ matrix.target }}" == "device" ]]; then
356+ MIN_VERSION_FLAG="-miphoneos-version-min=13.0"
357+ else
358+ MIN_VERSION_FLAG="-mios-simulator-version-min=13.0"
359+ fi
360+
361+ $CC -arch ${{ env.ARCH }} -isysroot $SDKROOT $MIN_VERSION_FLAG -O3 \
362+ -I./opus/include -c ./OpusSharp.Natives/opus_shim.c -o build/opus_shim.o
363+ $AR rcs build/.libs/libopus.a build/opus_shim.o
364+ $RANLIB build/.libs/libopus.a
365+
310366 - name : Verify Library
311367 working-directory : ./build
312368 run : |
@@ -431,11 +487,17 @@ jobs:
431487
432488 - name : Configure
433489 working-directory : ./build
434- run : emcmake cmake ../opus -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON
490+ run : emcmake cmake ../opus -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON
435491
436492 - name : Build
437493 working-directory : ./build
438- run : cmake --build . -j 2 --config Release --target package
494+ run : cmake --build . -j 2 --config Release
495+
496+ - name : Add shim to archive
497+ working-directory : ./build
498+ run : |
499+ emcc -O2 -I../opus/include -c ../OpusSharp.Natives/opus_shim.c -o opus_shim.o
500+ emar rcs libopus.a opus_shim.o
439501
440502 - name : Upload Artifact
441503 uses : actions/upload-artifact@v4
0 commit comments