diff --git a/.github/workflows/platform_natives.yaml b/.github/workflows/platform_natives.yaml index 57c8260..047244e 100644 --- a/.github/workflows/platform_natives.yaml +++ b/.github/workflows/platform_natives.yaml @@ -24,8 +24,8 @@ jobs: - {os: ubuntu-18.04, usedocker: "false", arch: "linux/s390x", implementation: "tdlib"} - {os: ubuntu-18.04, usedocker: "false", arch: "linux/ppc64le", implementation: "tdlight"} - {os: ubuntu-18.04, usedocker: "false", arch: "linux/ppc64le", 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: windows-2019, usedocker: "false", arch: "amd64", implementation: "tdlight", vcpkgCommitId: "30124253eecff36bc90f73341edbfb4f845e2a1e", triplet: "x64-windows-static"} + - {os: windows-2019, usedocker: "false", arch: "amd64", implementation: "tdlib", vcpkgCommitId: "30124253eecff36bc90f73341edbfb4f845e2a1e", 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: @@ -149,7 +149,9 @@ jobs: echo "TDNATIVES_CPP_BUILD_DIR=$TDNATIVES_CPP_BUILD_DIR" >> $GITHUB_ENV echo "JAVA_SRC_DIR=$JAVA_SRC_DIR" >> $GITHUB_ENV echo "TDLIB_SERIALIZER_DIR=$TDLIB_SERIALIZER_DIR" >> $GITHUB_ENV - echo "PATH=$PATH" >> $GITHUB_ENV + if [[ ! -z "$PATH" && "$OPERATING_SYSTEM_NAME" != "windows" ]]; then + echo "PATH=$PATH" >> $GITHUB_ENV + fi echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV echo "JAVA_INCLUDE_PATH=$JAVA_INCLUDE_PATH" >> $GITHUB_ENV echo "CMAKE_EXTRA_ARGUMENTS=$CMAKE_EXTRA_ARGUMENTS" >> $GITHUB_ENV @@ -172,6 +174,28 @@ jobs: echo "REVISION: $REVISION" source ./scripts/continuous-integration/github-workflows/install-dependencies.sh + - name: Setup PHP with Readline extension + uses: shivammathur/setup-php@v2 + with: + php-version: '8.0' + extensions: readline + - name: Install MSVC + if: matrix.os == 'windows-2019' + uses: ilammy/msvc-dev-cmd@v1 + with: + vs-version: '[16.4,16.5)' + - name: Setup cmake + if: matrix.os == 'windows-2019' + uses: jwlawson/actions-setup-cmake@v1.9 + with: + cmake-version: '3.16.x' + - name: Set up Maven + uses: stCarolas/setup-maven@v4.2 + with: + maven-version: 3.8.2 + - name: Setup NASM + if: matrix.os == 'windows-2019' + uses: ilammy/setup-nasm@v1 - name: Restore artifacts, or setup vcpkg (do not install any package) if: matrix.os == 'windows-2019' uses: lukka/run-vcpkg@v7 @@ -179,12 +203,14 @@ jobs: # 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 }}' + vcpkgDirectory: '${{ github.workspace }}/vcpkg' + vcpkgGitCommitId: '${{ matrix.vcpkgCommitId}}' # 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. + additionalCachedPaths: ${{ github.workspace }}/vcpkg - name: Install vcpkg deps if: matrix.os == 'windows-2019' run: | diff --git a/.github/workflows/tdapi_file.yaml b/.github/workflows/tdapi_file.yaml index 0082895..6848ba9 100644 --- a/.github/workflows/tdapi_file.yaml +++ b/.github/workflows/tdapi_file.yaml @@ -82,7 +82,9 @@ jobs: echo "TDNATIVES_CPP_BUILD_DIR=$TDNATIVES_CPP_BUILD_DIR" >> $GITHUB_ENV echo "JAVA_SRC_DIR=$JAVA_SRC_DIR" >> $GITHUB_ENV echo "TDLIB_SERIALIZER_DIR=$TDLIB_SERIALIZER_DIR" >> $GITHUB_ENV - echo "PATH=$PATH" >> $GITHUB_ENV + if [[ ! -z "$PATH" ]]; then + echo "PATH=$PATH" >> $GITHUB_ENV + fi echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV echo "JAVA_INCLUDE_PATH=$JAVA_INCLUDE_PATH" >> $GITHUB_ENV echo "CMAKE_EXTRA_ARGUMENTS=$CMAKE_EXTRA_ARGUMENTS" >> $GITHUB_ENV diff --git a/.gitignore b/.gitignore index 83c728e..c659f5e 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,5 @@ linux-generate-tdapi.sh win-build.sh win-deps.sh /.cache/ + +.idea/ diff --git a/scripts/continuous-integration/github-workflows/install-dependencies.sh b/scripts/continuous-integration/github-workflows/install-dependencies.sh index fa2311d..74cd517 100755 --- a/scripts/continuous-integration/github-workflows/install-dependencies.sh +++ b/scripts/continuous-integration/github-workflows/install-dependencies.sh @@ -4,62 +4,22 @@ set -e if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then echo "==Linux====" sudo apt-get update - sudo apt-get install -y make git gperf cmake \ - ccache maven python3 python3-pip php-cli \ + sudo apt-get install -y make gperf \ + ccache python3 python3-pip php-cli \ build-essential gcc-multilib g++-multilib elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then echo "==OSX======" export PYTHON=36 brew install swig; - #curl -LO https://raw.githubusercontent.com/GiovanniBussi/macports-ci/master/macports-ci; - #source ./macports-ci install; - #yes | sudo port install python$PYTHON; - #yes | sudo port install py$PYTHON-pip; - #sudo port select --set python3 python$PYTHON; - #sudo port select --set pip pip$PYTHON; - #pip install pyinstaller --user; - #export PATH=$PATH:$(python3 -c "import site; print(site.USER_BASE)")/bin; brew install gperf openssl coreutils - - ## Precompile .tlo files because of a bug in travis/macOs - #cd ./implementations/tdlight/td/generate/tl-parser/ - #echo "Configuring tl-parser" - #./configure - #echo "Compiling tl-parser" - #make - #cd .. - #echo "Running tl-parser on mtproto_api" - #./tl-parser/bin/tl-parser -v -e scheme/mtproto_api.tlo scheme/mtproto_api.tl - #echo "Running tl-parser on secret_api" - #./tl-parser/bin/tl-parser -v -e scheme/secret_api.tlo scheme/secret_api.tl - #echo "Running tl-parser on telegram_api" - #./tl-parser/bin/tl-parser -v -e scheme/telegram_api.tlo scheme/telegram_api.tl - #echo "Running tl-parser on td_api" - #./tl-parser/bin/tl-parser -v -e scheme/td_api.tlo scheme/td_api.tl - #echo "Done .tlo" elif [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then echo "==Windows==" - 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 openjdk11 --version=11.0.8.10 - choco install maven --version=3.8.2 --allow-downgrade + #choco install visualstudio2019buildtools --version=16.10.4.0 --allow-downgrade --package-parameters "--passive" + #choco install visualstudio2019-workload-vctools 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"""' - #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 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 1120343..133edfd 100644 --- a/scripts/continuous-integration/github-workflows/setup-variables.sh +++ b/scripts/continuous-integration/github-workflows/setup-variables.sh @@ -71,7 +71,7 @@ if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then VCPKG_DIR="$(realpath .)/vcpkg" export VCPKG_DIR export CMAKE_EXTRA_ARGUMENTS="-A x64 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DOPENSSL_USE_STATIC_LIBS=ON" - export PATH="/c/Python3:$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 PATH="$PATH:/c/Python3:$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 CPU_CORES=" -- -m" elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then export BUILD_TYPE=MinSizeRel diff --git a/scripts/core/install-dependencies.sh b/scripts/core/install-dependencies.sh index 27d63ad..ba59dc6 100755 --- a/scripts/core/install-dependencies.sh +++ b/scripts/core/install-dependencies.sh @@ -76,6 +76,7 @@ deb [arch=arm64,armhf,ppc64el,s390x] http://ports.ubuntu.com/ubuntu-ports/ bioni " | sudo tee /etc/apt/sources.list sudo dpkg --add-architecture "${CPU_ARCH_DPKG}" sudo apt-get update || true + sudo apt-get install -y openjdk-8-jdk sudo apt-get install -y "libstdc++-8-dev-${CPU_ARCH_DPKG}-cross" "libstdc++-8-pic-${CPU_ARCH_DPKG}-cross" if [[ "${CPU_ARCHITECTURE_NAME}" != "amd64" && "${CPU_ARCHITECTURE_NAME}" != "386" ]]; then sudo apt-get install -y "crossbuild-essential-${CPU_ARCH_DPKG}" @@ -145,34 +146,45 @@ deb [arch=arm64,armhf,ppc64el,s390x] http://ports.ubuntu.com/ubuntu-ports/ bioni cd "$ROOT_DIR" { echo "set(CMAKE_SYSTEM_PROCESSOR ${CPU_ARCH_CMAKE})"; - echo "set(CMAKE_C_COMPILER ${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-gcc)"; - echo "set(CMAKE_C_COMPILER_TARGET ${CLANG_TRIPLE})"; - echo "set(CMAKE_CXX_COMPILER ${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-g++)"; - echo "set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TRIPLE})"; - echo "set(CMAKE_ASM_COMPILER ${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-g++)"; - echo "set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TRIPLE})"; + if [[ "$CPU_ARCHITECTURE_NAME" == "386" ]] || [[ "$CPU_ARCHITECTURE_NAME" == "amd64" ]]; then + echo "set(CMAKE_C_COMPILER gcc)"; + echo "set(CMAKE_C_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_CXX_COMPILER g++)"; + echo "set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TRIPLE})"; + else + echo "set(CMAKE_C_COMPILER ${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-gcc)"; + echo "set(CMAKE_C_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_CXX_COMPILER ${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-g++)"; + echo "set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TRIPLE})"; + echo "set(CMAKE_ASM_COMPILER ${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-g++)"; + echo "set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TRIPLE})"; + fi 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-${CPU_COMPILATION_TOOL}/\")"; + echo "SET(CMAKE_FIND_ROOT_PATH \"$CROSS_BUILD_DEPS_DIR\" \"$JAVA_HOME\" \"/\" \"/usr/lib/jvm/java-8-openjdk-amd64/include\")"; 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-${CPU_COMPILATION_TOOL}/\")"; - echo "SET(CMAKE_FIND_ROOT_PATH \"$CROSS_BUILD_DEPS_DIR\" \"$JAVA_HOME\")"; + echo "SET(JAVA_HOME \"/usr/lib/jvm/java-8-openjdk-amd64/\")"; + echo "SET(JAVA_INCLUDE_PATH \"/usr/lib/jvm/java-8-openjdk-amd64/include\")"; + echo "SET(JAVA_AWT_INCLUDE_PATH \"/usr/lib/jvm/java-8-openjdk-amd64/include\")"; + echo "SET(JAVA_INCLUDE_PATH2 \"/usr/lib/jvm/java-8-openjdk-amd64/include/linux\")"; + #echo "SET(JAVA_JVM_LIBRARY \"/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so\")"; + #echo "SET(JAVA_AWT_LIBRARY \"/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libawt.so\")"; + #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\")"; + #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/jre/lib/${CPU_ARCH_JAVA_INTERNAL}/server/libjvm.so\")"; + echo "SET(JAVA_AWT_LIBRARY \"$CROSS_OPENJDK_PATH/jre/lib/${CPU_ARCH_JAVA_INTERNAL}/libawt.so\")"; + #echo "SET(JNI_INCLUDE_DIRS \"$CROSS_OPENJDK_PATH/include\" \"$CROSS_OPENJDK_PATH/include/linux\")"; + #echo "SET(Java_JAR_EXECUTABLE \"$CROSS_OPENJDK_PATH/bin/java\")"; + #echo "SET(Java_JAVAC_EXECUTABLE \"$CROSS_OPENJDK_PATH/bin/javac\")"; + #echo "SET(Java_JAVADOC_EXECUTABLE \"$CROSS_OPENJDK_PATH/bin/javadoc\")"; + #echo "SET(JNI_LIBRARIES \"$CROSS_OPENJDK_PATH/jre/lib/${CPU_ARCH_JAVA_INTERNAL}/server/libjvm.so\" \"$CROSS_OPENJDK_PATH/jre/lib/${CPU_ARCH_JAVA_INTERNAL}/libawt.so\")"; + #echo "SET(JNI_FOUND True)"; + #echo "MESSAGE(STATUS \"JNI INCLUDE DIRS: \${JNI_INCLUDE_DIRS}\")"; + #echo "MESSAGE(STATUS \"JNI LIBS: \${JNI_LIBRARIES}\")"; cat <