diff --git a/dart/.dart_tool/package_config.json b/dart/.dart_tool/package_config.json new file mode 100644 index 0000000..11dd489 --- /dev/null +++ b/dart/.dart_tool/package_config.json @@ -0,0 +1,321 @@ +{ + "configVersion": 2, + "packages": [ + { + "name": "_fe_analyzer_shared", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-73.0.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "_macros", + "rootUri": "file:///opt/homebrew/Cellar/dart/3.5.3/libexec/pkg/_macros", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "analyzer", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/analyzer-6.8.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "args", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/args-2.5.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "async", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/async-2.11.0", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "boolean_selector", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/boolean_selector-2.1.1", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "collection", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/collection-1.19.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "convert", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/convert-3.1.1", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "coverage", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/coverage-1.9.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "crypto", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/crypto-3.0.5", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "ffi", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/ffi-1.2.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "file", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/file-7.0.1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "frontend_server_client", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/frontend_server_client-4.0.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "glob", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/glob-2.1.2", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "http_multi_server", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/http_multi_server-3.2.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "http_parser", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/http_parser-4.1.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "io", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/io-1.0.4", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "js", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/js-0.7.1", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "lints", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/lints-4.0.0", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "logging", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/logging-1.2.0", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "macros", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/macros-0.1.2-main.4", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "matcher", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/matcher-0.12.16+1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "meta", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/meta-1.16.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "mime", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/mime-2.0.0", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "node_preamble", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/node_preamble-2.0.2", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "package_config", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/package_config-2.1.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "path", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/path-1.9.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "pool", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/pool-1.5.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "pub_semver", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/pub_semver-2.1.4", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "shelf", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/shelf-1.4.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "shelf_packages_handler", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/shelf_packages_handler-3.0.2", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "shelf_static", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/shelf_static-1.1.3", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "shelf_web_socket", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/shelf_web_socket-2.0.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "source_map_stack_trace", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/source_map_stack_trace-2.1.2", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "source_maps", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/source_maps-0.10.12", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "source_span", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/source_span-1.10.0", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "stack_trace", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/stack_trace-1.12.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "stream_channel", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/stream_channel-2.1.2", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "string_scanner", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/string_scanner-1.3.0", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "term_glyph", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/term_glyph-1.2.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "test", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/test-1.25.8", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "test_api", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/test_api-0.7.3", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "test_core", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/test_core-0.6.5", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "typed_data", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/typed_data-1.3.2", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "vm_service", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/vm_service-14.3.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "watcher", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/watcher-1.1.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "web", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/web-1.1.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "web_socket", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/web_socket-0.1.6", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "web_socket_channel", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/web_socket_channel-3.0.1", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "webkit_inspection_protocol", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "yaml", + "rootUri": "file:///Users/darren/.pub-cache/hosted/pub.dev/yaml-3.1.2", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "dartHello", + "rootUri": "../", + "packageUri": "lib/", + "languageVersion": "3.4" + } + ], + "generated": "2024-10-14T02:37:48.199003Z", + "generator": "pub", + "generatorVersion": "3.5.3", + "pubCache": "file:///Users/darren/.pub-cache" +} diff --git a/dart/build.sh b/dart/build.sh new file mode 100644 index 0000000..1561518 --- /dev/null +++ b/dart/build.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +PROJECT_DIR=$(pwd) +RUAPU_API_DIR="$PROJECT_DIR/ruapu-api" +BUILD_DIR="$PROJECT_DIR/build" + +mkdir -p "$BUILD_DIR" +cd "$BUILD_DIR" || exit + +cmake "$RUAPU_API_DIR" +make + +if [ $? -ne 0 ]; then + echo "编译失败,请检查错误信息。" + exit 1 +fi + +cd "$PROJECT_DIR" || exit + +dart pub get + +dart run main.dart \ No newline at end of file diff --git a/dart/main.dart b/dart/main.dart new file mode 100644 index 0000000..1517daa --- /dev/null +++ b/dart/main.dart @@ -0,0 +1,33 @@ +import 'dart:io'; +import 'ruapu_api.dart'; +import 'package:path/path.dart' as path; + +void main() { + var libraryPath = + path.join(Directory.current.path, 'build', 'libruapu.so'); + + if (Platform.isMacOS) { + libraryPath = + path.join(Directory.current.path, 'build', 'libruapu.dylib'); + } + + if (Platform.isWindows) { + libraryPath = path.join( + Directory.current.path, 'build', 'Debug', 'hello.dll'); + } + + Ruapu api = Ruapu(libraryPath); + + api.init(); + + List isas = api.getRuapuISA(); + print("This CPU Support:"); + for (String isa in isas) { + print(isa); + } + print("================="); + + String isaToCheck = 'aes'; + bool isSupported = api.supportsISA(isaToCheck); + print('Does the system support $isaToCheck? $isSupported'); +} \ No newline at end of file diff --git a/dart/pubspec.lock b/dart/pubspec.lock new file mode 100644 index 0000000..b4936ef --- /dev/null +++ b/dart/pubspec.lock @@ -0,0 +1,410 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "45cfa8471b89fb6643fe9bf51bd7931a76b8f5ec2d65de4fb176dba8d4f22c77" + url: "https://pub.dev" + source: hosted + version: "73.0.0" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.2" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "4959fec185fe70cce007c57e9ab6983101dbe593d2bf8bbfb4453aaec0cf470a" + url: "https://pub.dev" + source: hosted + version: "6.8.0" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + url: "https://pub.dev" + source: hosted + version: "1.19.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: c1fb2dce3c0085f39dc72668e85f8e0210ec7de05345821ff58530567df345a5 + url: "https://pub.dev" + source: hosted + version: "1.9.2" + crypto: + dependency: transitive + description: + name: crypto + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 + url: "https://pub.dev" + source: hosted + version: "3.0.5" + ffi: + dependency: "direct main" + description: + name: ffi + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "40f592dd352890c3b60fec1b68e786cefb9603e05ff303dbc4dda49b304ecdf4" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf + url: "https://pub.dev" + source: hosted + version: "0.7.1" + lints: + dependency: "direct dev" + description: + name: lints + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + macros: + dependency: transitive + description: + name: macros + sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" + url: "https://pub.dev" + source: hosted + version: "0.1.2-main.4" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + meta: + dependency: transitive + description: + name: meta + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" + source: hosted + version: "1.16.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: "direct main" + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://pub.dev" + source: hosted + version: "1.4.2" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 + url: "https://pub.dev" + source: hosted + version: "1.1.3" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b + url: "https://pub.dev" + source: hosted + version: "2.1.2" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" + url: "https://pub.dev" + source: hosted + version: "1.12.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: "direct dev" + description: + name: test + sha256: "713a8789d62f3233c46b4a90b174737b2c04cb6ae4500f2aa8b1be8f03f5e67f" + url: "https://pub.dev" + source: hosted + version: "1.25.8" + test_api: + dependency: transitive + description: + name: test_api + sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + url: "https://pub.dev" + source: hosted + version: "0.7.3" + test_core: + dependency: transitive + description: + name: test_core + sha256: "12391302411737c176b0b5d6491f466b0dd56d4763e347b6714efbaa74d7953d" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + url: "https://pub.dev" + source: hosted + version: "14.3.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.4.0 <4.0.0" diff --git a/dart/pubspec.yaml b/dart/pubspec.yaml new file mode 100644 index 0000000..33491b2 --- /dev/null +++ b/dart/pubspec.yaml @@ -0,0 +1,18 @@ +name: dartHello +version: 0.0.1 +description: >- + A super simple example of calling C code from Dart with FFI + +# This example isn't intended for publishing on pub.dev. +publish_to: none + +environment: + sdk: ^3.4.0 + +dependencies: + path: ^1.9.0 + ffi: ^1.0.0 + +dev_dependencies: + lints: ^4.0.0 + test: ^1.25.0 \ No newline at end of file diff --git a/dart/ruapu-api/CMakeLists.txt b/dart/ruapu-api/CMakeLists.txt new file mode 100644 index 0000000..3e843f7 --- /dev/null +++ b/dart/ruapu-api/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.7 FATAL_ERROR) +project(ruapu_library VERSION 1.0.0 LANGUAGES C) +add_library(ruapu_library SHARED ruapu.c ruapu.def) +include_directories(../../) + +set_target_properties(ruapu_library PROPERTIES + PUBLIC_HEADER ../../ruapu.h + VERSION ${PROJECT_VERSION} + SOVERSION 1 + OUTPUT_NAME "ruapu" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Hex_Identity_ID_Goes_Here" +) \ No newline at end of file diff --git a/dart/ruapu-api/ruapu.c b/dart/ruapu-api/ruapu.c new file mode 100644 index 0000000..45494ce --- /dev/null +++ b/dart/ruapu-api/ruapu.c @@ -0,0 +1,3 @@ +#define RUAPU_IMPLEMENTATION +#include "ruapu.h" + diff --git a/dart/ruapu-api/ruapu.def b/dart/ruapu-api/ruapu.def new file mode 100644 index 0000000..d47cb12 --- /dev/null +++ b/dart/ruapu-api/ruapu.def @@ -0,0 +1,5 @@ +LIBRARY ruapu +EXPORTS + ruapu_rua + ruapu_supports + ruapu_init \ No newline at end of file diff --git a/dart/ruapu_api.dart b/dart/ruapu_api.dart new file mode 100644 index 0000000..6b64893 --- /dev/null +++ b/dart/ruapu_api.dart @@ -0,0 +1,63 @@ +import 'dart:ffi'; // 导入 dart:ffi 库 +import 'package:ffi/ffi.dart'; + + +typedef RuapuRUA_C = Pointer> Function(); +typedef RuapuRUA_Dart = Pointer> Function(); + +typedef RuapuInit_C = Void Function(); +typedef RuapuInit_Dart = void Function(); + +typedef RuapuSupports_C = Int32 Function(Pointer); +typedef RuapuSupports_Dart = int Function(Pointer); + +class Ruapu { + final DynamicLibrary _nativeLib; + + Ruapu(String libraryPath) : _nativeLib = DynamicLibrary.open(libraryPath); + + /// 初始化 + void init() { + final RuapuInit_Dart ruapu_init = _nativeLib + .lookup>('ruapu_init') + .asFunction(); + ruapu_init(); + } + + /// 获取支持的ISA列表 + List getRuapuISA() { + final RuapuRUA_Dart ruapu_rua = _nativeLib + .lookup>('ruapu_rua') + .asFunction(); + + Pointer> result = ruapu_rua(); + + List isas = []; + int index = 0; + while (true) { + Pointer strPtr = result.elementAt(index).value; + if (strPtr.address == 0) break; // 结束标志 + String str = strPtr.toDartString(); + isas.add(str); + index++; + } + + return isas; + } + + /// 检查是否支持某个ISA + bool supportsISA(String isa) { + final Pointer cIsa = isa.toNativeUtf8(); + + final RuapuSupports_Dart ruapu_supports = _nativeLib + .lookup>('ruapu_supports') + .asFunction(); + + int result = ruapu_supports(cIsa); + + malloc.free(cIsa); + + return result != 0; + } + +} \ No newline at end of file