Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .restyled.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
---
exclude:
- "gradlew"
- "**/*.cpp"
- "**/*.h"
28 changes: 27 additions & 1 deletion docker/jvm.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,35 @@ RUN apt-get update \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /work/jvm-toxcore-c
# Rarely changing external dependencies.
COPY scripts/ /work/jvm-toxcore-c/scripts/
RUN scripts/build-host "$PWD/_install/host/protobuf.stamp" "-j$(nproc)"
RUN scripts/build-host "$PWD/_install/host/toxcore.stamp" "-j$(nproc)"

# Native code, changes less frequently.
COPY lib/src/main/cpp/ /work/jvm-toxcore-c/lib/src/main/cpp/
COPY lib/src/main/proto/ /work/jvm-toxcore-c/lib/src/main/proto/
RUN scripts/build-host "$PWD/_install/host/tox4j.stamp" "-j$(nproc)"
RUN touch "$PWD/_install/host/.stamp" \
&& touch "$PWD/_install/host/libsodium.stamp" \
&& touch "$PWD/_install/host/libvpx.stamp" \
&& touch "$PWD/_install/host/opus.stamp" \
&& touch "$PWD/_install/host/protobuf.stamp" \
&& touch "$PWD/_install/host/toxcore.stamp" \
&& scripts/build-host "$PWD/_install/host/tox4j.stamp" "-j$(nproc)"
RUN ["ls", "-lh", "/work/jvm-toxcore-c/_install/host/lib/libtox4j-c.so"]

# Java/Kotlin code changes a lot.
COPY gradlew gradle.properties settings.gradle.kts /work/jvm-toxcore-c/
COPY gradle /work/jvm-toxcore-c/gradle/
COPY lib/ /work/jvm-toxcore-c/lib/
ENV LD_LIBRARY_PATH=/work/jvm-toxcore-c/_install/host/lib
ENV PATH=/work/jvm-toxcore-c/_install/host/bin:$PATH
RUN ./gradlew build

RUN javac -h . -cp /work/jvm-toxcore-c/lib/build/classes/kotlin/main:/work/jvm-toxcore-c/lib/build/classes/java/main \
lib/src/main/java/im/tox/tox4j/impl/jni/ToxAvJni.java \
lib/src/main/java/im/tox/tox4j/impl/jni/ToxCoreJni.java \
lib/src/main/java/im/tox/tox4j/impl/jni/ToxCryptoJni.java
RUN diff -u lib/src/main/cpp/ToxCore/generated/im_tox_tox4j_impl_jni_ToxCoreJni.h im_tox_tox4j_impl_jni_ToxCoreJni.h \
&& diff -u lib/src/main/cpp/ToxAv/generated/im_tox_tox4j_impl_jni_ToxAvJni.h im_tox_tox4j_impl_jni_ToxAvJni.h \
&& diff -u lib/src/main/cpp/ToxCrypto/generated/im_tox_tox4j_impl_jni_ToxCryptoJni.h im_tox_tox4j_impl_jni_ToxCryptoJni.h
72 changes: 25 additions & 47 deletions lib/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
project(tox4j-c)
cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.16)

if(NOT DEFINED CMAKE_MACOSX_RPATH)
set(CMAKE_MACOSX_RPATH true)
Expand All @@ -11,42 +11,9 @@ endif()

find_package(PkgConfig REQUIRED)

pkg_search_module(LIBTOXCORE libtoxcore)
if(LIBTOXCORE_FOUND)
pkg_search_module(LIBTOXAV REQUIRED libtoxav)
link_directories(${LIBTOXCORE_LIBRARY_DIRS})
include_directories(${LIBTOXCORE_INCLUDE_DIRS})
foreach(flag ${LIBTOXCORE_CFLAGS_OTHER})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
endforeach()

link_directories(${LIBTOXAV_LIBRARY_DIRS})
include_directories(${LIBTOXAV_INCLUDE_DIRS})
foreach(flag ${LIBTOXAV_CFLAGS_OTHER})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
endforeach()
else()
pkg_search_module(TOXCORE REQUIRED toxcore)
link_directories(${TOXCORE_LIBRARY_DIRS})
include_directories(${TOXCORE_INCLUDE_DIRS})
foreach(flag ${TOXCORE_CFLAGS_OTHER})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
endforeach()
endif()

