diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml new file mode 100644 index 00000000..76987e31 --- /dev/null +++ b/.github/workflows/intl4x_artifacts.yml @@ -0,0 +1,158 @@ +name: Generate artifacts for intl4x + +permissions: + contents: write + +on: + push: + tags: + - 'intl4x-v.*' + workflow_dispatch: + +jobs: + dart-libs: + name: "Build Dart binaries" + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest, macos-latest, windows-latest ] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + with: + submodules: 'true' + + - name: Install Rust toolchains + run: | + rustup toolchain install stable + + - name: Show the selected Rust toolchain + run: rustup show + + - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d + with: + sdk: dev + + - name: Setup additional linkers + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get install gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf gcc-riscv64-linux-gnu gcc-i686-linux-gnu + mkdir .cargo + echo "[target]" >> .cargo/config.toml + echo "aarch64-linux-android.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang\"" >> .cargo/config.toml + echo "armv7-linux-androideabi.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi30-clang\"" >> .cargo/config.toml + echo "i686-linux-android.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android30-clang\"" >> .cargo/config.toml + echo "x86_64-linux-android.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android30-clang\"" >> .cargo/config.toml + echo "riscv64-linux-android.linker=\"$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/riscv64-linux-android35-clang\"" >> .cargo/config.toml + echo "aarch64-unknown-linux-gnu.linker=\"aarch64-linux-gnu-gcc\"" >> .cargo/config.toml + echo "armv7-unknown-linux-gnueabihf.linker=\"arm-linux-gnueabihf-gcc\"" >> .cargo/config.toml + echo "riscv64gc-unknown-linux-gnu.linker=\"riscv64-linux-gnu-gcc\"" >> .cargo/config.toml + + - name: Build Linux + if: matrix.os == 'ubuntu-latest' + run: | + cd submodules/icu4x + + mkdir bin + + cd ffi/dart + dart pub get + cd ../.. + dart run ffi/dart/tool/build_libs.dart bin/android_arm android_arm + dart run ffi/dart/tool/build_libs.dart bin/android_arm64 android_arm64 + dart run ffi/dart/tool/build_libs.dart bin/android_ia32 android_ia32 + dart run ffi/dart/tool/build_libs.dart bin/android_x64 android_x64 + dart run ffi/dart/tool/build_libs.dart bin/linux_arm linux_arm + dart run ffi/dart/tool/build_libs.dart bin/linux_arm64 linux_arm64 + dart run ffi/dart/tool/build_libs.dart bin/linux_riscv64 linux_riscv64 + dart run ffi/dart/tool/build_libs.dart bin/linux_x64 linux_x64 + + cargo run -p icu_datagen -- --locales full --keys all --format blob --out bin/full.postcard + + cd provider/datagen # avoid global feature resolution + rustup target add aarch64-unknown-linux-gnu + cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target aarch64-unknown-linux-gnu + rustup target add riscv64gc-unknown-linux-gnu + cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target riscv64gc-unknown-linux-gnu + rustup target add x86_64-unknown-linux-gnu + cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target x86_64-unknown-linux-gnu + cd ../.. + + cp target/aarch64-unknown-linux-gnu/release/icu4x-datagen bin/linux_arm64-datagen + cp target/riscv64gc-unknown-linux-gnu/release/icu4x-datagen bin/linux_riscv64-datagen + cp target/x86_64-unknown-linux-gnu/release/icu4x-datagen bin/linux_x64-datagen + + - name: Build Mac + if: matrix.os == 'macos-latest' + run: | + cd submodules/icu4x + + mkdir bin + + cd ffi/dart + dart pub get + cd ../.. + dart run ffi/dart/tool/build_libs.dart bin/ios_arm ios_arm + dart run ffi/dart/tool/build_libs.dart bin/ios_arm64 ios_arm64 + dart run ffi/dart/tool/build_libs.dart bin/ios_x64 ios_x64 + dart run ffi/dart/tool/build_libs.dart bin/macos_arm64 macos_arm64 + dart run ffi/dart/tool/build_libs.dart bin/macos_x64 macos_x64 + + cd provider/datagen # avoid global feature resolution + rustup target add aarch64-apple-darwin + cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target aarch64-apple-darwin + rustup target add x86_64-apple-darwin + cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target x86_64-apple-darwin + cd ../.. + + cp target/aarch64-apple-darwin/release/icu4x-datagen bin/macos_arm64-datagen + cp target/x86_64-apple-darwin/release/icu4x-datagen bin/macos_x64-datagen + + - name: Build Windows + if: matrix.os == 'windows-latest' + run: | + cd submodules/icu4x + + mkdir bin + + cd ffi/dart + dart pub get + cd ../.. + dart run ffi/dart/tool/build_libs.dart bin/windows_arm64 windows_arm64 + dart run ffi/dart/tool/build_libs.dart bin/windows_ia32 windows_ia32 + dart run ffi/dart/tool/build_libs.dart bin/windows_x64 windows_x64 + + cd provider/datagen # avoid global feature resolution + rustup target add aarch64-pc-windows-msvc + cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target aarch64-pc-windows-msvc + rustup target add x86_64-pc-windows-msvc + cargo build --release --bin icu4x-datagen --no-default-features --features bin,blob_exporter,blob_input,rayon,experimental_components --target x86_64-pc-windows-msvc + cd ../.. + + cp target/aarch64-pc-windows-msvc/release/icu4x-datagen.exe bin/windows_arm64-datagen.exe + cp target/x86_64-pc-windows-msvc/release/icu4x-datagen.exe bin/windows_x64-datagen.exe + + - name: Upload artifacts + uses: actions/upload-artifact@ef09cdac3e2d3e60d8ccadda691f4f1cec5035cb + with: + name: dart-${{matrix.os}}-libs + path: submodules/icu4x/bin + + release: + needs: dart-libs + runs-on: ubuntu-latest + if: github.event_name == 'push' + steps: + - name: Download binaries + uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 + + - name: Display structure of downloaded files + run: ls -R + + - name: Release + uses: softprops/action-gh-release@d99959edae48b5ffffd7b00da66dcdb0a33a52ee + with: + files: '**' + fail_on_unmatched_files: true + body: "Build artifacts for `package:intl4x`, based on ICU4X at ref ${{ env.icu_version }}" diff --git a/submodules/icu4x b/submodules/icu4x index 8387180c..9b905e2f 160000 --- a/submodules/icu4x +++ b/submodules/icu4x @@ -1 +1 @@ -Subproject commit 8387180cc2d2051a6cbafcfb967d45d6ff3ba495 +Subproject commit 9b905e2f1e85453e39c0eb23e68145f7d4aa8553