diff --git a/jenkins/scripts/compile.sh b/jenkins/scripts/compile.sh new file mode 100755 index 0000000..dd81f9e --- /dev/null +++ b/jenkins/scripts/compile.sh @@ -0,0 +1,59 @@ +#!/bin/bash -e +set -e + +# ====== Setup environment variables +source ./jenkins/scripts/setup_variables.sh + +# ====== Setup workspace +bash ./jenkins/scripts/setup_workspace.sh + +# ====== Build Td +# Prepare build +cd $TD_BUILD_DIR +if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON -DCMAKE_INSTALL_PREFIX:PATH=${TD_BIN_DIR} -DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=OFF -DTD_SKIP_TG_CLI=ON ${TD_SRC_DIR} +elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON -DCMAKE_INSTALL_PREFIX:PATH=${TD_BIN_DIR} -DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=OFF -DTD_SKIP_TG_CLI=ON -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ ${TD_SRC_DIR} +elif [[ "$TRAVIS_OS_NAME" == "windows" ]]; then + cmake -A x64 -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON -DCMAKE_INSTALL_PREFIX:PATH=${TD_BIN_DIR} -DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=OFF -DTD_SKIP_TG_CLI=ON -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake ${TD_SRC_DIR} +fi + +if [ "$TRAVIS_CPU_ARCH" = "arm64" ]; then + while true; do free -h ; sleep 2; done & +fi + + # Split sources +#if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then +# cmake --build $TD_BUILD_DIR --target prepare_cross_compiling -- -j${TRAVIS_CPU_CORES} +# cd $TD_SRC_DIR +# php SplitSource.php +#fi + +# Build +cd $TD_BUILD_DIR +if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + cmake --build $TD_BUILD_DIR --target install --config Release -- -j${TRAVIS_CPU_CORES} +elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + cmake --build $TD_BUILD_DIR --target install --config Release -- -j${TRAVIS_CPU_CORES} +elif [[ "$TRAVIS_OS_NAME" == "windows" ]]; then + cmake --build $TD_BUILD_DIR --target install --config Release -- -m +fi + +# Undo split-sources +#if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then +# cd $TD_SRC_DIR +# php SplitSource.php --undo +#fi + +# ====== Build TdNatives +cd $TDNATIVES_CPP_BUILD_DIR +if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + cmake -DCMAKE_BUILD_TYPE=Release -DTD_BIN_DIR=${TD_BIN_DIR} -DTDNATIVES_BIN_DIR=${TDNATIVES_BIN_DIR} -DTDNATIVES_DOCS_BIN_DIR=${TDNATIVES_DOCS_BIN_DIR} -DTd_DIR=${TD_BIN_DIR}/lib/cmake/Td -DJAVA_SRC_DIR=${JAVA_SRC_DIR} -DTDNATIVES_CPP_SRC_DIR:PATH=$TDNATIVES_CPP_SRC_DIR $TDNATIVES_CPP_SRC_DIR + cmake --build $TDNATIVES_CPP_BUILD_DIR --target install --config Release -- -j${TRAVIS_CPU_CORES} +elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + cmake -DCMAKE_BUILD_TYPE=Release -DTD_BIN_DIR=${TD_BIN_DIR} -DTDNATIVES_BIN_DIR=${TDNATIVES_BIN_DIR} -DTDNATIVES_DOCS_BIN_DIR=${TDNATIVES_DOCS_BIN_DIR} -DTd_DIR=${TD_BIN_DIR}/lib/cmake/Td -DJAVA_SRC_DIR=${JAVA_SRC_DIR} -DTDNATIVES_CPP_SRC_DIR:PATH=$TDNATIVES_CPP_SRC_DIR $TDNATIVES_CPP_SRC_DIR + cmake --build $TDNATIVES_CPP_BUILD_DIR --target install --config Release -- -j${TRAVIS_CPU_CORES} +elif [[ "$TRAVIS_OS_NAME" == "windows" ]]; then + cmake -A x64 -DCMAKE_BUILD_TYPE=Release -DTD_BIN_DIR=${TD_BIN_DIR} -DTDNATIVES_BIN_DIR=${TDNATIVES_BIN_DIR} -DTDNATIVES_DOCS_BIN_DIR=${TDNATIVES_DOCS_BIN_DIR} -DTd_DIR=${TD_BIN_DIR}/lib/cmake/Td -DJAVA_SRC_DIR=${JAVA_SRC_DIR} -DTDNATIVES_CPP_SRC_DIR:PATH=$TDNATIVES_CPP_SRC_DIR -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake $TDNATIVES_CPP_SRC_DIR + cmake --build $TDNATIVES_CPP_BUILD_DIR --target install --config Release -- -m +fi diff --git a/jenkins/scripts/setup_variables.sh b/jenkins/scripts/setup_variables.sh new file mode 100755 index 0000000..ed14f36 --- /dev/null +++ b/jenkins/scripts/setup_variables.sh @@ -0,0 +1,87 @@ +#!/bin/bash -e +set -e + +# ====== Static variables +export TRAVIS_CPU_ARCH="amd64" +export TRAVIS_OS_NAME="linux" + +# ====== Variables +export TD_SRC_DIR=$TRAVIS_BUILD_DIR/dependencies/tdlight +export TD_BIN_DIR=$TRAVIS_BUILD_DIR/bin-td +export TDNATIVES_BIN_DIR=$TRAVIS_BUILD_DIR/bin-tdlib +export TDNATIVES_CPP_SRC_DIR=$TRAVIS_BUILD_DIR/src/tdlib-cpp +export TDNATIVES_DOCS_BIN_DIR=$TRAVIS_BUILD_DIR/bin-docs +export TD_BUILD_DIR=$TRAVIS_BUILD_DIR/build-td +export TDNATIVES_CPP_BUILD_DIR=$TRAVIS_BUILD_DIR/build-tdlib +export JAVA_SRC_DIR=$TRAVIS_BUILD_DIR/src/tdlib-java +export TDLIB_SERIALIZER_DIR=$TRAVIS_BUILD_DIR/dependencies/tdlib-serializer +export MAVEN_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/javax.crypto=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED" +if [ "$TRAVIS_CPU_ARCH" = "arm64" ]; then + export TRAVIS_CPU_ARCH_STANDARD="aarch64" + export TRAVIS_CPU_CORES="2" +else + TRAVIS_CPU_ARCH_STANDARD="$(tr '[:upper:]' '[:lower:]'<<<"${TRAVIS_CPU_ARCH}")" + export TRAVIS_CPU_ARCH_STANDARD; + export TRAVIS_CPU_CORES="2" +fi +TRAVIS_OS_NAME_STANDARD="$(tr '[:upper:]' '[:lower:]'<<<"${TRAVIS_OS_NAME}")" +export TRAVIS_OS_NAME_STANDARD +if [ "$TRAVIS_OS_NAME_STANDARD" = "windows" ]; then + export TRAVIS_OS_NAME_SHORT="win" +else + export TRAVIS_OS_NAME_SHORT=$TRAVIS_OS_NAME_STANDARD +fi +if [ "$TRAVIS_OS_NAME_STANDARD" = "windows" ]; then + export SRC_TDJNI_LIBNAME="tdjni.dll" + export DEST_TDJNI_LIBNAME="tdjni.dll" +elif [ "$TRAVIS_OS_NAME_STANDARD" = "osx" ]; then + export SRC_TDJNI_LIBNAME="libtdjni.dylib" + export DEST_TDJNI_LIBNAME="tdjni.dylib" +else + export SRC_TDJNI_LIBNAME="libtdjni.so" + export DEST_TDJNI_LIBNAME="tdjni.so" +fi + +# ====== OS Variables +if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then + export PATH="$PATH:/c/tools/php74:/c/PHP:/c/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64:/c/Program Files/OpenJDK/openjdk-11.0.8_10/bin:/c/Program Files/CMake/bin:/c/ProgramData/chocolatey/bin:/c/Program Files/apache-maven-3.6.3/bin:/c/ProgramData/chocolatey/lib/maven/apache-maven-3.6.3/bin:/c/ProgramData/chocolatey/lib/base64/tools:/c/Program Files/NASM" + export JAVA_HOME="/c/Program Files/OpenJDK/openjdk-11.0.8_10" + export VCPKG_DIR=$TRAVIS_BUILD_DIR/vcpkg +elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + PATH="$PATH:$(/usr/libexec/java_home -v 14)" + export PATH + JAVA_HOME="$(/usr/libexec/java_home -v 14)" + export JAVA_HOME + JAVA_INCLUDE_PATH="$(/usr/libexec/java_home -v 14)/include" + export JAVA_INCLUDE_PATH +elif [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + TRAVIS_CPU_ARCH_JAVA="$(tr '[:upper:]' '[:lower:]'<<<"${TRAVIS_CPU_ARCH}")" + export TRAVIS_CPU_ARCH_JAVA + export PATH="$PATH:/usr/lib/jvm/java-11-openjdk-$TRAVIS_CPU_ARCH_JAVA/bin" + export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-$TRAVIS_CPU_ARCH_JAVA" + export JAVA_INCLUDE_PATH="/usr/lib/jvm/java-11-openjdk-$TRAVIS_CPU_ARCH_JAVA/include" +fi + +# ====== Print variables +echo "TD_SRC_DIR=${TD_SRC_DIR}" +echo "TD_BIN_DIR=${TD_BIN_DIR}" +echo "TDNATIVES_BIN_DIR=${TDNATIVES_BIN_DIR}" +echo "TDNATIVES_CPP_SRC_DIR=${TDNATIVES_CPP_SRC_DIR}" +echo "TDNATIVES_DOCS_BIN_DIR=${TDNATIVES_DOCS_BIN_DIR}" +echo "TD_BUILD_DIR=${TD_BUILD_DIR}" +echo "TDNATIVES_CPP_BUILD_DIR=${TDNATIVES_CPP_BUILD_DIR}" +echo "JAVA_SRC_DIR=${JAVA_SRC_DIR}" +echo "TDLIB_SERIALIZER_DIR=${TDLIB_SERIALIZER_DIR}" +echo "PATH=${PATH}" +echo "JAVA_HOME=${JAVA_HOME}" +echo "JAVA_INCLUDE_PATH=${JAVA_INCLUDE_PATH}" +echo "VCPKG_DIR=${VCPKG_DIR}" +echo "MAVEN_OPTS=${MAVEN_OPTS}" +echo "TRAVIS_CPU_ARCH=${TRAVIS_CPU_ARCH}" +echo "TRAVIS_CPU_ARCH_JAVA=${TRAVIS_CPU_ARCH_JAVA}" +echo "TRAVIS_CPU_ARCH_STANDARD=${TRAVIS_CPU_ARCH_STANDARD}" +echo "TRAVIS_OS_NAME=${TRAVIS_OS_NAME}" +echo "TRAVIS_OS_NAME_STANDARD=${TRAVIS_OS_NAME_STANDARD}" +echo "TRAVIS_OS_NAME_SHORT=${TRAVIS_OS_NAME_SHORT}" +echo "SRC_TDJNI_LIBNAME=${SRC_TDJNI_LIBNAME}" +echo "DEST_TDJNI_LIBNAME=${DEST_TDJNI_LIBNAME}" diff --git a/jenkins/scripts/setup_workspace.sh b/jenkins/scripts/setup_workspace.sh new file mode 100755 index 0000000..2ea5e84 --- /dev/null +++ b/jenkins/scripts/setup_workspace.sh @@ -0,0 +1,37 @@ +#!/bin/bash -e +set -e + +# ====== Setup environment variables +source ./jenkins/scripts/setup_variables.sh + +# ====== Environment cleanup +[ -f $JAVA_SRC_DIR/it/tdlight/tdlib/TdApi.java ] && rm $JAVA_SRC_DIR/it/tdlight/tdlib/TdApi.java +[ -f $JAVA_SRC_DIR/it/tdlight/tdlib/new_TdApi.java ] && rm $JAVA_SRC_DIR/it/tdlight/tdlib/new_TdApi.java + +# ====== Environment setup +[ -d $TRAVIS_BUILD_DIR/out ] || mkdir -p $TRAVIS_BUILD_DIR/out +[ -d $TD_BUILD_DIR ] || mkdir $TD_BUILD_DIR +[ -d $TDNATIVES_CPP_BUILD_DIR ] || mkdir $TDNATIVES_CPP_BUILD_DIR + +if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + echo "Linux" +elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + echo "OSX" +elif [[ "$TRAVIS_OS_NAME" == "windows" ]]; then + echo "Windows" + choco install ccache + choco install visualstudio2019buildtools --version=16.7.0.0 --package-parameters "--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64" + choco install openjdk11 --version=11.0.8.10 + choco install maven --version=3.6.3 + choco install base64 + choco install gperf + choco install strawberryperl + choco install nasm + choco install php --version=7.4.9 --package-parameters='"/ThreadSafe ""/InstallDir:C:\PHP"""' + + git clone --depth=1 -b windows-amd64-prebuilt-libraries --single-branch https://github.com/tdlight-team/tdlight-java windowsenv + mv windowsenv/vcpkg $VCPKG_DIR +else + echo "Unrecognized os: $TRAVIS_OS_NAME" + exit 1 +fi