@@ -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,32 @@ 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" ]]; then
145+ CC="gcc -m64"
146+ elif [[ "${{ matrix.arch }}" == "x86" ]]; then
147+ CC="gcc -m32"
148+ elif [[ "${{ matrix.arch }}" == "arm64" ]]; then
149+ CC=${{ env.C_COMPILER }}
150+ elif [[ "${{ matrix.arch }}" == "arm32" ]]; then
151+ CC=${{ env.C_COMPILER }}
152+ fi
153+ $CC -shared -o opus.so \
154+ -I../opus/include \
155+ ../OpusSharp.Natives/opus_shim.c \
156+ -Wl,--whole-archive libopus.a -Wl,--no-whole-archive \
157+ -lm
132158
133159 - name : Upload Artifact
134160 uses : actions/upload-artifact@v4
@@ -171,21 +197,30 @@ jobs:
171197 working-directory : ./build
172198 run : |
173199 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
200+ 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
175201 }
176202 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
203+ 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
178204 }
179205
180206 - name : Build
181207 working-directory : ./build
182- run : cmake --build . -j 2 --config Release --target package
208+ run : cmake --build . -j 2 --config Release
209+
210+ - name : Build with shim
211+ working-directory : ./build
212+ shell : cmd
213+ run : |
214+ if "${{ env.ARCH }}"=="Win32" (set "VCARCH=x86") else if "${{ env.ARCH }}"=="x64" (set "VCARCH=amd64") else if "${{ env.ARCH }}"=="ARM64" (set "VCARCH=amd64_arm64") else if "${{ env.ARCH }}"=="ARM" (set "VCARCH=amd64_arm")
215+ call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %VCARCH%
216+ cl /O2 /MD /I..\opus\include /c ..\OpusSharp.Natives\opus_shim.c /Foopus_shim.obj
217+ link /DLL /OUT:opus.dll opus_shim.obj Release\opus.lib ucrt.lib vcruntime.lib msvcrt.lib
183218
184219 - name : Upload Artifact
185220 uses : actions/upload-artifact@v4
186221 with :
187222 name : win-${{ matrix.arch }}-opus.dll
188- path : ./build/Release/ opus.dll
223+ path : ./build/opus.dll
189224
190225 MacOS :
191226 runs-on : macos-latest
@@ -217,15 +252,20 @@ jobs:
217252
218253 - name : Configure
219254 working-directory : ./build
220- run : cmake ../opus -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_OSX_ARCHITECTURES=${{ env.OSX_ARCH }}
255+ run : cmake ../opus -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_OSX_ARCHITECTURES=${{ env.OSX_ARCH }} -DCMAKE_POSITION_INDEPENDENT_CODE=ON
221256
222257 - name : Build
223258 working-directory : ./build
224259 run : cmake --build .
225260
226- - name : Rename file
261+ - name : Build with shim
227262 working-directory : ./build
228- run : mv libopus.*.*.*.dylib opus.dylib
263+ run : |
264+ cc -arch ${{ env.OSX_ARCH }} -shared -o opus.dylib \
265+ -I../opus/include \
266+ ../OpusSharp.Natives/opus_shim.c \
267+ -Wl,-force_load,libopus.a \
268+ -install_name @rpath/opus.dylib
229269
230270 - name : Upload Artifact
231271 uses : actions/upload-artifact@v4
@@ -307,6 +347,25 @@ jobs:
307347
308348 make -j "$(sysctl -n hw.ncpu)" libopus.la
309349
350+ - name : Compile shim and add to archive
351+ run : |
352+ export PATH="/opt/homebrew/bin:/opt/homebrew/opt/libtool/libexec/gnubin:$PATH"
353+ SDKROOT="$(xcrun --sdk "${{ env.SDK }}" --show-sdk-path)"
354+ CC="$(xcrun --sdk "${{ env.SDK }}" --find clang)"
355+ AR="$(xcrun --sdk "${{ env.SDK }}" --find ar)"
356+ RANLIB="$(xcrun --sdk "${{ env.SDK }}" --find ranlib)"
357+
358+ if [[ "${{ matrix.target }}" == "device" ]]; then
359+ MIN_VERSION_FLAG="-miphoneos-version-min=13.0"
360+ else
361+ MIN_VERSION_FLAG="-mios-simulator-version-min=13.0"
362+ fi
363+
364+ $CC -arch ${{ env.ARCH }} -isysroot $SDKROOT $MIN_VERSION_FLAG -O3 \
365+ -I./opus/include -c ./OpusSharp.Natives/opus_shim.c -o build/opus_shim.o
366+ $AR rcs build/.libs/libopus.a build/opus_shim.o
367+ $RANLIB build/.libs/libopus.a
368+
310369 - name : Verify Library
311370 working-directory : ./build
312371 run : |
@@ -431,11 +490,17 @@ jobs:
431490
432491 - name : Configure
433492 working-directory : ./build
434- run : emcmake cmake ../opus -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON
493+ run : emcmake cmake ../opus -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DOPUS_BUILD_PROGRAMS=ON
435494
436495 - name : Build
437496 working-directory : ./build
438- run : cmake --build . -j 2 --config Release --target package
497+ run : cmake --build . -j 2 --config Release
498+
499+ - name : Add shim to archive
500+ working-directory : ./build
501+ run : |
502+ emcc -O2 -I../opus/include -c ../OpusSharp.Natives/opus_shim.c -o opus_shim.o
503+ emar rcs libopus.a opus_shim.o
439504
440505 - name : Upload Artifact
441506 uses : actions/upload-artifact@v4
0 commit comments