From d95cfd7fedb718068e62797015d674c79f20a01c Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sat, 13 May 2023 14:57:32 +0200 Subject: [PATCH] Add windows 2019, macos 12 --- .github/workflows/platform_natives.yaml | 4 +- .github/workflows/scripts/build_osx_amd64.sh | 107 ++++++++++++++++++ .../workflows/scripts/build_windows_amd64.sh | 107 ++++++++++++++++++ .../scripts/install_deps_osx_amd64.sh | 5 + .../scripts/install_deps_windows_amd64.sh | 5 + 5 files changed, 226 insertions(+), 2 deletions(-) create mode 100755 .github/workflows/scripts/build_osx_amd64.sh create mode 100755 .github/workflows/scripts/build_windows_amd64.sh create mode 100755 .github/workflows/scripts/install_deps_osx_amd64.sh create mode 100755 .github/workflows/scripts/install_deps_windows_amd64.sh diff --git a/.github/workflows/platform_natives.yaml b/.github/workflows/platform_natives.yaml index 630514b..e176a33 100644 --- a/.github/workflows/platform_natives.yaml +++ b/.github/workflows/platform_natives.yaml @@ -21,8 +21,8 @@ jobs: - { os: ubuntu-22.04, type: "linux_arm64_ssl3" } - { os: ubuntu-22.04, type: "linux_ppc64le_ssl3" } #- { os: ubuntu-22.04, type: "linux_riscv64_ssl3" } - #- { os: windows-2019, type: "windows_amd64", vcpkgCommitId: "6ca56aeb457f033d344a7106cb3f9f1abf8f4e98", triplet: "x64-windows-static" } - #- { os: macos-12, type: "macos_amd64" } + - { os: windows-2019, type: "windows_amd64", vcpkgCommitId: "6ca56aeb457f033d344a7106cb3f9f1abf8f4e98", triplet: "x64-windows-static" } + - { os: macos-12, type: "macos_amd64" } steps: - name: Checkout current repo uses: actions/checkout@v3 diff --git a/.github/workflows/scripts/build_osx_amd64.sh b/.github/workflows/scripts/build_osx_amd64.sh new file mode 100755 index 0000000..e5c5997 --- /dev/null +++ b/.github/workflows/scripts/build_osx_amd64.sh @@ -0,0 +1,107 @@ +#!/bin/bash -ex +# 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 + +# machine-specific flags +HOST_CMAKE_C_COMPILER="/usr/bin/clang-15" +HOST_CMAKE_CXX_COMPILER="/usr/bin/clang++-15" +HOST_CMAKE_C_FLAGS="-fuse-ld=lld" +HOST_CMAKE_CXX_FLAGS="${HOST_CMAKE_C_FLAGS} -stdlib=libc++" +HOST_CMAKE_EXE_LINKER_FLAGS="-lc++ -lc++abi -fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind" + +# 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 +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" \ + -DOPENSSL_USE_STATIC_LIBS=True \ + -DCMAKE_C_FLAGS_RELEASE="" \ + -DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \ + -DTD_ENABLE_LTO=OFF \ + -DTD_ENABLE_JNI=ON \ + .. +cmake --build . --target prepare_cross_compiling "-j$(nproc)" +cmake --build . --target td_generate_java_api "-j$(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="$(readlink -e ./td_bin/)" +INSTALL_BINDIR="$(readlink -e ./td_bin/bin)" +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" \ + -DOPENSSL_USE_STATIC_LIBS=True \ + -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 "-j$(nproc)" +cd ../../../ + +cd natives/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" \ + -DOPENSSL_USE_STATIC_LIBS=True \ + -DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \ + -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 "-j$(nproc)" +cd .. +mkdir -p src/main/resources/META-INF/tdlightjni/ +mv tdjni_bin/libtdjni.dylib src/main/resources/META-INF/tdlightjni/libtdjni.linux_amd64_ssl3.dylib +mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=linux_amd64_ssl3 package diff --git a/.github/workflows/scripts/build_windows_amd64.sh b/.github/workflows/scripts/build_windows_amd64.sh new file mode 100755 index 0000000..2bfa97e --- /dev/null +++ b/.github/workflows/scripts/build_windows_amd64.sh @@ -0,0 +1,107 @@ +#!/bin/bash -ex +# 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 + +# machine-specific flags +HOST_CMAKE_C_COMPILER="/usr/bin/clang-15" +HOST_CMAKE_CXX_COMPILER="/usr/bin/clang++-15" +HOST_CMAKE_C_FLAGS="-fuse-ld=lld" +HOST_CMAKE_CXX_FLAGS="${HOST_CMAKE_C_FLAGS} -stdlib=libc++" +HOST_CMAKE_EXE_LINKER_FLAGS="-lc++ -lc++abi -fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind" + +# 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 +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" \ + -DOPENSSL_USE_STATIC_LIBS=True \ + -DCMAKE_C_FLAGS_RELEASE="" \ + -DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \ + -DTD_ENABLE_LTO=OFF \ + -DTD_ENABLE_JNI=ON \ + .. +cmake --build . --target prepare_cross_compiling "-j$(nproc)" +cmake --build . --target td_generate_java_api "-j$(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)" +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" \ + -DOPENSSL_USE_STATIC_LIBS=True \ + -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 "-j$(nproc)" +cd ../../../ + +cd natives/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" \ + -DOPENSSL_USE_STATIC_LIBS=True \ + -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 "-j$(nproc)" +cd .. +mkdir -p src/main/resources/META-INF/tdlightjni/ +mv tdjni_bin/libtdjni.dll src/main/resources/META-INF/tdlightjni/libtdjni.linux_amd64_ssl3.dll +mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=linux_amd64_ssl3 package diff --git a/.github/workflows/scripts/install_deps_osx_amd64.sh b/.github/workflows/scripts/install_deps_osx_amd64.sh new file mode 100755 index 0000000..940d893 --- /dev/null +++ b/.github/workflows/scripts/install_deps_osx_amd64.sh @@ -0,0 +1,5 @@ +#!/bin/bash -ex +brew update +brew install gperf cmake openssl coreutils +brew install openjdk +brew install freetype gd libtiff \ No newline at end of file diff --git a/.github/workflows/scripts/install_deps_windows_amd64.sh b/.github/workflows/scripts/install_deps_windows_amd64.sh new file mode 100755 index 0000000..85c17f8 --- /dev/null +++ b/.github/workflows/scripts/install_deps_windows_amd64.sh @@ -0,0 +1,5 @@ +#!/bin/bash -ex +# Windows 2019 +choco install base64 +choco install gperf +choco install strawberryperl \ No newline at end of file