diff --git a/.github/workflows/build_with_tag.yml b/.github/workflows/build_with_tag.yml new file mode 100644 index 0000000..9cbc4dd --- /dev/null +++ b/.github/workflows/build_with_tag.yml @@ -0,0 +1,89 @@ +name: Build With Tag + +on: + workflow_dispatch: + inputs: + version: + description: 'input dart version here(should be >= 3.3.0)' + required: true + default: '3.3.0' + type: string + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} + cancel-in-progress: true + +jobs: + Release: + strategy: + matrix: + os: [macos-latest, windows-latest, macos-14] + include: + - os: macos-latest + output: darwin_x64 + - os: windows-latest + output: windows_x64 + - os: macos-14 + output: darwin_arm64 + runs-on: ${{ matrix.os }} + + steps: + - name: Check Inputs (macos) + if: matrix.os != 'windows-latest' + run: | + if [[ ${{ inputs.version }} =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "${{ inputs.version }} is a version number" + else + echo "${{ inputs.version }} is not a version number" + exit 1 + fi + + - name: Check Inputs (windows) + if: matrix.os == 'windows-latest' + run: | + $tag = "${{ inputs.version }}" + if ($tag -match '^\d+\.\d+\.\d+$') { + Write-Output "$tag is a version number" + } else { + Write-Output "$tag is not a version number" + exit 1 + } + + - name: Checkout + uses: actions/checkout@v4 + with: + token: ${{ secrets.GIOSDK_PAT }} + + - uses: dart-lang/setup-dart@v1 + with: + sdk: ${{ inputs.version }} + + - name: Checkout Dart SDK + run: | + git clone --depth 1 --branch ${{ inputs.version }} https://github.com/dart-lang/sdk.git + cd sdk + git apply --ignore-space-change --ignore-whitespace "../dart_flutter.patch" + + - name: Install Dependencies + run: | + dart pub get + mkdir build + mkdir build/${{ matrix.output }} + + - name: Generate Snapshot + if: matrix.os == 'macos-latest' + working-directory: ./lib/flutter_frontend_server + run: | + dart --deterministic --snapshot=frontend_server.dart.snapshot frontend_server_starter.dart + cp frontend_server.dart.snapshot ../../build/frontend_server.dart.snapshot + + - name: Generate AOT Snapshot + working-directory: ./lib/flutter_frontend_server + run: | + dart compile aot-snapshot frontend_server_starter.dart + cp frontend_server_starter.aot ../../build/${{ matrix.output }}/frontend_server_aot.dart.snapshot + + - uses: actions/upload-artifact@v4 + with: + name: snapshots-${{ matrix.output }} + path: build \ No newline at end of file diff --git a/dart_flutter.patch b/dart_flutter.patch index 5ac8ae8..e88a5e1 100644 --- a/dart_flutter.patch +++ b/dart_flutter.patch @@ -1,5 +1,5 @@ diff --git a/pkg/vm/lib/target/flutter.dart b/pkg/vm/lib/target/flutter.dart -index 8bdde3d4201..8473a3fa020 100644 +index 0ed541a8817..3d3994f324b 100644 --- a/pkg/vm/lib/target/flutter.dart +++ b/pkg/vm/lib/target/flutter.dart @@ -9,11 +9,18 @@ import 'package:kernel/target/targets.dart'; @@ -21,7 +21,7 @@ index 8bdde3d4201..8473a3fa020 100644 @override String get name => 'flutter'; -@@ -61,6 +68,14 @@ class FlutterTarget extends VmTarget { +@@ -58,6 +65,14 @@ class FlutterTarget extends VmTarget { DiagnosticReporter diagnosticReporter, {void Function(String msg)? logger, ChangedStructureNotifier? changedStructureNotifier}) { diff --git a/lib/flutter_frontend_server/flutter_frontend_compiler.dart b/lib/flutter_frontend_server/flutter_frontend_compiler.dart index 37f10b9..a2e1df5 100644 --- a/lib/flutter_frontend_server/flutter_frontend_compiler.dart +++ b/lib/flutter_frontend_server/flutter_frontend_compiler.dart @@ -33,16 +33,20 @@ class FlutterFrontendCompiler implements frontend.CompilerInterface { {frontend.BinaryPrinterFactory? printerFactory, frontend.ProgramTransformer? transformer, bool? unsafePackageSerialization, - bool? incrementalSerialization, + bool incrementalSerialization = true, bool useDebuggerModuleNames = false, bool emitDebugMetadata = false, - bool emitDebugSymbols = false}) + bool emitDebugSymbols = false, + bool canaryFeatures = false,}) : _compiler = frontend.FrontendCompiler(outputStream, printerFactory: printerFactory, transformer: transformer, + unsafePackageSerialization: unsafePackageSerialization, + incrementalSerialization: incrementalSerialization, useDebuggerModuleNames: useDebuggerModuleNames, emitDebugMetadata: emitDebugMetadata, - unsafePackageSerialization: unsafePackageSerialization); + emitDebugSymbols: emitDebugSymbols, + canaryFeatures: canaryFeatures); @override Future compile(String filename, ArgResults options, @@ -96,6 +100,8 @@ class FlutterFrontendCompiler implements frontend.CompilerInterface { String libraryUri, String? klass, String? method, + int offset, + String? scriptUri, bool isStatic) { return _compiler.compileExpression( expression, @@ -107,6 +113,8 @@ class FlutterFrontendCompiler implements frontend.CompilerInterface { libraryUri, klass, method, + offset, + scriptUri, isStatic); } diff --git a/lib/flutter_frontend_server/frontend_server.dart.snapshot b/lib/flutter_frontend_server/frontend_server.dart.snapshot deleted file mode 100644 index c9baeba..0000000 Binary files a/lib/flutter_frontend_server/frontend_server.dart.snapshot and /dev/null differ diff --git a/lib/flutter_frontend_server/starter.dart b/lib/flutter_frontend_server/starter.dart index d61f8c9..13ccc0a 100644 --- a/lib/flutter_frontend_server/starter.dart +++ b/lib/flutter_frontend_server/starter.dart @@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE.md file. import 'dart:async'; -import 'dart:io' show Directory, File, InternetAddress, stdin; +import 'dart:io' show Directory, File, InternetAddress, Socket, stdin; import 'package:args/args.dart'; import 'package:path/path.dart' as path; @@ -11,6 +11,7 @@ import 'package:vm/incremental_compiler.dart' show IncrementalCompiler; import 'package:frontend_server/frontend_server.dart'; import 'package:frontend_server/src/binary_protocol.dart'; +import 'package:frontend_server/src/resident_frontend_server.dart'; import 'flutter_frontend_compiler.dart'; @@ -36,6 +37,13 @@ Future starter( return 1; } + if (options['resident-info-file-name'] != null) { + StreamSubscription? serverSubscription = + await residentListenAndCompile(InternetAddress.loopbackIPv4, 0, + File(options['resident-info-file-name'])); + return serverSubscription == null ? 1 : 0; + } + if (options['train']) { if (options.rest.isEmpty) { throw Exception('Must specify input.dart'); @@ -43,7 +51,7 @@ Future starter( final String input = options.rest[0]; final String sdkRoot = options['sdk-root']; - //final String? platform = options['platform']; + final String? platform = options['platform']; final Directory temp = Directory.systemTemp.createTempSync('train_frontend_server'); try { @@ -55,11 +63,10 @@ Future starter( '--output-dill=$outputTrainingDill', '--target=flutter', '--track-widget-creation', - '--enable-asserts', ]; - // if (platform != null) { - // args.add('--platform=${Uri.file(platform)}'); - // } + if (platform != null) { + args.add('--platform=${Uri.file(platform)}'); + } options = argParser.parse(args); // compiler ??= FrontendCompiler(output, printerFactory: binaryPrinterFactory); compiler ??= FlutterFrontendCompiler(output,printerFactory: binaryPrinterFactory); @@ -91,7 +98,8 @@ Future starter( incrementalSerialization: options["incremental-serialization"], useDebuggerModuleNames: options['debugger-module-names'], emitDebugMetadata: options['experimental-emit-debug-metadata'], - emitDebugSymbols: options['emit-debug-symbols']); + emitDebugSymbols: options['emit-debug-symbols'], + canaryFeatures: options['dartdevc-canary'],); if (options.rest.isNotEmpty) { return await compiler.compile(options.rest[0], options, diff --git a/pubspec.yaml b/pubspec.yaml index 81f5f09..9837097 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,61 +7,61 @@ environment: sdk: '>=2.18.5 <3.0.0' dependencies: - analyzer: ^5.3.1 + analyzer: ^6.4.1 args: ^2.3.1 - bazel_worker: ^1.0.2 - coverage: ^1.6.1 + bazel_worker: ^1.1.1 + coverage: ^1.7.2 fixnum: ^1.0.1 http_parser: ^4.0.2 matcher: ^0.12.13 mime: ^1.0.3 node_preamble: ^2.0.1 - protobuf: ^2.1.0 + protobuf: ^3.1.0 quiver: ^3.1.0 shelf: ^1.4.0 shelf_packages_handler: ^3.0.1 shelf_static: ^1.1.1 shelf_web_socket: ^1.0.3 - vm_service: ^9.4.0 + vm_service: ^14.1.0 yaml: ^3.1.1 dev_dependencies: - lints: ^2.0.0 + lints: ^3.0.0 test: ^1.22.1 dependency_overrides: kernel: - path: /Users/growingio/Desktop/sdk/pkg/kernel + path: ./sdk/pkg/kernel meta: - path: /Users/growingio/Desktop/sdk/pkg/meta + path: ./sdk/pkg/meta frontend_server: - path: /Users/growingio/Desktop/sdk/pkg/frontend_server + path: ./sdk/pkg/frontend_server front_end: - path: /Users/growingio/Desktop/sdk/pkg/front_end + path: ./sdk/pkg/front_end dart2js_info: - path: /Users/growingio/Desktop/sdk/pkg/dart2js_info + path: ./sdk/pkg/dart2js_info dev_compiler: - path: /Users/growingio/Desktop/sdk/pkg/dev_compiler + path: ./sdk/pkg/dev_compiler _fe_analyzer_shared: - path: /Users/growingio/Desktop/sdk/pkg/_fe_analyzer_shared + path: ./sdk/pkg/_fe_analyzer_shared js_shared: - path: /Users/growingio/Desktop/sdk/pkg/js_shared + path: ./sdk/pkg/js_shared build_integration: - path: /Users/growingio/Desktop/sdk/pkg/build_integration + path: ./sdk/pkg/build_integration _js_interop_checks: - path: /Users/growingio/Desktop/sdk/pkg/_js_interop_checks + path: ./sdk/pkg/_js_interop_checks package_config: any compiler: - path: /Users/growingio/Desktop/sdk/pkg/compiler + path: ./sdk/pkg/compiler js_runtime: - path: /Users/growingio/Desktop/sdk/pkg/js_runtime + path: ./sdk/pkg/js_runtime js_ast: - path: /Users/growingio/Desktop/sdk/pkg/js_ast + path: ./sdk/pkg/js_ast vm: - path: /Users/growingio/Desktop/sdk/pkg/vm + path: ./sdk/pkg/vm dart2wasm: - path: /Users/growingio/Desktop/sdk/pkg/dart2wasm + path: ./sdk/pkg/dart2wasm wasm_builder: - path: /Users/growingio/Desktop/sdk/pkg/wasm_builder + path: ./sdk/pkg/wasm_builder mmap: - path: /Users/growingio/Desktop/sdk/pkg/mmap \ No newline at end of file + path: ./sdk/pkg/mmap \ No newline at end of file