find_package(Protobuf REQUIRED)
include_directories(${PROTOBUF_INCLUDE_DIRS})

pkg_search_module(TOXCORE REQUIRED toxcore)
find_package(protobuf CONFIG REQUIRED)
find_package(JNI)
if(JAVA_INCLUDE_PATH)
include_directories(${JAVA_INCLUDE_PATH})
endif()
if(JAVA_INCLUDE_PATH2)
include_directories(${JAVA_INCLUDE_PATH2})
endif()

include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_BINARY_DIR})

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")

Expand Down Expand Up @@ -96,14 +63,12 @@ endif()
# Build
#

protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ToxAv/Av.proto
ToxCore/Core.proto util/ProtoLog.proto)

add_library(
${PROJECT_NAME} SHARED
${ANDROID_CPU_FEATURES}
${PROTO_SRCS}
${PROTO_HDRS}
ToxAv/Av.proto
ToxCore/Core.proto
util/ProtoLog.proto
ToxAv/generated/enums.cpp
ToxAv/generated/errors.cpp
ToxAv/generated/impls.h
Expand Down Expand Up @@ -175,15 +140,28 @@ if(ANDROID_CPU_FEATURES)
target_compile_definitions(${PROJECT_NAME} PRIVATE -Dtypeof=__typeof__)
endif()

target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES})
target_include_directories(${PROJECT_NAME} PUBLIC ${PROTOBUF_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} protobuf::libprotobuf-lite)

if(LIBTOXCORE_FOUND)
target_link_libraries(${PROJECT_NAME} ${LIBTOXAV_STATIC_LIBRARIES}
${LIBTOXCORE_STATIC_LIBRARIES})
else()
target_link_libraries(${PROJECT_NAME} ${TOXCORE_STATIC_LIBRARIES})
if(JAVA_INCLUDE_PATH)
target_include_directories(${PROJECT_NAME} PUBLIC ${JAVA_INCLUDE_PATH})
endif()
if(JAVA_INCLUDE_PATH2)
target_include_directories(${PROJECT_NAME} PUBLIC ${JAVA_INCLUDE_PATH2})
endif()

target_link_directories(${PROJECT_NAME} PUBLIC ${TOXCORE_LIBRARY_DIRS})
target_link_libraries(${PROJECT_NAME} ${TOXCORE_STATIC_LIBRARIES})
target_include_directories(${PROJECT_NAME} PUBLIC ${TOXCORE_INCLUDE_DIRS})

target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR})
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_BINARY_DIR})
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_BINARY_DIR}/ToxAv)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_BINARY_DIR}/ToxCore)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_BINARY_DIR}/util)

protobuf_generate(TARGET ${PROJECT_NAME})

