Skip to content

Commit de10d3e

Browse files
committed
feat: Add preliminary support for multiplatform.
There is no impl yet outside of the JVM one.
1 parent a908d6e commit de10d3e

File tree

221 files changed

+1314
-1323
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

221 files changed

+1314
-1323
lines changed

.github/workflows/ci.yml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,19 @@ jobs:
1414
common:
1515
uses: TokTok/ci-tools/.github/workflows/common-ci.yml@master
1616

17-
docker-jvm:
17+
docker:
18+
strategy:
19+
matrix:
20+
target: [jvm, native]
1821
runs-on: ubuntu-latest
1922
steps:
2023
- name: Set up Docker Buildx
2124
uses: docker/setup-buildx-action@v3
22-
- name: Build toxchat/jvm-toxcore-c:jvm
25+
- name: Build toxchat/jvm-toxcore-c:${{ matrix.target }}
2326
uses: docker/build-push-action@v5
2427
with:
25-
file: docker/jvm.Dockerfile
26-
tags: toxchat/jvm-toxcore-c:jvm
28+
file: docker/${{ matrix.target }}.Dockerfile
29+
tags: toxchat/jvm-toxcore-c:${{ matrix.target }}
2730

2831
ktlint:
2932
runs-on: ubuntu-22.04

BUILD.bazel

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,22 @@ genrule(
1414
"//tools/config:osx": ["@bazel_tools//tools/jdk:jni_md_header-darwin"],
1515
"//tools/config:windows": ["@bazel_tools//tools/jdk:jni_md_header-windows"],
1616
}),
17-
outs = ["lib/src/main/cpp/jni_md.h"],
17+
outs = ["lib/src/jvmMain/cpp/jni_md.h"],
1818
cmd = "cp -f $< $@",
1919
)
2020

2121
genrule(
2222
name = "copy_link_jni_header",
2323
srcs = ["@bazel_tools//tools/jdk:jni_header"],
24-
outs = ["lib/src/main/cpp/jni.h"],
24+
outs = ["lib/src/jvmMain/cpp/jni.h"],
2525
cmd = "cp -f $< $@",
2626
)
2727

2828
proto_library(
2929
name = "jni_proto",
3030
srcs = [
31-
"lib/src/main/proto/Av.proto",
32-
"lib/src/main/proto/Core.proto",
31+
"lib/src/jvmMain/proto/Av.proto",
32+
"lib/src/jvmMain/proto/Core.proto",
3333
],
3434
)
3535

