diff --git a/build.gradle b/build.gradle index 4bfd9419..fc58ebdc 100644 --- a/build.gradle +++ b/build.gradle @@ -128,6 +128,46 @@ task nativeAndroidX64Jar(type: Zip) { rename(".so", "-${version}.so") } +// Clean task for nativeMacOSArm64Jar +task cleanNativeMacOSArm64Jar(type: Delete) { + delete "${buildDir}/libs/jlibtorrent-macosx-arm64-${version}.jar" +} + +// Clean task for nativeMacOSX86_64Jar +task cleanNativeMacOSX86_64Jar(type: Delete) { + delete "${buildDir}/libs/jlibtorrent-macosx-x86_64-${version}.jar" +} + +// Clean task for nativeWindowsX86_64Jar +task cleanNativeWindowsX86_64Jar(type: Delete) { + delete "${buildDir}/libs/jlibtorrent-windows-${version}.jar" +} + +// Clean task for nativeLinuxJar +task cleanNativeLinuxJar(type: Delete) { + delete "${buildDir}/libs/jlibtorrent-linux-${version}.jar" +} + +// Clean task for nativeAndroidArmJar +task cleanNativeAndroidArmJar(type: Delete) { + delete "${buildDir}/libs/jlibtorrent-android-arm-${version}.jar" +} + +// Clean task for nativeAndroidX86Jar +task cleanNativeAndroidX86Jar(type: Delete) { + delete "${buildDir}/libs/jlibtorrent-android-x86-${version}.jar" +} + +// Clean task for nativeAndroidArm64Jar +task cleanNativeAndroidArm64Jar(type: Delete) { + delete "${buildDir}/libs/jlibtorrent-android-arm64-${version}.jar" +} + +// Clean task for nativeAndroidX64Jar +task cleanNativeAndroidX64Jar(type: Delete) { + delete "${buildDir}/libs/jlibtorrent-android-x86_64-${version}.jar" +} + artifacts { archives sourcesJar archives javadocJar @@ -164,11 +204,6 @@ def pomData() { name 'Angel Leon' email 'gubatron@gmail.com' } - developer { - id 'aldenml' - name 'Alden Torres' - email 'aldenml@gmail.com' - } } } } diff --git a/swig/build-android-arm.sh b/swig/build-android-arm.sh index dd0164c4..44abd32d 100755 --- a/swig/build-android-arm.sh +++ b/swig/build-android-arm.sh @@ -27,11 +27,13 @@ export NDK_VERSION=r26d export PATH=${ANDROID_TOOLCHAIN}/bin:${PATH} export CXX=${ANDROID_TOOLCHAIN}/bin/armv7a-linux-androideabi${android_api}-clang++ export CC=${ANDROID_TOOLCHAIN}/bin/armv7a-linux-androideabi${android_api}-clang -export run_bjam="${BOOST_ROOT}/b2 -j8 -q --debug-building --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-linux-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}eabi-v7a" +export CORES=$(( $(nproc) / 2 )) +export run_bjam="${BOOST_ROOT}/b2 -j${CORES} -q --debug-building --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-linux-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}eabi-v7a" export run_objcopy="${ANDROID_TOOLCHAIN}/bin/llvm-objcopy --only-keep-debug bin/release/${os_build}/${os_arch}eabi-v7a/${SHARED_LIB} bin/release/${os_build}/${os_arch}eabi-v7a/${SHARED_LIB}.debug" export run_strip="${ANDROID_TOOLCHAIN}/bin/llvm-strip --strip-unneeded -x -g bin/release/${os_build}/${os_arch}eabi-v7a/${SHARED_LIB}" export run_readelf="${ANDROID_TOOLCHAIN}/bin/llvm-readelf -d bin/release/${os_build}/${os_arch}eabi-v7a/${SHARED_LIB}" export run_native_jar="./gradlew nativeAndroidArmJar" +export run_clean_native_jar="./gradlew cleanNativeAndroidArmJar" export BOOST_ROOT=/src/boost_${BOOST_UNDERSCORE_VERSION} if [ "${run_swig_only}" = true ]; then diff --git a/swig/build-android-arm64.sh b/swig/build-android-arm64.sh index 6781bed3..097f5f2f 100755 --- a/swig/build-android-arm64.sh +++ b/swig/build-android-arm64.sh @@ -27,11 +27,13 @@ export NDK_VERSION=r26d export PATH=${ANDROID_TOOLCHAIN}/bin:${PATH} export CXX=${ANDROID_TOOLCHAIN}/bin/aarch64-linux-android${android_api}-clang++ export CC=${ANDROID_TOOLCHAIN}/bin/aarch64-linux-android${android_api}-clang -export run_bjam="${BOOST_ROOT}/b2 -j8 -q --debug-building --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}-v8a" +export CORES=$(( $(nproc) / 2 )) +export run_bjam="${BOOST_ROOT}/b2 -j${CORES} -q --debug-building --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}-v8a" export run_objcopy="${ANDROID_TOOLCHAIN}/bin/llvm-objcopy --only-keep-debug bin/release/${os_build}/${os_arch}-v8a/${SHARED_LIB} bin/release/${os_build}/${os_arch}-v8a/${SHARED_LIB}.debug" export run_strip="${ANDROID_TOOLCHAIN}/bin/llvm-strip --strip-unneeded -x -g bin/release/${os_build}/${os_arch}-v8a/${SHARED_LIB}" export run_readelf="${ANDROID_TOOLCHAIN}/bin/llvm-readelf -d bin/release/${os_build}/${os_arch}-v8a/${SHARED_LIB}" export run_native_jar="./gradlew nativeAndroidArm64Jar" +export run_clean_native_jar="./gradlew cleanNativeAndroidArm64Jar" export BOOST_ROOT=/src/boost_${BOOST_UNDERSCORE_VERSION} if [ "${run_swig_only}" = true ]; then diff --git a/swig/build-android-x86.sh b/swig/build-android-x86.sh index 2de2c54f..333a1021 100755 --- a/swig/build-android-x86.sh +++ b/swig/build-android-x86.sh @@ -27,11 +27,13 @@ export NDK_VERSION=r26d export PATH=${ANDROID_TOOLCHAIN}/bin:${PATH}; export CXX=${ANDROID_TOOLCHAIN}/bin/i686-linux-android${android_api}-clang++ export CC=${ANDROID_TOOLCHAIN}/bin/i686-linux-android${android_api}-clang -export run_bjam="${BOOST_ROOT}/b2 -j8 -q --debug-building --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" +export CORES=$(( $(nproc) / 2 )) +export run_bjam="${BOOST_ROOT}/b2 -j${CORES} -q --debug-building --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" export run_objcopy="${ANDROID_TOOLCHAIN}/bin/llvm-objcopy --only-keep-debug bin/release/${os_build}/${os_arch}/${SHARED_LIB} bin/release/${os_build}/${os_arch}/${SHARED_LIB}.debug" export run_strip="${ANDROID_TOOLCHAIN}/bin/llvm-strip --strip-unneeded -x -g bin/release/${os_build}/${os_arch}/${SHARED_LIB}" export run_readelf="${ANDROID_TOOLCHAIN}/bin/llvm-readelf -d bin/release/${os_build}/${os_arch}/${SHARED_LIB}" export run_native_jar="./gradlew nativeAndroidX86Jar" +export run_clean_native_jar="./gradlew cleanNativeAndroidX86Jar" export BOOST_ROOT=/src/boost_${BOOST_UNDERSCORE_VERSION} if [ "${run_swig_only}" = true ]; then diff --git a/swig/build-android-x86_64.sh b/swig/build-android-x86_64.sh index a8543e99..8484226e 100755 --- a/swig/build-android-x86_64.sh +++ b/swig/build-android-x86_64.sh @@ -27,11 +27,13 @@ export NDK_VERSION=r26d export PATH=${ANDROID_TOOLCHAIN}/bin:${PATH}; export CXX=${ANDROID_TOOLCHAIN}/bin/x86_64-linux${android_api}-android-clang++ export CC=${ANDROID_TOOLCHAIN}/bin/x86_64-linux-android${android_api}-clang -export run_bjam="${BOOST_ROOT}/b2 -j8 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" +export CORES=$(nproc) +export run_bjam="${BOOST_ROOT}/b2 -j${CORES} --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" export run_objcopy="${ANDROID_TOOLCHAIN}/bin/llvm-objcopy --only-keep-debug bin/release/${os_build}/${os_arch}/${SHARED_LIB} bin/release/${os_build}/${os_arch}/${SHARED_LIB}.debug" export run_strip="${ANDROID_TOOLCHAIN}/bin/llvm-strip --strip-unneeded -x -g bin/release/${os_build}/${os_arch}/${SHARED_LIB}" export run_readelf="${ANDROID_TOOLCHAIN}/bin/llvm-readelf -d bin/release/${os_build}/${os_arch}/${SHARED_LIB}" export run_native_jar="./gradlew nativeAndroidX64Jar" +export run_clean_native_jar="./gradlew cleanNativeAndroidX86Jar" export BOOST_ROOT=/src/boost_${BOOST_UNDERSCORE_VERSION} if [ "${run_swig_only}" = true ]; then diff --git a/swig/build-linux-x86_64.sh b/swig/build-linux-x86_64.sh index e0e67a93..5f1b6023 100755 --- a/swig/build-linux-x86_64.sh +++ b/swig/build-linux-x86_64.sh @@ -14,13 +14,15 @@ export os_build=linux export SHARED_LIB=lib${LIBRARY_NAME}.so export CXX=g++ export CC=gcc-7 +export CORES=$(( $(nproc) / 2 )) export run_openssl_configure="./Configure linux-x86_64 ${OPENSSL_NO_OPTS} -fPIC --prefix=${OPENSSL_ROOT}" export run_readelf="readelf -d bin/release/${os_build}/${os_arch}/${SHARED_LIB}" -export run_bjam="${BOOST_ROOT}/b2 -j2 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=gcc-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" +export run_bjam="${BOOST_ROOT}/b2 -j${CORES} --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=gcc-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" export run_objcopy="objcopy --only-keep-debug bin/release/${os_build}/${os_arch}/${SHARED_LIB} bin/release/${os_build}/${os_arch}/${SHARED_LIB}.debug" export run_strip="strip --strip-unneeded -x bin/release/${os_build}/${os_arch}/${SHARED_LIB}" export run_readelf="readelf -d bin/release/${os_build}/${os_arch}/${SHARED_LIB}" export run_native_jar="./gradlew nativeLinuxJar" +export run_clean_native_jar="./gradlew cleanNativeLinuxJar" press_any_to_continue prepare_libtorrent export BOOST_ROOT=/src/boost_${BOOST_UNDERSCORE_VERSION} diff --git a/swig/build-macos-arm64.sh b/swig/build-macos-arm64.sh index b84d287e..3102ea95 100755 --- a/swig/build-macos-arm64.sh +++ b/swig/build-macos-arm64.sh @@ -23,12 +23,14 @@ export SHARED_LIB=lib${LIBRARY_NAME}.dylib export RELEASE_SHARED_LIB=lib${LIBRARY_NAME}.${os_arch}.dylib export CXX=g++ export CC=gcc +export CORES=$(nproc) export run_openssl_configure="./Configure darwin64-${os_arch}-cc ${OPENSSL_NO_OPTS} --prefix=${OPENSSL_ROOT}" export run_readelf="otool -L bin/release/${os_build}/${os_arch}/${SHARED_LIB}" -export run_bjam="${BOOST_ROOT}/b2 -j16 -d2 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=darwin-${os_arch} target-os=darwin location=bin/release/${os_build}/${os_arch}" +export run_bjam="${BOOST_ROOT}/b2 -j${CORES} -d2 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=darwin-${os_arch} target-os=darwin location=bin/release/${os_build}/${os_arch}" export run_objcopy="echo dummy run_objcopy for ${os_build} ${os_arch}" export run_strip="strip -S -x bin/release/${os_build}/${os_arch}/${SHARED_LIB}" export run_native_jar="./gradlew nativeMacOSArm64Jar" +export run_clean_native_jar="./gradlew cleanNativeMacOSArm64Jar" create_folder_if_it_doesnt_exist ${SRC} prompt_msg "$0:About to prepare BOOST ${BOOST_VERSION}" diff --git a/swig/build-macos-x86_64.sh b/swig/build-macos-x86_64.sh index 0f724532..720fc5d7 100755 --- a/swig/build-macos-x86_64.sh +++ b/swig/build-macos-x86_64.sh @@ -23,12 +23,14 @@ export SHARED_LIB=lib${LIBRARY_NAME}.dylib export RELEASE_SHARED_LIB=lib${LIBRARY_NAME}.${os_arch}.dylib export CXX=g++ export CC=gcc +export CORES=$(( $(nproc) / 2 )) export run_openssl_configure="./Configure darwin64-${os_arch}-cc ${OPENSSL_NO_OPTS} --prefix=${OPENSSL_ROOT}" export run_readelf="otool -L bin/release/${os_build}/${os_arch}/${SHARED_LIB}" -export run_bjam="${BOOST_ROOT}/b2 -j10 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=darwin-${os_arch} target-os=darwin location=bin/release/${os_build}/${os_arch}" +export run_bjam="${BOOST_ROOT}/b2 -j${CORES} --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=darwin-${os_arch} target-os=darwin location=bin/release/${os_build}/${os_arch}" export run_objcopy="echo dummy run_objcopy for ${os_build} ${os_arch}" export run_strip="strip -S -x bin/release/${os_build}/${os_arch}/${SHARED_LIB}" export run_native_jar="./gradlew nativeMacOSX86_64Jar" +export run_clean_native_jar="./gradlew cleanNativeMacOSX86_64Jar" create_folder_if_it_doesnt_exist ${SRC} prompt_msg "$0:About to prepare BOOST ${BOOST_VERSION}" @@ -53,4 +55,4 @@ if [ "${run_build_only}" = true ]; then fi ./run-swig.sh -build_libraries \ No newline at end of file +build_libraries diff --git a/swig/build-utils.shinc b/swig/build-utils.shinc index 32c85976..de23a945 100755 --- a/swig/build-utils.shinc +++ b/swig/build-utils.shinc @@ -216,6 +216,7 @@ build_libraries() { abort_if_var_unset "run_objcopy" ${run_objcopy} abort_if_var_unset "run_strip" ${run_strip} abort_if_var_unset "run_native_jar" ${run_native_jar} + abort_if_var_unset "run_clean_native_jar" ${run_clean_native_jar} set -x cd ${SWIG} export PATH=${PATH}:${BOOST_ROOT}/tools/build/src/engine @@ -254,9 +255,9 @@ build_libraries() { mv swig/bin/release/${os_build}/${os_arch}/${SHARED_LIB} swig/bin/release/${os_build}/${os_arch}/${RELEASE_SHARED_LIB} cp swig/bin/release/${os_build}/${os_arch}/${RELEASE_SHARED_LIB} . fi - ./gradlew clean --stop - ./gradlew clean --refresh-dependencies + ./gradlew jar + $run_clean_native_jar $run_native_jar } diff --git a/swig/build-windows-x86_64.sh b/swig/build-windows-x86_64.sh index 0a4348ea..3856d7cf 100755 --- a/swig/build-windows-x86_64.sh +++ b/swig/build-windows-x86_64.sh @@ -20,11 +20,13 @@ export os_build=windows export SHARED_LIB=lib${LIBRARY_NAME}.dll export CXX=x86_64-w64-mingw32-g++-posix export CC=x86_64-w64-mingw32-gcc-posix -export run_bjam="${BOOST_ROOT}/b2 -j2 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=gcc-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" +export CORES=$(( $(nproc) / 2 )) +export run_bjam="${BOOST_ROOT}/b2 -j${CORES} --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=gcc-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" export run_objcopy="echo dummy run_objcopy for ${os_build} ${os_arch}" export run_strip="x86_64-w64-mingw32-strip --strip-unneeded -x bin/release/${os_build}/${os_arch}/libjlibtorrent.dll"; export run_readelf="eval objdump -p bin/release/${os_build}/${os_arch}/jlibtorrent.dll | grep DLL" export run_native_jar="./gradlew nativeWindowsX86_64Jar" +export run_clean_native_jar="./gradlew cleanNativeWindowsX86_64Jar" if [ "${run_prep}" = true ]; then prepare_libtorrent diff --git a/swig/config/linux-x86_64-config.jam b/swig/config/linux-x86_64-config.jam index d3536d6a..aeaf0642 100644 --- a/swig/config/linux-x86_64-config.jam +++ b/swig/config/linux-x86_64-config.jam @@ -1,6 +1,6 @@ import os ; -using gcc : x86_64 : g++-7 : +using gcc : x86_64 : g++-9 : -std=c++17 -fPIC -fno-strict-aliasing diff --git a/swig/docker_build_binaries.sh b/swig/docker_build_binaries.sh index 02b4bdbf..28e18c48 100755 --- a/swig/docker_build_binaries.sh +++ b/swig/docker_build_binaries.sh @@ -1,12 +1,70 @@ +#!/bin/bash # One Step Build (It will be cached if nothing changed) ./docker_build_image.sh +# Function to get 80% of free memory in GB +get_available_memory() { + local free_mem + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + # Linux + free_mem_kb=$(awk '/MemAvailable/ {print $2}' /proc/meminfo) + free_mem=$(echo "$free_mem_kb / 1024 / 1024" | bc -l) # Convert to GB + elif [[ "$OSTYPE" == "darwin"* ]]; then + # macOS + # Get page size + page_size=$(sysctl -n hw.pagesize) + # Get number of free pages + free_pages=$(vm_stat | awk '/Pages free/ {print $3}' | sed 's/\.//') + # Get number of inactive pages (considered as available) + inactive_pages=$(vm_stat | awk '/Pages inactive/ {print $3}' | sed 's/\.//') + # Calculate free memory in bytes + free_mem_bytes=$(( (free_pages + inactive_pages) * page_size )) + # Convert to GB + free_mem=$(echo "$free_mem_bytes / 1024 / 1024 / 1024" | bc -l) + else + echo "Unsupported OS" + exit 1 + fi + + # Calculate 80% of free memory + mem_limit=$(echo "$free_mem * 0.8" | bc -l) + + # Round down to the nearest whole number to avoid over-allocation + mem_limit_int=$(echo "$mem_limit" | awk '{printf("%d\n",$1)}') + + # Ensure at least 1 GB is allocated + if [[ "$mem_limit_int" -lt 1 ]]; then + mem_limit_int=1 + fi + + echo "${mem_limit_int}gb" +} + +# Function to get the number of CPU cores +get_num_cpus() { + local num_cpus + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + num_cpus=$(nproc) + elif [[ "$OSTYPE" == "darwin"* ]]; then + num_cpus=$(sysctl -n hw.ncpu) + else + echo "Unsupported OS" + exit 1 + fi + echo "$num_cpus" +} + +TOTAL_MEMORY=$(get_available_memory) +NUM_CPUS=$(get_num_cpus) + +echo "Total memory assigned to Docker: $TOTAL_MEMORY" +echo "Number of CPUs assigned to Docker: $NUM_CPUS" + # Mounts this repo's folder as a volume in the container's /frostwire-jlibtorrent create_folder_if_it_doesnt_exist # Then executes the build scripts for android -docker \ - run \ - --cpus=8 \ - --memory=32gb \ - -v "$PWD/../../frostwire-jlibtorrent:/frostwire-jlibtorrent" \ - -it jlibtorrent-android \ - /bin/bash /build.sh #for some reason it won't run the script +docker run \ + --cpus=$NUM_CPUS \ + --memory=$TOTAL_MEMORY \ + -v "$PWD/../../frostwire-jlibtorrent:/frostwire-jlibtorrent" \ + -it jlibtorrent-android \ + /bin/bash -c "/build_desktop.sh && /apply_android_patches.sh && /build_android_all.sh"