| // Copyright (c) 2025, 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:ffigen/ffigen.dart'; | |
| Future<void> main() async { | |
| final packageRoot = Platform.script.resolve('../'); | |
| final generator = FfiGenerator( | |
| input: Input(entryPoints: [packageRoot.resolve('third_party/miniaudio.h')]), | |
| visitors: [ | |
| Visitor( | |
| func: (node) { | |
| const include = { | |
| 'ma_engine_init', | |
| 'ma_engine_play_sound', | |
| 'ma_engine_uninit', | |
| }; | |
| node.isIncluded = include.contains(node.name); | |
| node.recordUse = true; | |
| }, | |
| struct: (node) => node.isIncluded = node.name == 'ma_engine', | |
| enumClass: (node) { | |
| node.isIncluded = node.name == 'ma_result'; | |
| node.silenceWarning = true; | |
| }, | |
| ), | |
| ], | |
| output: Output( | |
| dart: DartOutput( | |
| path: packageRoot.resolve('lib/src/third_party/miniaudio.g.dart'), | |
| ), | |
| recordUseMapping: packageRoot.resolve( | |
| 'lib/src/third_party/record_use_mapping.dart', | |
| ), | |
| preamble: ''' | |
| // This is free and unencumbered software released into the public domain. | |
| // | |
| // Anyone is free to copy, modify, publish, use, compile, sell, or distribute this | |
| // software, either in source code form or as a compiled binary, for any purpose, | |
| // commercial or non-commercial, and by any means. | |
| // | |
| // In jurisdictions that recognize copyright laws, the author or authors of this | |
| // software dedicate any and all copyright interest in the software to the public | |
| // domain. We make this dedication for the benefit of the public at large and to | |
| // the detriment of our heirs and successors. We intend this dedication to be an | |
| // overt act of relinquishment in perpetuity of all present and future rights to | |
| // this software under copyright law. | |
| // | |
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | |
| // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |
| // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
| // | |
| // For more information, please refer to <http://unlicense.org/> | |
| // ignore_for_file: unused_field | |
| ''', | |
| ), | |
| ); | |
| await generator.generate(); | |
| } |