Compare commits
No commits in common. "master" and "v1.8.10" have entirely different histories.
@ -1,27 +0,0 @@
|
||||
#!/usr/bin/java --source 11
|
||||
import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes;
|
||||
public class Main {
|
||||
/** @param args directory, sourcePrefix, targetPrefix */
|
||||
public static void main(String[] args) throws IOException {
|
||||
Path dir = Path.of(args[0]).toAbsolutePath().normalize();
|
||||
Path sourcePrefix = dir.resolve(Path.of(args[1])).normalize();
|
||||
Path targetPrefix = dir.resolve(Path.of(args[2])).normalize();
|
||||
System.out.printf("Replacing symlinks in '%s' from '%s' to '%s'%n", dir, sourcePrefix, targetPrefix);
|
||||
Files.walkFileTree(dir, new SimpleFileVisitor<>() {
|
||||
@Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
|
||||
if (attrs.isSymbolicLink()) {
|
||||
var originalTarget = Files.readSymbolicLink(file).normalize();
|
||||
if (originalTarget.startsWith(sourcePrefix)) {
|
||||
var symlinkFileDir = file.getParent();
|
||||
originalTarget = symlinkFileDir.resolve(originalTarget);
|
||||
Files.delete(file);
|
||||
var target = symlinkFileDir.relativize(targetPrefix.resolve(sourcePrefix.relativize(originalTarget))).normalize();
|
||||
Files.createSymbolicLink(file, target);
|
||||
System.out.printf("Symlink at '%s' pointing at '%s' is now pointing at '%s'%n", file, originalTarget, target);
|
||||
}
|
||||
}
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
export PREV="$(pwd)"
|
||||
in=(${2//:/ })
|
||||
tmpdir="$1/${in[1]:-"default"}/`cat /etc/os-release | md5sum --binary | awk '{ print $1 }'`"
|
||||
mkdir -p "$tmpdir"
|
||||
cd "$tmpdir"
|
||||
apt-get download "$2"
|
||||
filename="$(find . -type f -name "${in[0]}_*_${in[1]:-"amd64"}.deb" | sort | tail -n1)"
|
||||
dpkg -x "$filename" "$3"
|
||||
cd "$PREV"
|
@ -1,12 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
if [ ! -f /opt/sccache/sccache ]; then
|
||||
apt-get --assume-yes update
|
||||
apt-get --assume-yes install wget
|
||||
wget https://github.com/mozilla/sccache/releases/download/v0.5.4/sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz
|
||||
tar xzf sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz
|
||||
rm sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz
|
||||
mkdir -p /opt/sccache/
|
||||
mv sccache-v0.5.4-x86_64-unknown-linux-musl/sccache /opt/sccache/sccache
|
||||
rm -r sccache-v0.5.4-x86_64-unknown-linux-musl
|
||||
chmod +x /opt/sccache/sccache
|
||||
fi
|
@ -1,6 +0,0 @@
|
||||
/**
|
||||
!/.docker
|
||||
!/api
|
||||
!/implementations
|
||||
!/natives
|
||||
!/tdlib-serializer
|
351
.github/workflows/platform_natives.yaml
vendored
351
.github/workflows/platform_natives.yaml
vendored
@ -1,4 +1,4 @@
|
||||
name: multi-arch build
|
||||
name: Docker multi-arch build
|
||||
|
||||
on:
|
||||
push:
|
||||
@ -8,93 +8,133 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: ${{ matrix.type }} on ${{ matrix.os }}
|
||||
name: Build (${{ matrix.implementation }}-${{ matrix.os }}-${{ matrix.arch }})
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- { os: ubuntu-22.04, type: "linux_amd64_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "buster-backports", native: "true" }
|
||||
- { os: ubuntu-22.04, type: "linux_amd64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "true" }
|
||||
- { os: ubuntu-22.04, type: "linux_amd64_clang_ssl3", compiler: "clang", ssl: "ssl3", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "true" }
|
||||
#- { os: ubuntu-22.04, type: "linux_i386_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "i386", tripleArch: "i386", tripleGnu: "gnu", debianVersion: "buster-backports", native: "false" }
|
||||
#- { os: ubuntu-22.04, type: "linux_i386_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "i386", tripleArch: "i386", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" }
|
||||
- { os: ubuntu-22.04, type: "linux_ppc64el_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "ppc64el", tripleArch: "powerpc64le", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" }
|
||||
- { os: ubuntu-22.04, type: "linux_riscv64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "riscv64", tripleArch: "riscv64", tripleGnu: "gnu", debianVersion: "sid", native: "false" }
|
||||
- { os: ubuntu-22.04, type: "linux_armhf_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "armhf", tripleArch: "arm", tripleGnu: "gnueabihf", debianVersion: "buster-backports", native: "false" }
|
||||
- { os: ubuntu-22.04, type: "linux_armhf_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "armhf", tripleArch: "arm", tripleGnu: "gnueabihf", debianVersion: "bookworm-backports", native: "false" }
|
||||
- { os: ubuntu-22.04, type: "linux_arm64_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "buster-backports", native: "false" }
|
||||
- { os: ubuntu-22.04, type: "linux_arm64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" }
|
||||
- { os: ubuntu-22.04, type: "linux_arm64_clang_ssl3", compiler: "clang", ssl: "ssl3", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" }
|
||||
- { os: windows-2019, type: "windows_amd64", vcpkgCommitId: "fba75d09065fcc76a25dcf386b1d00d33f5175af", triplet: "x64-windows-static" }
|
||||
- { os: macos-12, type: "macos_amd64" }
|
||||
- { os: macos-14, type: "macos_arm64" }
|
||||
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/386", implementation: "tdlight"}
|
||||
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/386", implementation: "tdlib"}
|
||||
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/amd64", implementation: "tdlight"}
|
||||
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/amd64", implementation: "tdlib"}
|
||||
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/armhf", implementation: "tdlight"}
|
||||
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/armhf", implementation: "tdlib"}
|
||||
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/arm64", implementation: "tdlight"}
|
||||
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/arm64", implementation: "tdlib"}
|
||||
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/s390x", implementation: "tdlight"}
|
||||
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/s390x", implementation: "tdlib"}
|
||||
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/ppc64le", implementation: "tdlight"}
|
||||
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/ppc64le", implementation: "tdlib"}
|
||||
- {os: windows-2019, usedocker: "false", useqemu: "false", arch: "amd64", implementation: "tdlight", vcpkgCommitId: "6ca56aeb457f033d344a7106cb3f9f1abf8f4e98", triplet: "x64-windows-static"}
|
||||
#- {os: windows-2019, usedocker: "false", useqemu: "false", arch: "amd64", implementation: "tdlib", vcpkgCommitId: "6ca56aeb457f033d344a7106cb3f9f1abf8f4e98", triplet: "x64-windows-static"}
|
||||
- {os: macos-10.15, usedocker: "false", useqemu: "false", arch: "amd64", implementation: "tdlight"}
|
||||
#- {os: macos-10.15, usedocker: "false", useqemu: "false", arch: "amd64", implementation: "tdlib"}
|
||||
steps:
|
||||
- name: Checkout current repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: "recursive"
|
||||
|
||||
|
||||
- name: Get version
|
||||
shell: bash
|
||||
if: matrix.usedocker == 'true'
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
# Get latest commit short hash
|
||||
HASH_VERSION=$(git rev-parse --short HEAD)
|
||||
|
||||
# Strip git ref prefix from version
|
||||
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
|
||||
|
||||
|
||||
# Strip "v" prefix from tag name
|
||||
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
|
||||
|
||||
|
||||
# Use Docker `latest` tag convention
|
||||
[ "$VERSION" == "master" ] && VERSION=latest
|
||||
|
||||
HASH_VERSION=$(echo "$HASH_VERSION" | awk '{print tolower($0)}')
|
||||
VERSION=$(echo "$VERSION" | awk '{print tolower($0)}')
|
||||
TYPE=${{ matrix.type }}
|
||||
SAFE_TYPE=${TYPE///} # linux_amd64_ -> linux_amd64_
|
||||
COMPILER=${{ matrix.compiler }}
|
||||
SSL=${{ matrix.ssl }}
|
||||
DEBIAN_ARCH=${{ matrix.debianArch }}
|
||||
TRIPLE_ARCH=${{ matrix.tripleArch }}
|
||||
TRIPLE_GNU=${{ matrix.tripleGnu }}
|
||||
NATIVE=${{ matrix.native }}
|
||||
DEBIAN_VERSION=${{ matrix.debianVersion }}
|
||||
|
||||
REVISION=4.0.${{ github.run_number }}
|
||||
GH_MATRIX_OS=${{ matrix.os }}
|
||||
GH_MATRIX_TYPE=${{ matrix.type }}
|
||||
ARCH=${{ matrix.arch }}
|
||||
SAFE_ARCH=${ARCH///} # linux/amd64 -> linuxamd64
|
||||
|
||||
# Store variable for future use
|
||||
echo "HASH_VERSION=$HASH_VERSION" >> $GITHUB_ENV
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
echo "TYPE=$TYPE" >> $GITHUB_ENV
|
||||
echo "SAFE_TYPE=$SAFE_TYPE" >> $GITHUB_ENV
|
||||
echo "COMPILER=$COMPILER" >> $GITHUB_ENV
|
||||
echo "SSL=$SSL" >> $GITHUB_ENV
|
||||
echo "DEBIAN_ARCH=$DEBIAN_ARCH" >> $GITHUB_ENV
|
||||
echo "TRIPLE_ARCH=$TRIPLE_ARCH" >> $GITHUB_ENV
|
||||
echo "TRIPLE_GNU=$TRIPLE_GNU" >> $GITHUB_ENV
|
||||
echo "NATIVE=$NATIVE" >> $GITHUB_ENV
|
||||
echo "DEBIAN_VERSION=$DEBIAN_VERSION" >> $GITHUB_ENV
|
||||
echo "REVISION=$REVISION" >> $GITHUB_ENV
|
||||
echo "GH_MATRIX_OS=$GH_MATRIX_OS" >> $GITHUB_ENV
|
||||
echo "GH_MATRIX_TYPE=$GH_MATRIX_TYPE" >> $GITHUB_ENV
|
||||
echo "SAFE_ARCH=$SAFE_ARCH" >> $GITHUB_ENV
|
||||
|
||||
# Print debug info
|
||||
echo "hash version: $HASH_VERSION"
|
||||
echo "version: $VERSION"
|
||||
echo "safe arch: $SAFE_ARCH"
|
||||
echo "ssl: $SSL"
|
||||
echo "debian arch: $DEBIAN_ARCH"
|
||||
echo "triple arch: $TRIPLE_ARCH"
|
||||
echo "triple gnu: $TRIPLE_GNU"
|
||||
|
||||
echo "Variables:"
|
||||
|
||||
# Save env to file
|
||||
cat $GITHUB_ENV > github.env
|
||||
|
||||
- name: Set up QEMU
|
||||
if: matrix.usedocker == 'true' && matrix.useqemu == 'true'
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
if: matrix.usedocker == 'true'
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Cache Docker layers
|
||||
if: matrix.usedocker == 'true'
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: /tmp/.buildx-cache
|
||||
key: ${{ runner.os }}-v3-buildx-cache-${{ env.SAFE_ARCH }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-v3-buildx-cache-${{ env.SAFE_ARCH }}-
|
||||
|
||||
- name: Cache Maven
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.m2/repository
|
||||
key: ${{ runner.os }}-v3-maven-${{ env.SAFE_ARCH }}-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-v3-maven-${{ env.SAFE_ARCH }}-
|
||||
|
||||
- name: Cache packages cache
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/tdlight-java-natives/tdlight-java-natives/.cache
|
||||
key: ${{ runner.os }}-v3-packages-${{ env.SAFE_ARCH }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-v3-packages-${{ env.SAFE_ARCH }}-
|
||||
|
||||
- name: Cache ccache
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ runner.os }}-v2-ccache-${{ env.SAFE_ARCH }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-v2-ccache-${{ env.SAFE_ARCH }}-
|
||||
|
||||
- name: Build image
|
||||
if: matrix.usedocker == 'true'
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
cache-from: type=local,src=/tmp/.buildx-cache
|
||||
cache-to: type=local,mode=max,dest=/tmp/.buildx-cache
|
||||
platforms: linux/amd64
|
||||
push: false
|
||||
load: true
|
||||
tags: |
|
||||
tdlight-java-natives:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }}
|
||||
build-args: |
|
||||
REVISION=${{ github.run_number }}
|
||||
GH_MATRIX_OS=${{ matrix.os }}
|
||||
GH_MATRIX_ARCH=${{ matrix.arch }}
|
||||
IMPLEMENTATION_NAME=${{ matrix.implementation }}
|
||||
|
||||
- name: Extract jni from docker image
|
||||
if: matrix.usedocker == 'true'
|
||||
run: |
|
||||
mkdir generated
|
||||
docker cp $(docker create tdlight-java-natives:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }}):/usr/src/tdlight-java-natives/generated/. ./generated/.
|
||||
|
||||
- name: Setup Java (Snapshot)
|
||||
if: github.ref == 'refs/heads/develop'
|
||||
uses: actions/setup-java@v3
|
||||
@ -104,7 +144,6 @@ jobs:
|
||||
server-id: mchv-snapshot-distribution
|
||||
server-username: MAVEN_USERNAME
|
||||
server-password: MAVEN_PASSWORD
|
||||
cache: 'maven'
|
||||
- name: Setup Java (Release)
|
||||
if: github.ref != 'refs/heads/develop'
|
||||
uses: actions/setup-java@v3
|
||||
@ -114,55 +153,59 @@ jobs:
|
||||
server-id: mchv-release-distribution
|
||||
server-username: MAVEN_USERNAME
|
||||
server-password: MAVEN_PASSWORD
|
||||
cache: 'maven'
|
||||
- name: Setup variables
|
||||
shell: bash
|
||||
run: |
|
||||
# ====== Variables
|
||||
export REVISION=${{ github.run_number }}
|
||||
export GH_MATRIX_OS=${{ matrix.os }}
|
||||
export GH_MATRIX_ARCH=${{ matrix.arch }}
|
||||
export IMPLEMENTATION_NAME=${{ matrix.implementation }}
|
||||
source ./scripts/continuous-integration/github-workflows/setup-variables.sh
|
||||
|
||||
echo "Variables:"
|
||||
echo "REVISION=$REVISION" >> $GITHUB_ENV
|
||||
echo "BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV
|
||||
echo "IMPLEMENTATION_NAME=$IMPLEMENTATION_NAME" >> $GITHUB_ENV
|
||||
echo "TD_SRC_DIR=$TD_SRC_DIR" >> $GITHUB_ENV
|
||||
echo "TD_BIN_DIR=$TD_BIN_DIR" >> $GITHUB_ENV
|
||||
echo "TDNATIVES_BIN_DIR=$TDNATIVES_BIN_DIR" >> $GITHUB_ENV
|
||||
echo "TDNATIVES_CPP_SRC_DIR=$TDNATIVES_CPP_SRC_DIR" >> $GITHUB_ENV
|
||||
echo "TDNATIVES_DOCS_BIN_DIR=$TDNATIVES_DOCS_BIN_DIR" >> $GITHUB_ENV
|
||||
echo "TD_BUILD_DIR=$TD_BUILD_DIR" >> $GITHUB_ENV
|
||||
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
|
||||
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
|
||||
echo "VCPKG_DIR=$VCPKG_DIR" >> $GITHUB_ENV
|
||||
echo "MAVEN_OPTS=$MAVEN_OPTS" >> $GITHUB_ENV
|
||||
echo "GH_CPU_ARCH=$GH_CPU_ARCH" >> $GITHUB_ENV
|
||||
echo "CPU_ARCH_JAVA=$CPU_ARCH_JAVA" >> $GITHUB_ENV
|
||||
echo "CPU_ARCHITECTURE_NAME=$CPU_ARCHITECTURE_NAME" >> $GITHUB_ENV
|
||||
echo "CPU_CORES_NUM=$CPU_CORES_NUM" >> $GITHUB_ENV
|
||||
echo "CPU_CORES=$CPU_CORES" >> $GITHUB_ENV
|
||||
echo "OPERATING_SYSTEM_NAME=$OPERATING_SYSTEM_NAME" >> $GITHUB_ENV
|
||||
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 dependencies
|
||||
if: matrix.usedocker == 'false'
|
||||
shell: bash
|
||||
run: |
|
||||
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 ubuntu 20.04 dependencies
|
||||
# if: matrix.os == 'ubuntu-20.04'
|
||||
# shell: bash
|
||||
# run: |
|
||||
# export DEBIAN_FRONTEND=noninteractive
|
||||
# sudo apt-get --assume-yes update
|
||||
# sudo apt-get --assume-yes install make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-12 lld-12 libc++-12-dev libc++abi-12-dev libgcc-9-dev libunwind-dev libclang-common-12-dev maven
|
||||
- name: Install ubuntu 20.04 dependencies (cached)
|
||||
if: matrix.os == 'ubuntu-20.04'
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-12 lld-12 libc++-12-dev libc++abi-12-dev libgcc-9-dev libunwind-dev libclang-common-12-dev maven
|
||||
version: 1.0
|
||||
# - name: Install ubuntu 22.04 dependencies
|
||||
# if: matrix.os == 'ubuntu-22.04'
|
||||
# shell: bash
|
||||
# run: |
|
||||
# export DEBIAN_FRONTEND=noninteractive
|
||||
# sudo apt-get --assume-yes update
|
||||
# sudo apt-get --assume-yes install make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-14 lld-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev maven
|
||||
- name: Install ubuntu 22.04 dependencies (cached)
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-14 lld-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev maven
|
||||
version: 1.0
|
||||
- name: Install custom dependencies
|
||||
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'windows-')
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
echo "REVISION: $REVISION"
|
||||
|
||||
if [[ -f "./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh" ]]; then
|
||||
if [[ "$GH_MATRIX_OS" == *"windows"* || "$GH_MATRIX_OS" == *"macos"* ]]; then
|
||||
./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh
|
||||
else
|
||||
sudo ./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh
|
||||
fi
|
||||
fi
|
||||
- name: Run sccache-cache
|
||||
uses: mozilla-actions/sccache-action@v0.0.3
|
||||
- name: Install MSVC
|
||||
if: matrix.os == 'windows-2019'
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
@ -173,7 +216,7 @@ jobs:
|
||||
if: matrix.os == 'windows-2019'
|
||||
uses: lukka/get-cmake@latest
|
||||
- name: Set up Maven
|
||||
uses: stCarolas/setup-maven@v4.5
|
||||
uses: stCarolas/setup-maven@v4.2
|
||||
with:
|
||||
maven-version: 3.8.2
|
||||
- name: Setup NASM
|
||||
@ -197,90 +240,32 @@ jobs:
|
||||
- name: Install vcpkg deps
|
||||
if: matrix.os == 'windows-2019'
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
./vcpkg/vcpkg install gperf openssl:x64-windows-static zlib:x64-windows-static
|
||||
$VCPKG_DIR/vcpkg install gperf openssl:x64-windows-static zlib:x64-windows-static
|
||||
shell: bash
|
||||
- name: Build
|
||||
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'windows-')
|
||||
if: matrix.usedocker == 'false'
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
echo "REVISION: $REVISION"
|
||||
|
||||
source ./.github/workflows/scripts/build_${SAFE_TYPE}.sh
|
||||
env:
|
||||
SCCACHE_GHA_ENABLED: "on"
|
||||
- name: Set up Docker buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
- name: Build
|
||||
uses: docker/build-push-action@v4
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
with:
|
||||
context: .
|
||||
push: false
|
||||
file: tdlight.arch.${{env.SSL}}.${{env.COMPILER}}.dockerfile
|
||||
tags: tdlight.${{env.DEBIAN_ARCH}}.${{env.SSL}}.${{env.COMPILER}}:latest
|
||||
build-args: |
|
||||
SCCACHE_GHA_ENABLED=on
|
||||
ACTIONS_CACHE_URL=${{env.ACTIONS_CACHE_URL}}
|
||||
ACTIONS_RUNTIME_TOKEN=${{env.ACTIONS_RUNTIME_TOKEN}}
|
||||
ARCH_DEBIAN=${{env.DEBIAN_ARCH}}
|
||||
ARCH_TRIPLE=${{env.TRIPLE_ARCH}}
|
||||
TRIPLE_GNU=${{env.TRIPLE_GNU}}
|
||||
NATIVE=${{env.NATIVE}}
|
||||
DEBIAN_VERSION=${{env.DEBIAN_VERSION}}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
outputs: type=local,dest=./docker-out
|
||||
- name: Copy built files from docker
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
source ./scripts/continuous-integration/github-workflows/build-natives.sh
|
||||
- id: getfilename
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
echo "REVISION: $REVISION"
|
||||
|
||||
rm -rf natives
|
||||
mv ./docker-out/out/natives natives
|
||||
mv ./docker-out/out/libtdjni.so "libtdjni.${REVISION}-${TYPE}.so"
|
||||
mv ./docker-out/out/tdlight-natives.jar "natives/target-${TYPE}/tdlight-natives-${REVISION}-${TYPE}.jar"
|
||||
run: echo "::set-output name=file::$(cd generated/target; ls tdli*-natives-*.jar)"
|
||||
- id: getfilepath
|
||||
shell: bash
|
||||
run: echo "::set-output name=file::$(ls generated/target/tdli*-natives-*.jar)"
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: tdlight-natives-${{env.REVISION}}-${{env.TYPE}}.jar
|
||||
path: natives/target-${{env.TYPE}}/tdlight-natives-${{env.REVISION}}-${{env.TYPE}}.jar
|
||||
name: ${{ steps.getfilename.outputs.file }}
|
||||
path: ${{ steps.getfilepath.outputs.file }}
|
||||
- name: Deploy to Maven (Snapshot)
|
||||
if: github.ref == 'refs/heads/develop'
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
echo "REVISION: $REVISION"
|
||||
echo "TYPE: $TYPE"
|
||||
|
||||
mvn -B -f natives/pom.xml -Drevision="$REVISION" -Dnative.type.classifier="$TYPE" clean package
|
||||
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \
|
||||
-DrepositoryId=mchv-snapshot-distribution \
|
||||
-Dfile=natives/target-$TYPE/tdlight-natives-$REVISION-$TYPE.jar \
|
||||
-Dpackaging=pom \
|
||||
-DgroupId=it.tdlight \
|
||||
-DartifactId=tdlight-natives \
|
||||
-Dversion=$REVISION \
|
||||
-Drevision=$REVISION \
|
||||
-Dclassifier=$TYPE \
|
||||
-Dnative.type.classifier="$TYPE"
|
||||
if [[ "$TYPE" == "linux_amd64_gnu_ssl1" ]]; then
|
||||
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \
|
||||
-DrepositoryId=mchv-snapshot-distribution \
|
||||
-Dfile=natives/.ci-friendly-pom.xml \
|
||||
-Dpackaging=pom \
|
||||
-DgroupId=it.tdlight \
|
||||
-DartifactId=tdlight-natives \
|
||||
-Dversion=$REVISION \
|
||||
-Drevision=$REVISION \
|
||||
-Dnative.type.classifier="$TYPE"
|
||||
fi
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
||||
|
||||
source ./scripts/continuous-integration/github-workflows/deploy-snapshot.sh
|
||||
env:
|
||||
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }}
|
||||
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}
|
||||
@ -288,35 +273,9 @@ jobs:
|
||||
if: github.ref == 'refs/heads/master'
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
echo "REVISION: $REVISION"
|
||||
echo "TYPE: $TYPE"
|
||||
|
||||
mvn -B -f natives/pom.xml -Drevision="$REVISION" -Dnative.type.classifier="$TYPE" clean package
|
||||
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \
|
||||
-DrepositoryId=mchv-release-distribution \
|
||||
-Dfile=natives/target-$TYPE/tdlight-natives-$REVISION-$TYPE.jar \
|
||||
-Dpackaging=pom \
|
||||
-DgroupId=it.tdlight \
|
||||
-DartifactId=tdlight-natives \
|
||||
-Dversion=$REVISION \
|
||||
-Drevision=$REVISION \
|
||||
-Dclassifier=$TYPE \
|
||||
-Dnative.type.classifier="$TYPE"
|
||||
if [[ "$TYPE" == "linux_amd64_gnu_ssl1" ]]; then
|
||||
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \
|
||||
-DrepositoryId=mchv-release-distribution \
|
||||
-Dfile=natives/.ci-friendly-pom.xml \
|
||||
-Dpackaging=pom \
|
||||
-DgroupId=it.tdlight \
|
||||
-DartifactId=tdlight-natives \
|
||||
-Dversion=$REVISION \
|
||||
-Drevision=$REVISION \
|
||||
-Dnative.type.classifier="$TYPE"
|
||||
fi
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
||||
|
||||
source ./scripts/continuous-integration/github-workflows/deploy-release.sh
|
||||
env:
|
||||
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }}
|
||||
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}
|
||||
|
35
.github/workflows/scripts/build_api.sh
vendored
35
.github/workflows/scripts/build_api.sh
vendored
@ -1,35 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
REVISION="${REVISION:-1.0.0.0-SNAPSHOT}"
|
||||
|
||||
#export CC="ccache /usr/bin/clang"
|
||||
#export CXX="ccache /usr/bin/clang++"
|
||||
|
||||
# Create missing dirs
|
||||
rm -rf implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto
|
||||
mkdir -p implementations/tdlight/build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni
|
||||
|
||||
# Build tdlib tools
|
||||
cd implementations/tdlight/build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_FLAGS_RELEASE="" \
|
||||
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
|
||||
-DTD_ENABLE_LTO=OFF \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
..
|
||||
cmake --build . --target prepare_cross_compiling --config Release --parallel "$(nproc)"
|
||||
cmake --build . --target td_generate_java_api --config Release --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
|
||||
# Generate TdApi.java
|
||||
TEMP_TDAPI_FILE_PATH="./implementations/tdlight/build/java/it/tdlight/jni/TdApi.java"
|
||||
./implementations/tdlight/build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./implementations/tdlight/build/java" "it/tdlight/jni"
|
||||
php ./implementations/tdlight/td/generate/JavadocTlDocumentationGenerator.php "./implementations/tdlight/td/generate/scheme/td_api.tl" "$TEMP_TDAPI_FILE_PATH"
|
||||
java ./tdlib-serializer/transform.java --source "$TEMP_TDAPI_FILE_PATH" --output "./api/src/main/java-legacy/it/tdlight/jni/TdApi.java" --java17 false --overwrite true --headers ./tdlib-serializer/headers.txt
|
||||
java ./tdlib-serializer/transform.java --source "$TEMP_TDAPI_FILE_PATH" --output "./api/src/main/java-sealed/it/tdlight/jni/TdApi.java" --java17 true --overwrite true --headers ./tdlib-serializer/headers.txt
|
||||
|
||||
# Generate java package
|
||||
echo "Building legacy package"
|
||||
mvn -f api/pom.xml package -Dlegacy=true -Drevision="$REVISION"
|
||||
echo "Building standard package"
|
||||
mvn -f api/pom.xml package -Drevision="$REVISION"
|
84
.github/workflows/scripts/build_macos_amd64.sh
vendored
84
.github/workflows/scripts/build_macos_amd64.sh
vendored
@ -1,84 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
# MacOS 12
|
||||
REVISION="${REVISION:-1.0.0.0-SNAPSHOT}"
|
||||
|
||||
# Create missing dirs
|
||||
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
|
||||
# ccache
|
||||
CCACHE=$(which sccache || true)
|
||||
if [[ -x "$CCACHE" ]]; then
|
||||
echo "found sccache: $CCACHE"
|
||||
else
|
||||
echo "sccache not found"
|
||||
CCACHE=$(which ccache)
|
||||
fi
|
||||
|
||||
# Build tdlib tools
|
||||
cd implementations/tdlight/td_tools_build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ \
|
||||
-DCMAKE_C_FLAGS_RELEASE="" \
|
||||
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
|
||||
-DTD_ENABLE_LTO=OFF \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
..
|
||||
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
|
||||
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
|
||||
# Generate TdApi.java
|
||||
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
|
||||
|
||||
|
||||
|
||||
# Optimization flags
|
||||
export CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
|
||||
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
|
||||
export CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
|
||||
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto=thin -O3"
|
||||
|
||||
# Build tdlib
|
||||
cd implementations/tdlight/build
|
||||
INSTALL_PREFIX="$(greadlink -e ./td_bin/)"
|
||||
INSTALL_BINDIR="$(greadlink -e ./td_bin/bin)"
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ \
|
||||
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
|
||||
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
|
||||
..
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
|
||||
cd natives/build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-DTD_GENERATED_BINARIES_DIR="$(greadlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
|
||||
-DTD_SRC_DIR="$(greadlink -e ../../implementations/tdlight)" \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTDNATIVES_BIN_DIR="$(greadlink -e ../tdjni_bin/)" \
|
||||
-DTDNATIVES_DOCS_BIN_DIR="$(greadlink -e ../tdjni_docs/)" \
|
||||
-DTd_DIR:PATH="$(greadlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
|
||||
-DJAVA_SRC_DIR="$(greadlink -e ../src/main/java)" \
|
||||
-DTDNATIVES_CPP_SRC_DIR="$(greadlink -e ../src/main/cpp)" \
|
||||
../src/main/cpp
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ..
|
||||
mkdir -p src/main/resources/META-INF/tdlightjni/
|
||||
mv tdjni_bin/libtdjni.dylib src/main/resources/META-INF/tdlightjni/libtdjni.macos_amd64.dylib
|
||||
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=macos_amd64 package
|
84
.github/workflows/scripts/build_macos_arm64.sh
vendored
84
.github/workflows/scripts/build_macos_arm64.sh
vendored
@ -1,84 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
# MacOS 12
|
||||
REVISION="${REVISION:-1.0.0.0-SNAPSHOT}"
|
||||
|
||||
# Create missing dirs
|
||||
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
|
||||
# ccache
|
||||
CCACHE=$(which sccache || true)
|
||||
if [[ -x "$CCACHE" ]]; then
|
||||
echo "found sccache: $CCACHE"
|
||||
else
|
||||
echo "sccache not found"
|
||||
CCACHE=$(which ccache)
|
||||
fi
|
||||
|
||||
# Build tdlib tools
|
||||
cd implementations/tdlight/td_tools_build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl/ \
|
||||
-DCMAKE_C_FLAGS_RELEASE="" \
|
||||
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
|
||||
-DTD_ENABLE_LTO=OFF \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
..
|
||||
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
|
||||
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
|
||||
# Generate TdApi.java
|
||||
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
|
||||
|
||||
|
||||
|
||||
# Optimization flags
|
||||
export CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
|
||||
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
|
||||
export CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
|
||||
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto=thin -O3"
|
||||
|
||||
# Build tdlib
|
||||
cd implementations/tdlight/build
|
||||
INSTALL_PREFIX="$(greadlink -e ./td_bin/)"
|
||||
INSTALL_BINDIR="$(greadlink -e ./td_bin/bin)"
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl/ \
|
||||
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
|
||||
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
|
||||
..
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
|
||||
cd natives/build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-DTD_GENERATED_BINARIES_DIR="$(greadlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
|
||||
-DTD_SRC_DIR="$(greadlink -e ../../implementations/tdlight)" \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTDNATIVES_BIN_DIR="$(greadlink -e ../tdjni_bin/)" \
|
||||
-DTDNATIVES_DOCS_BIN_DIR="$(greadlink -e ../tdjni_docs/)" \
|
||||
-DTd_DIR:PATH="$(greadlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
|
||||
-DJAVA_SRC_DIR="$(greadlink -e ../src/main/java)" \
|
||||
-DTDNATIVES_CPP_SRC_DIR="$(greadlink -e ../src/main/cpp)" \
|
||||
../src/main/cpp
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ..
|
||||
mkdir -p src/main/resources/META-INF/tdlightjni/
|
||||
mv tdjni_bin/libtdjni.dylib src/main/resources/META-INF/tdlightjni/libtdjni.macos_arm64.dylib
|
||||
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=macos_arm64 package
|
97
.github/workflows/scripts/build_windows_amd64.sh
vendored
97
.github/workflows/scripts/build_windows_amd64.sh
vendored
@ -1,97 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
|
||||
# Change working directory
|
||||
DEPLOY_DIR="$(pwd)"
|
||||
cp -r . /c/tmp_tdlight
|
||||
cd /c/tmp_tdlight
|
||||
|
||||
# Windows 2019
|
||||
REVISION="${REVISION:-1.0.0.0-SNAPSHOT}"
|
||||
|
||||
# Create missing dirs
|
||||
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
|
||||
# ccache
|
||||
CCACHE=$(which sccache || true)
|
||||
if [[ -x "$CCACHE" ]]; then
|
||||
CCACHE="sccache"
|
||||
echo "found sccache: $CCACHE"
|
||||
else
|
||||
echo "sccache not found"
|
||||
CCACHE="ccache"
|
||||
fi
|
||||
|
||||
# Fix path
|
||||
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 VCPKG_DIR="$(readlink -e ./vcpkg)"
|
||||
|
||||
# Build tdlib tools
|
||||
cd implementations/tdlight/td_tools_build
|
||||
cmake \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-A x64 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DOPENSSL_USE_STATIC_LIBS=ON \
|
||||
-DCMAKE_C_FLAGS_RELEASE="" \
|
||||
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
|
||||
-DTD_ENABLE_LTO=OFF \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
..
|
||||
cmake --build . --target prepare_cross_compiling --config Release --parallel "$(nproc)"
|
||||
cmake --build . --target td_generate_java_api --config Release --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
|
||||
# Generate TdApi.java
|
||||
./implementations/tdlight/td_tools_build/td/generate/Release/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
|
||||
|
||||
|
||||
|
||||
# Optimization flags
|
||||
export CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
|
||||
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
|
||||
export CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
|
||||
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto=thin -O3"
|
||||
|
||||
# Build tdlib
|
||||
cd implementations/tdlight/build
|
||||
INSTALL_PREFIX="$(readlink -e ./td_bin/)"
|
||||
INSTALL_BINDIR="$(readlink -e ./td_bin/bin)"
|
||||
cmake \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-A x64 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DOPENSSL_USE_STATIC_LIBS=ON \
|
||||
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
|
||||
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
|
||||
..
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
|
||||
cd natives/build
|
||||
cmake \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DOPENSSL_USE_STATIC_LIBS=True \
|
||||
-A x64 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DOPENSSL_USE_STATIC_LIBS=ON \
|
||||
-DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate/Release)" \
|
||||
-DTD_SRC_DIR="$(readlink -e ../../implementations/tdlight)" \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTDNATIVES_BIN_DIR="$(readlink -e ../tdjni_bin/)" \
|
||||
-DTDNATIVES_DOCS_BIN_DIR="$(readlink -e ../tdjni_docs/)" \
|
||||
-DTd_DIR:PATH="$(readlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
|
||||
-DJAVA_SRC_DIR="$(readlink -e ../src/main/java)" \
|
||||
-DTDNATIVES_CPP_SRC_DIR="$(readlink -e ../src/main/cpp)" \
|
||||
../src/main/cpp
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ..
|
||||
mkdir -p src/main/resources/META-INF/tdlightjni/
|
||||
mv tdjni_bin/tdjni.dll src/main/resources/META-INF/tdlightjni/tdjni.windows_amd64.dll
|
||||
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=windows_amd64 package
|
||||
|
||||
# Restore original working directory
|
||||
cp -r "../natives/" "$DEPLOY_DIR/"
|
||||
cd "$DEPLOY_DIR"
|
@ -1,8 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
brew install --force gperf
|
||||
brew install --force coreutils
|
||||
brew install --force openjdk
|
||||
brew install --force freetype
|
||||
brew install --force gd
|
||||
brew install --force libtiff
|
@ -1,8 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
brew install --force gperf
|
||||
brew install --force coreutils
|
||||
brew install --force openjdk
|
||||
brew install --force freetype
|
||||
brew install --force gd
|
||||
brew install --force libtiff
|
@ -1,5 +0,0 @@
|
||||
#!/bin/bash -ex
|
||||
# Windows 2019
|
||||
choco install base64
|
||||
choco install gperf
|
||||
choco install strawberryperl
|
132
.github/workflows/tdapi_file.yaml
vendored
132
.github/workflows/tdapi_file.yaml
vendored
@ -11,22 +11,23 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- {os: ubuntu-22.04, arch: "linux/amd64", implementation: "tdlight"}
|
||||
- {os: ubuntu-20.04, arch: "linux/amd64", implementation: "tdlight"}
|
||||
#- {os: ubuntu-20.04, arch: "linux/amd64", implementation: "tdlib"}
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Install ubuntu 22.04 dependencies
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: sudo make git zlib1g-dev libssl-dev gperf php-cli cmake openjdk-17-jdk clang-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev maven
|
||||
version: 1.0
|
||||
- name: Install sudo package
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
(apt-get update || true) 2>/dev/null
|
||||
(apt-get install -y sudo || true) 2>/dev/null
|
||||
sudo apt update
|
||||
- name: Install SSH key
|
||||
uses: shimataro/ssh-key-action@v2
|
||||
with:
|
||||
key: ${{ secrets.IG_SSH_KEY }}
|
||||
name: id_rsa
|
||||
known_hosts: ${{ secrets.IG_KNOWN_HOSTS }}
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: "recursive"
|
||||
- name: Setup Java (Snapshot)
|
||||
@ -38,7 +39,6 @@ jobs:
|
||||
server-id: mchv-snapshot-distribution
|
||||
server-username: MAVEN_USERNAME
|
||||
server-password: MAVEN_PASSWORD
|
||||
cache: 'maven'
|
||||
- name: Setup Java (Release)
|
||||
if: github.ref != 'refs/heads/develop'
|
||||
uses: actions/setup-java@v3
|
||||
@ -48,67 +48,76 @@ jobs:
|
||||
server-id: mchv-release-distribution
|
||||
server-username: MAVEN_USERNAME
|
||||
server-password: MAVEN_PASSWORD
|
||||
cache: 'maven'
|
||||
- name: Set up Maven
|
||||
uses: stCarolas/setup-maven@v4.5
|
||||
with:
|
||||
maven-version: 3.8.2
|
||||
- name: Setup variables
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
# ====== Variables
|
||||
export REVISION=4.0.${{ github.run_number }}
|
||||
export REVISION=${{ github.run_number }}
|
||||
export GH_MATRIX_OS=${{ matrix.os }}
|
||||
export GH_MATRIX_ARCH=${{ matrix.arch }}
|
||||
export IMPLEMENTATION_NAME=${{ matrix.implementation }}
|
||||
|
||||
source ./scripts/continuous-integration/github-workflows/setup-variables.sh
|
||||
|
||||
echo "REVISION=$REVISION" >> $GITHUB_ENV
|
||||
echo "BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV
|
||||
echo "IMPLEMENTATION_NAME=$IMPLEMENTATION_NAME" >> $GITHUB_ENV
|
||||
echo "TD_SRC_DIR=$TD_SRC_DIR" >> $GITHUB_ENV
|
||||
echo "TD_BIN_DIR=$TD_BIN_DIR" >> $GITHUB_ENV
|
||||
echo "TDNATIVES_BIN_DIR=$TDNATIVES_BIN_DIR" >> $GITHUB_ENV
|
||||
echo "TDNATIVES_CPP_SRC_DIR=$TDNATIVES_CPP_SRC_DIR" >> $GITHUB_ENV
|
||||
echo "TDNATIVES_DOCS_BIN_DIR=$TDNATIVES_DOCS_BIN_DIR" >> $GITHUB_ENV
|
||||
echo "TD_BUILD_DIR=$TD_BUILD_DIR" >> $GITHUB_ENV
|
||||
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
|
||||
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
|
||||
cat $GITHUB_ENV > github.env
|
||||
echo "CMAKE_EXTRA_ARGUMENTS=$CMAKE_EXTRA_ARGUMENTS" >> $GITHUB_ENV
|
||||
echo "VCPKG_DIR=$VCPKG_DIR" >> $GITHUB_ENV
|
||||
echo "MAVEN_OPTS=$MAVEN_OPTS" >> $GITHUB_ENV
|
||||
echo "GH_CPU_ARCH=$GH_CPU_ARCH" >> $GITHUB_ENV
|
||||
echo "CPU_ARCH_JAVA=$CPU_ARCH_JAVA" >> $GITHUB_ENV
|
||||
echo "CPU_ARCHITECTURE_NAME=$CPU_ARCHITECTURE_NAME" >> $GITHUB_ENV
|
||||
echo "CPU_CORES_NUM=$CPU_CORES_NUM" >> $GITHUB_ENV
|
||||
echo "CPU_CORES=$CPU_CORES" >> $GITHUB_ENV
|
||||
echo "OPERATING_SYSTEM_NAME=$OPERATING_SYSTEM_NAME" >> $GITHUB_ENV
|
||||
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 dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
echo "REVISION: $REVISION"
|
||||
|
||||
./scripts/continuous-integration/github-workflows/install-dependencies.sh
|
||||
- name: Build
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
echo "REVISION: $REVISION"
|
||||
|
||||
./.github/workflows/scripts/build_api.sh
|
||||
- uses: actions/upload-artifact@v3
|
||||
./scripts/continuous-integration/github-workflows/build-tdapi.sh
|
||||
- id: getfilename
|
||||
shell: bash
|
||||
run: echo "::set-output name=file::$(cd generated-sealed/target; ls tdli*-api-*-SNAPSHOT.jar)"
|
||||
- id: getfilepath
|
||||
shell: bash
|
||||
run: echo "::set-output name=file::$(ls generated-sealed/target/tdli*-api-*-SNAPSHOT.jar)"
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: tdlight-api-${{env.REVISION}}.jar
|
||||
path: api/target/tdlight-api-${{env.REVISION}}.jar
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: tdlight-api-${{env.REVISION}}-legacy.jar
|
||||
path: api/target-legacy/tdlight-api-${{env.REVISION}}-legacy.jar
|
||||
name: ${{ steps.getfilename.outputs.file }}
|
||||
path: ${{ steps.getfilepath.outputs.file }}
|
||||
- name: Deploy to Maven (Snapshot)
|
||||
if: github.ref != 'refs/heads/master'
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
echo "REVISION: $REVISION"
|
||||
|
||||
echo "Building standard package"
|
||||
mvn -B -f api/pom.xml clean package deploy -Drevision="$REVISION"
|
||||
echo "Deploying legacy package"
|
||||
mvn -B -f api/pom.xml clean package -Dlegacy=true -Drevision="$REVISION"
|
||||
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \
|
||||
-DrepositoryId=mchv-snapshot-distribution \
|
||||
-Dfile=api/target-legacy/tdlight-api-$REVISION-legacy.jar \
|
||||
-Dpackaging=pom \
|
||||
-DgroupId=it.tdlight \
|
||||
-DartifactId=tdlight-api \
|
||||
-Dversion=$REVISION \
|
||||
-Drevision=$REVISION \
|
||||
-Dclassifier=legacy \
|
||||
-Dlegacy=true
|
||||
echo "Done."
|
||||
API_TYPE=legacy ./scripts/continuous-integration/github-workflows/deploy-snapshot.sh
|
||||
API_TYPE=sealed ./scripts/continuous-integration/github-workflows/deploy-snapshot.sh
|
||||
env:
|
||||
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }}
|
||||
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}
|
||||
@ -116,44 +125,13 @@ jobs:
|
||||
if: github.ref == 'refs/heads/master'
|
||||
shell: bash
|
||||
run: |
|
||||
set -xeo pipefail
|
||||
echo "REVISION: $REVISION"
|
||||
|
||||
echo "Deploying standard package"
|
||||
mvn -B -f api/pom.xml clean package deploy -Drevision="$REVISION"
|
||||
|
||||
echo "Deploying legacy package"
|
||||
mvn -B -f api/pom.xml clean package -Dlegacy=true -Drevision="$REVISION"
|
||||
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \
|
||||
-DrepositoryId=mchv-release-distribution \
|
||||
-Dfile=api/target-legacy/tdlight-api-$REVISION-legacy.jar \
|
||||
-Dpackaging=pom \
|
||||
-DgroupId=it.tdlight \
|
||||
-DartifactId=tdlight-api \
|
||||
-Dversion=$REVISION \
|
||||
-Drevision=$REVISION \
|
||||
-Dclassifier=legacy \
|
||||
-Dlegacy=true
|
||||
|
||||
|
||||
echo "Deploying docs"
|
||||
cd "./api/target/apidocs"
|
||||
find . -name '*.html' -exec sed -i -r 's/<\/title>/<\/title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><style>\n\t#memberSummary_tabpanel{overflow-x: auto;}\n\tli.blockList{overflow-x: auto;}\n\ttd.colLast div{max-width:30vw;}\n\t#search{width: 400px;max-width: 65vw;}\n\t.title,.subTitle,pre,.inheritance,h1,h2,h3,h4,h5,.memberSummary,.memberSignature,.typeSummary,.blockList,.contentContainer{white-space:normal;word-break:break-word;}\n\tul{padding-left:10px}\n<\/style>/' {} \;
|
||||
git config --global init.defaultBranch master
|
||||
git init
|
||||
git checkout -b "tdlight"
|
||||
git remote add origin "https://${DOCS_DEPLOY_USERNAME}:${DOCS_DEPLOY_PASSWORD}@git.ignuranza.net/tdlight-team/tdlight-docs"
|
||||
git config user.email "andrea@warp.ovh"
|
||||
git config user.name "Andrea Cavalli"
|
||||
git fetch --all
|
||||
git reset --soft "origin/tdlight" || true
|
||||
git add -A
|
||||
git commit -m "Update javadocs"
|
||||
git push --set-upstream origin "tdlight"
|
||||
echo "Done."
|
||||
API_TYPE=legacy ./scripts/continuous-integration/github-workflows/deploy-release.sh
|
||||
API_TYPE=sealed ./scripts/continuous-integration/github-workflows/deploy-release.sh
|
||||
API_TYPE=legacy ./scripts/continuous-integration/github-workflows/deploy-javadoc.sh
|
||||
API_TYPE=sealed ./scripts/continuous-integration/github-workflows/deploy-javadoc.sh
|
||||
env:
|
||||
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }}
|
||||
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}
|
||||
DOCS_DEPLOY_USERNAME: ${{ secrets.DOCS_DEPLOY_USERNAME }}
|
||||
DOCS_DEPLOY_PASSWORD: ${{ secrets.DOCS_DEPLOY_PASSWORD }}
|
||||
|
||||
|
15
.gitignore
vendored
15
.gitignore
vendored
@ -64,18 +64,3 @@ win-deps.sh
|
||||
/.cache/
|
||||
|
||||
.idea/
|
||||
/natives/build/
|
||||
/natives/src/main/td/
|
||||
/natives/tdjni_bin/
|
||||
/natives/tdjni_docs/
|
||||
/natives/src/main/td_bin/
|
||||
/natives/src/main/tdjni_docs/
|
||||
/api/src/main/td/
|
||||
/api/jni_bin/
|
||||
/api/target-legacy/
|
||||
/api/target-sealed/
|
||||
/api/.ci-friendly-pom.xml
|
||||
|
||||
natives/.ci-friendly-pom.xml
|
||||
|
||||
*.so
|
||||
|
11
.gitmodules
vendored
11
.gitmodules
vendored
@ -1,6 +1,9 @@
|
||||
[submodule "tdlib-serializer"]
|
||||
path = tdlib-serializer
|
||||
url = https://git.ignuranza.net/tdlight-team/tdlib-serializer
|
||||
[submodule "implementations/tdlib"]
|
||||
path = implementations/tdlib
|
||||
url = https://github.com/tdlib/td.git
|
||||
[submodule "implementations/tdlight"]
|
||||
path = implementations/tdlight
|
||||
url = https://git.ignuranza.net/tdlight-team/tdlight
|
||||
url = https://git.ignuranza.net/tdlight-team/tdlight.git
|
||||
[submodule "scripts/core/tdlib-serializer"]
|
||||
path = scripts/core/tdlib-serializer
|
||||
url = https://git.ignuranza.net/windoz/tdlib-serializer.git
|
||||
|
37
Dockerfile
Normal file
37
Dockerfile
Normal file
@ -0,0 +1,37 @@
|
||||
FROM debian:oldstable
|
||||
|
||||
ARG REVISION
|
||||
ARG GH_MATRIX_OS
|
||||
ARG GH_MATRIX_ARCH
|
||||
ARG IMPLEMENTATION_NAME
|
||||
ARG CPU_CORES_NUM
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV TZ=Europe/Kiev
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
|
||||
RUN apt update && apt upgrade -y
|
||||
|
||||
RUN apt install -y sudo build-essential openjdk-11-jdk locales wget cmake gperf ccache maven \
|
||||
libssl-dev libssl1.1 zlib1g-dev zlib1g
|
||||
|
||||
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
|
||||
dpkg-reconfigure --frontend=noninteractive locales && \
|
||||
update-locale LANG=en_US.UTF-8
|
||||
|
||||
ENV LANG "en_US.UTF-8"
|
||||
ENV JAVA_TOOL_OPTIONS "-Dfile.encoding=UTF8"
|
||||
|
||||
ADD implementations /usr/src/tdlight-java-natives/implementations
|
||||
ADD scripts /usr/src/tdlight-java-natives/scripts
|
||||
ADD src /usr/src/tdlight-java-natives/src
|
||||
|
||||
WORKDIR /usr/src/tdlight-java-natives/
|
||||
|
||||
RUN /bin/bash /usr/src/tdlight-java-natives/scripts/continuous-integration/docker/build-natives.sh
|
||||
|
||||
#WORKDIR /usr/src/tdlight-java-natives/generated/
|
||||
#RUN echo "aaaa" > test.txt
|
||||
|
||||
ENTRYPOINT [ "/bin/bash" ]
|
@ -4,9 +4,11 @@ This repository generates JNI packages for each architecture and OS used by [TDL
|
||||
|
||||
## Building
|
||||
|
||||
**todo**
|
||||
Go to `scripts/utils` and run
|
||||
|
||||
look at the dockerfile it's a decent example
|
||||
- `./compile-natives-package.sh` for natives
|
||||
|
||||
- `./compile-tdapi-package.sh` for tdapi
|
||||
|
||||
## Download
|
||||
|
||||
|
283
api/pom.xml
283
api/pom.xml
@ -1,283 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>it.tdlight</groupId>
|
||||
<artifactId>tdlight-api</artifactId>
|
||||
<version>${revision}</version>
|
||||
<name>TDLight API</name>
|
||||
<packaging>jar</packaging>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<revision>4.0.0-SNAPSHOT</revision>
|
||||
<safeVersionName>v4_0_0</safeVersionName>
|
||||
<buildDirectory>${project.basedir}/target</buildDirectory>
|
||||
</properties>
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>legacy</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>legacy</name>
|
||||
<value>true</value>
|
||||
</property>
|
||||
</activation>
|
||||
<properties>
|
||||
<buildDirectory>${project.basedir}/target-legacy</buildDirectory>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- ensure the project is compiling with JDK 9+ -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-enforcer-plugin</artifactId>
|
||||
<version>3.0.0-M3</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>enforce-jdk9</id>
|
||||
<goals>
|
||||
<goal>enforce</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<rules>
|
||||
<requireJavaVersion>
|
||||
<version>[1.9,)</version>
|
||||
<message>JDK 9+ is required for compilation</message>
|
||||
</requireJavaVersion>
|
||||
</rules>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>build-helper-maven-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>add-source</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>add-source</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<sources>
|
||||
<source>${project.basedir}/src/main/java-legacy</source>
|
||||
</sources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- compile sources -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
<executions>
|
||||
<!-- disable default phase due to fixed id and position in lifecycle -->
|
||||
<execution>
|
||||
<id>default-compile</id>
|
||||
<phase>none</phase>
|
||||
<!-- specify source/target for IDE integration -->
|
||||
<configuration>
|
||||
<release>9</release>
|
||||
</configuration>
|
||||
</execution>
|
||||
<!-- compile sources with Java 9 to generate and validate module-info.java -->
|
||||
<execution>
|
||||
<id>java-9-module-compile</id>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<release>9</release>
|
||||
</configuration>
|
||||
</execution>
|
||||
<!-- recompile sources as Java 8 to overwrite Java 9 class files, except module-info.java -->
|
||||
<execution>
|
||||
<id>java-8-compile</id>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<!-- specify JDK 9+ release flag to ensure no classes/methods later than Java 8 are used accidentally -->
|
||||
<release>8</release>
|
||||
<!-- exclude module-info.java from the compilation, as it is unsupported by Java 8 -->
|
||||
<excludes>
|
||||
<exclude>module-info.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Multi-Release>true</Multi-Release>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
<classifier>legacy</classifier>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>3.1.1</version>
|
||||
<configuration>
|
||||
<allowIncompleteProjects>true</allowIncompleteProjects>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>3.1.1</version>
|
||||
<configuration>
|
||||
<allowIncompleteProjects>true</allowIncompleteProjects>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>sealed</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>legacy</name>
|
||||
<value>!true</value>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>build-helper-maven-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>add-source</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>add-source</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<sources>
|
||||
<source>${project.basedir}/src/main/java-sealed</source>
|
||||
</sources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- compile sources -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<release>17</release>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>3.1.1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>3.1.1</version>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>3.2.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>main-javadoc</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<release>17</release>
|
||||
<quiet>true</quiet>
|
||||
<notimestamp>true</notimestamp>
|
||||
<encoding>UTF-8</encoding>
|
||||
<charset>UTF-8</charset>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>mchv-release-distribution</id>
|
||||
<name>MCHV Release Apache Maven Packages Distribution</name>
|
||||
<url>https://mvn.mchv.eu/repository/mchv</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>mchv-snapshot-distribution</id>
|
||||
<name>MCHV Snapshot Apache Maven Packages Distribution</name>
|
||||
<url>https://mvn.mchv.eu/repository/mchv-snapshot</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
<scm>
|
||||
<url>https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</url>
|
||||
<connection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</connection>
|
||||
<developerConnection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</developerConnection>
|
||||
<tag>HEAD</tag>
|
||||
</scm>
|
||||
<build>
|
||||
<directory>${buildDirectory}</directory>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>3.0.0-M1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>com.outbrain.swinfra</groupId>
|
||||
<artifactId>ci-friendly-flatten-maven-plugin</artifactId>
|
||||
<version>1.0.14</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>clean</goal>
|
||||
<goal>flatten</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -1,6 +0,0 @@
|
||||
/**
|
||||
* This module contains the TDLib interface type-classes and function-classes.
|
||||
*/
|
||||
module tdlight.api {
|
||||
exports it.tdlight.jni;
|
||||
}
|
1
implementations/tdlib
Submodule
1
implementations/tdlib
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit cf1984844be7ec0c06762d8d617cbb20352ec9a2
|
@ -1 +1 @@
|
||||
Subproject commit b6c5bd07bbed6b58ec9426904affee05a4ca78e0
|
||||
Subproject commit 54d2cc3e0e27339174fc3c6f88babdd3d0ad02b6
|
@ -1,95 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>it.tdlight</groupId>
|
||||
<artifactId>tdlight-natives</artifactId>
|
||||
<!-- Don't change the version! (or change it also in <shadedPattern>) -->
|
||||
<version>${revision}</version>
|
||||
<name>tdlight natives</name>
|
||||
<packaging>jar</packaging>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<revision>4.0.0-SNAPSHOT</revision>
|
||||
<native.type.classifier>_invalid_</native.type.classifier>
|
||||
<buildDirectory>${project.basedir}/target-${native.type.classifier}</buildDirectory>
|
||||
</properties>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>mchv-release-distribution</id>
|
||||
<name>MCHV Release Apache Maven Packages Distribution</name>
|
||||
<url>https://mvn.mchv.eu/repository/mchv</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>mchv-snapshot-distribution</id>
|
||||
<name>MCHV Snapshot Apache Maven Packages Distribution</name>
|
||||
<url>https://mvn.mchv.eu/repository/mchv-snapshot</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
<scm>
|
||||
<url>https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</url>
|
||||
<connection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</connection>
|
||||
<developerConnection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</developerConnection>
|
||||
<tag>HEAD</tag>
|
||||
</scm>
|
||||
<build>
|
||||
<directory>${buildDirectory}</directory>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<source>8</source>
|
||||
<target>8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>com.outbrain.swinfra</groupId>
|
||||
<artifactId>ci-friendly-flatten-maven-plugin</artifactId>
|
||||
<version>1.0.14</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>clean</goal>
|
||||
<goal>flatten</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<configuration>
|
||||
<classifier>${native.type.classifier}</classifier>
|
||||
<excludes>
|
||||
<exclude>it/tdlight/jni/*</exclude>
|
||||
<exclude>it/tdlight/tdnative/*</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>3.1.1</version>
|
||||
<configuration>
|
||||
<allowIncompleteProjects>true</allowIncompleteProjects>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>3.1.1</version>
|
||||
<configuration>
|
||||
<allowIncompleteProjects>true</allowIncompleteProjects>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -1,2 +0,0 @@
|
||||
../src/main/java/it/tdlight/jni/TdApi.java
|
||||
../src/main/java/it/tdlight/tdnative/NativeClient.java
|
File diff suppressed because it is too large
Load Diff
109
scripts/continuous-integration/docker/build-natives.sh
Executable file
109
scripts/continuous-integration/docker/build-natives.sh
Executable file
@ -0,0 +1,109 @@
|
||||
#!/bin/bash -e
|
||||
export JAVA_HOME
|
||||
JAVA_HOME="$(find "/usr/lib/jvm/" -maxdepth 1 -type d -iname "java*jdk*" | head -n 1)/"
|
||||
export JAVA_INCLUDE_PATH="$JAVA_HOME/include"
|
||||
source ./scripts/continuous-integration/github-workflows/setup-variables.sh
|
||||
export CROSS_BUILD_DEPS_DIR="$PWD/cross-build-deps"
|
||||
# Check variables correctness
|
||||
if [ -z "${CPU_ARCH_DPKG}" ]; then
|
||||
echo "Missing parameter: CPU_ARCH_DPKG"
|
||||
exit 1
|
||||
fi
|
||||
if [ -n "${CROSS_BUILD_DEPS_DIR}" ]; then
|
||||
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
|
||||
}
|
||||
|
||||
PWD_BEFORE_CROSS_DEPS=$(pwd)
|
||||
if [[ ! -f "$CROSS_BUILD_DEPS_DIR/ok-012" ]]; then
|
||||
echo "Setting up cross build deps dir"
|
||||
rm -rf "$CROSS_BUILD_DEPS_DIR" || true
|
||||
mkdir -p "$CROSS_BUILD_DEPS_DIR"
|
||||
cd "$CROSS_BUILD_DEPS_DIR"
|
||||
|
||||
dpkg --add-architecture "${CPU_ARCH_DPKG}"
|
||||
apt-get update
|
||||
|
||||
# LibZ-Dev
|
||||
apt-get download "zlib1g-dev:${CPU_ARCH_DPKG}"
|
||||
ZLIB1G_DEV_DEB=$(find . -name "zlib1g-dev_*.deb")
|
||||
dpkg -x "$ZLIB1G_DEV_DEB" "$CROSS_BUILD_DEPS_DIR"
|
||||
rm "$ZLIB1G_DEV_DEB"
|
||||
# LibZ
|
||||
apt-get download "zlib1g:${CPU_ARCH_DPKG}"
|
||||
ZLIB1G_DEB=$(find . -name "zlib1g_*.deb")
|
||||
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 . -name "libssl-dev_*.deb")
|
||||
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 . -name "libssl1.1_*.deb")
|
||||
dpkg -x "$LIBSSL_DEB" "$CROSS_BUILD_DEPS_DIR"
|
||||
rm "$LIBSSL_DEB"
|
||||
# Java Common
|
||||
apt-get download "java-common"
|
||||
JC_DEB=$(find . -name "java-common_*.deb")
|
||||
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 . -name "openjdk-11-jre-headless_*.deb")
|
||||
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 . -name "openjdk-11-jre_*.deb")
|
||||
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 . -name "openjdk-11-jdk-headless_*.deb")
|
||||
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 . -name "openjdk-11-jdk_*.deb")
|
||||
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\"" {} \;
|
||||
|
||||
echo "Cross build deps dir setup finished, testing..."
|
||||
|
||||
# Check if openjdk is found
|
||||
fix_jdk_path
|
||||
check_jdk_existance
|
||||
|
||||
touch "$CROSS_BUILD_DEPS_DIR/ok-012"
|
||||
fi
|
||||
echo "Cross build deps dir setup done"
|
||||
fix_jdk_path
|
||||
check_jdk_existance
|
||||
cd "${PWD_BEFORE_CROSS_DEPS}"
|
||||
apt install -y "crossbuild-essential-${CPU_ARCH_DPKG}"
|
||||
fi
|
||||
|
||||
cd scripts/core
|
||||
source ./setup-variables.sh
|
||||
./install-dependencies.sh
|
||||
./generate_maven_project.sh
|
||||
./generate_td_tools.sh
|
||||
./configure_td.sh
|
||||
./compile_td.sh
|
||||
./compile_tdjni.sh
|
||||
./build_generated_maven_project.sh
|
12
scripts/continuous-integration/github-workflows/build-natives.sh
Executable file
12
scripts/continuous-integration/github-workflows/build-natives.sh
Executable file
@ -0,0 +1,12 @@
|
||||
#!/bin/bash -e
|
||||
set -e
|
||||
cd ./scripts/core/
|
||||
./generate_maven_project.sh
|
||||
./generate_td_tools.sh
|
||||
./configure_td.sh
|
||||
./compile_td.sh
|
||||
./compile_tdjni.sh
|
||||
./build_generated_maven_project.sh
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
16
scripts/continuous-integration/github-workflows/build-tdapi.sh
Executable file
16
scripts/continuous-integration/github-workflows/build-tdapi.sh
Executable file
@ -0,0 +1,16 @@
|
||||
#!/bin/bash -e
|
||||
set -e
|
||||
cd ./scripts/core/
|
||||
./generate_td_tools.sh
|
||||
./configure_td.sh
|
||||
|
||||
API_TYPE=legacy ./generate_tdapi_maven_project.sh
|
||||
API_TYPE=legacy ./generate_tdapi_java_file.sh
|
||||
API_TYPE=legacy ./build_generated_tdapi_maven_project.sh
|
||||
|
||||
API_TYPE=sealed ./generate_tdapi_maven_project.sh
|
||||
API_TYPE=sealed ./generate_tdapi_java_file.sh
|
||||
API_TYPE=sealed ./build_generated_tdapi_maven_project.sh
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
28
scripts/continuous-integration/github-workflows/deploy-javadoc.sh
Executable file
28
scripts/continuous-integration/github-workflows/deploy-javadoc.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash -e
|
||||
set -e
|
||||
|
||||
# Check variables correctness
|
||||
if [ -z "${IMPLEMENTATION_NAME}" ]; then
|
||||
echo "Missing parameter: IMPLEMENTATION_NAME"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${API_TYPE}" ]; then
|
||||
echo "Missing parameter: API_TYPE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "./generated-${API_TYPE}/target/apidocs"
|
||||
find . -name '*.html' -exec sed -i -r 's/<\/title>/<\/title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><style>\n\t#memberSummary_tabpanel{overflow-x: auto;}\n\tli.blockList{overflow-x: auto;}\n\ttd.colLast div{max-width:30vw;}\n\t#search{width: 400px;max-width: 65vw;}\n\t.title,.subTitle,pre,.inheritance,h1,h2,h3,h4,h5,.memberSummary,.memberSignature,.typeSummary,.blockList,.contentContainer{white-space:normal;word-break:break-word;}\n\tul{padding-left:10px}\n<\/style>/' {} \;
|
||||
git init
|
||||
git checkout -b "${IMPLEMENTATION_NAME}-${API_TYPE}"
|
||||
git remote add origin "https://${DOCS_DEPLOY_USERNAME}:${DOCS_DEPLOY_PASSWORD}@git.ignuranza.net/tdlight-team/tdlight-docs"
|
||||
git config user.email "andrea@warp.ovh"
|
||||
git config user.name "Andrea Cavalli"
|
||||
git fetch --all
|
||||
git reset --soft "origin/${IMPLEMENTATION_NAME}-${API_TYPE}" || true
|
||||
git add -A
|
||||
git commit -m "Update javadocs"
|
||||
git push --set-upstream origin "${IMPLEMENTATION_NAME}-${API_TYPE}"
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
7
scripts/continuous-integration/github-workflows/deploy-release.sh
Executable file
7
scripts/continuous-integration/github-workflows/deploy-release.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash -e
|
||||
set -e
|
||||
cd ./scripts/core/
|
||||
./deploy_release.sh
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
7
scripts/continuous-integration/github-workflows/deploy-snapshot.sh
Executable file
7
scripts/continuous-integration/github-workflows/deploy-snapshot.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash -e
|
||||
set -e
|
||||
cd ./scripts/core/
|
||||
./deploy_snapshot.sh
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
30
scripts/continuous-integration/github-workflows/install-dependencies.sh
Executable file
30
scripts/continuous-integration/github-workflows/install-dependencies.sh
Executable file
@ -0,0 +1,30 @@
|
||||
#!/bin/bash -e
|
||||
set -e
|
||||
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
|
||||
echo "==Linux===="
|
||||
sudo apt-get update
|
||||
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;
|
||||
brew install gperf openssl coreutils
|
||||
elif [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
|
||||
echo "==Windows=="
|
||||
#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
|
||||
else
|
||||
echo "Unrecognized os: $OPERATING_SYSTEM_NAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd ./scripts/core/
|
||||
./install-dependencies.sh
|
||||
cd ../../
|
@ -0,0 +1,115 @@
|
||||
#!/bin/bash -e
|
||||
set -e
|
||||
|
||||
export MAVEN_OPTS=""
|
||||
|
||||
echo "MATRIX_OS: $GH_MATRIX_OS"
|
||||
echo "MATRIX_ARCH: $GH_MATRIX_ARCH"
|
||||
|
||||
if [ "$GH_MATRIX_OS" == "macos-10.15" ]; then
|
||||
export PCRE="E"
|
||||
else
|
||||
export PCRE="r"
|
||||
fi
|
||||
|
||||
GH_CPU_ARCH=$(echo "$GH_MATRIX_ARCH" | sed -$PCRE 's/^(linux\/|windows\/|macos\/)?(386|amd64|arm64|ppc64le|armhf|s390x)$/\2/g')
|
||||
export GH_CPU_ARCH
|
||||
GH_OS_NAME=$(echo "$GH_MATRIX_OS" | sed -$PCRE 's/^(linux|ubuntu|windows|macos).*$/\1/g')
|
||||
if [[ $GH_OS_NAME == "ubuntu" ]]; then
|
||||
GH_OS_NAME="linux"
|
||||
fi
|
||||
export GH_OS_NAME
|
||||
|
||||
if [[ "$GH_CPU_ARCH" == "arm64" ]]; then
|
||||
export CPU_ARCHITECTURE_NAME="aarch64"
|
||||
elif [[ "$GH_CPU_ARCH" == "armhf" ]]; then
|
||||
export CPU_ARCHITECTURE_NAME="armhf"
|
||||
elif [[ "$GH_CPU_ARCH" == "s390x" ]]; then
|
||||
export CPU_ARCHITECTURE_NAME="s390x"
|
||||
elif [[ "$GH_CPU_ARCH" == "386" ]]; then
|
||||
export CPU_ARCHITECTURE_NAME="386"
|
||||
elif [[ "$GH_CPU_ARCH" == "amd64" ]]; then
|
||||
export CPU_ARCHITECTURE_NAME="amd64"
|
||||
elif [[ "$GH_CPU_ARCH" == "ppc64le" ]]; then
|
||||
export CPU_ARCHITECTURE_NAME="ppc64le"
|
||||
else
|
||||
echo "Unrecognized cpu arch: $GH_CPU_ARCH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${CPU_CORES_NUM}" ]; then
|
||||
export CPU_CORES_NUM="4"
|
||||
fi
|
||||
|
||||
if [[ "$GH_OS_NAME" == "windows" ]]; then
|
||||
export OPERATING_SYSTEM_NAME="windows"
|
||||
export OPERATING_SYSTEM_NAME_SHORT="win"
|
||||
elif [[ "$GH_OS_NAME" == "macos" ]]; then
|
||||
export OPERATING_SYSTEM_NAME="osx"
|
||||
export OPERATING_SYSTEM_NAME_SHORT="osx"
|
||||
elif [[ "$GH_OS_NAME" == "linux" ]]; then
|
||||
export OPERATING_SYSTEM_NAME="linux"
|
||||
export OPERATING_SYSTEM_NAME_SHORT="linux"
|
||||
else
|
||||
echo "Unrecognized os name: $GH_OS_NAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "====== Setup variables ======"
|
||||
if [[ "$OPERATING_SYSTEM_NAME" != "osx" ]]; then
|
||||
echo "Current root directory:"
|
||||
realpath .
|
||||
fi
|
||||
echo "============================="
|
||||
|
||||
# ====== OS Variables
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
|
||||
export CMAKE_BUILD_TYPE=MinSizeRel
|
||||
export BUILD_TYPE=MinSizeRel
|
||||
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="$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
|
||||
export CMAKE_EXTRA_ARGUMENTS="-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/"
|
||||
export CPU_CORES=" -- -j${CPU_CORES_NUM}"
|
||||
elif [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
|
||||
export BUILD_TYPE=MinSizeRel
|
||||
|
||||
export CPU_CORES=" -- -j${CPU_CORES_NUM}"
|
||||
fi
|
||||
|
||||
cd ./scripts/core/
|
||||
source ./setup-variables.sh
|
||||
cd ../../
|
||||
|
||||
# ====== Print variables
|
||||
echo "REVISION=${REVISION}"
|
||||
echo "BUILD_TYPE=${BUILD_TYPE}"
|
||||
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 "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_ARCHITECTURE_NAME=${CPU_ARCHITECTURE_NAME}"
|
||||
echo "CPU_CORES_NUM=${CPU_CORES_NUM}"
|
||||
echo "CPU_CORES=${CPU_CORES}"
|
||||
echo "GH_OS_NAME=${GH_OS_NAME}"
|
||||
echo "GH_MATRIX_ARCH=${GH_MATRIX_ARCH}"
|
||||
echo "OPERATING_SYSTEM_NAME=${OPERATING_SYSTEM_NAME}"
|
||||
echo "OPERATING_SYSTEM_NAME_SHORT=${OPERATING_SYSTEM_NAME_SHORT}"
|
||||
echo "SRC_TDJNI_LIBNAME=${SRC_TDJNI_LIBNAME}"
|
||||
echo "DEST_TDJNI_LIBNAME=${DEST_TDJNI_LIBNAME}"
|
8
scripts/core/build_generated_maven_project.sh
Executable file
8
scripts/core/build_generated_maven_project.sh
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash -e
|
||||
cd ../../generated
|
||||
|
||||
[ -f ./src/main/java/it/tdlight/jni/TdApi.java ] && rm ./src/main/java/it/tdlight/jni/TdApi.java
|
||||
mvn -B clean install
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
21
scripts/core/build_generated_tdapi_maven_project.sh
Executable file
21
scripts/core/build_generated_tdapi_maven_project.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# API_TYPE = <legacy | sealed>
|
||||
|
||||
# Check variables correctness
|
||||
if [ -z "${API_TYPE}" ]; then
|
||||
echo "Missing parameter: API_TYPE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Print details
|
||||
echo "Building TdApi package..."
|
||||
echo "Current directory: $(pwd)"
|
||||
echo "API type: ${API_TYPE}"
|
||||
|
||||
cd ../../generated-"$API_TYPE"
|
||||
|
||||
mvn -B "-D${API_TYPE}" clean install
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
8
scripts/core/clean-all.sh
Executable file
8
scripts/core/clean-all.sh
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
cd ../../
|
||||
|
||||
rm -r generated
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
63
scripts/core/compile_td.sh
Executable file
63
scripts/core/compile_td.sh
Executable file
@ -0,0 +1,63 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# BUILD_TYPE = <Debug | Release | RelWithDebInfo | MinSizeRel>
|
||||
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
|
||||
# OTHER REQUIRED ENVIRONMENT VARIABLES:
|
||||
# CMAKE_EXTRA_ARGUMENTS = <args>
|
||||
|
||||
# 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 ../../
|
||||
|
||||
# Print details
|
||||
echo "Compiling td..."
|
||||
echo "Current directory: $(pwd)"
|
||||
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}'"
|
||||
|
||||
# Delete old data
|
||||
echo "Deleting old data..."
|
||||
[ -d ./generated/td_bin/ ] && rm -r ./generated/td_bin/
|
||||
|
||||
# Create missing folders
|
||||
echo "Creating missing folders..."
|
||||
[ -d ./generated/td_bin/ ] || mkdir ./generated/td_bin/
|
||||
|
||||
|
||||
# Build
|
||||
echo "Compiling ${IMPLEMENTATION_NAME} td..."
|
||||
cd ./generated/td_build/
|
||||
cmake --build . --target install --config "${BUILD_TYPE}" ${CPU_CORES}
|
||||
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
132
scripts/core/compile_tdjni.sh
Executable file
132
scripts/core/compile_tdjni.sh
Executable file
@ -0,0 +1,132 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# OPERATING_SYSTEM_NAME_SHORT = <win | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# BUILD_TYPE = <Debug | Release | RelWithDebInfo | MinSizeRel>
|
||||
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
|
||||
# OTHER REQUIRED ENVIRONMENT VARIABLES:
|
||||
# CMAKE_EXTRA_ARGUMENTS = <args>
|
||||
# OPTIONAL ENVIRONMENT VARIABLES:
|
||||
# CROSS_BUILD_DEPS_DIR = <args>
|
||||
|
||||
# Check variables correctness
|
||||
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
|
||||
echo "Missing parameter: OPERATING_SYSTEM_NAME"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${OPERATING_SYSTEM_NAME_SHORT}" ]; then
|
||||
echo "Missing parameter: OPERATING_SYSTEM_NAME_SHORT"
|
||||
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 ../../
|
||||
JAVA_API_PACKAGE_PATH="it/tdlight/jni"
|
||||
JAVA_LIB_PACKAGE_PATH="it/tdlight/tdnative"
|
||||
|
||||
# Print details
|
||||
echo "Compiling tdjni..."
|
||||
echo "Current directory: $(pwd)"
|
||||
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}'"
|
||||
echo "JAVA_API_PACKAGE_PATH: '${JAVA_API_PACKAGE_PATH}'"
|
||||
echo "JAVA_LIB_PACKAGE_PATH: '${JAVA_LIB_PACKAGE_PATH}'"
|
||||
|
||||
# Delete old data
|
||||
echo "Deleting old data..."
|
||||
[ -d ./generated/tdjni_build/ ] && rm -r ./generated/tdjni_build/
|
||||
[ -d ./generated/tdjni_bin/ ] && rm -r ./generated/tdjni_bin/
|
||||
[ -d ./generated/tdjni_docs/ ] && rm -r ./generated/tdjni_docs/
|
||||
[ -d ./generated/src/main/jni-cpp-src/ ] && rm -r ./generated/src/main/jni-cpp-src/
|
||||
[ -d ./generated/src/main/jni-java-src/ ] && rm -r ./generated/src/main/jni-java-src/
|
||||
|
||||
# Create missing folders
|
||||
echo "Creating missing folders..."
|
||||
[ -d ./generated/tdjni_build/ ] || mkdir ./generated/tdjni_build/
|
||||
[ -d ./generated/tdjni_bin/ ] || mkdir ./generated/tdjni_bin/
|
||||
[ -d ./generated/tdjni_docs/ ] || mkdir ./generated/tdjni_docs/
|
||||
|
||||
# Copy source files
|
||||
echo "Copying source files..."
|
||||
cp -r ./src/main/jni-cpp-src/common/. ./generated/src/main/jni-cpp-src
|
||||
cp -r ./src/main/jni-cpp-src/${IMPLEMENTATION_NAME}/. ./generated/src/main/jni-cpp-src
|
||||
cp -r ./src/main/jni-java-src ./generated/src/main/jni-java-src
|
||||
|
||||
# Create missing jni-src folders
|
||||
echo "Creating missing jni-src folders..."
|
||||
[ -d ./generated/src/main/jni-java-src/${JAVA_API_PACKAGE_PATH} ] || mkdir -p ./generated/src/main/jni-java-src/${JAVA_API_PACKAGE_PATH}
|
||||
|
||||
# Copy executables
|
||||
echo "Copying executables..."
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
|
||||
TD_GENERATED_BINARIES_DIR=$(realpath -m ./generated/td_tools/td/generate/Release)
|
||||
else
|
||||
TD_GENERATED_BINARIES_DIR=$(realpath -m ./generated/td_tools/td/generate)
|
||||
fi
|
||||
export TD_GENERATED_BINARIES_DIR
|
||||
|
||||
# Configure cmake
|
||||
echo "Configuring CMake..."
|
||||
cd ./generated/tdjni_build/
|
||||
|
||||
CMAKE_EXTRA_ARGUMENTS_TDJNI=""
|
||||
if [[ -n "$CROSS_BUILD_DEPS_DIR" ]]; then
|
||||
# shellcheck disable=SC2089
|
||||
CMAKE_EXTRA_ARGUMENTS_TDJNI="${CMAKE_EXTRA_ARGUMENTS_TDJNI} -DCMAKE_TOOLCHAIN_FILE=${CROSS_BUILD_DEPS_DIR}/toolchain.cmake"
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
cmake \
|
||||
"-DCMAKE_BUILD_TYPE=${BUILD_TYPE}" \
|
||||
-DTD_GENERATED_BINARIES_DIR=${TD_GENERATED_BINARIES_DIR} \
|
||||
"-DTD_SRC_DIR=$(realpath -m ../implementation/)" \
|
||||
"-DTDNATIVES_BIN_DIR=$(realpath -m ../tdjni_bin/)" \
|
||||
"-DTDNATIVES_DOCS_BIN_DIR=$(realpath -m ../tdjni_docs/)" \
|
||||
"-DTd_DIR=$(realpath -m ../td_bin/lib/cmake/Td/)" \
|
||||
"-DJAVA_SRC_DIR=$(realpath -m ../src/main/jni-java-src/)" \
|
||||
"-DTDNATIVES_CPP_SRC_DIR:PATH=$(realpath -m ../src/main/jni-cpp-src/)" \
|
||||
${CMAKE_EXTRA_ARGUMENTS_TDJNI} \
|
||||
${CMAKE_EXTRA_ARGUMENTS} \
|
||||
"$(realpath -m ../src/main/jni-cpp-src/)"
|
||||
|
||||
# Build
|
||||
echo "Compiling ${IMPLEMENTATION_NAME} jni..."
|
||||
cmake --build . --target install --config "${BUILD_TYPE}" ${CPU_CORES}
|
||||
cd ..
|
||||
|
||||
# Copy to resources
|
||||
echo "Copying to resources..."
|
||||
[ -d ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/ ] || mkdir -p ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
|
||||
cp ./tdjni_bin/tdjni.dll ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/tdjni.dll
|
||||
elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then
|
||||
cp ./tdjni_bin/libtdjni.dylib ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/tdjni.dylib
|
||||
elif [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
|
||||
cp ./tdjni_bin/libtdjni.so ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/tdjni.so
|
||||
fi
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
87
scripts/core/configure_td.sh
Executable file
87
scripts/core/configure_td.sh
Executable file
@ -0,0 +1,87 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# BUILD_TYPE = <Debug | Release | RelWithDebInfo | MinSizeRel>
|
||||
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
|
||||
# OTHER REQUIRED ENVIRONMENT VARIABLES:
|
||||
# CMAKE_EXTRA_ARGUMENTS = <args>
|
||||
|
||||
# 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 ../../
|
||||
|
||||
# Print details
|
||||
echo "Configuring td..."
|
||||
echo "Current directory: $(pwd)"
|
||||
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}'"
|
||||
|
||||
# Delete old data
|
||||
echo "Deleting old data..."
|
||||
[ -d ./generated/td_build/ ] && rm -r ./generated/td_build/
|
||||
|
||||
# Create missing folders
|
||||
echo "Creating missing folders..."
|
||||
[ -d ./generated/td_build/ ] || mkdir ./generated/td_build/
|
||||
|
||||
# Configure cmake
|
||||
echo "Configuring CMake..."
|
||||
cd ./generated/td_build/
|
||||
|
||||
if [[ "$IMPLEMENTATION_NAME" = "tdlight" ]]; then
|
||||
CMAKE_EXTRA_ARGUMENTS_TD="-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON"
|
||||
else
|
||||
CMAKE_EXTRA_ARGUMENTS_TD=""
|
||||
fi
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
|
||||
CMAKE_EXTRA_ARGUMENTS_TD="${CMAKE_EXTRA_ARGUMENTS_TD} -DTD_ENABLE_LTO=ON"
|
||||
fi
|
||||
if [[ -n "$CROSS_BUILD_DEPS_DIR" ]]; then
|
||||
# shellcheck disable=SC2089
|
||||
CMAKE_EXTRA_ARGUMENTS_TD="${CMAKE_EXTRA_ARGUMENTS_TD} -DCMAKE_TOOLCHAIN_FILE=${CROSS_BUILD_DEPS_DIR}/toolchain.cmake"
|
||||
fi
|
||||
export CMAKE_EXTRA_ARGUMENTS_TD
|
||||
|
||||
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 \
|
||||
${CMAKE_EXTRA_ARGUMENTS_TD} \
|
||||
${CMAKE_EXTRA_ARGUMENTS} \
|
||||
../implementation
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
28
scripts/core/deploy_release.sh
Executable file
28
scripts/core/deploy_release.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash -e
|
||||
# OTHER REQUIRED ENVIRONMENT VARIABLES:
|
||||
# REVISION = <revision>
|
||||
# OTHER ENVIRONMENT VARIABLES:
|
||||
# API_TYPE = <legacy|sealed>
|
||||
|
||||
# Check variables correctness
|
||||
if [ -z "${REVISION}" ]; then
|
||||
echo "Missing parameter: REVISION"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source ./setup-variables.sh
|
||||
FALLBACK_API_TYPE="sealed"
|
||||
SAFE_VERSION_NAME="v4_0_${REVISION}"
|
||||
REVISION_SUFFIX=""
|
||||
REVISION_MVN="4.0.${REVISION}${REVISION_SUFFIX}"
|
||||
|
||||
if [ -z "${API_TYPE}" ]; then
|
||||
cd ../../generated
|
||||
else
|
||||
cd "../../generated-${API_TYPE}"
|
||||
fi
|
||||
|
||||
mvn -B -Drevision="${REVISION_MVN}" -DsafeVersionName="${SAFE_VERSION_NAME}" "-D${API_TYPE:-${FALLBACK_API_TYPE}}" clean deploy
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
19
scripts/core/deploy_snapshot.sh
Executable file
19
scripts/core/deploy_snapshot.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/bash -e
|
||||
# OTHER ENVIRONMENT VARIABLES:
|
||||
# API_TYPE = <legacy|sealed>
|
||||
|
||||
if [ -z "${API_TYPE}" ]; then
|
||||
cd ../../generated
|
||||
else
|
||||
cd "../../generated-${API_TYPE}"
|
||||
fi
|
||||
|
||||
FALLBACK_API_TYPE="sealed"
|
||||
SAFE_VERSION_NAME="v4_0_0"
|
||||
REVISION_SUFFIX="-SNAPSHOT"
|
||||
REVISION_MVN="4.0.0${REVISION_SUFFIX}"
|
||||
|
||||
mvn -B -Drevision="${REVISION_MVN}" -DsafeVersionName="${SAFE_VERSION_NAME}" "-D${API_TYPE:-${FALLBACK_API_TYPE}}" deploy
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
54
scripts/core/generate_maven_project.sh
Executable file
54
scripts/core/generate_maven_project.sh
Executable file
@ -0,0 +1,54 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
|
||||
# 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
|
||||
|
||||
source ./setup-variables.sh
|
||||
|
||||
cd ../../
|
||||
|
||||
# Print details
|
||||
echo "Generating maven project..."
|
||||
echo "Current directory: $(pwd)"
|
||||
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
|
||||
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
|
||||
echo "Td implementation: ${IMPLEMENTATION_NAME}"
|
||||
|
||||
# Delete old data
|
||||
echo "Deleting old data..."
|
||||
[ -d ./generated/ ] && rm -r ./generated/
|
||||
|
||||
# Create missing folders
|
||||
echo "Creating missing folders..."
|
||||
[ -d ./generated/ ] || mkdir ./generated/
|
||||
[ -d ./src/main/java/ ] || mkdir -p ./src/main/java/
|
||||
[ -d ./src/main/resources/ ] || mkdir -p ./src/main/resources/
|
||||
[ -d ./generated/src/main/ ] || mkdir -p ./generated/src/main/
|
||||
[ -d ./generated/src/main/ ] || mkdir -p ./generated/src/main/
|
||||
|
||||
# Generate pom.xml
|
||||
echo "Generating pom.xml..."
|
||||
sed -f "src/main/replacements/replace-${OPERATING_SYSTEM_NAME}-${CPU_ARCHITECTURE_NAME}-${IMPLEMENTATION_NAME}-sealed.sed" src/main/jni-project-src/pom.template.xml > generated/pom.xml
|
||||
|
||||
# Copy source files
|
||||
echo "Copying source files..."
|
||||
cp -r ./src/main/java ./generated/src/main/java
|
||||
cp -r ./src/main/resources ./generated/src/main/resources
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
106
scripts/core/generate_td_tools.sh
Executable file
106
scripts/core/generate_td_tools.sh
Executable file
@ -0,0 +1,106 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
|
||||
# OTHER REQUIRED ENVIRONMENT VARIABLES:
|
||||
# CMAKE_EXTRA_ARGUMENTS = <args>
|
||||
|
||||
# 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 "${CPU_CORES}" ]; then
|
||||
echo "Missing parameter: CPU_CORES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source ./setup-variables.sh
|
||||
|
||||
cd ../../
|
||||
|
||||
# Print details
|
||||
echo "Generating td tools..."
|
||||
echo "Current directory: $(pwd)"
|
||||
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
|
||||
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
|
||||
echo "Td implementation: ${IMPLEMENTATION_NAME}"
|
||||
echo "CPU cores count: ${CPU_CORES}"
|
||||
echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'"
|
||||
|
||||
# Delete old data
|
||||
echo "Deleting old data..."
|
||||
[ -d ./generated/implementation/ ] && rm -r ./generated/implementation/
|
||||
[ -d ./generated/td_tools/ ] && rm -r ./generated/td_tools/
|
||||
|
||||
# Create missing folders
|
||||
echo "Creating missing folders..."
|
||||
[ -d "./generated" ] || mkdir "./generated"
|
||||
|
||||
# Copy implementation files
|
||||
echo "Copying implementation files..."
|
||||
cp -r implementations/${IMPLEMENTATION_NAME} ./generated/implementation
|
||||
|
||||
# Patch implementation files (sed replacements)
|
||||
echo "Patching implementation files using sed replacements..."
|
||||
#Fix bug: https://github.com/tdlib/td/issues/1238
|
||||
if [[ "$IMPLEMENTATION_NAME" = "tdlib" ]]; then
|
||||
if [[ "$OPERATING_SYSTEM_NAME" = "osx" ]]; then
|
||||
sed -f "src/main/replacements/fix-tdlib-tdutils-windows-cmake.sed" -i "" ./generated/implementation/tdutils/CMakeLists.txt
|
||||
else
|
||||
sed -f "src/main/replacements/fix-tdlib-tdutils-windows-cmake.sed" -i"" ./generated/implementation/tdutils/CMakeLists.txt
|
||||
fi
|
||||
fi
|
||||
|
||||
# Patch implementation files (git patches)
|
||||
echo "Patching implementation files using git patches..."
|
||||
if [[ "$IMPLEMENTATION_NAME" = "tdlib" ]]; then
|
||||
if [[ -d "src/main/patches/tdlib" && "$(ls -A src/main/patches/tdlib)" ]]; then
|
||||
git apply --directory="generated/implementation" src/main/patches/tdlib/*.patch
|
||||
fi
|
||||
fi
|
||||
if [[ "$IMPLEMENTATION_NAME" = "tdlight" ]]; then
|
||||
if [[ -d "src/main/patches/tdlight" && "$(ls -A src/main/patches/tdlight)" ]]; then
|
||||
git apply --directory="generated/implementation" src/main/patches/tdlight/*.patch
|
||||
fi
|
||||
fi
|
||||
|
||||
# Configure cmake
|
||||
echo "Configuring CMake..."
|
||||
mkdir ./generated/td_tools/
|
||||
cd ./generated/td_tools/
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON ${CMAKE_EXTRA_ARGUMENTS} ../implementation/
|
||||
|
||||
# Run cmake to generate common tools
|
||||
echo "Generating cross compilation tools..."
|
||||
cmake --build . --target prepare_cross_compiling --config Release ${CPU_CORES}
|
||||
|
||||
# Run cmake to generate java tools
|
||||
echo "Generating java tools..."
|
||||
cmake --build . --target td_generate_java_api --config Release ${CPU_CORES}
|
||||
|
||||
# Copy tlo files
|
||||
echo "Copying *.tlo files..."
|
||||
cp -r ../implementation/td/generate/auto/tlo/. ../implementation/td/generate/scheme/.
|
||||
|
||||
|
||||
echo "Generated executable '$(realpath -m ./td/generate/generate_common)'"
|
||||
echo "Generated executable '$(realpath -m ./td/generate/td_generate_java_api)'"
|
||||
echo "Generated executable '$(realpath -m ./td/generate/td_generate_json)'"
|
||||
echo "Generated executable '$(realpath -m ../implementation/td/generate/JavadocTlDocumentationGenerator.php)'"
|
||||
echo "Generated executable '$(realpath -m ../implementation/td/generate/TlDocumentationGenerator.php)'"
|
||||
echo "Generated executable '$(realpath -m ../implementation/td/generate/scheme/td_api.tl)'"
|
||||
echo "Generated executable '$(realpath -m ../implementation/td/generate/scheme/td_api.tlo)'"
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
120
scripts/core/generate_tdapi_java_file.sh
Executable file
120
scripts/core/generate_tdapi_java_file.sh
Executable file
@ -0,0 +1,120 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# API_TYPE = <legacy | sealed>
|
||||
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
|
||||
# OTHER REQUIRED ENVIRONMENT VARIABLES:
|
||||
# CMAKE_EXTRA_ARGUMENTS = <args>
|
||||
|
||||
# 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 "${API_TYPE}" ]; then
|
||||
echo "Missing parameter: API_TYPE"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${CPU_CORES}" ]; then
|
||||
echo "Missing parameter: CPU_CORES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source ./setup-variables.sh
|
||||
|
||||
if [[ "$API_TYPE" == "sealed" ]]; then
|
||||
MIN_JDK_VERSION="17"
|
||||
SEALED="true"
|
||||
else
|
||||
MIN_JDK_VERSION="8"
|
||||
SEALED="false"
|
||||
fi
|
||||
|
||||
cd ../../
|
||||
JAVA_API_PACKAGE_PATH="it/tdlight/jni"
|
||||
JAVA_LIB_PACKAGE_PATH="it/tdlight/tdnative"
|
||||
|
||||
# Print details
|
||||
echo "Generating TdApi.java..."
|
||||
echo "Current directory: $(pwd)"
|
||||
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
|
||||
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
|
||||
echo "Td implementation: ${IMPLEMENTATION_NAME}"
|
||||
echo "API type: ${API_TYPE}"
|
||||
echo "Min jdk version: ${MIN_JDK_VERSION}"
|
||||
echo "Sealed: ${SEALED}"
|
||||
echo "CPU cores count: ${CPU_CORES}"
|
||||
echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'"
|
||||
echo "JAVA_API_PACKAGE_PATH: '${JAVA_API_PACKAGE_PATH}'"
|
||||
echo "JAVA_LIB_PACKAGE_PATH: '${JAVA_LIB_PACKAGE_PATH}'"
|
||||
|
||||
# Setup constants
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
|
||||
export PYTHON_EXECUTABLE="python"
|
||||
else
|
||||
export PYTHON_EXECUTABLE="python3"
|
||||
fi
|
||||
|
||||
# Delete old data
|
||||
echo "Deleting old data..."
|
||||
[ -d ./generated-"$API_TYPE"/tdjni_build/ ] && rm -r ./generated-"$API_TYPE"/tdjni_build/
|
||||
[ -d ./generated-"$API_TYPE"/tdjni_bin/ ] && rm -r ./generated-"$API_TYPE"/tdjni_bin/
|
||||
[ -d ./generated-"$API_TYPE"/tdjni_docs/ ] && rm -r ./generated-"$API_TYPE"/tdjni_docs/
|
||||
[ -f ./generated-"$API_TYPE"/src/main/java17/${JAVA_API_PACKAGE_PATH}/TdApi.java ] && rm ./generated-"$API_TYPE"/src/main/java17/${JAVA_API_PACKAGE_PATH}/TdApi.java
|
||||
[ -f ./generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java ] && rm ./generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java
|
||||
|
||||
# Create missing folders
|
||||
echo "Creating missing folders..."
|
||||
[ -d "./generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/" ] || mkdir -p "./generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/"
|
||||
[ -d "./generated-$API_TYPE/src/main/java/${JAVA_LIB_PACKAGE_PATH}/" ] || mkdir -p "./generated-$API_TYPE/src/main/java/${JAVA_LIB_PACKAGE_PATH}/"
|
||||
[ -d ./generated-"$API_TYPE"/tdjni_build/ ] || mkdir ./generated-"$API_TYPE"/tdjni_build/
|
||||
[ -d ./generated-"$API_TYPE"/tdjni_bin/ ] || mkdir ./generated-"$API_TYPE"/tdjni_bin/
|
||||
[ -d ./generated-"$API_TYPE"/tdjni_docs/ ] || mkdir ./generated-"$API_TYPE"/tdjni_docs/
|
||||
|
||||
# Copy executables
|
||||
echo "Copying executables..."
|
||||
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
|
||||
TD_GENERATED_BINARIES_DIR="$(realpath -m ./generated/td_tools/td/generate/Release)"
|
||||
else
|
||||
TD_GENERATED_BINARIES_DIR="$(realpath -m ./generated/td_tools/td/generate)"
|
||||
fi
|
||||
export TD_GENERATED_BINARIES_DIR
|
||||
|
||||
# Configure cmake
|
||||
echo "Configuring CMake..."
|
||||
cd ./generated/
|
||||
echo "Telegram source path: '$(realpath -m ./implementation/)'"
|
||||
|
||||
# Run cmake to generate TdApi.java
|
||||
echo "Generating TdApi.java..."
|
||||
./td_tools/td/generate/td_generate_java_api TdApi "./implementation/td/generate/scheme/td_api.tlo" "../generated-$API_TYPE/src/main/java" "$JAVA_API_PACKAGE_PATH"
|
||||
php ./implementation/td/generate/JavadocTlDocumentationGenerator.php "./implementation/td/generate/scheme/td_api.tl" "../generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java"
|
||||
mv "../generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java" "../generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/php_TdApi.java"
|
||||
|
||||
echo "Patching TdApi.java for Java ${MIN_JDK_VERSION}..."
|
||||
${PYTHON_EXECUTABLE} ../scripts/core/tdlib-serializer "$(realpath -m ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/php_TdApi.java)" "$(realpath -m ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/unexpanded_TdApi.java)" "$(realpath -m ../scripts/core/tdlib-serializer/headers.txt)" "$SEALED"
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then
|
||||
unexpand --tabs=2 ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/unexpanded_TdApi.java > ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java
|
||||
else
|
||||
unexpand -t 2 ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/unexpanded_TdApi.java > ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java
|
||||
fi
|
||||
rm ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/unexpanded_TdApi.java
|
||||
|
||||
echo "Generated '$(realpath -m ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java)'"
|
||||
|
||||
|
||||
rm ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/php_TdApi.java
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
57
scripts/core/generate_tdapi_maven_project.sh
Executable file
57
scripts/core/generate_tdapi_maven_project.sh
Executable file
@ -0,0 +1,57 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# API_TYPE = <legacy | sealed>
|
||||
|
||||
# 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 "${API_TYPE}" ]; then
|
||||
echo "Missing parameter: API_TYPE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source ./setup-variables.sh
|
||||
|
||||
cd ../../
|
||||
|
||||
# Print details
|
||||
echo "Generating maven project..."
|
||||
echo "Current directory: $(pwd)"
|
||||
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
|
||||
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
|
||||
echo "Td implementation: ${IMPLEMENTATION_NAME}"
|
||||
echo "API type: ${API_TYPE}"
|
||||
|
||||
# Delete old data
|
||||
echo "Deleting old data..."
|
||||
[ -d "./generated-${API_TYPE}" ] && rm -r "./generated-${API_TYPE}"
|
||||
|
||||
# Create missing folders
|
||||
echo "Creating missing folders..."
|
||||
[ -d "./generated-${API_TYPE}" ] || mkdir "./generated-${API_TYPE}"
|
||||
[ -d "./generated-${API_TYPE}/src/main" ] || mkdir -p "./generated-${API_TYPE}/src/main"
|
||||
|
||||
# Generate pom.xml
|
||||
echo "Generating pom.xml..."
|
||||
sed -f "src/main/replacements/replace-${OPERATING_SYSTEM_NAME}-${CPU_ARCHITECTURE_NAME}-${IMPLEMENTATION_NAME}-${API_TYPE}.sed" src/main/tdapi-project-src/pom.template.xml > "./generated-${API_TYPE}/pom.xml"
|
||||
|
||||
# Copy source files
|
||||
echo "Copying source files..."
|
||||
[ -d ./src/main/tdapi-java ] && cp -r ./src/main/tdapi-java "./generated-${API_TYPE}/src/main/java"
|
||||
[ -d ./src/main/tdapi-resources ] && cp -r ./src/main/tdapi-resources "./generated-${API_TYPE}/src/main/resources"
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
119
scripts/core/install-dependencies.sh
Executable file
119
scripts/core/install-dependencies.sh
Executable file
@ -0,0 +1,119 @@
|
||||
#!/bin/bash -e
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# BUILD_TYPE = <Debug | Release | RelWithDebInfo | MinSizeRel>
|
||||
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
|
||||
# OTHER REQUIRED ENVIRONMENT VARIABLES:
|
||||
# CMAKE_EXTRA_ARGUMENTS = <args>
|
||||
# OPTIONAL ENVIRONMENT VARIABLES:
|
||||
# CROSS_BUILD_DEPS_DIR = <args>
|
||||
|
||||
# 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}'"
|
||||
echo "Cross build deps dir: '${CROSS_BUILD_DEPS_DIR}'"
|
||||
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
|
||||
if [ -n "${CROSS_BUILD_DEPS_DIR}" ]; then
|
||||
|
||||
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)
|
||||
echo "Fixed cross openjdk path: '${CROSS_OPENJDK_PATH}'"
|
||||
}
|
||||
|
||||
check_jdk_existance() {
|
||||
if [[ ! -d "$CROSS_OPENJDK_PATH" ]]; then
|
||||
echo "Can't find cross OpenJDK at location $CROSS_OPENJDK_PATH"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
fix_jdk_path
|
||||
check_jdk_existance
|
||||
|
||||
# Create toolchain
|
||||
echo "Creating toolchain file..."
|
||||
cd "$ROOT_DIR"
|
||||
{
|
||||
echo "set(CMAKE_SYSTEM_PROCESSOR ${CPU_ARCH_LINUX})";
|
||||
echo "set(CMAKE_C_COMPILER ${CROSS_CC})";
|
||||
echo "set(CMAKE_C_COMPILER_TARGET ${CLANG_TRIPLE})";
|
||||
echo "set(CMAKE_CXX_COMPILER ${CROSS_CXX})";
|
||||
echo "set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TRIPLE})";
|
||||
echo "set(CMAKE_ASM_COMPILER ${CROSS_CXX})";
|
||||
echo "set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TRIPLE})";
|
||||
echo "set(CMAKE_LIBRARY_PATH \"$CROSS_BUILD_DEPS_DIR/\")";
|
||||
echo "include_directories(\"${CROSS_BUILD_DEPS_DIR}/usr/include/${CPU_ARCH_LINUX}-linux-${CPU_COMPILATION_TOOL}/\")";
|
||||
echo "SET(CMAKE_FIND_ROOT_PATH \"$CROSS_BUILD_DEPS_DIR\" \"$JAVA_HOME\" \"/\" \"$JAVA_HOME/include\")";
|
||||
echo "include_directories(\"${CROSS_OPENJDK_PATH}/include\")";
|
||||
echo "include_directories(\"${CROSS_OPENJDK_PATH}/include/linux\")";
|
||||
|
||||
echo "SET(JAVA_HOME \"$JAVA_HOME/\")";
|
||||
echo "SET(JAVA_INCLUDE_PATH \"$JAVA_HOME/include\")";
|
||||
echo "SET(JAVA_AWT_INCLUDE_PATH \"$JAVA_HOME/include\")";
|
||||
echo "SET(JAVA_INCLUDE_PATH2 \"$JAVA_HOME/include/linux\")";
|
||||
|
||||
echo "SET(JAVA_JVM_LIBRARY \"$CROSS_OPENJDK_PATH/lib/${JAVA_INSTALLATION_TYPE}/libjvm.so\")";
|
||||
echo "SET(JAVA_AWT_LIBRARY \"$CROSS_OPENJDK_PATH/lib/libawt.so\")";
|
||||
cat <<EOF
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
|
||||
# Use our definitions for compiler tools
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
|
||||
# Search for libraries and headers in the target directories only
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
EOF
|
||||
if [[ ${CPU_ARCHITECTURE_NAME} == "aarch64" || ${CPU_ARCHITECTURE_NAME} == "armhf" ]]; then
|
||||
cat <<EOF
|
||||
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||
set(CMAKE_USE_WIN32_THREADS_INIT 0)
|
||||
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
EOF
|
||||
fi
|
||||
} > "$CROSS_BUILD_DEPS_DIR/toolchain.cmake"
|
||||
fi
|
||||
fi;
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
125
scripts/core/setup-variables.sh
Executable file
125
scripts/core/setup-variables.sh
Executable file
@ -0,0 +1,125 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
if [[ "$CORE_VARIABLES_SET" != "YES" ]]; then
|
||||
echo "====== Setup variables ======"
|
||||
if [[ "$OPERATING_SYSTEM_NAME" != "osx" ]]; then
|
||||
echo "Current root directory:"
|
||||
realpath "."
|
||||
fi
|
||||
echo "============================="
|
||||
|
||||
# ====== CPU Architecture Variables
|
||||
if [[ "$CPU_ARCHITECTURE_NAME" == "aarch64" ]]; then
|
||||
export CPU_ARCH_JAVA="arm64"
|
||||
export CPU_ARCH_JAVA_INTERNAL="aarch64"
|
||||
export JAVA_INSTALLATION_TYPE="server"
|
||||
export CPU_ARCH_DPKG="arm64"
|
||||
export CPU_ARCH_CMAKE="aarch64"
|
||||
export CPU_ARCH_LINUX="aarch64"
|
||||
export CLANG_TRIPLE="aarch64-linux-gnu"
|
||||
export CPU_COMPILATION_TOOL="gnu"
|
||||
elif [[ "$CPU_ARCHITECTURE_NAME" == "armhf" ]]; then
|
||||
export CPU_ARCH_JAVA="armhf"
|
||||
export CPU_ARCH_JAVA_INTERNAL="arm"
|
||||
export JAVA_INSTALLATION_TYPE="server"
|
||||
export CPU_ARCH_DPKG="armhf"
|
||||
export CPU_ARCH_CMAKE="arm"
|
||||
export CPU_ARCH_LINUX="arm"
|
||||
export CLANG_TRIPLE="arm-linux-gnueabihf"
|
||||
export CPU_COMPILATION_TOOL="gnueabihf"
|
||||
elif [[ "$CPU_ARCHITECTURE_NAME" == "s390x" ]]; then
|
||||
export CPU_ARCH_JAVA="s390x"
|
||||
export CPU_ARCH_JAVA_INTERNAL="s390x"
|
||||
export JAVA_INSTALLATION_TYPE="server"
|
||||
export CPU_ARCH_DPKG="s390x"
|
||||
export CPU_ARCH_CMAKE="s390x"
|
||||
export CPU_ARCH_LINUX="s390x"
|
||||
export CLANG_TRIPLE="s390x-linux-gnu"
|
||||
export CPU_COMPILATION_TOOL="gnu"
|
||||
elif [[ "$CPU_ARCHITECTURE_NAME" == "386" ]]; then
|
||||
export CPU_ARCH_JAVA="386"
|
||||
export CPU_ARCH_JAVA_INTERNAL="i386"
|
||||
export JAVA_INSTALLATION_TYPE="server"
|
||||
export CPU_ARCH_DPKG="i386"
|
||||
export CPU_ARCH_CMAKE="i686"
|
||||
export CPU_ARCH_LINUX="i386"
|
||||
export CLANG_TRIPLE="i386-linux-gnu"
|
||||
export CPU_COMPILATION_TOOL="gnu"
|
||||
elif [[ "$CPU_ARCHITECTURE_NAME" == "amd64" ]]; then
|
||||
export CPU_ARCH_JAVA="amd64"
|
||||
export CPU_ARCH_JAVA_INTERNAL="amd64"
|
||||
export JAVA_INSTALLATION_TYPE="server"
|
||||
export CPU_ARCH_DPKG="amd64"
|
||||
export CPU_ARCH_CMAKE="x86_64"
|
||||
export CPU_ARCH_LINUX="x86_64"
|
||||
export CLANG_TRIPLE="x86_64-linux-gnu"
|
||||
export CPU_COMPILATION_TOOL="gnu"
|
||||
elif [[ "$CPU_ARCHITECTURE_NAME" == "ppc64le" ]]; then
|
||||
export CPU_ARCH_JAVA="ppc64le"
|
||||
export CPU_ARCH_JAVA_INTERNAL="ppc64le"
|
||||
export JAVA_INSTALLATION_TYPE="server"
|
||||
export CPU_ARCH_DPKG="ppc64el"
|
||||
export CPU_ARCH_CMAKE="powerpc64le"
|
||||
export CPU_ARCH_LINUX="powerpc64le"
|
||||
export CLANG_TRIPLE="powerpc64-linux-gnu"
|
||||
export CPU_COMPILATION_TOOL="gnu"
|
||||
else
|
||||
echo "Unrecognized cpu arch: $CPU_ARCHITECTURE_NAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${CPU_CORES_NUM}" ]; then
|
||||
export CPU_CORES_NUM="4"
|
||||
fi
|
||||
|
||||
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
|
||||
export CMAKE_EXTRA_ARGUMENTS_TDJNI="${CMAKE_EXTRA_ARGUMENTS_TDJNI} -DOPENSSL_USE_STATIC_LIBS=True"
|
||||
elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then
|
||||
export CMAKE_EXTRA_ARGUMENTS_TDJNI="${CMAKE_EXTRA_ARGUMENTS_TDJNI} -DOPENSSL_USE_STATIC_LIBS=True"
|
||||
elif [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
|
||||
export CMAKE_EXTRA_ARGUMENTS_TDJNI="${CMAKE_EXTRA_ARGUMENTS_TDJNI} -DTD_ENABLE_LTO=ON"
|
||||
if [[ "$CPU_ARCHITECTURE_NAME" == "386" ]] || [[ "$CPU_ARCHITECTURE_NAME" == "armhf" ]]; 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++"
|
||||
if [[ "${CPU_ARCH_CMAKE}" == "x86_64" && "${CPU_COMPILATION_TOOL}" == "gnu" ]]; then
|
||||
export CROSS_CC="gcc"
|
||||
export CROSS_CXX="g++"
|
||||
else
|
||||
export CROSS_CC="${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-gcc"
|
||||
export CROSS_CXX="${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-g++"
|
||||
fi
|
||||
fi
|
||||
|
||||
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
|
||||
|
||||
# ====== Print variables
|
||||
echo "========= Variables ========="
|
||||
echo "Variables"
|
||||
echo "JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS}"
|
||||
echo "CPU_ARCH_JAVA=${CPU_ARCH_JAVA}"
|
||||
echo "CPU_ARCH_JAVA_INTERNAL=${CPU_ARCH_JAVA_INTERNAL}"
|
||||
echo "JAVA_INSTALLATION_TYPE=${JAVA_INSTALLATION_TYPE}"
|
||||
echo "CPU_ARCH_DPKG=${CPU_ARCH_DPKG}"
|
||||
echo "CPU_ARCH_CMAKE=${CPU_ARCH_CMAKE}"
|
||||
echo "CPU_ARCH_LINUX=${CPU_ARCH_LINUX}"
|
||||
echo "CLANG_TRIPLE=${CLANG_TRIPLE}"
|
||||
echo "CPU_COMPILATION_TOOL=${CPU_COMPILATION_TOOL}"
|
||||
echo "CC=${CC}"
|
||||
echo "CXX=${CXX}"
|
||||
echo "CFLAGS=${CFLAGS}"
|
||||
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 "============================="
|
||||
|
||||
export CORE_VARIABLES_SET="YES"
|
||||
fi
|
1
scripts/core/tdlib-serializer
Submodule
1
scripts/core/tdlib-serializer
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 52c91733b5743a18303b6346f7d37530e03f4111
|
28
scripts/utils/compile-natives-package.sh
Executable file
28
scripts/utils/compile-natives-package.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash -e
|
||||
# This script compiles tdlight/tdlib jni binaries for your platform.
|
||||
# Fill the variables with your system details.
|
||||
#
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | armhf | ppc64le>
|
||||
# OPERATING_SYSTEM_NAME_SHORT = <win | linux | osx>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
|
||||
# CMAKE_EXTRA_ARGUMENTS = <args>
|
||||
# REVISION = <revision>
|
||||
# OPTIONAL ENVIRONMENT VARIABLES:
|
||||
# CROSS_BUILD_DEPS_DIR = <args>
|
||||
|
||||
cd ../core
|
||||
|
||||
source ./setup-variables.sh
|
||||
./install-dependencies.sh
|
||||
./generate_maven_project.sh
|
||||
./generate_td_tools.sh
|
||||
./configure_td.sh
|
||||
./compile_td.sh
|
||||
./compile_tdjni.sh
|
||||
./build_generated_maven_project.sh
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
33
scripts/utils/compile-tdapi-package.sh
Executable file
33
scripts/utils/compile-tdapi-package.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/bash -e
|
||||
# This script compiles tdlight/tdlib api for your platform.
|
||||
# Fill the variables with your system details.
|
||||
#
|
||||
# MAIN REQUIRED ENVIRONMENT VARIABLES:
|
||||
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
|
||||
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | armhf | ppc64le>
|
||||
# OPERATING_SYSTEM_NAME_SHORT = <win | linux | osx>
|
||||
# IMPLEMENTATION_NAME = <tdlib | tdlight>
|
||||
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
|
||||
# CMAKE_EXTRA_ARGUMENTS = <args>
|
||||
# REVISION = <revision>
|
||||
# OPTIONAL ENVIRONMENT VARIABLES:
|
||||
# CROSS_BUILD_DEPS_DIR = <args>
|
||||
|
||||
cd ../core
|
||||
|
||||
source ./setup-variables.sh
|
||||
./install-dependencies.sh
|
||||
|
||||
./generate_td_tools.sh
|
||||
./configure_td.sh
|
||||
|
||||
API_TYPE=legacy ./generate_tdapi_maven_project.sh
|
||||
API_TYPE=legacy ./generate_tdapi_java_file.sh
|
||||
API_TYPE=legacy ./build_generated_tdapi_maven_project.sh
|
||||
|
||||
API_TYPE=sealed ./generate_tdapi_maven_project.sh
|
||||
API_TYPE=sealed ./generate_tdapi_java_file.sh
|
||||
API_TYPE=sealed ./build_generated_tdapi_maven_project.sh
|
||||
|
||||
echo "Done."
|
||||
exit 0
|
@ -0,0 +1,40 @@
|
||||
package it.tdlight.jni.implementation_name.operating_system_name.cpu_architecture_name.version;
|
||||
|
||||
import java.lang.ClassLoader;
|
||||
import java.io.InputStream;
|
||||
import java.io.File;
|
||||
|
||||
public class LoadLibrary {
|
||||
public static InputStream getLibraryAsStream() {
|
||||
return LoadLibrary.class.getResourceAsStream("/libs/" + getOsName() + "/" + getArchName() + "/"
|
||||
+ getFileName() + getExtension());
|
||||
}
|
||||
|
||||
private static String getOsName() {
|
||||
return LoadLibrary.class.getPackage().getName().split("\\.")[4];
|
||||
}
|
||||
|
||||
private static String getArchName() {
|
||||
return LoadLibrary.class.getPackage().getName().split("\\.")[5];
|
||||
}
|
||||
|
||||
private static String getVersionName() {
|
||||
return LoadLibrary.class.getPackage().getName().split("\\.")[6];
|
||||
}
|
||||
|
||||
private static String getFileName() {
|
||||
return "tdjni";
|
||||
}
|
||||
|
||||
private static String getExtension() {
|
||||
switch (getOsName()) {
|
||||
case "win":
|
||||
return ".dll";
|
||||
case "osx":
|
||||
return ".dylib";
|
||||
case "linux":
|
||||
default:
|
||||
return ".so";
|
||||
}
|
||||
}
|
||||
}
|
@ -12,8 +12,7 @@ endif()
|
||||
find_package(Td REQUIRED)
|
||||
|
||||
if (NOT JNI_FOUND)
|
||||
SET(JNI_FIND_REQUIRED_AWT FALSE CACHE BOOL "" FORCE)
|
||||
find_package(JNI REQUIRED COMPONENTS JVM)
|
||||
find_package(JNI REQUIRED)
|
||||
endif()
|
||||
message(STATUS "Found JNI: ${JNI_INCLUDE_DIRS} ${JNI_LIBRARIES}")
|
||||
|
||||
@ -32,7 +31,7 @@ message(STATUS "PHP Executable: ${PHP_EXECUTABLE}")
|
||||
set(TD_API_JAVA_PACKAGE "it/tdlight/tdnative")
|
||||
set(TD_API_SPEC_JAVA_PACKAGE "it/tdlight/jni")
|
||||
set(TD_API_JAVA_PATH ${JAVA_SRC_DIR})
|
||||
set(TD_API_TLO_PATH ${TD_SRC_DIR}/td/generate/auto/tlo/td_api.tlo)
|
||||
set(TD_API_TLO_PATH ${TD_SRC_DIR}/td/generate/scheme/td_api.tlo)
|
||||
set(TD_API_TL_PATH ${TD_SRC_DIR}/td/generate/scheme/td_api.tl)
|
||||
set(JAVADOC_TL_DOCUMENTATION_GENERATOR_PATH ${TD_SRC_DIR}/td/generate/JavadocTlDocumentationGenerator.php)
|
||||
set(GENERATE_JAVA_API_CMD ${TD_GENERATED_BINARIES_DIR}/td_generate_java_api TdApi ${TD_API_TLO_PATH} ${TD_API_JAVA_PATH} ${TD_API_SPEC_JAVA_PACKAGE})
|
||||
@ -49,13 +48,13 @@ add_custom_target(td_generate_java_api
|
||||
get_filename_component(JAVA_OUTPUT_DIRECTORY ${TDNATIVES_BIN_DIR}/java-classes REALPATH BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
file(MAKE_DIRECTORY ${JAVA_OUTPUT_DIRECTORY})
|
||||
add_custom_target(build_java
|
||||
COMMAND ${Java_JAVAC_EXECUTABLE} -encoding UTF-8 -d ${JAVA_OUTPUT_DIRECTORY} @${TDNATIVES_CPP_SRC_DIR}/sources.txt
|
||||
COMMAND ${Java_JAVAC_EXECUTABLE} -d ${JAVA_OUTPUT_DIRECTORY} @${TDNATIVES_CPP_SRC_DIR}/sources.txt
|
||||
COMMENT "Building Java code"
|
||||
DEPENDS td_generate_java_api
|
||||
)
|
||||
|
||||
add_custom_target(generate_javadoc
|
||||
COMMAND ${Java_JAVADOC_EXECUTABLE} -encoding UTF-8 -charset UTF-8 -d ${TDNATIVES_DOCS_BIN_DIR} it.tdlight.jni
|
||||
COMMAND ${Java_JAVADOC_EXECUTABLE} -d ${TDNATIVES_DOCS_BIN_DIR} it.tdlight.jni
|
||||
WORKING_DIRECTORY ${TD_API_JAVA_PATH}
|
||||
COMMENT "Generating Javadoc documentation"
|
||||
DEPENDS td_generate_java_api
|
||||
@ -104,8 +103,7 @@ if (NOT HAVE_STD14)
|
||||
message(FATAL_ERROR "No C++14 support in the compiler. Please upgrade the compiler.")
|
||||
endif()
|
||||
|
||||
#add_dependencies(tdjni td_generate_java_api build_java generate_javadoc)
|
||||
add_dependencies(tdjni td_generate_java_api build_java)
|
||||
add_dependencies(tdjni td_generate_java_api build_java generate_javadoc)
|
||||
|
||||
install(TARGETS tdjni
|
||||
LIBRARY DESTINATION ${TDNATIVES_BIN_DIR}
|
2
src/main/jni-cpp-src/common/sources.txt
Normal file
2
src/main/jni-cpp-src/common/sources.txt
Normal file
@ -0,0 +1,2 @@
|
||||
../src/main/jni-java-src/it/tdlight/jni/TdApi.java
|
||||
../src/main/jni-java-src/it/tdlight/tdnative/NativeClient.java
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
@ -168,7 +168,8 @@ static jint register_native(JavaVM *vm) {
|
||||
#undef TD_OBJECT
|
||||
|
||||
td::jni::init_vars(env, API_PACKAGE_NAME);
|
||||
td::td_api::get_package_name_ref() = API_PACKAGE_NAME;
|
||||
td::td_api::Object::init_jni_vars(env, API_PACKAGE_NAME);
|
||||
td::td_api::Function::init_jni_vars(env, API_PACKAGE_NAME);
|
||||
|
||||
return JAVA_VERSION;
|
||||
}
|
182
src/main/jni-cpp-src/tdlight/td_jni.cpp
Normal file
182
src/main/jni-cpp-src/tdlight/td_jni.cpp
Normal file
@ -0,0 +1,182 @@
|
||||
//
|
||||
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
#include <td/telegram/Client.h>
|
||||
#include <td/telegram/td_api.h>
|
||||
|
||||
#include <td/tl/tl_jni_object.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
namespace td_jni {
|
||||
|
||||
static td::td_api::object_ptr<td::td_api::Function> fetch_function(JNIEnv *env, jobject function) {
|
||||
td::jni::reset_parse_error();
|
||||
auto result = td::td_api::Function::fetch(env, function);
|
||||
if (td::jni::have_parse_error()) {
|
||||
std::abort();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static td::ClientManager *get_manager() {
|
||||
return td::ClientManager::get_manager_singleton();
|
||||
}
|
||||
|
||||
static jint Client_createNativeClient(JNIEnv *env, jclass clazz) {
|
||||
return static_cast<jint>(get_manager()->create_client_id());
|
||||
}
|
||||
|
||||
static void Client_nativeClientSend(JNIEnv *env, jclass clazz, jint client_id, jlong id, jobject function) {
|
||||
get_manager()->send(static_cast<std::int32_t>(client_id), static_cast<std::uint64_t>(id),
|
||||
fetch_function(env, function));
|
||||
}
|
||||
|
||||
static jint Client_nativeClientReceive(JNIEnv *env, jclass clazz, jintArray client_ids, jlongArray ids,
|
||||
jobjectArray events, jdouble timeout) {
|
||||
jsize events_size = env->GetArrayLength(ids); // client_ids, ids and events must be of equal size
|
||||
if (events_size == 0) {
|
||||
return 0;
|
||||
}
|
||||
jsize result_size = 0;
|
||||
|
||||
auto *manager = get_manager();
|
||||
auto response = manager->receive(timeout);
|
||||
while (response.object) {
|
||||
auto client_id = static_cast<jint>(response.client_id);
|
||||
env->SetIntArrayRegion(client_ids, result_size, 1, &client_id);
|
||||
|
||||
auto request_id = static_cast<jlong>(response.request_id);
|
||||
env->SetLongArrayRegion(ids, result_size, 1, &request_id);
|
||||
|
||||
jobject object;
|
||||
response.object->store(env, object);
|
||||
env->SetObjectArrayElement(events, result_size, object);
|
||||
env->DeleteLocalRef(object);
|
||||
|
||||
result_size++;
|
||||
if (result_size == events_size) {
|
||||
break;
|
||||
}
|
||||
|
||||
response = manager->receive(0);
|
||||
}
|
||||
return result_size;
|
||||
}
|
||||
|
||||
static jobject Client_nativeClientExecute(JNIEnv *env, jclass clazz, jobject function) {
|
||||
jobject result;
|
||||
td::ClientManager::execute(fetch_function(env, function))->store(env, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
static jstring Object_toString(JNIEnv *env, jobject object) {
|
||||
return td::jni::to_jstring(env, to_string(td::td_api::Object::fetch(env, object)));
|
||||
}
|
||||
|
||||
static jstring Function_toString(JNIEnv *env, jobject object) {
|
||||
return td::jni::to_jstring(env, to_string(td::td_api::Function::fetch(env, object)));
|
||||
}
|
||||
|
||||
static constexpr jint JAVA_VERSION = JNI_VERSION_1_6;
|
||||
static JavaVM *java_vm;
|
||||
static jobject log_message_handler;
|
||||
|
||||
static void on_log_message(int verbosity_level, const char *log_message) {
|
||||
auto env = td::jni::get_jni_env(java_vm, JAVA_VERSION);
|
||||
if (env == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
jobject handler = env->NewLocalRef(log_message_handler);
|
||||
if (!handler) {
|
||||
return;
|
||||
}
|
||||
|
||||
jclass handler_class = env->GetObjectClass(handler);
|
||||
if (handler_class) {
|
||||
jmethodID on_log_message_method = env->GetMethodID(handler_class, "onLogMessage", "(ILjava/lang/String;)V");
|
||||
if (on_log_message_method) {
|
||||
jstring log_message_str = td::jni::to_jstring(env.get(), log_message);
|
||||
if (log_message_str) {
|
||||
env->CallVoidMethod(handler, on_log_message_method, static_cast<jint>(verbosity_level), log_message_str);
|
||||
env->DeleteLocalRef((jobject)log_message_str);
|
||||
}
|
||||
}
|
||||
env->DeleteLocalRef((jobject)handler_class);
|
||||
}
|
||||
|
||||
env->DeleteLocalRef(handler);
|
||||
}
|
||||
|
||||
static void Client_nativeClientSetLogMessageHandler(JNIEnv *env, jclass clazz, jint max_verbosity_level,
|
||||
jobject new_log_message_handler) {
|
||||
if (log_message_handler) {
|
||||
td::ClientManager::set_log_message_callback(0, nullptr);
|
||||
jobject old_log_message_handler = log_message_handler;
|
||||
log_message_handler = jobject();
|
||||
env->DeleteGlobalRef(old_log_message_handler);
|
||||
}
|
||||
|
||||
if (new_log_message_handler) {
|
||||
log_message_handler = env->NewGlobalRef(new_log_message_handler);
|
||||
if (!log_message_handler) {
|
||||
// out of memory
|
||||
return;
|
||||
}
|
||||
|
||||
td::ClientManager::set_log_message_callback(static_cast<int>(max_verbosity_level), on_log_message);
|
||||
}
|
||||
}
|
||||
|
||||
static jint register_native(JavaVM *vm) {
|
||||
JNIEnv *env;
|
||||
if (vm->GetEnv(reinterpret_cast<void **>(&env), JAVA_VERSION) != JNI_OK) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
java_vm = vm;
|
||||
|
||||
auto register_method = [env](jclass clazz, std::string name, std::string signature, auto function_ptr) {
|
||||
td::jni::register_native_method(env, clazz, std::move(name), std::move(signature),
|
||||
reinterpret_cast<void *>(function_ptr));
|
||||
};
|
||||
|
||||
auto client_class = td::jni::get_jclass(env, PACKAGE_NAME "/NativeClient");
|
||||
auto object_class = td::jni::get_jclass(env, API_PACKAGE_NAME "/TdApi$Object");
|
||||
auto function_class = td::jni::get_jclass(env, API_PACKAGE_NAME "/TdApi$Function");
|
||||
|
||||
#define TD_OBJECT "L" API_PACKAGE_NAME "/TdApi$Object;"
|
||||
#define TD_FUNCTION "L" API_PACKAGE_NAME "/TdApi$Function;"
|
||||
register_method(client_class, "createNativeClient", "()I", Client_createNativeClient);
|
||||
register_method(client_class, "nativeClientSend", "(IJ" TD_FUNCTION ")V", Client_nativeClientSend);
|
||||
register_method(client_class, "nativeClientReceive", "([I[J[" TD_OBJECT "D)I", Client_nativeClientReceive);
|
||||
register_method(client_class, "nativeClientExecute", "(" TD_FUNCTION ")" TD_OBJECT, Client_nativeClientExecute);
|
||||
register_method(client_class, "nativeClientSetLogMessageHandler", "(IL" PACKAGE_NAME "/NativeClient$LogMessageHandler;)V",
|
||||
Client_nativeClientSetLogMessageHandler);
|
||||
|
||||
register_method(object_class, "toString", "()Ljava/lang/String;", Object_toString);
|
||||
|
||||
register_method(function_class, "toString", "()Ljava/lang/String;", Function_toString);
|
||||
#undef TD_FUNCTION
|
||||
#undef TD_OBJECT
|
||||
|
||||
td::jni::init_vars(env, API_PACKAGE_NAME);
|
||||
td::td_api::Object::init_jni_vars(env, API_PACKAGE_NAME);
|
||||
td::td_api::Function::init_jni_vars(env, API_PACKAGE_NAME);
|
||||
|
||||
return JAVA_VERSION;
|
||||
}
|
||||
|
||||
} // namespace td_jni
|
||||
|
||||
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
|
||||
static jint jni_version = td_jni::register_native(vm); // call_once
|
||||
return jni_version;
|
||||
}
|
111
src/main/jni-project-src/pom.template.xml
Normal file
111
src/main/jni-project-src/pom.template.xml
Normal file
@ -0,0 +1,111 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>it.tdlight</groupId>
|
||||
<artifactId>${IMPLEMENTATION_NAME}-natives-${OPERATING_SYSTEM_NAME}-${CPU_ARCHITECTURE_NAME}</artifactId>
|
||||
<!-- Don't change the version! (or change it also in <shadedPattern>) -->
|
||||
<version>${revision}</version>
|
||||
<name>${IMPLEMENTATION_NAME} natives for ${OPERATING_SYSTEM_NAME} (${CPU_ARCHITECTURE_NAME})</name>
|
||||
<packaging>jar</packaging>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<revision>4.0.0-SNAPSHOT</revision>
|
||||
<safeVersionName>v4_0_0</safeVersionName>
|
||||
</properties>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>mchv-release-distribution</id>
|
||||
<name>MCHV Release Apache Maven Packages Distribution</name>
|
||||
<url>https://mvn.mchv.eu/repository/mchv</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>mchv-snapshot-distribution</id>
|
||||
<name>MCHV Snapshot Apache Maven Packages Distribution</name>
|
||||
<url>https://mvn.mchv.eu/repository/mchv-snapshot</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
<scm>
|
||||
<url>https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</url>
|
||||
<connection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</connection>
|
||||
<developerConnection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</developerConnection>
|
||||
<tag>HEAD</tag>
|
||||
</scm>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<source>8</source>
|
||||
<target>8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>com.outbrain.swinfra</groupId>
|
||||
<artifactId>ci-friendly-flatten-maven-plugin</artifactId>
|
||||
<version>1.0.14</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>clean</goal>
|
||||
<goal>flatten</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>3.0.0-M1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>2.8.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<relocations>
|
||||
<relocation>
|
||||
<pattern>it.tdlight.jni.implementation_name.operating_system_name.cpu_architecture_name.version</pattern>
|
||||
<shadedPattern>it.tdlight.jni.${IMPLEMENTATION_NAME}.${OPERATING_SYSTEM_NAME_SHORT}.${CPU_ARCHITECTURE_NAME}.${safeVersionName}</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>it.tdlight.jni.implementation_name.operating_system_name.cpu_architecture_name</pattern>
|
||||
<shadedPattern>it.tdlight.jni.${IMPLEMENTATION_NAME}.${OPERATING_SYSTEM_NAME_SHORT}.${CPU_ARCHITECTURE_NAME}</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>it.tdlight.jni.implementation_name.operating_system_name</pattern>
|
||||
<shadedPattern>it.tdlight.jni.${IMPLEMENTATION_NAME}.${OPERATING_SYSTEM_NAME_SHORT}</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>it.tdlight.jni.implementation_name</pattern>
|
||||
<shadedPattern>it.tdlight.jni.${IMPLEMENTATION_NAME}</shadedPattern>
|
||||
</relocation>
|
||||
</relocations>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1 @@
|
||||
s/tdutils PRIVATE shell32/tdutils PRIVATE shell32 crypt32/
|
5
src/main/replacements/replace-linux-386-tdlib-legacy.sed
Normal file
5
src/main/replacements/replace-linux-386-tdlib-legacy.sed
Normal file
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/x86/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/legacy/
|
5
src/main/replacements/replace-linux-386-tdlib-sealed.sed
Normal file
5
src/main/replacements/replace-linux-386-tdlib-sealed.sed
Normal file
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/x86/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/x86/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/x86/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/aarch64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/aarch64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/aarch64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/aarch64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/armhf/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/armhf/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/armhf/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/armhf/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/ppc64le/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/ppc64le/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/ppc64le/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/ppc64le/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/s390x/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/s390x/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/s390x/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/linux/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
|
||||
s/${CPU_ARCHITECTURE_NAME}/s390x/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/sealed/
|
5
src/main/replacements/replace-osx-amd64-tdlib-legacy.sed
Normal file
5
src/main/replacements/replace-osx-amd64-tdlib-legacy.sed
Normal file
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/osx/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/osx/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/legacy/
|
5
src/main/replacements/replace-osx-amd64-tdlib-sealed.sed
Normal file
5
src/main/replacements/replace-osx-amd64-tdlib-sealed.sed
Normal file
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/osx/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/osx/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/osx/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/osx/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/osx/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/osx/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/windows/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/win/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/windows/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/win/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlib/
|
||||
s/${API_TYPE}/sealed/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/windows/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/win/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/legacy/
|
@ -0,0 +1,5 @@
|
||||
s/${OPERATING_SYSTEM_NAME}/windows/
|
||||
s/${OPERATING_SYSTEM_NAME_SHORT}/win/
|
||||
s/${CPU_ARCHITECTURE_NAME}/amd64/
|
||||
s/${IMPLEMENTATION_NAME}/tdlight/
|
||||
s/${API_TYPE}/sealed/
|
3
src/main/tdapi-java/module-info.java
Normal file
3
src/main/tdapi-java/module-info.java
Normal file
@ -0,0 +1,3 @@
|
||||
module tdlight.api {
|
||||
exports it.tdlight.jni;
|
||||
}
|
213
src/main/tdapi-project-src/pom.template.xml
Normal file
213
src/main/tdapi-project-src/pom.template.xml
Normal file
@ -0,0 +1,213 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>it.tdlight</groupId>
|
||||
<artifactId>${IMPLEMENTATION_NAME}-api-${API_TYPE}</artifactId>
|
||||
<version>${revision}</version>
|
||||
<name>${IMPLEMENTATION_NAME} API</name>
|
||||
<packaging>jar</packaging>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<revision>4.0.0-SNAPSHOT</revision>
|
||||
<safeVersionName>v4_0_0</safeVersionName>
|
||||
</properties>
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>legacy</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>!sealed</name>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- ensure the project is compiling with JDK 9+ -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-enforcer-plugin</artifactId>
|
||||
<version>3.0.0-M3</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>enforce-jdk9</id>
|
||||
<goals>
|
||||
<goal>enforce</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<rules>
|
||||
<requireJavaVersion>
|
||||
<version>[1.9,)</version>
|
||||
<message>JDK 9+ is required for compilation</message>
|
||||
</requireJavaVersion>
|
||||
</rules>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- compile sources -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
<executions>
|
||||
<!-- disable default phase due to fixed id and position in lifecycle -->
|
||||
<execution>
|
||||
<id>default-compile</id>
|
||||
<phase>none</phase>
|
||||
<!-- specify source/target for IDE integration -->
|
||||
<configuration>
|
||||
<release>9</release>
|
||||
</configuration>
|
||||
</execution>
|
||||
<!-- compile sources with Java 9 to generate and validate module-info.java -->
|
||||
<execution>
|
||||
<id>java-9-module-compile</id>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<release>9</release>
|
||||
</configuration>
|
||||
</execution>
|
||||
<!-- recompile sources as Java 8 to overwrite Java 9 class files, except module-info.java -->
|
||||
<execution>
|
||||
<id>java-8-compile</id>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<!-- specify JDK 9+ release flag to ensure no classes/methods later than Java 8 are used accidentally -->
|
||||
<release>8</release>
|
||||
<!-- exclude module-info.java from the compilation, as it is unsupported by Java 8 -->
|
||||
<excludes>
|
||||
<exclude>module-info.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Multi-Release>true</Multi-Release>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>sealed</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>sealed</name>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- compile sources -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<source>17</source>
|
||||
<target>17</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>mchv-release-distribution</id>
|
||||
<name>MCHV Release Apache Maven Packages Distribution</name>
|
||||
<url>https://mvn.mchv.eu/repository/mchv</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>mchv-snapshot-distribution</id>
|
||||
<name>MCHV Snapshot Apache Maven Packages Distribution</name>
|
||||
<url>https://mvn.mchv.eu/repository/mchv-snapshot</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
<scm>
|
||||
<url>https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</url>
|
||||
<connection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</connection>
|
||||
<developerConnection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</developerConnection>
|
||||
<tag>HEAD</tag>
|
||||
</scm>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>3.2.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.2.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>main-javadoc</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<release>17</release>
|
||||
<quiet>true</quiet>
|
||||
<notimestamp>true</notimestamp>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>3.0.0-M1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>2.8.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>com.outbrain.swinfra</groupId>
|
||||
<artifactId>ci-friendly-flatten-maven-plugin</artifactId>
|
||||
<version>1.0.14</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>clean</goal>
|
||||
<goal>flatten</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -1 +0,0 @@
|
||||
Subproject commit b32514771e84e4df39b33fe07f4bb93a7b32541d
|
@ -1,274 +0,0 @@
|
||||
FROM debian:buster-backports AS ssl1_debian
|
||||
WORKDIR /build
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
# amd64, i386, ppc64el, riscv64, armhf, arm64
|
||||
ARG ARCH_DEBIAN
|
||||
# x86_64, i386, powerpc64le, riscv64, arm, aarch64
|
||||
ARG ARCH_TRIPLE
|
||||
# gnu, gnueabihf (armhf)
|
||||
ARG TRIPLE_GNU
|
||||
ARG NATIVE="false"
|
||||
ARG SCCACHE_GHA_ENABLED=off
|
||||
ARG ACTIONS_CACHE_URL
|
||||
ARG ACTIONS_RUNTIME_TOKEN
|
||||
|
||||
# Check for mandatory build arguments
|
||||
RUN : "${ARCH_DEBIAN:?Build argument needs to be set and non-empty.}"
|
||||
RUN : "${ARCH_TRIPLE:?Build argument needs to be set and non-empty.}"
|
||||
RUN : "${TRIPLE_GNU:?Build argument needs to be set and non-empty.}"
|
||||
|
||||
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
|
||||
RUN sed -i "s|http://deb.debian.org/debian buster-backports|http://archive.debian.org/debian buster-backports|g" /etc/apt/sources.list.d/backports.list
|
||||
RUN ls /etc/apt/sources.list.d
|
||||
RUN cat /etc/apt/sources.list
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
COPY .docker ./.docker
|
||||
# Install sccache to greatly speedup builds in the CI
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked --mount=type=cache,target=/var/cache/sccache2,sharing=locked .docker/install-sccache.sh
|
||||
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked <<"EOF"
|
||||
dpkg --add-architecture ${ARCH_DEBIAN}
|
||||
apt-get --assume-yes update
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends openjdk-11-jdk-headless
|
||||
if [[ "$NATIVE" != "true" ]]; then
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp libssl-dev:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp libssl1.1:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp zlib1g-dev:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp zlib1g:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp openjdk-11-jre-headless:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp openjdk-11-jdk-headless:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/SymlinkPrefix.javash "/root/cross-build-pkgs/" "/" "./"
|
||||
fi
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends \
|
||||
g++ gcc libstdc++-8-dev zlib1g-dev linux-libc-dev libssl-dev gperf \
|
||||
tree git maven php-cli php-readline make cmake
|
||||
|
||||
if [[ "$NATIVE" != "true" ]]; then
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends \
|
||||
g++-8-${ARCH_TRIPLE/_/-}-linux-${TRIPLE_GNU} gcc-8-${ARCH_TRIPLE/_/-}-linux-${TRIPLE_GNU} \
|
||||
libatomic1-${ARCH_DEBIAN}-cross libc6-dev-${ARCH_DEBIAN}-cross libgcc-8-dev-${ARCH_DEBIAN}-cross libstdc++-8-dev-${ARCH_DEBIAN}-cross
|
||||
fi
|
||||
|
||||
EOF
|
||||
|
||||
FROM ssl1_debian AS build
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
ARG ARCH_DEBIAN
|
||||
ARG ARCH_TRIPLE
|
||||
ARG TRIPLE_GNU
|
||||
ARG NATIVE=false
|
||||
ARG SCCACHE_GHA_ENABLED=off
|
||||
ARG ACTIONS_CACHE_URL
|
||||
ARG ACTIONS_RUNTIME_TOKEN
|
||||
|
||||
ENV SCCACHE_DIR=/var/cache/sccache2
|
||||
|
||||
# Use c++11
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}"
|
||||
|
||||
ENV CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
|
||||
ENV CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto -O3"
|
||||
ENV CCACHE=/opt/sccache/sccache
|
||||
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
|
||||
|
||||
COPY --link . ./
|
||||
|
||||
COPY <<EOF ./toolchain_native.cmake
|
||||
set(CMAKE_CROSSCOMPILING FALSE)
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
|
||||
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
|
||||
|
||||
set(CMAKE_C_COMPILER /usr/bin/gcc-8)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/g++-8)
|
||||
set(CMAKE_AR "/usr/bin/gcc-ar-8" CACHE FILEPATH "" FORCE)
|
||||
|
||||
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
|
||||
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /usr/include)
|
||||
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /lib/\${TARGET_TRIPLE})
|
||||
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE})
|
||||
|
||||
# Set various compiler flags
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_CXX_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
|
||||
if(EXISTS "/usr/lib/jvm/java-11-openjdk-amd64")
|
||||
SET(JAVA_HOME "/usr/lib/jvm/java-11-openjdk-amd64")
|
||||
else()
|
||||
SET(JAVA_HOME "/usr/lib/jvm/default-java")
|
||||
endif()
|
||||
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
|
||||
SET(JAVA_CROSS_HOME "/usr/lib/jvm/java-11-openjdk-$ARCH_DEBIAN")
|
||||
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
|
||||
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
|
||||
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
cd implementations/tdlight/td_tools_build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_C_FLAGS_RELEASE="" \
|
||||
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
|
||||
-DTD_ENABLE_LTO=OFF \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
-DJAVA_AWT_LIBRARY=/dev/null \
|
||||
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../../../toolchain_native.cmake" \
|
||||
..
|
||||
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
|
||||
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
|
||||
EOF
|
||||
|
||||
COPY <<EOF ./toolchain.cmake
|
||||
set(CMAKE_CROSSCOMPILING TRUE)
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
|
||||
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
|
||||
|
||||
set(CMAKE_C_COMPILER /usr/bin/\${TARGET_TRIPLE}-gcc-8)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/\${TARGET_TRIPLE}-g++-8)
|
||||
set(CMAKE_AR "/usr/bin/\${TARGET_TRIPLE}-gcc-ar-8" CACHE FILEPATH "" FORCE)
|
||||
|
||||
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
|
||||
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include)
|
||||
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/lib/\${TARGET_TRIPLE})
|
||||
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/bin/\${TARGET_TRIPLE})
|
||||
|
||||
# Set various compiler flags
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_CXX_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
|
||||
set(CMAKE_SYSROOT /root/cross-build-pkgs)
|
||||
|
||||
# This must be set or compiler checks fail when linking
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||
|
||||
if(EXISTS "/usr/lib/jvm/java-11-openjdk-amd64")
|
||||
SET(JAVA_HOME "/usr/lib/jvm/java-11-openjdk-amd64")
|
||||
else()
|
||||
SET(JAVA_HOME "/usr/lib/jvm/default-java")
|
||||
endif()
|
||||
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
|
||||
SET(JAVA_CROSS_HOME "/root/cross-build-pkgs/usr/lib/jvm/java-11-openjdk-$ARCH_DEBIAN")
|
||||
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
|
||||
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
|
||||
|
||||
if("$ARCH_DEBIAN" STREQUAL "armhf" OR "$ARCH_DEBIAN" STREQUAL "arm64")
|
||||
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||
set(CMAKE_USE_WIN32_THREADS_INIT 0)
|
||||
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
endif()
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
|
||||
cd implementations/tdlight/build
|
||||
export INSTALL_PREFIX="$(readlink -e ./td_bin/)"
|
||||
export INSTALL_BINDIR="$(readlink -e ./td_bin/bin)"
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
|
||||
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
|
||||
-DJAVA_AWT_LIBRARY=/dev/null \
|
||||
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../../../$TOOLCHAIN_ARGS" \
|
||||
..
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
|
||||
cd natives/build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
|
||||
-DTD_SRC_DIR="$(readlink -e ../../implementations/tdlight)" \
|
||||
-DTDNATIVES_BIN_DIR="$(readlink -e ../tdjni_bin/)" \
|
||||
-DTDNATIVES_DOCS_BIN_DIR="$(readlink -e ../tdjni_docs/)" \
|
||||
-DTd_DIR:PATH="$(readlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
|
||||
-DJAVA_SRC_DIR="$(readlink -e ../src/main/java)" \
|
||||
-DTDNATIVES_CPP_SRC_DIR="$(readlink -e ../src/main/cpp)" \
|
||||
-DJAVA_AWT_LIBRARY=/dev/null \
|
||||
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../../$TOOLCHAIN_ARGS" \
|
||||
../src/main/cpp
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
cd natives
|
||||
mkdir -p src/main/resources/META-INF/tdlightjni/
|
||||
mv tdjni_bin/libtdjni.so src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_gnu_ssl1.so
|
||||
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=linux_${ARCH_DEBIAN}_gnu_ssl1 package
|
||||
cd ..
|
||||
EOF
|
||||
|
||||
FROM debian:buster-backports AS maven
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
WORKDIR /source
|
||||
COPY --from=build /build/natives /source/natives
|
||||
ENTRYPOINT ["/bin/true"]
|
||||
|
||||
FROM debian:buster-backports
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
ARG ARCH_DEBIAN
|
||||
ARG ARCH_TRIPLE
|
||||
ARG TRIPLE_GNU
|
||||
ARG NATIVE=off
|
||||
WORKDIR /out
|
||||
COPY --from=build /build/natives natives
|
||||
COPY --from=build /build/natives/src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_gnu_ssl1.so libtdjni.so
|
||||
COPY --from=build /build/natives/target-linux_${ARCH_DEBIAN}_gnu_ssl1/tdlight-natives-${REVISION}-linux_${ARCH_DEBIAN}_gnu_ssl1.jar tdlight-natives.jar
|
||||
USER 65534:65534
|
||||
ENTRYPOINT ["/bin/true"]
|
@ -1,250 +0,0 @@
|
||||
FROM debian:bookworm-backports AS ssl3_debian
|
||||
WORKDIR /build
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
# amd64, i386, ppc64el, riscv64, armhf, arm64
|
||||
ARG ARCH_DEBIAN
|
||||
# x86_64, i386, powerpc64le, riscv64, arm, aarch64
|
||||
ARG ARCH_TRIPLE
|
||||
# gnu, gnueabihf (armhf)
|
||||
ARG TRIPLE_GNU
|
||||
ARG SCCACHE_GHA_ENABLED=off
|
||||
ARG ACTIONS_CACHE_URL
|
||||
ARG ACTIONS_RUNTIME_TOKEN
|
||||
|
||||
# Check for mandatory build arguments
|
||||
RUN : "${ARCH_DEBIAN:?Build argument needs to be set and non-empty.}"
|
||||
RUN : "${ARCH_TRIPLE:?Build argument needs to be set and non-empty.}"
|
||||
RUN : "${TRIPLE_GNU:?Build argument needs to be set and non-empty.}"
|
||||
|
||||
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
COPY .docker ./.docker
|
||||
# Install sccache to greatly speedup builds in the CI
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked --mount=type=cache,target=/var/cache/sccache2,sharing=locked .docker/install-sccache.sh
|
||||
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked <<"EOF"
|
||||
dpkg --add-architecture ${ARCH_DEBIAN}
|
||||
apt-get --assume-yes update
|
||||
|
||||
export LLVMLIBS_NATIVE="libc++-14-dev libc++abi-14-dev libunwind-14-dev libunwind-14 libclang-rt-14-dev"
|
||||
export LLVMLIBS_TARGET="libc++-14-dev:${ARCH_DEBIAN} libc++abi-14-dev:${ARCH_DEBIAN} libunwind-14-dev:${ARCH_DEBIAN} libunwind-14:${ARCH_DEBIAN} libclang-rt-14-dev:${ARCH_DEBIAN}"
|
||||
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends $LLVMLIBS_TARGET
|
||||
find /usr/lib/ -path "*-linux-*" -lname "*llvm*" -print0 | xargs -0 -I{} sh -c 'cp --remove-destination $(realpath "{}") "{}"'
|
||||
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends git \
|
||||
zlib1g-dev libssl-dev gperf g++ \
|
||||
php-cli make cmake llvm-14 clang-14 lld-14 \
|
||||
libgcc-11-dev libclang-common-14-dev \
|
||||
git maven php-readline ca-certificates-java \
|
||||
openjdk-17-jdk-headless libssl-dev:${ARCH_DEBIAN} zlib1g-dev:${ARCH_DEBIAN} \
|
||||
libgcc-11-dev:${ARCH_DEBIAN} libc6-dev:${ARCH_DEBIAN} $LLVMLIBS_NATIVE
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends openjdk-17-jdk-headless:${ARCH_DEBIAN}
|
||||
EOF
|
||||
|
||||
FROM ssl3_debian AS build
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
ARG ARCH_DEBIAN
|
||||
ARG ARCH_TRIPLE
|
||||
ARG TRIPLE_GNU
|
||||
ARG SCCACHE_GHA_ENABLED=off
|
||||
ARG ACTIONS_CACHE_URL
|
||||
ARG ACTIONS_RUNTIME_TOKEN
|
||||
|
||||
ENV TOOLCHAIN_FILE="toolchain.cmake"
|
||||
ENV SCCACHE_DIR=/var/cache/sccache2
|
||||
|
||||
# machine-specific flags
|
||||
ENV HOST_CMAKE_C_COMPILER="/usr/bin/clang-14"
|
||||
ENV HOST_CMAKE_CXX_COMPILER="/usr/bin/clang++-14"
|
||||
ENV HOST_CMAKE_C_FLAGS="-fuse-ld=lld"
|
||||
ENV HOST_CMAKE_CXX_FLAGS="${HOST_CMAKE_C_FLAGS} -stdlib=libc++"
|
||||
ENV HOST_CMAKE_EXE_LINKER_FLAGS="-lc++ -lc++abi -fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind"
|
||||
|
||||
# Use c++11
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -std=c++14"
|
||||
|
||||
ENV CC="/usr/bin/gcc-8"
|
||||
ENV CXX="/usr/bin/g++-8"
|
||||
ENV CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
|
||||
ENV CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto=thin -O3"
|
||||
ENV CCACHE=/opt/sccache/sccache
|
||||
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
|
||||
|
||||
COPY --link . ./
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
cd implementations/tdlight/td_tools_build
|
||||
CXXFLAGS="-stdlib=libc++" CC="$HOST_CMAKE_C_COMPILER" CXX="$HOST_CMAKE_CXX_COMPILER" cmake \
|
||||
-DCMAKE_C_COMPILER="${HOST_CMAKE_C_COMPILER}" \
|
||||
-DCMAKE_CXX_COMPILER="${HOST_CMAKE_CXX_COMPILER}" \
|
||||
-DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} ${HOST_CMAKE_C_FLAGS}" \
|
||||
-DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} ${HOST_CMAKE_CXX_FLAGS}" \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS} ${HOST_CMAKE_EXE_LINKER_FLAGS}" \
|
||||
\
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_C_FLAGS_RELEASE="" \
|
||||
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
|
||||
-DTD_ENABLE_LTO=OFF \
|
||||
-DTD_ENABLE_JNI=ON ..
|
||||
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
|
||||
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
|
||||
EOF
|
||||
|
||||
COPY <<EOF ./toolchain.cmake
|
||||
set(CMAKE_CROSSCOMPILING TRUE)
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
|
||||
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
|
||||
|
||||
if(EXISTS "/usr/bin/clang-14")
|
||||
set(CMAKE_C_COMPILER /usr/bin/clang-14)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++-14)
|
||||
set(CMAKE_ASM_COMPILER /usr/bin/clang-14)
|
||||
set(CMAKE_AR "/usr/bin/llvm-ar-14" CACHE FILEPATH "" FORCE)
|
||||
elseif(EXISTS "/usr/bin/clang-12")
|
||||
set(CMAKE_C_COMPILER /usr/bin/clang-12)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++-12)
|
||||
set(CMAKE_ASM_COMPILER /usr/bin/clang-12)
|
||||
set(CMAKE_AR "/usr/bin/llvm-ar-12" CACHE FILEPATH "" FORCE)
|
||||
elseif(EXISTS "/usr/bin/clang-9")
|
||||
set(CMAKE_C_COMPILER /usr/bin/clang-9)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++-9)
|
||||
set(CMAKE_ASM_COMPILER /usr/bin/clang-9)
|
||||
set(CMAKE_AR "/usr/bin/llvm-ar-9" CACHE FILEPATH "" FORCE)
|
||||
else()
|
||||
set(CMAKE_C_COMPILER /usr/bin/clang)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
|
||||
set(CMAKE_ASM_COMPILER /usr/bin/clang)
|
||||
set(CMAKE_AR "/usr/bin/llvm-ar" CACHE FILEPATH "" FORCE)
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
|
||||
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include)
|
||||
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/lib/\${TARGET_TRIPLE})
|
||||
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/bin/\${TARGET_TRIPLE})
|
||||
|
||||
# Set various compiler flags
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind")
|
||||
set(CMAKE_CXX_FLAGS_INIT "-stdlib=libc++ -std=c++14")
|
||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
||||
|
||||
# Use our definitions for compiler tools
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
|
||||
# This must be set or compiler checks fail when linking
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||
|
||||
if(EXISTS "/usr/lib/jvm/java-17-openjdk-amd64")
|
||||
SET(JAVA_HOME "/usr/lib/jvm/java-17-openjdk-amd64")
|
||||
else()
|
||||
SET(JAVA_HOME "/usr/lib/jvm/default-java")
|
||||
endif()
|
||||
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
|
||||
SET(JAVA_CROSS_HOME "/usr/lib/jvm/java-17-openjdk-$ARCH_DEBIAN")
|
||||
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
|
||||
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
|
||||
|
||||
if("$ARCH_DEBIAN" STREQUAL "armhf" OR "$ARCH_DEBIAN" STREQUAL "arm64")
|
||||
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||
set(CMAKE_USE_WIN32_THREADS_INIT 0)
|
||||
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
endif()
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
cd implementations/tdlight/build
|
||||
export INSTALL_PREFIX="$(readlink -e ./td_bin/)"
|
||||
export INSTALL_BINDIR="$(readlink -e ./td_bin/bin)"
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
|
||||
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../../../${TOOLCHAIN_FILE}" ..
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
cd natives/build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
|
||||
-DTD_SRC_DIR="$(readlink -e ../../implementations/tdlight)" \
|
||||
-DTDNATIVES_BIN_DIR="$(readlink -e ../tdjni_bin/)" \
|
||||
-DTDNATIVES_DOCS_BIN_DIR="$(readlink -e ../tdjni_docs/)" \
|
||||
-DTd_DIR:PATH="$(readlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
|
||||
-DJAVA_SRC_DIR="$(readlink -e ../src/main/java)" \
|
||||
-DTDNATIVES_CPP_SRC_DIR="$(readlink -e ../src/main/cpp)" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../../${TOOLCHAIN_FILE}" \
|
||||
../src/main/cpp
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
cd natives
|
||||
mkdir -p src/main/resources/META-INF/tdlightjni/
|
||||
mv tdjni_bin/libtdjni.so src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_clang_ssl3.so
|
||||
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=linux_${ARCH_DEBIAN}_clang_ssl3 package
|
||||
cd ..
|
||||
EOF
|
||||
|
||||
FROM debian:bookworm-backports AS maven
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
WORKDIR /source
|
||||
COPY --from=build /build/natives /source/natives
|
||||
ENTRYPOINT ["/bin/true"]
|
||||
|
||||
FROM debian:bookworm-backports
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
ARG ARCH_DEBIAN
|
||||
ARG ARCH_TRIPLE
|
||||
ARG TRIPLE_GNU
|
||||
WORKDIR /out
|
||||
COPY --from=build /build/natives natives
|
||||
COPY --from=build /build/natives/src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_clang_ssl3.so libtdjni.so
|
||||
COPY --from=build /build/natives/target-linux_${ARCH_DEBIAN}_clang_ssl3/tdlight-natives-${REVISION}-linux_${ARCH_DEBIAN}_clang_ssl3.jar tdlight-natives.jar
|
||||
USER 65534:65534
|
||||
ENTRYPOINT ["/bin/true"]
|
@ -1,275 +0,0 @@
|
||||
# use "sid" for riscv64
|
||||
ARG DEBIAN_VERSION=bookworm-backports
|
||||
FROM debian:${DEBIAN_VERSION} AS ssl3_debian
|
||||
WORKDIR /build
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
# amd64, i386, ppc64el, riscv64, armhf, arm64
|
||||
ARG ARCH_DEBIAN
|
||||
# x86_64, i386, powerpc64le, riscv64, arm, aarch64
|
||||
ARG ARCH_TRIPLE
|
||||
# gnu, gnueabihf (armhf)
|
||||
ARG TRIPLE_GNU
|
||||
ARG NATIVE="false"
|
||||
ARG SCCACHE_GHA_ENABLED=off
|
||||
ARG ACTIONS_CACHE_URL
|
||||
ARG ACTIONS_RUNTIME_TOKEN
|
||||
|
||||
# Check for mandatory build arguments
|
||||
RUN : "${ARCH_DEBIAN:?Build argument needs to be set and non-empty.}"
|
||||
RUN : "${ARCH_TRIPLE:?Build argument needs to be set and non-empty.}"
|
||||
RUN : "${TRIPLE_GNU:?Build argument needs to be set and non-empty.}"
|
||||
|
||||
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
COPY .docker ./.docker
|
||||
# Install sccache to greatly speedup builds in the CI
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked --mount=type=cache,target=/var/cache/sccache2,sharing=locked .docker/install-sccache.sh
|
||||
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked <<"EOF"
|
||||
dpkg --add-architecture ${ARCH_DEBIAN}
|
||||
apt-get --assume-yes update
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends openjdk-17-jdk-headless
|
||||
if [[ "$NATIVE" != "true" ]]; then
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp libssl-dev:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp libssl3:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp zlib1g-dev:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp zlib1g:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp openjdk-17-jre-headless:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp openjdk-17-jdk-headless:${ARCH_DEBIAN} /root/cross-build-pkgs/
|
||||
./.docker/SymlinkPrefix.javash "/root/cross-build-pkgs/" "/" "./"
|
||||
fi
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends \
|
||||
g++-12 gcc libstdc++-12-dev zlib1g-dev linux-libc-dev libssl-dev gperf \
|
||||
tree git maven php-cli php-readline make cmake
|
||||
|
||||
if [[ "$NATIVE" != "true" ]]; then
|
||||
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends \
|
||||
g++-12-${ARCH_TRIPLE/_/-}-linux-${TRIPLE_GNU} gcc-12-${ARCH_TRIPLE/_/-}-linux-${TRIPLE_GNU} \
|
||||
libatomic1-${ARCH_DEBIAN}-cross linux-libc-dev-${ARCH_DEBIAN}-cross libc6-dev-${ARCH_DEBIAN}-cross libgcc-12-dev-${ARCH_DEBIAN}-cross libstdc++-12-dev-${ARCH_DEBIAN}-cross
|
||||
fi
|
||||
|
||||
EOF
|
||||
|
||||
FROM ssl3_debian AS build
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
ARG ARCH_DEBIAN
|
||||
ARG ARCH_TRIPLE
|
||||
ARG TRIPLE_GNU
|
||||
ARG NATIVE=false
|
||||
ARG SCCACHE_GHA_ENABLED=off
|
||||
ARG ACTIONS_CACHE_URL
|
||||
ARG ACTIONS_RUNTIME_TOKEN
|
||||
|
||||
ENV SCCACHE_DIR=/var/cache/sccache2
|
||||
|
||||
# Use c++11
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}"
|
||||
|
||||
ENV CC="/usr/bin/gcc-12"
|
||||
ENV CXX="/usr/bin/g++-12"
|
||||
ENV CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
|
||||
ENV CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
|
||||
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto -O3"
|
||||
ENV CCACHE=/opt/sccache/sccache
|
||||
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
|
||||
|
||||
COPY --link . ./
|
||||
|
||||
COPY <<EOF ./toolchain_native.cmake
|
||||
set(CMAKE_CROSSCOMPILING FALSE)
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
|
||||
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
|
||||
|
||||
set(CMAKE_C_COMPILER /usr/bin/gcc-12)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/g++-12)
|
||||
set(CMAKE_AR "/usr/bin/gcc-ar-12" CACHE FILEPATH "" FORCE)
|
||||
|
||||
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
|
||||
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /usr/include)
|
||||
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /lib/\${TARGET_TRIPLE})
|
||||
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE})
|
||||
|
||||
# Set various compiler flags
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_CXX_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
|
||||
if(EXISTS "/usr/lib/jvm/java-17-openjdk-amd64")
|
||||
SET(JAVA_HOME "/usr/lib/jvm/java-17-openjdk-amd64")
|
||||
else()
|
||||
SET(JAVA_HOME "/usr/lib/jvm/default-java")
|
||||
endif()
|
||||
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
|
||||
SET(JAVA_CROSS_HOME "/usr/lib/jvm/java-17-openjdk-$ARCH_DEBIAN")
|
||||
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
|
||||
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
|
||||
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
|
||||
cd implementations/tdlight/td_tools_build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_C_FLAGS_RELEASE="" \
|
||||
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
|
||||
-DTD_ENABLE_LTO=OFF \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
-DJAVA_AWT_LIBRARY=/dev/null \
|
||||
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../../../toolchain_native.cmake" \
|
||||
..
|
||||
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
|
||||
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
|
||||
EOF
|
||||
|
||||
COPY <<EOF ./toolchain.cmake
|
||||
set(CMAKE_CROSSCOMPILING TRUE)
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
|
||||
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
|
||||
|
||||
set(CMAKE_C_COMPILER /usr/bin/\${TARGET_TRIPLE}-gcc-12)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/\${TARGET_TRIPLE}-g++-12)
|
||||
set(CMAKE_AR "/usr/bin/\${TARGET_TRIPLE}-gcc-ar-12" CACHE FILEPATH "" FORCE)
|
||||
|
||||
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
|
||||
|
||||
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include)
|
||||
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/lib/\${TARGET_TRIPLE})
|
||||
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/bin/\${TARGET_TRIPLE})
|
||||
|
||||
# Set various compiler flags
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
set(CMAKE_CXX_FLAGS_INIT "-flto -fno-fat-lto-objects")
|
||||
|
||||
set(CMAKE_SYSROOT /root/cross-build-pkgs)
|
||||
|
||||
# This must be set or compiler checks fail when linking
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||
|
||||
if(EXISTS "/usr/lib/jvm/java-17-openjdk-amd64")
|
||||
SET(JAVA_HOME "/usr/lib/jvm/java-17-openjdk-amd64")
|
||||
else()
|
||||
SET(JAVA_HOME "/usr/lib/jvm/default-java")
|
||||
endif()
|
||||
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
|
||||
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
|
||||
SET(JAVA_CROSS_HOME "/root/cross-build-pkgs/usr/lib/jvm/java-17-openjdk-$ARCH_DEBIAN")
|
||||
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
|
||||
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
|
||||
|
||||
if("$ARCH_DEBIAN" STREQUAL "armhf" OR "$ARCH_DEBIAN" STREQUAL "arm64")
|
||||
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||
set(CMAKE_USE_WIN32_THREADS_INIT 0)
|
||||
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
endif()
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
|
||||
cd implementations/tdlight/build
|
||||
export INSTALL_PREFIX="$(readlink -e ./td_bin/)"
|
||||
export INSTALL_BINDIR="$(readlink -e ./td_bin/bin)"
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
|
||||
-DTD_ENABLE_LTO=ON \
|
||||
-DTD_ENABLE_JNI=ON \
|
||||
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
|
||||
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
|
||||
-DJAVA_AWT_LIBRARY=/dev/null \
|
||||
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../../../$TOOLCHAIN_ARGS" \
|
||||
..
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
|
||||
cd natives/build
|
||||
cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
|
||||
-DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
|
||||
-DTD_SRC_DIR="$(readlink -e ../../implementations/tdlight)" \
|
||||
-DTDNATIVES_BIN_DIR="$(readlink -e ../tdjni_bin/)" \
|
||||
-DTDNATIVES_DOCS_BIN_DIR="$(readlink -e ../tdjni_docs/)" \
|
||||
-DTd_DIR:PATH="$(readlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
|
||||
-DJAVA_SRC_DIR="$(readlink -e ../src/main/java)" \
|
||||
-DTDNATIVES_CPP_SRC_DIR="$(readlink -e ../src/main/cpp)" \
|
||||
-DJAVA_AWT_LIBRARY=/dev/null \
|
||||
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
|
||||
-DCMAKE_TOOLCHAIN_FILE="../../$TOOLCHAIN_ARGS" \
|
||||
../src/main/cpp
|
||||
cmake --build . --target install --config Release --parallel "$(nproc)"
|
||||
cd ../../
|
||||
EOF
|
||||
|
||||
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
|
||||
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
|
||||
--mount=type=cache,target=/root/.m2 <<"EOF"
|
||||
cd natives
|
||||
mkdir -p src/main/resources/META-INF/tdlightjni/
|
||||
mv tdjni_bin/libtdjni.so src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_gnu_ssl3.so
|
||||
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=linux_${ARCH_DEBIAN}_gnu_ssl3 package
|
||||
cd ..
|
||||
EOF
|
||||
|
||||
FROM debian:buster-backports AS maven
|
||||
SHELL ["/bin/bash", "-exc"]
|
||||
WORKDIR /source
|
||||
COPY --from=build /build/natives /source/natives
|
||||
ENTRYPOINT ["/bin/true"]
|
||||
|
||||
FROM debian:bookworm-backports
|
||||
ARG REVISION="1.0.0.0-SNAPSHOT"
|
||||
ARG ARCH_DEBIAN
|
||||
ARG ARCH_TRIPLE
|
||||
ARG TRIPLE_GNU
|
||||
ARG NATIVE=off
|
||||
WORKDIR /out
|
||||
COPY --from=build /build/natives natives
|
||||
COPY --from=build /build/natives/src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_gnu_ssl3.so libtdjni.so
|
||||
COPY --from=build /build/natives/target-linux_${ARCH_DEBIAN}_gnu_ssl3/tdlight-natives-${REVISION}-linux_${ARCH_DEBIAN}_gnu_ssl3.jar tdlight-natives.jar
|
||||
USER 65534:65534
|
||||
ENTRYPOINT ["/bin/true"]
|
Loading…
Reference in New Issue
Block a user