diff --git a/README.md b/README.md index 4996520..27607af 100644 --- a/README.md +++ b/README.md @@ -331,6 +331,44 @@ main = do +### ruapu with Vlang + + + + + + +
+ +Compile ruapu library + +```shell +cd vlang +v . +``` + + + +Use ruapu in Vlang + +```go +module main + +import ruapu + +fn main() { + ruapu.ruapu_init() + mut avx2_status := ruapu.ruapu_supports('avx2') + if avx2_status { + println('avx2: ' + avx2_status.str()) + } + + println(ruapu.ruapu_rua()) +} +``` + +
+
Github-hosted runner result (Linux) diff --git a/vlang/ruapu.v b/vlang/ruapu.v new file mode 100644 index 0000000..7b7c2a3 --- /dev/null +++ b/vlang/ruapu.v @@ -0,0 +1,13 @@ +module main + +import ruapu + +fn main() { + ruapu.ruapu_init() + mut avx2_status := ruapu.ruapu_supports('avx2') + if avx2_status { + println('avx2: ' + avx2_status.str()) + } + + println(ruapu.ruapu_rua()) +} \ No newline at end of file diff --git a/vlang/ruapu/wrapper.c.v b/vlang/ruapu/wrapper.c.v new file mode 100644 index 0000000..e398d14 --- /dev/null +++ b/vlang/ruapu/wrapper.c.v @@ -0,0 +1,33 @@ +module ruapu + +#flag -I @VMODROOT/../ +#flag -D RUAPU_IMPLEMENTATION +#include "ruapu.h" + +fn C.ruapu_init() + +fn C.ruapu_supports(&char) int + +fn C.ruapu_rua() &&char + +pub fn ruapu_init() { + C.ruapu_init() +} + +pub fn ruapu_supports(isa string) bool { + return C.ruapu_supports(unsafe { isa.str }) == 1 +} + +pub fn ruapu_rua() []string { + mut cstr_array := C.ruapu_rua() + mut v_strings := []string{} + + unsafe { + for i := 0; cstr_array[i] != 0; i++ { + str := cstring_to_vstring(cstr_array[i]) + v_strings << str + } + } + + return v_strings +} diff --git a/vlang/v.mod b/vlang/v.mod new file mode 100644 index 0000000..a72127c --- /dev/null +++ b/vlang/v.mod @@ -0,0 +1,5 @@ +Module { + name: 'ruapu', + description: 'Detect CPU ISA features with single-file.', + dependencies: [] +} \ No newline at end of file