Skip to content

Commit 562db86

Browse files
authored
fix cross platform build (#2)
* build: try fixing * build: fix vpl for linux-x86 * build: fix zimg for linux-x86 * build: fix zimg for linux-x86 * build: fix setup vulkan source * build: use platform from property for ci * chore: update jni-utils * chore: update jni-utils * ci: cleanup some stuff * build: rename linux-armhf target to linux-arm (still armhf architecture, but now matches jni-utils naming) * build: fix linux-x86 target * build: fix linux-x86 target
1 parent 0142458 commit 562db86

File tree

5 files changed

+49
-55
lines changed

5 files changed

+49
-55
lines changed

.github/actions/deploy-ubuntu/action.yml

Lines changed: 35 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,25 @@ runs:
3232
echo "HOME=$HOME" >> $GITHUB_ENV
3333
fi
3434
cd $HOME
35-
35+
3636
# Free disk space by removing some unused system components
3737
$SUDO rm -rf /usr/local/lib/android
3838
$SUDO rm -rf /usr/share/dotnet
39-
39+
4040
# Allocate a swapfile on Linux as it's not enabled by default. Needed for pytorch and mkl.
4141
$SUDO fallocate -l 4GB /swapfile
4242
$SUDO chmod 600 /swapfile
4343
$SUDO mkswap /swapfile
4444
$SUDO swapon /swapfile
45-
45+
4646
mkdir -p .ccache
4747
echo "max_size = 2.0G" > .ccache/ccache.conf
4848
echo "hash_dir = false" >> .ccache/ccache.conf
4949
echo "sloppiness = file_macro,include_file_ctime,include_file_mtime,pch_defines,time_macros" >> .ccache/ccache.conf
50-
50+
5151
export ARCH=amd64
5252
export PREFIX=x86_64-linux-gnu
53-
if [[ "$CI_DEPLOY_PLATFORM" == "linux-armhf" ]]; then
53+
if [[ "$CI_DEPLOY_PLATFORM" == "linux-arm" ]]; then
5454
export ARCH=armhf
5555
export PREFIX=arm-linux-gnueabihf
5656
export USERLAND_BUILDME="buildme"
@@ -84,79 +84,70 @@ runs:
8484
fi
8585
echo "ARCH=$ARCH" >> $GITHUB_ENV
8686
echo "PREFIX=$PREFIX" >> $GITHUB_ENV
87-
87+
8888
$SUDO dpkg --list
89-
89+
9090
$SUDO apt-get update
9191
$SUDO apt-get -y install gnupg
9292
source /etc/os-release
9393
export CODENAME=$UBUNTU_CODENAME
94-
94+
9595
if [[ ! "$ARCH" == "amd64" ]]; then
96-
# https://github.com/actions/runner-images/issues/675
96+
# https://github.com/actions/runner-images/issues/675
9797
$SUDO gem install apt-spy2
9898
$SUDO apt-spy2 check
9999
$SUDO apt-spy2 fix --commit
100100
$SUDO sed -i 's/azure\.//' /etc/apt/apt-mirrors.txt /etc/apt/sources.list
101101
$SUDO cat /etc/apt/apt-mirrors.txt /etc/apt/sources.list
102102
$SUDO apt-get update
103-
104-
# https://github.com/actions/runner-images/issues/4589
103+
104+
# https://github.com/actions/runner-images/issues/4589
105105
$SUDO apt-add-repository -y ppa:ondrej/php
106106
$SUDO apt-get -y install ppa-purge
107107
$SUDO ppa-purge -y ppa:ondrej/php
108108
fi
109-
109+
110110
if [[ "$ARCH" == "i386" ]]; then
111111
$SUDO dpkg --add-architecture $ARCH
112112
TOOLCHAIN="gcc-$PREFIX g++-$PREFIX gfortran-$PREFIX"
113113
elif [[ ! "$ARCH" == "amd64" ]]; then
114+
echo "Adding $ARCH architecture"
114115
$SUDO dpkg --add-architecture $ARCH
115116
$SUDO sed -i 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
117+
$SUDO sed -i 's/deb mirror/deb [arch=amd64] mirror/g' /etc/apt/sources.list
116118
$SUDO echo deb [arch=$ARCH] http://ports.ubuntu.com/ubuntu-ports $CODENAME main restricted universe multiverse | $SUDO tee -a /etc/apt/sources.list
117119
$SUDO echo deb [arch=$ARCH] http://ports.ubuntu.com/ubuntu-ports $CODENAME-updates main restricted universe multiverse | $SUDO tee -a /etc/apt/sources.list
118120
$SUDO echo deb [arch=$ARCH] http://ports.ubuntu.com/ubuntu-ports $CODENAME-backports main restricted universe multiverse | $SUDO tee -a /etc/apt/sources.list
119121
$SUDO echo deb [arch=$ARCH] http://ports.ubuntu.com/ubuntu-ports $CODENAME-security main restricted universe multiverse | $SUDO tee -a /etc/apt/sources.list
120122
TOOLCHAIN="gcc-$PREFIX g++-$PREFIX gfortran-$PREFIX linux-libc-dev-$ARCH-cross binutils-multiarch"
121123
fi
122-
# $SUDO echo deb [arch=amd64] https://ppa.launchpad.net/openjdk-r/ppa/ubuntu $CODENAME main | $SUDO tee -a /etc/apt/sources.list
123-
# $SUDO echo deb [arch=amd64] https://ppa.launchpad.net/deadsnakes/ppa/ubuntu $CODENAME main | $SUDO tee -a /etc/apt/sources.list
124-
# $SUDO apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EB9B1D8886F44E2A
125-
# $SUDO apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA6932366A755776
124+
echo "sources.list:"
125+
cat /etc/apt/sources.list
126+
for f in /etc/apt/sources.list.d/*.list; do echo "$f:"; cat $f; done
126127
$SUDO apt-get update
127-
$SUDO apt-get -y install gcc-multilib g++-multilib gfortran-multilib python3 python2.7 python3-minimal python2.7-minimal rpm libasound2-dev:$ARCH freeglut3-dev:$ARCH libfontconfig-dev:$ARCH libgtk2.0-dev:$ARCH libusb-dev:$ARCH libusb-1.0-0-dev:$ARCH libffi-dev:$ARCH libbz2-dev:$ARCH zlib1g-dev:$ARCH libxcb1-dev:$ARCH libpulse-dev:$ARCH
128-
$SUDO apt-get -y install pkg-config ccache clang $TOOLCHAIN openjdk-8-jdk ant python2 python3-pip swig git file wget unzip tar bzip2 gzip patch autoconf-archive autogen automake cmake make libtool bison flex perl nasm ragel curl libcurl4-openssl-dev libssl-dev libffi-dev libbz2-dev zlib1g-dev rapidjson-dev libdrm-dev libva-dev
129-
128+
$SUDO apt-get -y install gcc-multilib g++-multilib gfortran-multilib python3 python2.7 python3-minimal python2.7-minimal rpm libasound2-dev:$ARCH freeglut3-dev:$ARCH libfontconfig-dev:$ARCH libgtk2.0-dev:$ARCH libusb-dev:$ARCH libusb-1.0-0-dev:$ARCH libffi-dev:$ARCH libbz2-dev:$ARCH zlib1g-dev:$ARCH libxcb1-dev:$ARCH libpulse-dev:$ARCH libdrm-dev:$ARCH libva-dev:$ARCH
129+
$SUDO apt-get -y install pkgconf ccache clang $TOOLCHAIN openjdk-8-jdk ant python2 python3-pip swig git file wget unzip tar bzip2 gzip patch autoconf-archive autogen automake cmake make libtool bison flex perl nasm ragel curl libcurl4-openssl-dev libssl-dev libffi-dev libbz2-dev zlib1g-dev rapidjson-dev
130+
130131
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
131132
echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV
132133
ln -sf $JAVA_HOME /usr/lib/jvm/default-java
133134
find /usr/lib/jvm/default-java/
134-
# curl -LO https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2-linux-x86_64.tar.gz
135-
curl -LO https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
136-
curl -LO https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.18.3.tar.gz
137-
curl -LO https://services.gradle.org/distributions/gradle-7.1.1-bin.zip
138-
# $SUDO tar -xzf cmake-3.24.2-linux-x86_64.tar.gz -C /opt/
139-
$SUDO tar -xzf apache-maven-3.6.3-bin.tar.gz -C /opt/
140-
$SUDO tar -xzf git-2.18.3.tar.gz
141-
$SUDO unzip gradle-7.1.1-bin.zip -d /opt/
142-
# pushd git-2.18.3; make -j2 prefix=/usr/local/; $SUDO make -j2 prefix=/usr/local/ install; popd
143-
# $SUDO ln -sf /opt/cmake-3.24.2-linux-x86_64/bin/* /usr/bin/
144-
$SUDO ln -sf /opt/apache-maven-3.6.3/bin/mvn /usr/bin/mvn
145-
$SUDO ln -sf /opt/gradle-7.1.1/bin/gradle /usr/bin/gradle
146-
147-
$SUDO python3 -m pip install gdown || $SUDO python3 -m pip install gdown
148-
135+
149136
# install vulkan sdk
150137
echo Installing Vulkan-SDK
151138
if [[ "$CODENAME" == "jammy" ]]; then
152139
curl -s https://packages.lunarg.com/lunarg-signing-key-pub.asc | $SUDO tee /etc/apt/trusted.gpg.d/lunarg.asc >/dev/null
153140
$SUDO curl -s -o /etc/apt/sources.list.d/lunarg-vulkan-1.3.280-jammy.list https://packages.lunarg.com/vulkan/1.3.280/lunarg-vulkan-1.3.280-jammy.list
141+
$SUDO sed -i 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list.d/lunarg-vulkan-1.3.280-jammy.list
142+
$SUDO sed -i 's/deb-src http/deb-src [arch=amd64] http/g' /etc/apt/sources.list.d/lunarg-vulkan-1.3.280-jammy.list
154143
else
155144
curl -s https://packages.lunarg.com/lunarg-signing-key-pub.asc | $SUDO apt-key add -
156145
$SUDO curl -s -o /etc/apt/sources.list.d/lunarg-vulkan-1.3.280-focal.list https://packages.lunarg.com/vulkan/1.3.280/lunarg-vulkan-1.3.280-focal.list
146+
$SUDO sed -i 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list.d/lunarg-vulkan-1.3.280-focal.list
147+
$SUDO sed -i 's/deb-src http/deb-src [arch=amd64] http/g' /etc/apt/sources.list.d/lunarg-vulkan-1.3.280-focal.list
157148
fi
158149
$SUDO apt-get update && $SUDO apt-get install -y libvulkan1 libvulkan-dev vulkan-sdk
159-
150+
160151
if [[ -n ${USERLAND_BUILDME:-} ]]; then
161152
curl -LOJ https://github.com/raspberrypi/userland/archive/master.tar.gz
162153
tar -xzf userland-master.tar.gz
@@ -166,7 +157,7 @@ runs:
166157
export USERLAND_PATH=$(pwd)/userland-master/
167158
echo "USERLAND_PATH=$USERLAND_PATH" >> $GITHUB_ENV
168159
fi
169-
160+
170161
if [[ $CI_DEPLOY_PLATFORM == android-* ]]; then
171162
curl -LO https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
172163
unzip -qq android-ndk-r21e-linux-x86_64.zip
@@ -175,15 +166,15 @@ runs:
175166
else
176167
export MAVEN_OPTIONS="-Djavacpp.platform.compiler=$PREFIX-g++ -Djava.library.path=/usr/$PREFIX/lib/:/usr/lib/$PREFIX/:$USERLAND_PATH/build/lib/"
177168
fi
178-
169+
179170
if [[ -n ${ARCH_CUDA:-} ]] && [[ -n ${CI_DEPLOY_NEED_CUDA:-} ]]; then
180171
echo Installing CUDA, cuDNN, nvCOMP, etc
181172
curl -LO https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/$CUDA
182173
curl -LO https://developer.download.nvidia.com/compute/cuda/repos/rhel8/$ARCH_CUDA/libcudnn8-$CUDNN.rpm
183174
curl -LO https://developer.download.nvidia.com/compute/cuda/repos/rhel8/$ARCH_CUDA/libcudnn8-devel-$CUDNN.rpm
184175
curl -LO https://developer.download.nvidia.com/compute/cuda/repos/rhel8/$ARCH_CUDA/libnccl-$NCCL.rpm
185176
curl -LO https://developer.download.nvidia.com/compute/cuda/repos/rhel8/$ARCH_CUDA/libnccl-devel-$NCCL.rpm
186-
177+
187178
$SUDO rpm -i --force --ignorearch --nodeps $CUDA libcudnn*.rpm libnccl*.rpm
188179
rm -f *.rpm *.tgz *.txz *.tar.*
189180
pushd /var/cuda-repo-rhel8-12-3-local/; $SUDO rpm -i --force --ignorearch --nodeps cuda*.rpm libc*.rpm libn*.rpm; $SUDO rm *.rpm; popd
@@ -192,15 +183,15 @@ runs:
192183
$SUDO ln -sf /usr/local/cuda/lib64/stubs/libnvidia-ml.so /usr/local/cuda/lib64/libnvidia-ml.so
193184
$SUDO mv /usr/include/cudnn* /usr/include/nccl* /usr/local/cuda/include/
194185
$SUDO mv /usr/lib64/libcudnn* /usr/lib64/libnccl* /usr/local/cuda/lib64/
195-
186+
196187
if [[ -n ${NVCOMP:-} ]]; then
197188
curl -LO https://developer.download.nvidia.com/compute/nvcomp/3.0.5/local_installers/$NVCOMP.tgz
198189
$SUDO tar -xvf $NVCOMP.tgz -C /usr/local/cuda/lib64/ --strip-components=1 lib/ || $SUDO tar -xvf $NVCOMP.tgz -C /usr/local/cuda/lib64/ --strip-components=2 nvcomp-3.0.5-ctk-12.2/lib/
199190
$SUDO tar -xvf $NVCOMP.tgz -C /usr/local/cuda/include/ --strip-components=1 include/ || $SUDO tar -xvf $NVCOMP.tgz -C /usr/local/cuda/include/ --strip-components=2 nvcomp-3.0.5-ctk-12.2/include/
200191
rm -f $NVCOMP.tgz
201192
fi
202-
203-
# Work around issues with CUDA 10.2/11.x
193+
194+
# Work around issues with CUDA 10.2/11.x
204195
$SUDO mv /usr/include/cublas* /usr/include/nvblas* /usr/local/cuda/include/ || true
205196
$SUDO mv /usr/lib64/libcublas* /usr/lib64/libnvblas* /usr/local/cuda/lib64/ || true
206197
for f in /usr/local/cuda/include/*_v8.h; do $SUDO ln -sf $f ${f:0:${#f}-5}.h; done
@@ -224,7 +215,7 @@ runs:
224215
$SUDO sed -i /device_merge_sort.cuh/d /usr/local/cuda/include/cub/cub.cuh
225216
$SUDO sed -i /device_segmented_sort.cuh/d /usr/local/cuda/include/cub/cub.cuh
226217
$SUDO sed -i /warp_merge_sort.cuh/d /usr/local/cuda/include/cub/cub.cuh
227-
218+
228219
# Remove downloaded archives and unused libraries to avoid running out of disk space
229220
$SUDO rm -f $(find /usr/local/cuda/ -name '*.a' -and -not -name libcudart_static.a -and -not -name libcudadevrt.a -and -not -name libnvcomp_device.a)
230221
fi
@@ -242,9 +233,9 @@ runs:
242233
- name: Publish release
243234
shell: bash
244235
if: "github.event_name == 'release'"
245-
run: ./gradlew build publish -Pdeploy.kotlin=false -Pdeploy.native=true -Pffmpeg.gpl=${{ matrix.gpl }} -Pdeploy.version=${{ github.event.release.tag_name }} --console=plain --info --configure-on-demand --parallel --build-cache
236+
run: ./gradlew build publish -Pdeploy.kotlin=false -Pdeploy.native=true -Pffmpeg.platform=${{ github.job }} -Pffmpeg.gpl=${{ matrix.gpl }} -Pdeploy.version=${{ github.event.release.tag_name }} --console=plain --info --configure-on-demand --parallel --build-cache
246237

247238
- name: Publish snapshot
248239
shell: bash
249240
if: "github.event_name != 'release'"
250-
run: ./gradlew build publish -Pdeploy.kotlin=false -Pdeploy.native=true -Pffmpeg.gpl=${{ matrix.gpl }} -Pdeploy.version=${{ steps.vars.outputs.sha_short }}-dev --console=plain --info --configure-on-demand --parallel --build-cache
241+
run: ./gradlew build publish -Pdeploy.kotlin=false -Pdeploy.native=true -Pffmpeg.platform=${{ github.job }} -Pffmpeg.gpl=${{ matrix.gpl }} -Pdeploy.version=${{ steps.vars.outputs.sha_short }}-dev --console=plain --info --configure-on-demand --parallel --build-cache

.github/workflows/ffmpeg.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ jobs:
5656
# steps:
5757
# - uses: actions/checkout@v4
5858
# - uses: ./.github/actions/deploy-ubuntu
59-
linux-armhf:
59+
linux-arm:
6060
runs-on: ubuntu-22.04
6161
strategy:
6262
matrix:
6363
gpl: ["false", "true"]
64-
name: linux-armhf (${{ matrix.gpl == 'true' && 'GPL' || 'LGPL' }})
64+
name: linux-arm (${{ matrix.gpl == 'true' && 'GPL' || 'LGPL' }})
6565
steps:
6666
- uses: actions/checkout@v4
6767
- uses: ./.github/actions/deploy-ubuntu
@@ -136,7 +136,7 @@ jobs:
136136
# - uses: actions/checkout@v4
137137
# - uses: ./.github/actions/deploy-windows
138138
# redeploy:
139-
# needs: [android-arm, android-arm64, android-x86, android-x86_64, linux-armhf, linux-arm64, linux-ppc64le, linux-x86, linux-x86_64, macosx-arm64, macosx-x86_64, windows-x86, windows-x86_64]
139+
# needs: [android-arm, android-arm64, android-x86, android-x86_64, linux-arm, linux-arm64, linux-ppc64le, linux-x86, linux-x86_64, macosx-arm64, macosx-x86_64, windows-x86, windows-x86_64]
140140
# needs: [android-arm64, android-x86_64, linux-arm64, linux-ppc64le, linux-x86_64, macosx-arm64, macosx-x86_64, windows-x86_64]
141141
# runs-on: ubuntu-22.04
142142
# steps:

ffmpeg/build.gradle.kts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import dev.silenium.libs.jni.NativePlatform
2+
import dev.silenium.libs.jni.Platform
23

34
buildscript {
45
repositories {
@@ -23,9 +24,10 @@ val deployNative = (findProperty("deploy.native") as String?)?.toBoolean() ?: tr
2324

2425
val withGPL: Boolean = findProperty("ffmpeg.gpl").toString().toBoolean()
2526
val platformExtension = "-gpl".takeIf { withGPL }.orEmpty()
26-
val platform = NativePlatform.platform(platformExtension)
27+
val platformString = findProperty("ffmpeg.platform")?.toString()
28+
val platform = platformString?.let { Platform(it, platformExtension) } ?: NativePlatform.platform(platformExtension)
2729

28-
val compileNative = if(deployNative) {
30+
val compileNative = if (deployNative) {
2931
tasks.register<Exec>("compileNative") {
3032
enabled = deployNative
3133
commandLine(
@@ -49,7 +51,8 @@ val compileNative = if(deployNative) {
4951

5052
val nativesJar = if (deployNative) {
5153
tasks.register<Jar>("nativesJar") {
52-
val platform = NativePlatform.platform(platformExtension)
54+
// Required for configuration cache
55+
val platform = platformString?.let { Platform(it, platformExtension) } ?: NativePlatform.platform(platformExtension)
5356

5457
from(compileNative!!.get().outputs.files) {
5558
include("lib/*.so")

ffmpeg/cppbuild.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ EOF
751751
echo ""
752752
cd zimg-release-$ZIMG_VERSION
753753
autoreconf -iv
754-
./configure --prefix=$INSTALL_PATH --disable-shared --with-pic --host=i686-linux
754+
./configure --prefix=$INSTALL_PATH --disable-shared --with-pic CFLAGS="-m32" CXXFLAGS="-m32"
755755
make -j $MAKEJ V=0
756756
make install
757757
echo ""
@@ -862,7 +862,7 @@ EOF
862862
LIBS=
863863
if [[ ! -z $(ldconfig -p | grep libva-drm) ]]; then
864864
cd ../libvpl-$VPL_VERSION
865-
PKG_CONFIG_PATH=../lib/pkgconfig cmake -B _build -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-m64" -DCMAKE_CXX_FLAGS="-m64"
865+
PKG_CONFIG_PATH=../lib/pkgconfig cmake -B _build -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-m32" -DCMAKE_CXX_FLAGS="-m32"
866866
cmake --build _build
867867
cmake --install _build
868868
ENABLE="$ENABLE --enable-libvpl"
@@ -885,7 +885,7 @@ EOF
885885
make install
886886
cd ..
887887
cd ../ffmpeg-$FFMPEG_VERSION
888-
LDEXEFLAGS='-Wl,-rpath,\$$ORIGIN/' PKG_CONFIG_PATH=../lib/pkgconfig/ ./configure --prefix=.. $DISABLE $ENABLE $ENABLE_VULKAN --enable-libdrm --enable-cuda --enable-cuvid --enable-nvenc --enable-pthreads --enable-libxcb --enable-libpulse --cc="gcc -m32 -D__ILP32__" --extra-cflags="-I../include/ -I../include/libxml2 -I../include/mfx -I../include/svt-av1" --extra-ldflags="-L../lib/" --extra-libs="-lstdc++ -lpthread -ldl -lz -lm $LIBS" || cat ffbuild/config.log
888+
LDEXEFLAGS='-Wl,-rpath,\$$ORIGIN/' PKG_CONFIG_PATH=../lib/pkgconfig/:/usr/lib/i386-linux-gnu/pkgconfig ./configure --prefix=.. $DISABLE $ENABLE $ENABLE_VULKAN --enable-libdrm --enable-cuda --enable-cuvid --enable-nvenc --enable-pthreads --enable-libxcb --enable-libpulse --cc="gcc -m32 -D__ILP32__" --extra-cflags="-I../include/ -I../include/libxml2 -I../include/mfx -I../include/svt-av1" --extra-ldflags="-L../lib/" --extra-libs="-lstdc++ -lpthread -ldl -lz -lm $LIBS" || cat ffbuild/config.log
889889
make -j $MAKEJ
890890
make install
891891
;;
@@ -1039,7 +1039,7 @@ EOF
10391039
make install
10401040
;;
10411041

1042-
linux-armhf)
1042+
linux-arm)
10431043
tar --totals -xjf ../alsa-lib-$ALSA_VERSION.tar.bz2
10441044

10451045
export CFLAGS="-I$INSTALL_PATH/include -L$INSTALL_PATH/lib"

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[versions]
22
kotlin = "2.0.0"
3-
jni-utils = "0.1.2"
3+
jni-utils = "0.1.5"
44

55
[libraries]
66
jni-utils = { group = "dev.silenium.libs.jni", name = "jni-utils", version.ref = "jni-utils" }

0 commit comments

Comments
 (0)