blob: 11b89ea5368cf3f40f236c91fa11e3ce01cb15b7 [file]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:io';
import 'package:logging/logging.dart';
import 'package:path/path.dart';
import 'package:jnigen/jnigen.dart';
const testName = 'kotlin_test';
const jarFile = '$testName.jar';
final testRoot = join('test', testName);
final kotlinPath = join(testRoot, 'kotlin');
final jarPath = join(kotlinPath, 'target', jarFile);
const preamble = '''
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
''';
void compileKotlinSources(String workingDir) async {
final procRes = Process.runSync(
'mvn',
['package'],
workingDirectory: workingDir,
runInShell: true,
);
if (procRes.exitCode != 0) {
throw "mvn exited with ${procRes.exitCode}\n"
"${procRes.stderr}";
}
}
Config getConfig([BindingsType bindingsType = BindingsType.cBased]) {
compileKotlinSources(kotlinPath);
final typeDir = bindingsType.getConfigString();
final cWrapperDir = Uri.directory(join(testRoot, typeDir, "c_bindings"));
final dartWrappersRoot = Uri.directory(
join(testRoot, typeDir, "dart_bindings"),
);
final config = Config(
classPath: [Uri.file(jarPath)],
classes: [
// Generating the entire library.
//
// This makes sure that no private class generated by Kotlin can make its
// way to the generated code.
'com.github.dart_lang.jnigen',
],
logLevel: Level.ALL,
outputConfig: OutputConfig(
bindingsType: bindingsType,
cConfig: CCodeOutputConfig(
path: cWrapperDir,
libraryName: 'kotlin',
),
dartConfig: DartCodeOutputConfig(
path: dartWrappersRoot.resolve('kotlin.dart'),
structure: OutputStructure.singleFile,
),
),
summarizerOptions: SummarizerOptions(backend: 'asm'),
preamble: preamble,
);
return config;
}
void main() async {
await generateJniBindings(getConfig(BindingsType.cBased));
await generateJniBindings(getConfig(BindingsType.dartOnly));
}