# Windows and OSX don't have this linker functionality.
if(NOT WIN32 AND NOT APPLE)
set_target_properties(
Expand Down
48 changes: 0 additions & 48 deletions lib/src/main/cpp/ToxAv/generated/im_tox_tox4j_impl_jni_ToxAvJni.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

110 changes: 0 additions & 110 deletions lib/src/main/cpp/ToxAv/lifecycle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,113 +186,3 @@ TOX_METHOD (void, Finalize,
{
instances.finalize (env, instanceNumber);
}

/*
* Class: im_tox_tox4j_impl_jni_ToxAvJni
* Method: invokeAudioBitRate
* Signature: (III)V
*/
JNIEXPORT void JNICALL Java_im_tox_tox4j_impl_jni_ToxAvJni_invokeAudioBitRate
(JNIEnv *env, jclass, jint instanceNumber, jint friendNumber, jint audioBitRate)
{
return instances.with_instance (env, instanceNumber,
[=] (ToxAV *av, Events &events)
{
assert (av != nullptr);
tox4j_audio_bit_rate_cb (friendNumber, audioBitRate, &events);
}
);
}

/*
* Class: im_tox_tox4j_impl_jni_ToxAvJni
* Method: invokeVideoBitRate
* Signature: (III)V
*/
JNIEXPORT void JNICALL Java_im_tox_tox4j_impl_jni_ToxAvJni_invokeVideoBitRate
(JNIEnv *env, jclass, jint instanceNumber, jint friendNumber, jint videoBitRate)
{
return instances.with_instance (env, instanceNumber,
[=] (ToxAV *av, Events &events)
{
assert (av != nullptr);
tox4j_video_bit_rate_cb (friendNumber, videoBitRate, &events);
}
);
}

/*
* Class: im_tox_tox4j_impl_jni_ToxAvJni
* Method: invokeAudioReceiveFrame
* Signature: (II[SII)V
*/
JNIEXPORT void JNICALL Java_im_tox_tox4j_impl_jni_ToxAvJni_invokeAudioReceiveFrame
(JNIEnv *env, jclass, jint instanceNumber, jint friendNumber, jshortArray pcm, jint channels, jint samplingRate)
{
return instances.with_instance (env, instanceNumber,
[=] (ToxAV *av, Events &events)
{
assert (av != nullptr);
auto pcmData = fromJavaArray (env, pcm);
tox4j_assert (pcmData.size () % channels == 0);
tox4j_audio_receive_frame_cb (friendNumber, pcmData.data (), pcmData.size () / channels, channels, samplingRate, &events);
}
);
}

/*
* Class: im_tox_tox4j_impl_jni_ToxAvJni
* Method: invokeCall
* Signature: (IIZZ)V
*/
JNIEXPORT void JNICALL Java_im_tox_tox4j_impl_jni_ToxAvJni_invokeCall
(JNIEnv *env, jclass, jint instanceNumber, jint friendNumber, jboolean audioEnabled, jboolean videoEnabled)
{
return instances.with_instance (env, instanceNumber,
[=] (ToxAV *av, Events &events)
{
assert (av != nullptr);
tox4j_call_cb (friendNumber, audioEnabled, videoEnabled, &events);
}
);
}

/*
* Class: im_tox_tox4j_impl_jni_ToxAvJni
* Method: invokeCallState
* Signature: (IILjava/util/Collection;)V
*/
JNIEXPORT void JNICALL Java_im_tox_tox4j_impl_jni_ToxAvJni_invokeCallState
(JNIEnv *env, jclass, jint instanceNumber, jint friendNumber, jint callState)
{
return instances.with_instance (env, instanceNumber,
[=] (ToxAV *av, Events &events)
{
assert (av != nullptr);
tox4j_call_state_cb (friendNumber, callState, &events);
}
);
}

/*
* Class: im_tox_tox4j_impl_jni_ToxAvJni
* Method: invokeVideoReceiveFrame
* Signature: (IIII[B[B[B[BIIII)V
*/
JNIEXPORT void JNICALL Java_im_tox_tox4j_impl_jni_ToxAvJni_invokeVideoReceiveFrame
(JNIEnv *env, jclass, jint instanceNumber, jint friendNumber, jint width, jint height, jbyteArray y, jbyteArray u, jbyteArray v, jint yStride, jint uStride, jint vStride)
{
return instances.with_instance (env, instanceNumber,
[=] (ToxAV *av, Events &events)
{
assert (av != nullptr);
auto yData = fromJavaArray (env, y);
auto uData = fromJavaArray (env, u);
auto vData = fromJavaArray (env, v);
tox4j_assert (yData.size () == std::max<std::size_t> (width , std::abs (yStride)) * height);
tox4j_assert (uData.size () == std::max<std::size_t> (width / 2, std::abs (uStride)) * (height / 2));
tox4j_assert (vData.size () == std::max<std::size_t> (width / 2, std::abs (vStride)) * (height / 2));
tox4j_video_receive_frame_cb (friendNumber, width, height, yData.data (), uData.data (), vData.data (), yStride, uStride, vStride, &events);
}
);
}
Loading