From 2449e393c36379b83c6f5a5ea6d7d414922630c8 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sat, 11 Sep 2021 12:27:22 +0200 Subject: [PATCH] Cross compilation --- .github/workflows/platform_natives.yaml | 42 +++- .gitignore | 1 + .../github-workflows/install-dependencies.sh | 25 +-- .../github-workflows/setup-variables.sh | 26 +-- scripts/core/compile_td.sh | 2 + scripts/core/compile_tdjni.sh | 28 +++ scripts/core/configure_td.sh | 4 + scripts/core/deploy_release.sh | 2 + scripts/core/generate_maven_project.sh | 2 + scripts/core/generate_td_tools.sh | 2 + scripts/core/generate_tdapi_java_file.sh | 2 + scripts/core/generate_tdapi_maven_project.sh | 2 + scripts/core/install-dependencies.sh | 187 ++++++++++++++++++ scripts/core/setup-variables.sh | 89 +++++++++ scripts/utils/compile-natives-package.sh | 2 + scripts/utils/compile-tdapi-package.sh | 2 + 16 files changed, 373 insertions(+), 45 deletions(-) create mode 100755 scripts/core/install-dependencies.sh create mode 100755 scripts/core/setup-variables.sh diff --git a/.github/workflows/platform_natives.yaml b/.github/workflows/platform_natives.yaml index 5723771..9412656 100644 --- a/.github/workflows/platform_natives.yaml +++ b/.github/workflows/platform_natives.yaml @@ -12,18 +12,18 @@ jobs: strategy: matrix: include: - - {os: ubuntu-18.04, usedocker: "true", arch: "linux/386", implementation: "tdlight"} - - {os: ubuntu-18.04, usedocker: "true", arch: "linux/386", implementation: "tdlib"} + - {os: ubuntu-18.04, usedocker: "false", arch: "linux/386", implementation: "tdlight"} + - {os: ubuntu-18.04, usedocker: "false", arch: "linux/386", implementation: "tdlib"} - {os: ubuntu-18.04, usedocker: "false", arch: "linux/amd64", implementation: "tdlight"} - {os: ubuntu-18.04, usedocker: "false", arch: "linux/amd64", implementation: "tdlib"} - - {os: ubuntu-18.04, usedocker: "true", arch: "linux/arm/v6", implementation: "tdlight"} - - {os: ubuntu-18.04, usedocker: "true", arch: "linux/arm/v6", implementation: "tdlib"} - - {os: ubuntu-18.04, usedocker: "true", arch: "linux/arm/v7", implementation: "tdlight"} - - {os: ubuntu-18.04, usedocker: "true", arch: "linux/arm/v7", implementation: "tdlib"} - - {os: ubuntu-18.04, usedocker: "true", arch: "linux/arm64", implementation: "tdlight"} - - {os: ubuntu-18.04, usedocker: "true", arch: "linux/arm64", implementation: "tdlib"} - - {os: windows-2019, usedocker: "false", arch: "amd64", implementation: "tdlight"} - - {os: windows-2019, usedocker: "false", arch: "amd64", implementation: "tdlib"} + - {os: ubuntu-18.04, usedocker: "false", arch: "linux/arm/v6", implementation: "tdlight"} + - {os: ubuntu-18.04, usedocker: "false", arch: "linux/arm/v6", implementation: "tdlib"} + - {os: ubuntu-18.04, usedocker: "false", arch: "linux/arm/v7", implementation: "tdlight"} + - {os: ubuntu-18.04, usedocker: "false", arch: "linux/arm/v7", implementation: "tdlib"} + - {os: ubuntu-18.04, usedocker: "false", arch: "linux/arm64", implementation: "tdlight"} + - {os: ubuntu-18.04, usedocker: "false", arch: "linux/arm64", implementation: "tdlib"} + - {os: windows-2019, usedocker: "false", arch: "amd64", implementation: "tdlight", triplet: "x64-windows-static"} + - {os: windows-2019, usedocker: "false", arch: "amd64", implementation: "tdlib", triplet: "x64-windows-static"} - {os: macos-10.15, usedocker: "false", arch: "amd64", implementation: "tdlight"} - {os: macos-10.15, usedocker: "false", arch: "amd64", implementation: "tdlib"} steps: @@ -162,6 +162,28 @@ jobs: echo "OPERATING_SYSTEM_NAME_SHORT=$OPERATING_SYSTEM_NAME_SHORT" >> $GITHUB_ENV echo "SRC_TDJNI_LIBNAME=$SRC_TDJNI_LIBNAME" >> $GITHUB_ENV echo "DEST_TDJNI_LIBNAME=$DEST_TDJNI_LIBNAME" >> $GITHUB_ENV + - name: Install latest CMake + if: matrix.os == 'windows-2019' + uses: lukka/get-cmake@latest + - name: Restore artifacts, or setup vcpkg (do not install any package) + if: matrix.os == 'windows-2019' + uses: lukka/run-vcpkg@v7 + with: + # Just install vcpkg for now, do not install any ports in this step yet. + setupOnly: true + # Location of the vcpkg submodule in the Git repository. + vcpkgDirectory: '${{ env.VCPKG_DIR }}' + # Since the cache must be invalidated when content of the vcpkg.json file changes, let's + # compute its hash and append this to the computed cache's key. + appendedCacheKey: ${{ hashFiles( '**/vcpkg_manifest/vcpkg.json' ) }} + vcpkgTriplet: ${{ matrix.triplet }} + # Ensure the vcpkg artifacts are cached, they are generated in the 'CMAKE_BINARY_DIR/vcpkg_installed' directory. + - name: Install vcpkg deps + if: matrix.os == 'windows-2019' + run: | + $VCPKG_DIR/vcpkg install gperf openssl:x64-windows-static zlib:x64-windows-static + shell: bash + - name: Install dependencies if: matrix.usedocker == 'false' shell: bash diff --git a/.gitignore b/.gitignore index 6db235a..83c728e 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,4 @@ linux-deploy-snapshot.sh linux-generate-tdapi.sh win-build.sh win-deps.sh +/.cache/ diff --git a/scripts/continuous-integration/github-workflows/install-dependencies.sh b/scripts/continuous-integration/github-workflows/install-dependencies.sh index 91bbb2b..9fbe2c8 100755 --- a/scripts/continuous-integration/github-workflows/install-dependencies.sh +++ b/scripts/continuous-integration/github-workflows/install-dependencies.sh @@ -4,9 +4,10 @@ set -e if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then echo "==Linux====" sudo apt-get update - sudo apt-get install -y make git zlib1g-dev libssl-dev gperf cmake \ + sudo apt-get install -y make git gperf cmake \ ccache maven python3 python3-pip php-cli \ - clang libc++-dev libc++abi-dev + build-essential gcc-multilib g++-multilib + mkdir -p "" elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then echo "==OSX======" @@ -40,26 +41,26 @@ elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then #echo "Done .tlo" elif [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then echo "==Windows==" - choco install ccache - choco install make + #choco install ccache + #choco install make #choco install windows-sdk-10.1 - choco install visualstudio2019buildtools --version=16.10.4.0 --allow-downgrade --package-parameters "--passive" - choco install visualstudio2019-workload-vctools + #choco install visualstudio2019buildtools --version=16.10.4.0 --allow-downgrade --package-parameters "--passive" + #choco install visualstudio2019-workload-vctools #choco install openjdk11 --version=11.0.8.10 choco install maven --version=3.8.2 --allow-downgrade choco install base64 - choco install gperf + #choco install gperf choco install strawberryperl choco install nasm #choco install php --version=7.4.9 --package-parameters='"/ThreadSafe ""/InstallDir:C:\PHP"""' #choco install python3 --params "/InstallDir:C:\Python3" [ -d ./windowsenv/ ] && $(yes | rm -rf ./windowsenv/) - [ -d $VCPKG_DIR ] && $(yes | rm -rf $VCPKG_DIR) - git clone --depth=1 https://github.com/tdlight-team/windows-amd64-prebuilt-libraries.git windowsenv - mv windowsenv/vcpkg $VCPKG_DIR - cd $VCPKG_DIR - ./vcpkg integrate install + #[ -d $VCPKG_DIR ] && $(yes | rm -rf $VCPKG_DIR) + #git clone --depth=1 https://github.com/tdlight-team/windows-amd64-prebuilt-libraries.git windowsenv + #mv windowsenv/vcpkg $VCPKG_DIR + #cd $VCPKG_DIR + #./vcpkg integrate install else echo "Unrecognized os: $OPERATING_SYSTEM_NAME" exit 1 diff --git a/scripts/continuous-integration/github-workflows/setup-variables.sh b/scripts/continuous-integration/github-workflows/setup-variables.sh index 4d089d2..89d84fa 100644 --- a/scripts/continuous-integration/github-workflows/setup-variables.sh +++ b/scripts/continuous-integration/github-workflows/setup-variables.sh @@ -5,6 +5,8 @@ export MAVEN_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java. echo "MATRIX_OS: $GH_MATRIX_OS" echo "MATRIX_ARCH: $GH_MATRIX_ARCH" +source ../../core/setup-variables.sh + if [ "$GH_MATRIX_OS" == "macos-10.15" ]; then export PCRE="E" else @@ -20,27 +22,21 @@ fi if [[ "$GH_CPU_ARCH" == "arm64" ]]; then export CPU_ARCHITECTURE_NAME="aarch64" - export CPU_ARCH_JAVA="arm64" export CPU_CORES_NUM="2" elif [[ "$GH_CPU_ARCH" == "armv6" ]]; then export CPU_ARCHITECTURE_NAME="armv6" - export CPU_ARCH_JAVA="armv6" export CPU_CORES_NUM="2" elif [[ "$GH_CPU_ARCH" == "armv7" ]]; then export CPU_ARCHITECTURE_NAME="armv7" - export CPU_ARCH_JAVA="armv7" export CPU_CORES_NUM="2" elif [[ "$GH_CPU_ARCH" == "386" ]]; then export CPU_ARCHITECTURE_NAME="386" - export CPU_ARCH_JAVA="386" export CPU_CORES_NUM="2" elif [[ "$GH_CPU_ARCH" == "amd64" ]]; then export CPU_ARCHITECTURE_NAME="amd64" - export CPU_ARCH_JAVA="amd64" export CPU_CORES_NUM="2" elif [[ "$GH_CPU_ARCH" == "ppc64le" ]]; then export CPU_ARCHITECTURE_NAME="ppc64le" - export CPU_ARCH_JAVA="ppc64le" export CPU_CORES_NUM="2" else echo "Unrecognized cpu arch: $GH_CPU_ARCH" @@ -63,7 +59,7 @@ fi echo "====== Setup variables ======" echo "Current root directory:" -echo "$(realpath .)" +realpath . echo "=============================" # ====== OS Variables @@ -80,21 +76,6 @@ elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then export CPU_CORES=" -- -j${CPU_CORES_NUM}" elif [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then export BUILD_TYPE=MinSizeRel - if [[ "$CPU_ARCHITECTURE_NAME" == "aarch64" ]]; then - export CMAKE_EXTRA_ARGUMENTS="" - else - export CMAKE_EXTRA_ARGUMENTS="-DOPENSSL_USE_STATIC_LIBS=ON -DCMAKE_FIND_LIBRARY_SUFFIXES=\".a\"" - fi - - if [[ "$CPU_ARCHITECTURE_NAME" == "386" ]] || [[ "$CPU_ARCHITECTURE_NAME" == "armv6" ]] || [[ "$CPU_ARCHITECTURE_NAME" == "armv7" ]]; then - export CMAKE_EXE_LINKER_FLAGS="$CMAKE_EXE_LINKER_FLAGS -latomic" - export LDFLAGS="$LDFLAGS -latomic" - export CXXFLAGS="$CXXFLAGS -latomic" - fi - - export CXXFLAGS="$CXXFLAGS -static-libgcc -static-libstdc++" - export CC="/usr/bin/clang" - export CXX="/usr/bin/clang++" export CPU_CORES=" -- -j${CPU_CORES_NUM}" fi @@ -118,7 +99,6 @@ echo "CMAKE_EXTRA_ARGUMENTS=${CMAKE_EXTRA_ARGUMENTS}" echo "VCPKG_DIR=${VCPKG_DIR}" echo "MAVEN_OPTS=${MAVEN_OPTS}" echo "GH_CPU_ARCH=${GH_CPU_ARCH}" -echo "CPU_ARCH_JAVA=${CPU_ARCH_JAVA}" echo "CPU_ARCHITECTURE_NAME=${CPU_ARCHITECTURE_NAME}" echo "CPU_CORES_NUM=${CPU_CORES_NUM}" echo "CPU_CORES=${CPU_CORES}" diff --git a/scripts/core/compile_td.sh b/scripts/core/compile_td.sh index 7251951..10a65fd 100755 --- a/scripts/core/compile_td.sh +++ b/scripts/core/compile_td.sh @@ -30,6 +30,8 @@ if [ -z "${CPU_CORES}" ]; then exit 1 fi +source ./setup-variables.sh + cd ../../ # Print details diff --git a/scripts/core/compile_tdjni.sh b/scripts/core/compile_tdjni.sh index 5bee78d..ae722c7 100755 --- a/scripts/core/compile_tdjni.sh +++ b/scripts/core/compile_tdjni.sh @@ -35,6 +35,8 @@ if [ -z "${CPU_CORES}" ]; then exit 1 fi +source ./setup-variables.sh + cd ../../ JAVA_API_PACKAGE_PATH="it/tdlight/jni" JAVA_LIB_PACKAGE_PATH="it/tdlight/tdnative" @@ -83,6 +85,31 @@ else export TD_GENERATED_BINARIES_DIR=$(realpath -m ./generated/td_tools/td/generate) fi +# Create toolchain +echo "Creating toolchain file..." +{ + echo "set(CMAKE_SYSTEM_PROCESSOR ${CPU_ARCH_CMAKE})"; + echo "set(CMAKE_C_COMPILER ${CPU_ARCH_CMAKE}-linux-gnu-gcc)"; + echo "set(CMAKE_C_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_CXX_COMPILER ${CPU_ARCH_CMAKE}-linux-gnu-g++)"; + echo "set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_ASM_COMPILER ${CPU_ARCH_CMAKE}-linux-gnu-g++)"; + echo "set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_LIBRARY_PATH /usr/${CPU_ARCH_CMAKE}-linux-gnu/include)"; + cat < ./generated/tdjni_build/toolchain.cmake + # Configure cmake echo "Configuring CMake..." cd ./generated/tdjni_build/ @@ -96,6 +123,7 @@ cmake \ -DJAVA_SRC_DIR=$(realpath -m ../src/main/jni-java-src/) \ -DTDNATIVES_CPP_SRC_DIR:PATH=$(realpath -m ../src/main/jni-cpp-src/) \ -DOPENSSL_USE_STATIC_LIBS=True \ + "-DCMAKE_TOOLCHAIN_FILE=$CROSS_BUILD_DEPS_DIR/toolchain.cmake" \ ${CMAKE_EXTRA_ARGUMENTS} \ $(realpath -m ../src/main/jni-cpp-src/) diff --git a/scripts/core/configure_td.sh b/scripts/core/configure_td.sh index 938e7ef..9a640eb 100755 --- a/scripts/core/configure_td.sh +++ b/scripts/core/configure_td.sh @@ -30,6 +30,8 @@ if [ -z "${CPU_CORES}" ]; then exit 1 fi +source ./setup-variables.sh + cd ../../ # Print details @@ -63,10 +65,12 @@ INSTALL_PREFIX="$(realpath -m ../td_bin/)" INSTALL_BINDIR="$(realpath -m ../td_bin/bin)" echo "Install prefix: $INSTALL_PREFIX" echo "Install bindir: $INSTALL_BINDIR" +# shellcheck disable=SC2086 cmake "-DCMAKE_BUILD_TYPE=${BUILD_TYPE}" \ -DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \ -DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \ -DTD_ENABLE_JNI=ON \ + "-DCMAKE_TOOLCHAIN_FILE=$CROSS_BUILD_DEPS_DIR/toolchain.cmake" \ ${CMAKE_EXTRA_ARGUMENTS_TD} \ ${CMAKE_EXTRA_ARGUMENTS} \ ../implementation diff --git a/scripts/core/deploy_release.sh b/scripts/core/deploy_release.sh index fd14e4b..c289e48 100755 --- a/scripts/core/deploy_release.sh +++ b/scripts/core/deploy_release.sh @@ -8,6 +8,8 @@ if [ -z "${REVISION}" ]; then exit 1 fi +source ./setup-variables.sh + cd ../../generated mvn -B -q -Drevision=${REVISION} clean deploy diff --git a/scripts/core/generate_maven_project.sh b/scripts/core/generate_maven_project.sh index cc6e4c9..b22ca24 100755 --- a/scripts/core/generate_maven_project.sh +++ b/scripts/core/generate_maven_project.sh @@ -18,6 +18,8 @@ if [ -z "${IMPLEMENTATION_NAME}" ]; then exit 1 fi +source ./setup-variables.sh + cd ../../ # Print details diff --git a/scripts/core/generate_td_tools.sh b/scripts/core/generate_td_tools.sh index 8b2ab11..4eb0626 100755 --- a/scripts/core/generate_td_tools.sh +++ b/scripts/core/generate_td_tools.sh @@ -25,6 +25,8 @@ if [ -z "${CPU_CORES}" ]; then exit 1 fi +source ./setup-variables.sh + cd ../../ # Print details diff --git a/scripts/core/generate_tdapi_java_file.sh b/scripts/core/generate_tdapi_java_file.sh index 339393c..afd030e 100755 --- a/scripts/core/generate_tdapi_java_file.sh +++ b/scripts/core/generate_tdapi_java_file.sh @@ -25,6 +25,8 @@ if [ -z "${CPU_CORES}" ]; then exit 1 fi +source ./setup-variables.sh + cd ../../ JAVA_API_PACKAGE_PATH="it/tdlight/jni" JAVA_LIB_PACKAGE_PATH="it/tdlight/tdnative" diff --git a/scripts/core/generate_tdapi_maven_project.sh b/scripts/core/generate_tdapi_maven_project.sh index 647e340..ce630fe 100755 --- a/scripts/core/generate_tdapi_maven_project.sh +++ b/scripts/core/generate_tdapi_maven_project.sh @@ -18,6 +18,8 @@ if [ -z "${IMPLEMENTATION_NAME}" ]; then exit 1 fi +source ./setup-variables.sh + cd ../../ # Print details diff --git a/scripts/core/install-dependencies.sh b/scripts/core/install-dependencies.sh new file mode 100755 index 0000000..7a56277 --- /dev/null +++ b/scripts/core/install-dependencies.sh @@ -0,0 +1,187 @@ +#!/bin/bash -e +# MAIN REQUIRED ENVIRONMENT VARIABLES: +# OPERATING_SYSTEM_NAME = +# CPU_ARCHITECTURE_NAME = +# IMPLEMENTATION_NAME = +# BUILD_TYPE = +# CPU_CORES = "-- -j" or "-m" on Windows +# OTHER REQUIRED ENVIRONMENT VARIABLES: +# CMAKE_EXTRA_ARGUMENTS = + +# Check variables correctness +if [ -z "${OPERATING_SYSTEM_NAME}" ]; then + echo "Missing parameter: OPERATING_SYSTEM_NAME" + exit 1 +fi +if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then + echo "Missing parameter: CPU_ARCHITECTURE_NAME" + exit 1 +fi +if [ -z "${IMPLEMENTATION_NAME}" ]; then + echo "Missing parameter: IMPLEMENTATION_NAME" + exit 1 +fi +if [ -z "${BUILD_TYPE}" ]; then + echo "Missing parameter: BUILD_TYPE" + exit 1 +fi +if [ -z "${CPU_CORES}" ]; then + echo "Missing parameter: CPU_CORES" + exit 1 +fi + +source ./setup-variables.sh + +cd ../../ +ROOT_DIR="$(pwd)" + +# Print details +echo "Installing dependencies..." +echo "Current directory: $ROOT_DIR" +echo "Operating system: ${OPERATING_SYSTEM_NAME}" +echo "Architecture: ${CPU_ARCHITECTURE_NAME}" +echo "Td implementation: ${IMPLEMENTATION_NAME}" +echo "Build type: ${BUILD_TYPE}" +echo "CPU cores count: ${CPU_CORES}" +echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'" + +CROSS_OPENJDK_PATH="" +fix_jdk_path() { + # Setup OpenJDK path + CROSS_OPENJDK_PATH="$(find "$CROSS_BUILD_DEPS_DIR/usr/lib/jvm/" -maxdepth 1 -type d -iname "java*jdk*" | head -n 1)" +} + +check_jdk_existance() { + if [[ ! -d "$CROSS_OPENJDK_PATH" ]]; then + echo "Can't find cross OpenJDK at location $CROSS_OPENJDK_PATH" + exit 1 + fi +} + +if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then + fix_jdk_path + if [[ ! -f "$CROSS_BUILD_DEPS_DIR/ok-012" ]]; then + rm -rf "$CROSS_BUILD_DEPS_DIR" || true + mkdir -p "$CROSS_BUILD_DEPS_DIR" + sudo dpkg --add-architecture "${CPU_ARCH_DPKG}" + sudo apt-get update || true + sudo apt-get install -y "libstdc++-11-dev-${CPU_ARCH_DPKG}-cross" \ + "crossbuild-essential-${CPU_ARCH_DPKG}" "libstdc++-11-pic-${CPU_ARCH_DPKG}-cross" + cd "$CROSS_BUILD_DEPS_DIR" + # LibZ-Dev + apt-get download "zlib1g-dev:${CPU_ARCH_DPKG}" + ZLIB1G_DEV_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "zlib1g-dev*.deb" | head -n 1)" + dpkg -x "$ZLIB1G_DEV_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$ZLIB1G_DEV_DEB" + # LibZ + apt-get download "zlib1g:${CPU_ARCH_DPKG}" + ZLIB1G_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "zlib1g*.deb" | head -n 1)" + dpkg -x "$ZLIB1G_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$ZLIB1G_DEB" + # LibSSL-Dev + apt-get download "libssl-dev:${CPU_ARCH_DPKG}" + LIBSSL_DEV_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "libssl-dev*.deb" | head -n 1)" + dpkg -x "$LIBSSL_DEV_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$LIBSSL_DEV_DEB" + # LibSSL + apt-get download "libssl1.1:${CPU_ARCH_DPKG}" + LIBSSL_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "libssl1.1*.deb" | head -n 1)" + dpkg -x "$LIBSSL_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$LIBSSL_DEB" + # Java Common + apt-get download "java-common" + JC_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "java-common*.deb" | head -n 1)" + dpkg -x "$JC_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$JC_DEB" + # OpenJDK-JRE-Headless + apt-get download "openjdk-11-jre-headless:${CPU_ARCH_DPKG}" + OJDKRH_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "openjdk-11-jre-headless*.deb" | head -n 1)" + dpkg -x "$OJDKRH_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$OJDKRH_DEB" + # OpenJDK-JRE + apt-get download "openjdk-11-jre:${CPU_ARCH_DPKG}" + OJDKR_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "openjdk-11-jre*.deb" | head -n 1)" + dpkg -x "$OJDKR_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$OJDKR_DEB" + # OpenJDK-JDK + apt-get download "openjdk-11-jdk-headless:${CPU_ARCH_DPKG}" + OJDKJ_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "openjdk-11-jdk-headless*.deb" | head -n 1)" + dpkg -x "$OJDKJ_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$OJDKJ_DEB" + # OpenJDK-GUI + apt-get download "openjdk-11-jdk:${CPU_ARCH_DPKG}" + OJDKG_DEB="$(find "$CROSS_BUILD_DEPS_DIR" -maxdepth 1 -type f -iname "openjdk-11-jdk*.deb" | head -n 1)" + dpkg -x "$OJDKG_DEB" "$CROSS_BUILD_DEPS_DIR" + rm "$OJDKG_DEB" + + # Fix symlinks + find "$CROSS_BUILD_DEPS_DIR" -lname "/*" \ + -exec sh -c "ln -sf \"\`echo \"$CROSS_BUILD_DEPS_DIR\$(readlink \$0)\"\`\" \"\$0\"" {} \; + + # Check if openjdk is found + fix_jdk_path + check_jdk_existance + + touch "$CROSS_BUILD_DEPS_DIR/ok-012" + fi + + check_jdk_existance + + # Create toolchain + echo "Creating toolchain file..." + cd "$ROOT_DIR" + { + echo "set(CMAKE_SYSTEM_PROCESSOR ${CPU_ARCH_CMAKE})"; + echo "set(CMAKE_C_COMPILER ${CPU_ARCH_CMAKE}-linux-gnu-gcc)"; + echo "set(CMAKE_C_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_CXX_COMPILER ${CPU_ARCH_CMAKE}-linux-gnu-g++)"; + echo "set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_ASM_COMPILER ${CPU_ARCH_CMAKE}-linux-gnu-g++)"; + echo "set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_LIBRARY_PATH \"$CROSS_BUILD_DEPS_DIR/\")"; + #echo "include_directories(\"${CROSS_BUILD_DEPS_DIR}\")"; + #echo "include_directories(\"${CROSS_BUILD_DEPS_DIR}/usr/include/\")"; + echo "include_directories(\"${CROSS_BUILD_DEPS_DIR}/usr/include/${CPU_ARCH_CMAKE}-linux-gnu/\")"; + echo "include_directories(\"${CROSS_OPENJDK_PATH}/include\")"; + echo "include_directories(\"${CROSS_OPENJDK_PATH}/include/linux\")"; + #echo "set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES \"$CROSS_BUILD_DEPS_DIR/usr/include/\" \"${CROSS_BUILD_DEPS_DIR}/usr/include/${CPU_ARCH_CMAKE}-linux-gnu/\")"; + + echo "SET(CMAKE_FIND_ROOT_PATH \"$CROSS_BUILD_DEPS_DIR\" \"$JAVA_HOME\")"; + #echo "SET(JAVA_HOME \"$CROSS_OPENJDK_PATH\")"; + echo "SET(JAVA_INCLUDE_PATH \"$CROSS_OPENJDK_PATH/include\")"; + echo "SET(JAVA_INCLUDE_PATH2 \"$CROSS_OPENJDK_PATH/include/linux\")"; + echo "SET(JAVA_JVM_LIBRARY \"$CROSS_OPENJDK_PATH/lib/server/libjvm.so\")"; + echo "SET(JAVA_AWT_LIBRARY \"$CROSS_OPENJDK_PATH/lib/libawt.so\")"; + echo "SET(JNI_INCLUDE_DIRS \"$CROSS_OPENJDK_PATH/include\" \"$CROSS_OPENJDK_PATH/include/linux\")"; + echo "SET(JNI_LIBRARIES \"$CROSS_OPENJDK_PATH/lib/server/libjvm.so\" \"$CROSS_OPENJDK_PATH/lib/libawt.so\")"; + echo "SET(JNI_FOUND True)"; + echo "MESSAGE(STATUS \"JNI INCLUDE DIRS: \${JNI_INCLUDE_DIRS}\")"; + echo "MESSAGE(STATUS \"JNI LIBS: \${JNI_LIBRARIES}\")"; + #echo "SET(JAVA_AWT_LIBRARY \"$CROSS_OPENJDK_PATH\")"; + #echo "SET(JAVA_JVM_LIBRARY \"$CROSS_OPENJDK_PATH\")"; + #echo "SET(JAVA_AWT_INCLUDE_PATH \"$CROSS_OPENJDK_PATH\")"; + cat < "$CROSS_BUILD_DEPS_DIR/toolchain.cmake" + +fi; + +echo "Done." +exit 0 diff --git a/scripts/core/setup-variables.sh b/scripts/core/setup-variables.sh new file mode 100755 index 0000000..4b40856 --- /dev/null +++ b/scripts/core/setup-variables.sh @@ -0,0 +1,89 @@ +#!/bin/bash -e + +echo "====== Setup variables ======" +echo "Current root directory:" +realpath . +echo "=============================" + +# ====== CPU Architecture Variables +if [[ "$CPU_ARCHITECTURE_NAME" == "aarch64" ]]; then + export CPU_ARCH_JAVA="arm64" + export CPU_ARCH_DPKG="arm64" + export CPU_ARCH_CMAKE="aarch64" + export CLANG_TRIPLE="aarch64-linux-gnu" + export CPU_CORES_NUM="2" +elif [[ "$CPU_ARCHITECTURE_NAME" == "armv6" ]]; then + export CPU_ARCH_JAVA="armv6" + export CPU_ARCH_DPKG="armhf" + export CPU_ARCH_CMAKE="arm" + export CLANG_TRIPLE="arm-linux-gnu" + export CPU_CORES_NUM="2" +elif [[ "$CPU_ARCHITECTURE_NAME" == "armv7" ]]; then + export CPU_ARCH_JAVA="armv7" + export CPU_ARCH_DPKG="armhf" + export CPU_ARCH_CMAKE="arm" + export CLANG_TRIPLE="arm-linux-gnueabihf" + export CPU_CORES_NUM="2" +elif [[ "$CPU_ARCHITECTURE_NAME" == "386" ]]; then + export CPU_ARCH_JAVA="386" + export CPU_ARCH_DPKG="i386" + export CPU_ARCH_CMAKE="i386" + export CLANG_TRIPLE="i386-linux-gnu" + export CPU_CORES_NUM="2" +elif [[ "$CPU_ARCHITECTURE_NAME" == "amd64" ]]; then + export CPU_ARCH_JAVA="amd64" + export CPU_ARCH_DPKG="amd64" + export CPU_ARCH_CMAKE="x86_64" + export CLANG_TRIPLE="x86_64-linux-gnu" + export CPU_CORES_NUM="2" +elif [[ "$CPU_ARCHITECTURE_NAME" == "ppc64le" ]]; then + export CPU_ARCH_JAVA="ppc64le" + export CPU_ARCH_DPKG="ppc64el" + export CPU_ARCH_CMAKE="ppc64el" + export CLANG_TRIPLE="powerpc64-linux-gnu" + export CPU_CORES_NUM="2" +else + echo "Unrecognized cpu arch: $CPU_ARCHITECTURE_NAME" + exit 1 +fi + +unset CROSS_BUILD_DEPS_DIR +export CROSS_BUILD_DEPS_DIR +if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then + if [[ "$CPU_ARCHITECTURE_NAME" == "aarch64" ]]; then + export CMAKE_EXTRA_ARGUMENTS="$CMAKE_EXTRA_ARGUMENTS" + else + export CMAKE_EXTRA_ARGUMENTS="$CMAKE_EXTRA_ARGUMENTS -DOPENSSL_USE_STATIC_LIBS=ON -DCMAKE_FIND_LIBRARY_SUFFIXES=\".a\"" + fi + + if [[ "$CPU_ARCHITECTURE_NAME" == "386" ]] || [[ "$CPU_ARCHITECTURE_NAME" == "armv6" ]] || [[ "$CPU_ARCHITECTURE_NAME" == "armv7" ]]; then + export CMAKE_EXE_LINKER_FLAGS="$CMAKE_EXE_LINKER_FLAGS -latomic" + export LDFLAGS="$LDFLAGS -latomic" + export CXXFLAGS="$CXXFLAGS -latomic" + fi + + export CXXFLAGS="$CXXFLAGS -static-libgcc -static-libstdc++" + export CC="gcc" + export CXX="g++" + + export CROSS_CXXFLAGS="$CXXFLAGS -static-libgcc -static-libstdc++" + export CROSS_CC="${CPU_ARCH_CMAKE}-linux-gnu-gcc" + export CROSS_CXX="${CPU_ARCH_CMAKE}-linux-gnu-g++" + + CROSS_BUILD_DEPS_DIR="$(realpath ../../)/.cache/tdlib-build-cross-${CPU_ARCH_DPKG}/" +fi + +# ====== Print variables +echo "========= Variables =========" +echo "Variables" +echo "CPU_ARCH_JAVA=${CPU_ARCH_JAVA}" +echo "CPU_ARCH_DPKG=${CPU_ARCH_DPKG}" +echo "CPU_ARCH_CMAKE=${CPU_ARCH_CMAKE}" +echo "CLANG_TRIPLE=${CLANG_TRIPLE}" +echo "CC=${CC}" +echo "CXX=${CXX}" +echo "CXXFLAGS=${CXXFLAGS}" +echo "CMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}" +echo "CMAKE_EXTRA_ARGUMENTS=${CMAKE_EXTRA_ARGUMENTS}" +echo "CROSS_BUILD_DEPS_DIR=${CROSS_BUILD_DEPS_DIR}" +echo "=============================" \ No newline at end of file diff --git a/scripts/utils/compile-natives-package.sh b/scripts/utils/compile-natives-package.sh index 9191c6f..35dc28a 100755 --- a/scripts/utils/compile-natives-package.sh +++ b/scripts/utils/compile-natives-package.sh @@ -13,6 +13,8 @@ cd ../core +source ./setup-variables.sh +./install-dependencies.sh ./generate_maven_project.sh ./generate_td_tools.sh ./configure_td.sh diff --git a/scripts/utils/compile-tdapi-package.sh b/scripts/utils/compile-tdapi-package.sh index d76ea83..78bf85b 100755 --- a/scripts/utils/compile-tdapi-package.sh +++ b/scripts/utils/compile-tdapi-package.sh @@ -13,6 +13,8 @@ cd ../core +source ./setup-variables.sh +./install-dependencies.sh ./generate_tdapi_maven_project.sh ./generate_td_tools.sh ./configure_td.sh