add cangjie binding (#117)

This commit is contained in:
bakacai 2024-07-27 14:15:23 +08:00 committed by GitHub
parent 28ff8bb8f7
commit 501b6b0d75
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 141 additions and 0 deletions

View File

@ -495,6 +495,52 @@ class Example {
</td></tr>
</table>
### ruapu with cangjie
<table>
<tr><td>
Compile ruapu library
```bash
cd cangjie
cd c-src
cmake .
make
```
run example
```bash
cd cangjie
cjpm run
```
or compile example
```bash
cd cangjie
cjpm build
./target/release/bin/main
```
</td>
<td>
Use ruapu in cangjie
```swift
import ruapu.*
main(): Int64 {
ruapu_init()
let neon_supported = ruapu_supports("neon")
println("supports neon: ${neon_supported}")
let d = ruapu_rua()
for (i in d) {
println(i)
}
return 0
}
```
</td></tr>
</table>

14
cangjie/README.md Normal file
View File

@ -0,0 +1,14 @@
## ruapu cangjie
当前代码仓颉版本: `0.51.4`
> 仓颉目前处于内测阶段,不保证该代码在更新的仓颉编译器版本中可用
```bash
cd cangjie
cd c-src
cmake .
make
cd ..
cjpm run
```

View File

@ -0,0 +1,10 @@
cmake_minimum_required(VERSION 3.5)
project(ruapu)
include_directories(../../)
add_library(ruapu
ruapu-binding.c
)

View File

@ -0,0 +1,14 @@
#define RUAPU_IMPLEMENTATION
#include "ruapu.h"
void ruapu_init_c() {
ruapu_init();
}
int ruapu_supports_c(const char* isa) {
return ruapu_supports(isa);
}
const char* const* ruapu_rua_c() {
return ruapu_rua();
}

16
cangjie/cjpm.toml Normal file
View File

@ -0,0 +1,16 @@
[dependencies]
[package]
cjc-version = "0.51.4"
compile-option = ""
description = "ruapu"
link-option = ""
name = "ruapu_cangjie"
output-type = "executable"
src-dir = ""
target-dir = ""
version = "1.0.0"
package-configuration = {}
[ffi.c]
ruapu = { path = "./c-src/" }

11
cangjie/src/main.cj Normal file
View File

@ -0,0 +1,11 @@
import ruapu.*
main(): Int64 {
ruapu_init()
let neon_supported = ruapu_supports("neon")
println("supports neon: ${neon_supported}")
let d = ruapu_rua()
for (i in d) {
println(i)
}
return 0
}

View File

@ -0,0 +1,30 @@
package ruapu
from std import collection.ArrayList
foreign func ruapu_init_c(): Unit
foreign func ruapu_supports_c(s: CString): Int32
foreign func ruapu_rua_c(): CPointer<CString>
public func ruapu_init(): Unit {
unsafe{ ruapu_init_c() }
}
public func ruapu_supports(isa: String): Bool {
var isa_c = unsafe { LibC.mallocCString(isa) }
let result_c = unsafe { ruapu_supports_c(isa_c) }
return result_c == 1
}
public func ruapu_rua(): Array<String> {
var ruaList = ArrayList<String>()
var sp = unsafe { ruapu_rua_c() }
while(!unsafe { sp.read().isNull() }) {
let temp = unsafe { sp.read() }
ruaList.append(temp.toString())
sp = unsafe { sp + 1 }
}
return Array<String>(ruaList)
}