Skip to content

Commit

Permalink
add cangjie binding (#117)
Browse files Browse the repository at this point in the history
  • Loading branch information
bakacai authored Jul 27, 2024
1 parent 28ff8bb commit 501b6b0
Show file tree
Hide file tree
Showing 7 changed files with 141 additions and 0 deletions.
46 changes: 46 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
14 changes: 14 additions & 0 deletions cangjie/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## ruapu cangjie

当前代码仓颉版本: `0.51.4`

> 仓颉目前处于内测阶段,不保证该代码在更新的仓颉编译器版本中可用
```bash
cd cangjie
cd c-src
cmake .
make
cd ..
cjpm run
```
10 changes: 10 additions & 0 deletions cangjie/c-src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
cmake_minimum_required(VERSION 3.5)

project(ruapu)

include_directories(../../)


add_library(ruapu
ruapu-binding.c
)
14 changes: 14 additions & 0 deletions cangjie/c-src/ruapu-binding.c
Original file line number Diff line number Diff line change
@@ -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 changes: 16 additions & 0 deletions cangjie/cjpm.toml
Original file line number Diff line number Diff line change
@@ -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 changes: 11 additions & 0 deletions cangjie/src/main.cj
Original file line number Diff line number Diff line change
@@ -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
}
30 changes: 30 additions & 0 deletions cangjie/src/ruapu/ruapu.cj
Original file line number Diff line number Diff line change
@@ -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)
}

0 comments on commit 501b6b0

Please sign in to comment.