log to file for build.dart, check for SUCCESS token

This commit is contained in:
Nick Fisher
2024-06-19 12:51:39 +08:00
parent ee8769b7d7
commit 8e892a1f23

View File

@@ -6,9 +6,19 @@ import 'package:native_toolchain_c/native_toolchain_c.dart';
void main(List<String> args) async { void main(List<String> args) async {
await build(args, (config, output) async { await build(args, (config, output) async {
var logDir = Directory(
"${config.packageRoot.toFilePath()}/.dart_tool/thermion_dart/log/");
if (!logDir.existsSync()) {
logDir.createSync();
}
var logFile = File(logDir.path + "/build.log");
final logger = Logger("")..level = Level.ALL final logger = Logger("")
..onRecord.listen((record) => print(record.message)); ..level = Level.ALL
..onRecord.listen((record) => logFile.writeAsStringSync(
record.message + "\n",
mode: FileMode.append,
flush: true));
var platform = config.targetOS.toString().toLowerCase(); var platform = config.targetOS.toString().toLowerCase();
@@ -71,7 +81,7 @@ void main(List<String> args) async {
} else { } else {
libs.add("stdc++"); libs.add("stdc++");
} }
final flags = []; final flags = []; //"-fsanitize=address"];
final defines = <String, String?>{}; final defines = <String, String?>{};
var frameworks = []; var frameworks = [];
@@ -85,7 +95,15 @@ void main(List<String> args) async {
} }
if (platform == "ios") { if (platform == "ios") {
frameworks.addAll(['Foundation', 'CoreGraphics', 'QuartzCore', 'GLKit', "Metal", 'CoreVideo', 'OpenGLES']); frameworks.addAll([
'Foundation',
'CoreGraphics',
'QuartzCore',
'GLKit',
"Metal",
'CoreVideo',
'OpenGLES'
]);
} else if (platform == "macos") { } else if (platform == "macos") {
frameworks.addAll([ frameworks.addAll([
'Foundation', 'Foundation',
@@ -171,7 +189,6 @@ String _getLibraryUrl(String platform, String mode) {
// Download precompiled Filament libraries for the target platform from Cloudflare. // Download precompiled Filament libraries for the target platform from Cloudflare.
// //
Future<Directory> getLibDir(BuildConfig config, Logger logger) async { Future<Directory> getLibDir(BuildConfig config, Logger logger) async {
var platform = config.targetOS.toString().toLowerCase(); var platform = config.targetOS.toString().toLowerCase();
// Except on Windows, most users will only need release builds of Filament. // Except on Windows, most users will only need release builds of Filament.
@@ -187,7 +204,8 @@ Future<Directory> getLibDir(BuildConfig config, Logger logger) async {
mode = config.buildMode == BuildMode.debug ? "debug" : "release"; mode = config.buildMode == BuildMode.debug ? "debug" : "release";
} }
var libDir = Directory("${config.packageRoot.toFilePath()}/.dart_tool/thermion_dart/lib/${_FILAMENT_VERSION}/$platform/$mode/"); var libDir = Directory(
"${config.packageRoot.toFilePath()}/.dart_tool/thermion_dart/lib/${_FILAMENT_VERSION}/$platform/$mode/");
if (platform == "android") { if (platform == "android") {
final archExtension = switch (config.targetArchitecture) { final archExtension = switch (config.targetArchitecture) {
@@ -200,7 +218,8 @@ Future<Directory> getLibDir(BuildConfig config, Logger logger) async {
libDir = Directory("${libDir.path}/$archExtension/"); libDir = Directory("${libDir.path}/$archExtension/");
} else if (platform == "windows") { } else if (platform == "windows") {
if (config.targetArchitecture != Architecture.x64) { if (config.targetArchitecture != Architecture.x64) {
throw Exception("Unsupported architecture : ${config.targetArchitecture}"); throw Exception(
"Unsupported architecture : ${config.targetArchitecture}");
} }
} }
@@ -208,13 +227,13 @@ Future<Directory> getLibDir(BuildConfig config, Logger logger) async {
final filename = url.split("/").last; final filename = url.split("/").last;
// Assume that the libraries exist if the directory containing them exists. // We will write an empty file called success to the unzip directory after successfully downloading/extracting the prebuilt libraries.
if (!libDir.existsSync()) { // If this file already exists, we assume everything has been successfully extracted and skip
final unzipDir = platform == "android" ? libDir.parent.path : libDir.path; final unzipDir = platform == "android" ? libDir.parent.path : libDir.path;
final successToken = File("$unzipDir/success");
final libraryZip = File("$unzipDir/$filename"); final libraryZip = File("$unzipDir/$filename");
if (!successToken.existsSync()) {
if (libraryZip.existsSync()) { if (libraryZip.existsSync()) {
libraryZip.deleteSync(); libraryZip.deleteSync();
} }
@@ -223,7 +242,8 @@ Future<Directory> getLibDir(BuildConfig config, Logger logger) async {
libraryZip.parent.createSync(recursive: true); libraryZip.parent.createSync(recursive: true);
} }
logger.info("Downloading prebuilt libraries for $platform/$mode from $url to ${libraryZip}, files will be unzipped to ${unzipDir}"); logger.info(
"Downloading prebuilt libraries for $platform/$mode from $url to ${libraryZip}, files will be unzipped to ${unzipDir}");
final request = await HttpClient().getUrl(Uri.parse(url)); final request = await HttpClient().getUrl(Uri.parse(url));
final response = await request.close(); final response = await request.close();
@@ -243,6 +263,7 @@ Future<Directory> getLibDir(BuildConfig config, Logger logger) async {
await d.create(recursive: true); await d.create(recursive: true);
} }
} }
successToken.writeAsStringSync("SUCCESS");
} }
return libDir; return libDir;
} }