| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:async' show | 5 import 'dart:async' show |
| 6 Future; | 6 Future; |
| 7 | 7 |
| 8 import 'dart:convert' show | 8 import 'dart:convert' show |
| 9 LineSplitter, | 9 LineSplitter, |
| 10 UTF8; | 10 UTF8; |
| 11 | 11 |
| 12 import 'dart:io' show | 12 import 'dart:io' show |
| 13 Directory, | 13 Directory, |
| 14 File, | 14 File, |
| 15 FileSystemEntity, | 15 FileSystemEntity, |
| 16 Platform, | 16 Platform, |
| 17 Process, | 17 Process, |
| 18 ProcessResult; | 18 ProcessResult; |
| 19 | 19 |
| 20 import 'package:expect/expect.dart' show | 20 import 'package:expect/expect.dart' show |
| 21 Expect; | 21 Expect; |
| 22 | 22 |
| 23 import 'multiple_services/multiple_services_tests.dart' as multiple; | 23 import 'multiple_services/multiple_services_tests.dart' as multiple; |
| 24 import '../../samples/todomvc/todomvc_service_tests.dart' as todomvc; | 24 import '../../samples/todomvc/todomvc_service_tests.dart' as todomvc; |
| 25 import '../../samples/simple_todo/simple_todo_service_tests.dart' | 25 import '../../samples/simple_todo/simple_todo_service_tests.dart' |
| 26 as simple_todo; | 26 as simple_todo; |
| 27 | 27 |
| 28 import '../fletchc/run.dart' show | 28 import '../dartino_compiler/run.dart' show |
| 29 export; | 29 export; |
| 30 | 30 |
| 31 import 'package:servicec/compiler.dart' as servicec; | 31 import 'package:servicec/compiler.dart' as servicec; |
| 32 | 32 |
| 33 List<ServiceTest> SERVICE_TESTS = <ServiceTest>[] | 33 List<ServiceTest> SERVICE_TESTS = <ServiceTest>[] |
| 34 ..add(todomvc.serviceTest) | 34 ..add(todomvc.serviceTest) |
| 35 ..addAll(simple_todo.serviceTests) | 35 ..addAll(simple_todo.serviceTests) |
| 36 ..addAll(multiple.serviceTests) | 36 ..addAll(multiple.serviceTests) |
| 37 ..addAll(buildStandardServiceTests( | 37 ..addAll(buildStandardServiceTests( |
| 38 'conformance', | 38 'conformance', |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 /// Resources directory for servicec. | 86 /// Resources directory for servicec. |
| 87 final Uri resourcesDirectory = servicecDirectory.resolve('lib/src/resources'); | 87 final Uri resourcesDirectory = servicecDirectory.resolve('lib/src/resources'); |
| 88 | 88 |
| 89 /// Temporary directory for test output. | 89 /// Temporary directory for test output. |
| 90 const String tempTestOutputDirectory = | 90 const String tempTestOutputDirectory = |
| 91 const String.fromEnvironment("test.dart.temp-dir"); | 91 const String.fromEnvironment("test.dart.temp-dir"); |
| 92 | 92 |
| 93 final String generatedDirectory = '$tempTestOutputDirectory/service_tests'; | 93 final String generatedDirectory = '$tempTestOutputDirectory/service_tests'; |
| 94 | 94 |
| 95 // TODO(zerny): Provide the below constants via configuration from test.py | 95 // TODO(zerny): Provide the below constants via configuration from test.py |
| 96 final String fletchExecutable = '$buildDirectory/fletch'; | 96 final String dartinoExecutable = '$buildDirectory/dartino'; |
| 97 final String fletchLibrary = '$buildDirectory/libfletch.a'; | 97 final String dartinoLibrary = '$buildDirectory/libdartino.a'; |
| 98 | 98 |
| 99 /// Location of JDK installation. Empty if no installation was found. | 99 /// Location of JDK installation. Empty if no installation was found. |
| 100 const String javaHome = const String.fromEnvironment('java-home'); | 100 const String javaHome = const String.fromEnvironment('java-home'); |
| 101 | 101 |
| 102 const bool isAsan = buildAsan; | 102 const bool isAsan = buildAsan; |
| 103 const bool isClang = buildClang; | 103 const bool isClang = buildClang; |
| 104 const bool isGNU = !buildClang; | 104 const bool isGNU = !buildClang; |
| 105 const bool isMacOS = buildSystem == 'macos'; | 105 const bool isMacOS = buildSystem == 'macos'; |
| 106 const bool isLinux = buildSystem == 'linux'; | 106 const bool isLinux = buildSystem == 'linux'; |
| 107 | 107 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 String get jarFile => '$outputDirectory/$baseName.jar'; | 187 String get jarFile => '$outputDirectory/$baseName.jar'; |
| 188 | 188 |
| 189 Future<Null> prepare() async { | 189 Future<Null> prepare() async { |
| 190 prepareService(); | 190 prepareService(); |
| 191 prepareSnapshot(); | 191 prepareSnapshot(); |
| 192 | 192 |
| 193 // Complete the test here if Java home is not set. | 193 // Complete the test here if Java home is not set. |
| 194 if (javaHome.isEmpty) return; | 194 if (javaHome.isEmpty) return; |
| 195 | 195 |
| 196 rules.add(new CcRule( | 196 rules.add(new CcRule( |
| 197 sharedLibrary: '$outputDirectory/libfletch', | 197 sharedLibrary: '$outputDirectory/libdartino', |
| 198 includePaths: [ | 198 includePaths: [ |
| 199 'include', | 199 'include', |
| 200 '$javaHome/include', | 200 '$javaHome/include', |
| 201 '$javaHome/include/${isMacOS ? "darwin" : "linux"}', | 201 '$javaHome/include/${isMacOS ? "darwin" : "linux"}', |
| 202 outputDirectory, | 202 outputDirectory, |
| 203 ], | 203 ], |
| 204 sources: [ | 204 sources: [ |
| 205 '$javaDirectory/jni/fletch_api_wrapper.cc', | 205 '$javaDirectory/jni/dartino_api_wrapper.cc', |
| 206 '$javaDirectory/jni/fletch_service_api_wrapper.cc', | 206 '$javaDirectory/jni/dartino_service_api_wrapper.cc', |
| 207 '$javaDirectory/jni/${baseName}_service_wrapper.cc', | 207 '$javaDirectory/jni/${baseName}_service_wrapper.cc', |
| 208 ]..addAll(ccSources))); | 208 ]..addAll(ccSources))); |
| 209 | 209 |
| 210 rules.add(new MakeDirectoryRule(classesDirectory)); | 210 rules.add(new MakeDirectoryRule(classesDirectory)); |
| 211 | 211 |
| 212 rules.add(new JavacRule( | 212 rules.add(new JavacRule( |
| 213 warningAsError: false, | 213 warningAsError: false, |
| 214 sources: ['$javaDirectory/fletch'] | 214 sources: ['$javaDirectory/dartino'] |
| 215 ..addAll(javaSources.map((path) => '$inputDirectory/$path')), | 215 ..addAll(javaSources.map((path) => '$inputDirectory/$path')), |
| 216 outputDirectory: classesDirectory)); | 216 outputDirectory: classesDirectory)); |
| 217 | 217 |
| 218 rules.add(new JarRule( | 218 rules.add(new JarRule( |
| 219 jarFile, | 219 jarFile, |
| 220 sources: ['.'], | 220 sources: ['.'], |
| 221 baseDirectory: classesDirectory)); | 221 baseDirectory: classesDirectory)); |
| 222 | 222 |
| 223 rules.add(new JavaRule( | 223 rules.add(new JavaRule( |
| 224 mainClass, | 224 mainClass, |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 javaArguments.add(mainClass); | 447 javaArguments.add(mainClass); |
| 448 | 448 |
| 449 if (arguments != null) { | 449 if (arguments != null) { |
| 450 javaArguments.addAll(arguments); | 450 javaArguments.addAll(arguments); |
| 451 } | 451 } |
| 452 | 452 |
| 453 await Rule.runCommand(java, javaArguments, javaEnvironment); | 453 await Rule.runCommand(java, javaArguments, javaEnvironment); |
| 454 } | 454 } |
| 455 } | 455 } |
| 456 | 456 |
| 457 // TODO(zerny): Consider refactoring fletch specifics into a derived class. | 457 // TODO(zerny): Consider refactoring dartino specifics into a derived class. |
| 458 // TODO(zerny): Find a way to obtain the fletch build configuration from gyp. | 458 // TODO(zerny): Find a way to obtain the dartino build configuration from gyp. |
| 459 class CcRule extends Rule { | 459 class CcRule extends Rule { |
| 460 final String language; | 460 final String language; |
| 461 final String executable; | 461 final String executable; |
| 462 final String sharedLibrary; | 462 final String sharedLibrary; |
| 463 final Iterable<String> flags; | 463 final Iterable<String> flags; |
| 464 final Iterable<String> sources; | 464 final Iterable<String> sources; |
| 465 final Iterable<String> libraries; | 465 final Iterable<String> libraries; |
| 466 final Iterable<String> includePaths; | 466 final Iterable<String> includePaths; |
| 467 final Iterable<String> libraryPaths; | 467 final Iterable<String> libraryPaths; |
| 468 | 468 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 487 String get compiler => 'tools/cxx_wrapper.py'; | 487 String get compiler => 'tools/cxx_wrapper.py'; |
| 488 | 488 |
| 489 String get output { | 489 String get output { |
| 490 if (executable != null) return executable; | 490 if (executable != null) return executable; |
| 491 String suffix = isMacOS ? 'jnilib' : 'so'; | 491 String suffix = isMacOS ? 'jnilib' : 'so'; |
| 492 return '$sharedLibrary.$suffix'; | 492 return '$sharedLibrary.$suffix'; |
| 493 } | 493 } |
| 494 | 494 |
| 495 void addBuildFlags(List<String> arguments) { | 495 void addBuildFlags(List<String> arguments) { |
| 496 arguments.add('-std=${language}'); | 496 arguments.add('-std=${language}'); |
| 497 arguments.add('-DFLETCH_ENABLE_FFI'); | 497 arguments.add('-DDARTINO_ENABLE_FFI'); |
| 498 arguments.add('-DFLETCH_ENABLE_LIVE_CODING'); | 498 arguments.add('-DDARTINO_ENABLE_LIVE_CODING'); |
| 499 arguments.add('-DFLETCH_ENABLE_PRINT_INTERCEPTORS'); | 499 arguments.add('-DDARTINO_ENABLE_PRINT_INTERCEPTORS'); |
| 500 arguments.add('-DFLETCH_ENABLE_NATIVE_PROCESSES'); | 500 arguments.add('-DDARTINO_ENABLE_NATIVE_PROCESSES'); |
| 501 if (sharedLibrary != null) arguments.add('-shared'); | 501 if (sharedLibrary != null) arguments.add('-shared'); |
| 502 if (buildArchitecture == 'ia32') { | 502 if (buildArchitecture == 'ia32') { |
| 503 arguments.add('-m32'); | 503 arguments.add('-m32'); |
| 504 arguments.add('-DFLETCH32'); | 504 arguments.add('-DDARTINO32'); |
| 505 arguments.add('-DFLETCH_TARGET_IA32'); | 505 arguments.add('-DDARTINO_TARGET_IA32'); |
| 506 } else if (buildArchitecture == 'x64') { | 506 } else if (buildArchitecture == 'x64') { |
| 507 arguments.add('-m64'); | 507 arguments.add('-m64'); |
| 508 arguments.add('-DFLETCH64'); | 508 arguments.add('-DDARTINO64'); |
| 509 arguments.add('-DFLETCH_TARGET_X64'); | 509 arguments.add('-DDARTINO_TARGET_X64'); |
| 510 if (sharedLibrary != null) arguments.add('-fPIC'); | 510 if (sharedLibrary != null) arguments.add('-fPIC'); |
| 511 } else { | 511 } else { |
| 512 throw "Unsupported architecture ${buildArchitecture}"; | 512 throw "Unsupported architecture ${buildArchitecture}"; |
| 513 } | 513 } |
| 514 } | 514 } |
| 515 | 515 |
| 516 void addHostFlags(List<String> arguments) { | 516 void addHostFlags(List<String> arguments) { |
| 517 if (isMacOS) { | 517 if (isMacOS) { |
| 518 arguments.add('-DFLETCH_TARGET_OS_MACOS'); | 518 arguments.add('-DDARTINO_TARGET_OS_MACOS'); |
| 519 arguments.add('-DFLETCH_TARGET_OS_POSIX'); | 519 arguments.add('-DDARTINO_TARGET_OS_POSIX'); |
| 520 arguments.addAll(['-framework', 'CoreFoundation']); | 520 arguments.addAll(['-framework', 'CoreFoundation']); |
| 521 } else if (isLinux) { | 521 } else if (isLinux) { |
| 522 arguments.add('-DFLETCH_TARGET_OS_LINUX'); | 522 arguments.add('-DDARTINO_TARGET_OS_LINUX'); |
| 523 arguments.add('-DFLETCH_TARGET_OS_POSIX'); | 523 arguments.add('-DDARTINO_TARGET_OS_POSIX'); |
| 524 } else { | 524 } else { |
| 525 throw "Unsupported host ${buildSystem}"; | 525 throw "Unsupported host ${buildSystem}"; |
| 526 } | 526 } |
| 527 } | 527 } |
| 528 | 528 |
| 529 void addUserFlags(List<String> arguments) { | 529 void addUserFlags(List<String> arguments) { |
| 530 arguments.addAll(flags); | 530 arguments.addAll(flags); |
| 531 } | 531 } |
| 532 | 532 |
| 533 void addIncludePaths(List<String> arguments) { | 533 void addIncludePaths(List<String> arguments) { |
| 534 arguments.add('-I.'); | 534 arguments.add('-I.'); |
| 535 arguments.addAll(includePaths.map((path) => '-I${path}')); | 535 arguments.addAll(includePaths.map((path) => '-I${path}')); |
| 536 } | 536 } |
| 537 | 537 |
| 538 void addLibraryPaths(List<String> arguments) { | 538 void addLibraryPaths(List<String> arguments) { |
| 539 String arch; | 539 String arch; |
| 540 if (buildArchitecture == 'ia32') { | 540 if (buildArchitecture == 'ia32') { |
| 541 arch = 'x86'; | 541 arch = 'x86'; |
| 542 } else if (buildArchitecture == 'x64') { | 542 } else if (buildArchitecture == 'x64') { |
| 543 arch = 'x64'; | 543 arch = 'x64'; |
| 544 } else { | 544 } else { |
| 545 throw "Unsupported host architecture ${buildArchitecture}"; | 545 throw "Unsupported host architecture ${buildArchitecture}"; |
| 546 } | 546 } |
| 547 if (isMacOS) arguments.add('-Lthird_party/libs/mac/$arch'); | 547 if (isMacOS) arguments.add('-Lthird_party/libs/mac/$arch'); |
| 548 if (isLinux) arguments.add('-Lthird_party/libs/linux/$arch'); | 548 if (isLinux) arguments.add('-Lthird_party/libs/linux/$arch'); |
| 549 arguments.addAll(libraryPaths.map((path) => '-L${path}')); | 549 arguments.addAll(libraryPaths.map((path) => '-L${path}')); |
| 550 } | 550 } |
| 551 | 551 |
| 552 void addLibraries(List<String> arguments) { | 552 void addLibraries(List<String> arguments) { |
| 553 arguments.add(fletchLibrary); | 553 arguments.add(dartinoLibrary); |
| 554 for (String lib in libraries) { | 554 for (String lib in libraries) { |
| 555 arguments.add(lib.endsWith('.a') ? lib : '-l$lib'); | 555 arguments.add(lib.endsWith('.a') ? lib : '-l$lib'); |
| 556 } | 556 } |
| 557 } | 557 } |
| 558 | 558 |
| 559 void addHostLibraries(List<String> arguments) { | 559 void addHostLibraries(List<String> arguments) { |
| 560 arguments.addAll([ | 560 arguments.addAll([ |
| 561 '-lpthread', | 561 '-lpthread', |
| 562 '-ldl', | 562 '-ldl', |
| 563 '-rdynamic', | 563 '-rdynamic', |
| 564 ]); | 564 ]); |
| 565 } | 565 } |
| 566 | 566 |
| 567 void addSources(List<String> arguments) { | 567 void addSources(List<String> arguments) { |
| 568 arguments.addAll(sources); | 568 arguments.addAll(sources); |
| 569 } | 569 } |
| 570 | 570 |
| 571 Future<Null> build() async { | 571 Future<Null> build() async { |
| 572 List<String> arguments = <String>[]; | 572 List<String> arguments = <String>[]; |
| 573 if (isClang) arguments.add('-DFLETCH_CLANG'); | 573 if (isClang) arguments.add('-DDARTINO_CLANG'); |
| 574 if (isAsan) { | 574 if (isAsan) { |
| 575 arguments.add('-DFLETCH_ASAN'); | 575 arguments.add('-DDARTINO_ASAN'); |
| 576 arguments.add('-L/FLETCH_ASAN'); | 576 arguments.add('-L/DARTINO_ASAN'); |
| 577 } | 577 } |
| 578 addBuildFlags(arguments); | 578 addBuildFlags(arguments); |
| 579 addHostFlags(arguments); | 579 addHostFlags(arguments); |
| 580 addUserFlags(arguments); | 580 addUserFlags(arguments); |
| 581 addIncludePaths(arguments); | 581 addIncludePaths(arguments); |
| 582 addLibraryPaths(arguments); | 582 addLibraryPaths(arguments); |
| 583 arguments.addAll(['-o', output]); | 583 arguments.addAll(['-o', output]); |
| 584 if (isGNU) arguments.add('-Wl,--start-group'); | 584 if (isGNU) arguments.add('-Wl,--start-group'); |
| 585 addSources(arguments); | 585 addSources(arguments); |
| 586 addLibraries(arguments); | 586 addLibraries(arguments); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 | 640 |
| 641 typedef Future NoArgFuture(); | 641 typedef Future NoArgFuture(); |
| 642 | 642 |
| 643 Future<Map<String, NoArgFuture>> listTests() async { | 643 Future<Map<String, NoArgFuture>> listTests() async { |
| 644 var tests = <String, NoArgFuture>{}; | 644 var tests = <String, NoArgFuture>{}; |
| 645 for (ServiceTest test in SERVICE_TESTS) { | 645 for (ServiceTest test in SERVICE_TESTS) { |
| 646 tests['service_tests/${test.name}'] = () => test.run(); | 646 tests['service_tests/${test.name}'] = () => test.run(); |
| 647 } | 647 } |
| 648 return tests; | 648 return tests; |
| 649 } | 649 } |
| OLD | NEW |