From b156f8129ddd4497ef686f886c902eea5c2dd0fb Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 13:19:43 +0100 Subject: [PATCH 01/12] Remove ios arm target --- .github/workflows/intl4x_artifacts.yml | 1 - pkgs/intl4x/hook/README.md | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index 786b666d..730648ea 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -105,7 +105,6 @@ jobs: cd ffi/dart dart pub get cd ../.. - dart run ffi/dart/tool/build_libs.dart --file bin/ios_arm_${{ matrix.compiletype }} --os ios --architecture arm --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart run ffi/dart/tool/build_libs.dart --file bin/ios_arm64_${{ matrix.compiletype }} --os ios --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart run ffi/dart/tool/build_libs.dart --file bin/ios_x64_${{ matrix.compiletype }} --os ios --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart run ffi/dart/tool/build_libs.dart --file bin/macos_arm64_${{ matrix.compiletype }} --os macos --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} diff --git a/pkgs/intl4x/hook/README.md b/pkgs/intl4x/hook/README.md index d9e5dfe0..34ab8928 100644 --- a/pkgs/intl4x/hook/README.md +++ b/pkgs/intl4x/hook/README.md @@ -10,5 +10,5 @@ 1. Create PR. 2. Run `bash tools/regenerate_bindings.sh`, and fix resulting errors. 3. Update `const version` in `version.dart` to tag. -4. Regenerate hashes using `cd pkgs/intl4x/; dart --enable-experiment=native-assets tool/regenerate_hashes.dart`. +4. Regenerate hashes using `cd pkgs/intl4x/; dart tool/regenerate_hashes.dart`. 5. Land PR. From e19e38af125bbc0b8754465c67fd87423ffb079a Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 13:23:30 +0100 Subject: [PATCH 02/12] install nightly --- .github/workflows/intl4x_artifacts.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index 730648ea..03b3804b 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -35,6 +35,7 @@ jobs: - name: Install Rust toolchains run: | rustup toolchain install stable + rustup toolchain install nightly - name: Show the selected Rust toolchain run: rustup show From a4c6e9d828c1f46566cde8d779f6a182ccc08901 Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 14:41:13 +0100 Subject: [PATCH 03/12] fix build libs --- .github/workflows/intl4x_artifacts.yml | 58 +++---- pkgs/intl4x/tool/build_libs.g.dart | 202 +++++++++++++++++++++++++ tools/regenerate_bindings.sh | 4 +- 3 files changed, 229 insertions(+), 35 deletions(-) create mode 100644 pkgs/intl4x/tool/build_libs.g.dart diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index 03b3804b..3f3603c3 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -8,6 +8,7 @@ on: branches: [ main ] paths: - pkgs/intl4x/src/hook_helpers/hashes.dart + - .github/workflows/intl4x_artifacts.yaml push: tags: - 'intl4x-icu*' @@ -62,21 +63,18 @@ jobs: - 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 --file bin/android_arm_${{ matrix.compiletype }} --os android --architecture arm --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/android_arm64_${{ matrix.compiletype }} --os android --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/android_ia32_${{ matrix.compiletype }} --os android --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/android_x64_${{ matrix.compiletype }} --os android --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/linux_arm_${{ matrix.compiletype }} --os linux --architecture arm --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/linux_arm64_${{ matrix.compiletype }} --os linux --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/linux_riscv64_${{ matrix.compiletype }} --os linux --architecture riscv64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/linux_x64_${{ matrix.compiletype }} --os linux --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu + (cd submodules/icu4x/ffi/dart && dart pub get) + + mkdir submodules/icu4x/bin + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/android_arm_${{ matrix.compiletype }} --os android --architecture arm --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/android_arm64_${{ matrix.compiletype }} --os android --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/android_ia32_${{ matrix.compiletype }} --os android --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/android_x64_${{ matrix.compiletype }} --os android --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/linux_arm_${{ matrix.compiletype }} --os linux --architecture arm --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/linux_arm64_${{ matrix.compiletype }} --os linux --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/linux_riscv64_${{ matrix.compiletype }} --os linux --architecture riscv64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/linux_x64_${{ matrix.compiletype }} --os linux --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - name: Build Linux data if: matrix.os == 'ubuntu-latest' && matrix.compiletype == 'static' @@ -99,17 +97,13 @@ jobs: - name: Build Mac if: matrix.os == 'macos-latest' run: | - cd submodules/icu4x + (cd submodules/icu4x/ffi/dart && dart pub get) - mkdir bin - - cd ffi/dart - dart pub get - cd ../.. - dart run ffi/dart/tool/build_libs.dart --file bin/ios_arm64_${{ matrix.compiletype }} --os ios --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/ios_x64_${{ matrix.compiletype }} --os ios --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/macos_arm64_${{ matrix.compiletype }} --os macos --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/macos_x64_${{ matrix.compiletype }} --os macos --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + mkdir submodules/icu4x/bin + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/ios_arm64_${{ matrix.compiletype }} --os ios --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/ios_x64_${{ matrix.compiletype }} --os ios --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/macos_arm64_${{ matrix.compiletype }} --os macos --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/macos_x64_${{ matrix.compiletype }} --os macos --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - name: Build Mac data if: matrix.os == 'macos-latest' && matrix.compiletype == 'static' @@ -127,16 +121,12 @@ jobs: - name: Build Windows if: matrix.os == 'windows-latest' run: | - cd submodules/icu4x - - mkdir bin + (cd submodules/icu4x/ffi/dart && dart pub get) - cd ffi/dart - dart pub get - cd ../.. - dart run ffi/dart/tool/build_libs.dart --file bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/windows_ia32_${{ matrix.compiletype }} --os windows --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart run ffi/dart/tool/build_libs.dart --file bin/windows_x64_${{ matrix.compiletype }} --os windows --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + mkdir submodules/icu4x/bin + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_ia32_${{ matrix.compiletype }} --os windows --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_x64_${{ matrix.compiletype }} --os windows --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - name: Build Windows data if: matrix.os == 'windows-latest' && matrix.compiletype == 'static' diff --git a/pkgs/intl4x/tool/build_libs.g.dart b/pkgs/intl4x/tool/build_libs.g.dart new file mode 100644 index 00000000..79b1e874 --- /dev/null +++ b/pkgs/intl4x/tool/build_libs.g.dart @@ -0,0 +1,202 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +import 'dart:io'; + +import 'package:args/args.dart'; +import 'package:native_assets_cli/code_assets.dart'; +import 'package:path/path.dart' as path; + +const crateName = 'icu_capi'; + +Future<void> main(List<String> args) async { + const fileKey = 'file'; + const osKey = 'os'; + const architectureKey = 'architecture'; + const workingDirectoryKey = 'working_directory'; + const simulatorKey = 'simulator'; + const compileTypeKey = 'compile_type'; + const cargoFeaturesKey = 'cargo_features'; + final argParser = + ArgParser() + ..addOption(fileKey, mandatory: true) + ..addOption( + compileTypeKey, + allowed: ['static', 'dynamic'], + mandatory: true, + ) + ..addFlag(simulatorKey, defaultsTo: false) + ..addOption(osKey, mandatory: true) + ..addOption(architectureKey, mandatory: true) + ..addOption(workingDirectoryKey, mandatory: true) + ..addMultiOption( + cargoFeaturesKey, + defaultsTo: ['default_components', 'compiled_data'], + ); + + ArgResults parsed; + String os; + String architecture; + String compileType; + try { + parsed = argParser.parse(args); + } catch (e) { + print('Error parsing $args'); + print(argParser.usage); + exit(1); + } + os = parsed.option(osKey)!; + architecture = parsed.option(architectureKey)!; + compileType = parsed.option(compileTypeKey)!; + + final lib = await buildLib( + OS.values.firstWhere((o) { + return o.name == os; + }), + Architecture.values.firstWhere((o) { + return o.name == architecture; + }), + compileType == 'static', + parsed.flag(simulatorKey), + Directory(parsed.option(workingDirectoryKey)!), + parsed.multiOption(cargoFeaturesKey), + ); + await lib.copy( + Uri.file(parsed.option(fileKey)!).toFilePath(windows: Platform.isWindows), + ); +} + +// Copied from Dart's package:intl4x build.dart, see +// https://github.com/dart-lang/i18n/blob/main/pkgs/intl4x/hook/build.dart +Future<File> buildLib( + OS targetOS, + Architecture targetArchitecture, + bool buildStatic, + bool isSimulator, + Directory workingDirectory, + List<String> cargoFeatures, +) async { + // We assume that the first folder to contain a cargo.toml above the + // output directory is the directory containing the ICU4X code. + if (!File.fromUri(workingDirectory.uri.resolve('Cargo.toml')).existsSync()) { + throw ArgumentError('No Cargo.toml found in $workingDirectory'); + } + + final isNoStd = _isNoStdTarget((targetOS, targetArchitecture)); + final target = _asRustTarget(targetOS, targetArchitecture, isSimulator); + if (!isNoStd) { + final rustArguments = ['target', 'add', target]; + await runProcess( + 'rustup', + rustArguments, + workingDirectory: workingDirectory, + ); + } + + final features = { + ...cargoFeatures, + ...(isNoStd + ? ['libc_alloc', 'looping_panic_handler'] + : ['logging', 'simple_logger']), + }; + await runProcess('cargo', [ + if (buildStatic || isNoStd) '+nightly', + 'rustc', + '--manifest-path=ffi/capi/Cargo.toml', + '--crate-type=${buildStatic ? 'staticlib' : 'cdylib'}', + '--release', + '--config=profile.release.panic="abort"', + '--config=profile.release.codegen-units=1', + '--no-default-features', + '--features=${features.join(',')}', + if (isNoStd) '-Zbuild-std=core,alloc', + if (buildStatic || isNoStd) ...[ + '-Zbuild-std=std,panic_abort', + '-Zbuild-std-features=panic_immediate_abort', + ], + '--target=$target', + ], workingDirectory: workingDirectory); + + final file = File( + path.join( + workingDirectory.path, + 'target', + target, + 'release', + (buildStatic ? targetOS.staticlibFileName : targetOS.dylibFileName)( + crateName.replaceAll('-', '_'), + ), + ), + ); + if (!(await file.exists())) { + throw FileSystemException('Building the dylib failed', file.path); + } + return file; +} + +String _asRustTarget(OS os, Architecture? architecture, bool isSimulator) { + if (os == OS.iOS && architecture == Architecture.arm64 && isSimulator) { + return 'aarch64-apple-ios-sim'; + } + return switch ((os, architecture)) { + (OS.android, Architecture.arm) => 'armv7-linux-androideabi', + (OS.android, Architecture.arm64) => 'aarch64-linux-android', + (OS.android, Architecture.ia32) => 'i686-linux-android', + (OS.android, Architecture.riscv64) => 'riscv64-linux-android', + (OS.android, Architecture.x64) => 'x86_64-linux-android', + (OS.fuchsia, Architecture.arm64) => 'aarch64-unknown-fuchsia', + (OS.fuchsia, Architecture.x64) => 'x86_64-unknown-fuchsia', + (OS.iOS, Architecture.arm64) => 'aarch64-apple-ios', + (OS.iOS, Architecture.x64) => 'x86_64-apple-ios', + (OS.linux, Architecture.arm) => 'armv7-unknown-linux-gnueabihf', + (OS.linux, Architecture.arm64) => 'aarch64-unknown-linux-gnu', + (OS.linux, Architecture.ia32) => 'i686-unknown-linux-gnu', + (OS.linux, Architecture.riscv32) => 'riscv32gc-unknown-linux-gnu', + (OS.linux, Architecture.riscv64) => 'riscv64gc-unknown-linux-gnu', + (OS.linux, Architecture.x64) => 'x86_64-unknown-linux-gnu', + (OS.macOS, Architecture.arm64) => 'aarch64-apple-darwin', + (OS.macOS, Architecture.x64) => 'x86_64-apple-darwin', + (OS.windows, Architecture.arm64) => 'aarch64-pc-windows-msvc', + (OS.windows, Architecture.ia32) => 'i686-pc-windows-msvc', + (OS.windows, Architecture.x64) => 'x86_64-pc-windows-msvc', + (_, _) => + throw UnimplementedError( + 'Target ${(os, architecture)} not available for rust', + ), + }; +} + +bool _isNoStdTarget((OS os, Architecture? architecture) arg) => [ + (OS.android, Architecture.riscv64), + (OS.linux, Architecture.riscv64), +].contains(arg); + +Future<void> runProcess( + String executable, + List<String> arguments, { + Directory? workingDirectory, + bool dryRun = false, +}) async { + print('----------'); + print('Running `$executable $arguments` in $workingDirectory'); + if (!dryRun) { + final processResult = await Process.run( + executable, + arguments, + workingDirectory: workingDirectory?.path, + ); + print('stdout:'); + print(processResult.stdout); + if ((processResult.stderr as String).isNotEmpty) { + print('stderr:'); + print(processResult.stderr); + } + if (processResult.exitCode != 0) { + throw ProcessException(executable, arguments, '', processResult.exitCode); + } + } else { + print('Not running, as --dry-run is set.'); + } + print('=========='); +} diff --git a/tools/regenerate_bindings.sh b/tools/regenerate_bindings.sh index d9645131..21cc69cb 100644 --- a/tools/regenerate_bindings.sh +++ b/tools/regenerate_bindings.sh @@ -1,4 +1,6 @@ rm pkgs/intl4x/lib/src/bindings/* cd pkgs/intl4x/lib/src/bindings/ cp -a ../../../../../submodules/icu4x/ffi/capi/bindings/dart/*.dart . -dart format . \ No newline at end of file + +cp submodules/icu4x/ffi/dart/tool/build_libs.dart pkgs/intl4x/tool/build_libs.g.dart +dart format . From 5c0b80536751209f0514f40794d5c46a6f5241ef Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 14:42:32 +0100 Subject: [PATCH 04/12] Fix name --- .github/workflows/intl4x_artifacts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index 3f3603c3..41d19684 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -8,7 +8,7 @@ on: branches: [ main ] paths: - pkgs/intl4x/src/hook_helpers/hashes.dart - - .github/workflows/intl4x_artifacts.yaml + - .github/workflows/intl4x_artifacts.yml push: tags: - 'intl4x-icu*' From 153cb9302a6ab11e2b1290eea4dc59d145b32fd8 Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 14:44:29 +0100 Subject: [PATCH 05/12] fix pub get location --- .github/workflows/intl4x_artifacts.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index 41d19684..9c0b7c70 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -64,7 +64,7 @@ jobs: if: matrix.os == 'ubuntu-latest' run: | rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu - (cd submodules/icu4x/ffi/dart && dart pub get) + (cd pkgs/intl4x && dart pub get) mkdir submodules/icu4x/bin dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/android_arm_${{ matrix.compiletype }} --os android --architecture arm --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} @@ -97,7 +97,7 @@ jobs: - name: Build Mac if: matrix.os == 'macos-latest' run: | - (cd submodules/icu4x/ffi/dart && dart pub get) + (cd pkgs/intl4x && dart pub get) mkdir submodules/icu4x/bin dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/ios_arm64_${{ matrix.compiletype }} --os ios --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} @@ -121,7 +121,7 @@ jobs: - name: Build Windows if: matrix.os == 'windows-latest' run: | - (cd submodules/icu4x/ffi/dart && dart pub get) + (cd pkgs/intl4x && dart pub get) mkdir submodules/icu4x/bin dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} From 921090eae54287995a17e984e3e10ab202bacff0 Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 14:49:00 +0100 Subject: [PATCH 06/12] Add mac toolchain src --- .github/workflows/intl4x_artifacts.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index 9c0b7c70..c2de04b4 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -97,6 +97,7 @@ jobs: - name: Build Mac if: matrix.os == 'macos-latest' run: | + rustup component add rust-src --toolchain nightly-aarch64-apple-darwin (cd pkgs/intl4x && dart pub get) mkdir submodules/icu4x/bin From 21f271d6e43390018b14445467666ae8cc0b0ebc Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 14:50:49 +0100 Subject: [PATCH 07/12] adapt windows --- .github/workflows/intl4x_artifacts.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index c2de04b4..80dc9c26 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -122,12 +122,12 @@ jobs: - name: Build Windows if: matrix.os == 'windows-latest' run: | - (cd pkgs/intl4x && dart pub get) + (cd pkgs\intl4x && dart pub get) mkdir submodules/icu4x/bin - dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_ia32_${{ matrix.compiletype }} --os windows --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_x64_${{ matrix.compiletype }} --os windows --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs\intl4x\tool\build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs\intl4x\tool\build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_ia32_${{ matrix.compiletype }} --os windows --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs\intl4x\tool\build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_x64_${{ matrix.compiletype }} --os windows --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - name: Build Windows data if: matrix.os == 'windows-latest' && matrix.compiletype == 'static' From 515c44ff2b5b5a5fee80a5ad2d68c1ff700e23f9 Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 15:27:54 +0100 Subject: [PATCH 08/12] fixes --- .github/workflows/intl4x_artifacts.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index 80dc9c26..2d989861 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -79,6 +79,8 @@ jobs: - name: Build Linux data if: matrix.os == 'ubuntu-latest' && matrix.compiletype == 'static' run: | + cd submodules/icu4x + cargo run -p icu_datagen -- --locales full --keys all --format blob --out bin/full.postcard cd provider/datagen # avoid global feature resolution @@ -109,7 +111,7 @@ jobs: - name: Build Mac data if: matrix.os == 'macos-latest' && matrix.compiletype == 'static' run: | - cd provider/datagen # avoid global feature resolution + cd submodules/icu4x/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 @@ -122,17 +124,17 @@ jobs: - name: Build Windows if: matrix.os == 'windows-latest' run: | - (cd pkgs\intl4x && dart pub get) - + (cd pkgs/intl4x && dart pub get) + dir mkdir submodules/icu4x/bin - dart pkgs\intl4x\tool\build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart pkgs\intl4x\tool\build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_ia32_${{ matrix.compiletype }} --os windows --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - dart pkgs\intl4x\tool\build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_x64_${{ matrix.compiletype }} --os windows --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_ia32_${{ matrix.compiletype }} --os windows --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_x64_${{ matrix.compiletype }} --os windows --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} - name: Build Windows data if: matrix.os == 'windows-latest' && matrix.compiletype == 'static' run: | - cd provider/datagen # avoid global feature resolution + cd submodules/icu4x/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 From 6f8ddc7c74bd33c73f2ac259e93e4becd2b177db Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 15:34:10 +0100 Subject: [PATCH 09/12] use pushd --- .github/workflows/intl4x_artifacts.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index 2d989861..a59ab76a 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -124,8 +124,10 @@ jobs: - name: Build Windows if: matrix.os == 'windows-latest' run: | - (cd pkgs/intl4x && dart pub get) - dir + pushd pkgs/intl4x + dart pub get + popd + mkdir submodules/icu4x/bin dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_ia32_${{ matrix.compiletype }} --os windows --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} From 663d01d3fcd900c1736d734cf365317a91242bc3 Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 15:42:54 +0100 Subject: [PATCH 10/12] Add windows toolchain --- .github/workflows/intl4x_artifacts.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/intl4x_artifacts.yml b/.github/workflows/intl4x_artifacts.yml index a59ab76a..2d703cfa 100644 --- a/.github/workflows/intl4x_artifacts.yml +++ b/.github/workflows/intl4x_artifacts.yml @@ -67,6 +67,7 @@ jobs: (cd pkgs/intl4x && dart pub get) mkdir submodules/icu4x/bin + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/android_arm_${{ matrix.compiletype }} --os android --architecture arm --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/android_arm64_${{ matrix.compiletype }} --os android --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/android_ia32_${{ matrix.compiletype }} --os android --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} @@ -100,9 +101,11 @@ jobs: if: matrix.os == 'macos-latest' run: | rustup component add rust-src --toolchain nightly-aarch64-apple-darwin + (cd pkgs/intl4x && dart pub get) mkdir submodules/icu4x/bin + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/ios_arm64_${{ matrix.compiletype }} --os ios --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/ios_x64_${{ matrix.compiletype }} --os ios --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/macos_arm64_${{ matrix.compiletype }} --os macos --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} @@ -124,11 +127,14 @@ jobs: - name: Build Windows if: matrix.os == 'windows-latest' run: | + rustup component add rust-src --toolchain nightly-x86_64-pc-windows-msvc + pushd pkgs/intl4x dart pub get popd mkdir submodules/icu4x/bin + dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_arm64_${{ matrix.compiletype }} --os windows --architecture arm64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_ia32_${{ matrix.compiletype }} --os windows --architecture ia32 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} dart pkgs/intl4x/tool/build_libs.g.dart --working_directory submodules/icu4x --file submodules/icu4x/bin/windows_x64_${{ matrix.compiletype }} --os windows --architecture x64 --compile_type ${{ matrix.compiletype }} --cargo_features icu_collator,icu_datetime,icu_list,icu_decimal,icu_plurals,experimental_components${{ env.DATA }} From 45b90f3c945008ba8f6416b534165c4d03b48023 Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 15:50:39 +0100 Subject: [PATCH 11/12] Bump version --- pkgs/intl4x/CHANGELOG.md | 4 ++++ pkgs/intl4x/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/intl4x/CHANGELOG.md b/pkgs/intl4x/CHANGELOG.md index 1b1e6501..7c824faf 100644 --- a/pkgs/intl4x/CHANGELOG.md +++ b/pkgs/intl4x/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.11.2 + +- Use locally modified build_tools.dart for building icu4x libs. + ## 0.11.1 - Fix fraction digits parsing and allow no hook options key in the pubspec. diff --git a/pkgs/intl4x/pubspec.yaml b/pkgs/intl4x/pubspec.yaml index 36e0ae79..0048f485 100644 --- a/pkgs/intl4x/pubspec.yaml +++ b/pkgs/intl4x/pubspec.yaml @@ -1,7 +1,7 @@ name: intl4x description: >- A lightweight modular library for internationalization (i18n) functionality. -version: 0.11.1 +version: 0.11.2 repository: https://github.com/dart-lang/i18n/tree/main/pkgs/intl4x issue_tracker: https://github.com/dart-lang/i18n/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Aintl4x From 736e7affe8df5d28cc69aafd02dc170a123ac96f Mon Sep 17 00:00:00 2001 From: Moritz <mosum@google.com> Date: Wed, 12 Mar 2025 15:58:54 +0100 Subject: [PATCH 12/12] Small fixes --- pkgs/intl4x/tool/build_libs.g.dart | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/pkgs/intl4x/tool/build_libs.g.dart b/pkgs/intl4x/tool/build_libs.g.dart index 79b1e874..0ed43cd6 100644 --- a/pkgs/intl4x/tool/build_libs.g.dart +++ b/pkgs/intl4x/tool/build_libs.g.dart @@ -36,9 +36,6 @@ Future<void> main(List<String> args) async { ); ArgResults parsed; - String os; - String architecture; - String compileType; try { parsed = argParser.parse(args); } catch (e) { @@ -46,18 +43,15 @@ Future<void> main(List<String> args) async { print(argParser.usage); exit(1); } - os = parsed.option(osKey)!; - architecture = parsed.option(architectureKey)!; - compileType = parsed.option(compileTypeKey)!; final lib = await buildLib( OS.values.firstWhere((o) { - return o.name == os; + return o.name == parsed.option(osKey)!; }), Architecture.values.firstWhere((o) { - return o.name == architecture; + return o.name == parsed.option(architectureKey)!; }), - compileType == 'static', + parsed.option(compileTypeKey)! == 'static', parsed.flag(simulatorKey), Directory(parsed.option(workingDirectoryKey)!), parsed.multiOption(cargoFeaturesKey),