@@ -46,28 +46,28 @@ java_proto_library(
4646
cc_binary(
4747
name = "libtox4j-c.so",
4848
srcs = glob([
49-
"lib/src/main/cpp/**/*.cpp",
50-
"lib/src/main/cpp/**/*.h",
49+
"lib/src/jvmMain/cpp/**/*.cpp",
50+
"lib/src/jvmMain/cpp/**/*.h",
5151
]) + [
52-
":lib/src/main/cpp/jni.h",
53-
":lib/src/main/cpp/jni_md.h",
52+
":lib/src/jvmMain/cpp/jni.h",
53+
":lib/src/jvmMain/cpp/jni_md.h",
5454
],
5555
copts = [
5656
"-DHAVE_TO_STRING",
5757
],
5858
includes = [
59-
"lib/src/main/cpp",
60-
"lib/src/main/proto",
59+
"lib/src/jvmMain/cpp",
60+
"lib/src/jvmMain/proto",
6161
],
6262
linkopts = select({
63-
"//tools/config:freebsd": ["-Wl,--version-script,$(location lib/src/main/cpp/libtox4j-c.ld)"],
64-
"//tools/config:linux": ["-Wl,--version-script,$(location lib/src/main/cpp/libtox4j-c.ld)"],
63+
"//tools/config:freebsd": ["-Wl,--version-script,$(location lib/src/jvmMain/cpp/libtox4j-c.ld)"],
64+
"//tools/config:linux": ["-Wl,--version-script,$(location lib/src/jvmMain/cpp/libtox4j-c.ld)"],
6565
"//tools/config:osx": [],
6666
"//tools/config:windows": [],
6767
}),
6868
linkshared = True,
6969
deps = [
70-
"lib/src/main/cpp/libtox4j-c.ld",
70+
"lib/src/jvmMain/cpp/libtox4j-c.ld",
7171
":jni_cc_proto",
7272
"//c-toxcore",
7373
],
@@ -76,8 +76,8 @@ cc_binary(
7676
kt_jvm_library(
7777
name = "jvm-toxcore-c",
7878
srcs = glob([
79-
"lib/src/main/java/**/*.java",
80-
"lib/src/main/java/**/*.kt",
79+
"lib/src/*Main/**/*.java",
80+
"lib/src/*Main/**/*.kt",
8181
]),
8282
data = ["libtox4j-c.so"],
8383
deps = [":jni_java_proto"],
@@ -86,7 +86,7 @@ kt_jvm_library(
8686
kt_jvm_test(
8787
name = "ToxCoreTest",
8888
size = "small",
89-
srcs = ["lib/src/test/java/im/tox/tox4j/core/ToxCoreTest.kt"],
89+
srcs = ["lib/src/jvmTest/java/im/tox/tox4j/core/ToxCoreTest.kt"],
9090
jvm_flags = ["-Djava.library.path=jvm-toxcore-c"],
9191
test_class = "im.tox.tox4j.core.ToxCoreTest",
9292
deps = [

docker/build-native

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/usr/bin/env bash
2+
3+
set -eux
4+
5+
cat <<EOF >native.txt
6+
-p
7+
library
8+
EOF
9+
10+
find lib/src/commonMain -name '*.kt' -exec printf '{}\n-Xcommon-sources={}\n' ';' >>native.txt
11+
12+
kotlinc-native @native.txt
13+
ls

docker/jvm.Dockerfile

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ RUN apt-get update \
77
build-essential \
88
ca-certificates \
99
cmake \
10+
curl \
1011
default-jdk \
1112
git \
1213
libtool \
@@ -23,8 +24,8 @@ RUN scripts/build-host "$PWD/_install/host/protobuf.stamp" "-j$(nproc)"
2324
RUN scripts/build-host "$PWD/_install/host/toxcore.stamp" "-j$(nproc)"
2425

2526
# Native code, changes less frequently.
26-
COPY lib/src/main/cpp/ /work/jvm-toxcore-c/lib/src/main/cpp/
27-
COPY lib/src/main/proto/ /work/jvm-toxcore-c/lib/src/main/proto/
27+
COPY lib/src/jvmMain/cpp/ /work/jvm-toxcore-c/lib/src/jvmMain/cpp/
28+
COPY lib/src/jvmMain/proto/ /work/jvm-toxcore-c/lib/src/jvmMain/proto/
2829
RUN touch "$PWD/_install/host/.stamp" \
2930
&& touch "$PWD/_install/host/libsodium.stamp" \
3031
&& touch "$PWD/_install/host/libvpx.stamp" \
@@ -42,10 +43,10 @@ ENV LD_LIBRARY_PATH=/work/jvm-toxcore-c/_install/host/lib
4243
ENV PATH=/work/jvm-toxcore-c/_install/host/bin:$PATH
4344
RUN ./gradlew build
4445

45-
RUN javac -h . -cp /work/jvm-toxcore-c/lib/build/classes/kotlin/main:/work/jvm-toxcore-c/lib/build/classes/java/main \
46-
lib/src/main/java/im/tox/tox4j/impl/jni/ToxAvJni.java \
47-
lib/src/main/java/im/tox/tox4j/impl/jni/ToxCoreJni.java \
48-
lib/src/main/java/im/tox/tox4j/impl/jni/ToxCryptoJni.java
49-
RUN diff -u lib/src/main/cpp/ToxCore/generated/im_tox_tox4j_impl_jni_ToxCoreJni.h im_tox_tox4j_impl_jni_ToxCoreJni.h \
50-
&& diff -u lib/src/main/cpp/ToxAv/generated/im_tox_tox4j_impl_jni_ToxAvJni.h im_tox_tox4j_impl_jni_ToxAvJni.h \
51-
&& diff -u lib/src/main/cpp/ToxCrypto/generated/im_tox_tox4j_impl_jni_ToxCryptoJni.h im_tox_tox4j_impl_jni_ToxCryptoJni.h
46+
RUN javac -h . -cp /work/jvm-toxcore-c/lib/build/classes/kotlin/jvmMain:/work/jvm-toxcore-c/lib/build/classes/java/jvmMain \
47+
lib/src/jvmMain/java/im/tox/tox4j/impl/jni/ToxAvJni.java \
48+
lib/src/jvmMain/java/im/tox/tox4j/impl/jni/ToxCoreJni.java \
49+
lib/src/jvmMain/java/im/tox/tox4j/impl/jni/ToxCryptoJni.java
50+
RUN diff -u lib/src/jvmMain/cpp/ToxCore/generated/im_tox_tox4j_impl_jni_ToxCoreJni.h im_tox_tox4j_impl_jni_ToxCoreJni.h \
51+
&& diff -u lib/src/jvmMain/cpp/ToxAv/generated/im_tox_tox4j_impl_jni_ToxAvJni.h im_tox_tox4j_impl_jni_ToxAvJni.h \
52+
&& diff -u lib/src/jvmMain/cpp/ToxCrypto/generated/im_tox_tox4j_impl_jni_ToxCryptoJni.h im_tox_tox4j_impl_jni_ToxCryptoJni.h

docker/native.Dockerfile

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
FROM ubuntu:22.04
2+
3+
RUN apt-get update \
4+
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
5+
autoconf \
6+
automake \
7+
build-essential \
8+
ca-certificates \
9+
cmake \
10+
curl \
11+
default-jdk \
12+
git \
13+
libtool \
14+
make \
15+
pkg-config \
16+
yasm \
17+
&& apt-get clean \
18+
&& rm -rf /var/lib/apt/lists/*
19+
20+
WORKDIR /opt
21+
RUN curl -L -o kotlin-native.tar.gz https://github.com/JetBrains/kotlin/releases/download/v1.9.22/kotlin-native-linux-x86_64-1.9.22.tar.gz \
22+
&& tar zxf kotlin-native.tar.gz \
23+
&& mv kotlin-native-linux-x86_64-1.9.22 kotlin \
24+
&& rm kotlin-native.tar.gz
25+
ENV PATH=$PATH:/opt/kotlin/bin
26+
27+
RUN ["touch", "Boot.kt"]
28+
RUN ["kotlinc-native", "-p", "library", "Boot.kt"]
29+
30+
WORKDIR /work/jvm-toxcore-c
31+
COPY lib/ /work/jvm-toxcore-c/lib/
32+
COPY docker/build-native /work/jvm-toxcore-c/docker/
33+
RUN ["docker/build-native"]

lib/build.gradle.kts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
1-
/*
2-
* This file was generated by the Gradle 'init' task.
3-
*
4-
* This generated file contains a sample Kotlin library project to get you started.
5-
* For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.4/userguide/building_java_projects.html in the Gradle documentation.
6-
* This project uses @Incubating APIs which are subject to change.
7-
*/
8-
91
plugins {
10-
// Apply the org.jetbrains.kotlin.jvm Plugin to add support for Kotlin.
11-
id("org.jetbrains.kotlin.jvm") version "1.9.22"
2+
kotlin("multiplatform") version "1.9.22"
123
id("com.google.protobuf") version "0.9.4"
134

145
// Apply the java-library plugin for API and implementation separation.
@@ -21,10 +12,21 @@ repositories {
2112
}
2213

2314
dependencies {
24-
implementation("com.google.protobuf:protobuf-java:3.24.4")
2515
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
2616
}
2717

18+
kotlin {
19+
jvm()
20+
21+
sourceSets {
22+
val jvmMain by getting {
23+
dependencies {
24+
implementation("com.google.protobuf:protobuf-java:3.24.4")
25+
}
26+
}
27+
}
28+
}
29+
2830
testing {
2931
suites {
3032
// Configure the built-in test suite

lib/src/main/java/im/tox/tox4j/av/ToxAv.kt renamed to lib/src/commonMain/kotlin/im/tox/tox4j/av/ToxAv.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import im.tox.tox4j.av.data.SamplingRate
88
import im.tox.tox4j.av.enums.ToxavCallControl
99
import im.tox.tox4j.core.ToxCore
1010
import im.tox.tox4j.core.data.ToxFriendNumber
11-
import java.io.Closeable
1211

1312
/**
1413
* Public audio/video API for Tox clients.
@@ -28,7 +27,8 @@ import java.io.Closeable
2827
* otherwise undefined behaviour occurs. Upon closing of ToxAv instance, all active calls will be
2928
* forcibly terminated without notifying peers.
3029
*/
31-
interface ToxAv : Closeable {
30+
@kotlin.ExperimentalStdlibApi
31+
interface ToxAv : AutoCloseable {
3232
/**
3333
* Start new A/V session. There can only be only one session per Tox instance.
3434
*

0 commit comments

Comments
 (0)