mirror of
https://github.com/fluencelabs/asmble
synced 2025-04-24 14:22:20 +00:00
Return C example and skip it by default
This commit is contained in:
parent
765d8b4dba
commit
21b023f1c6
73
build.gradle
73
build.gradle
@ -24,7 +24,7 @@ allprojects {
|
|||||||
version '0.4.1-fl'
|
version '0.4.1-fl'
|
||||||
|
|
||||||
// skips building and running for the specified examples
|
// skips building and running for the specified examples
|
||||||
ext.skipExamples = ['go-simple', 'rust-regex']
|
ext.skipExamples = ['c-simple', 'go-simple', 'rust-regex']
|
||||||
// todo disabling Rust regex is temporary because some strings in wasm code exceed the size in 65353 bytes.
|
// todo disabling Rust regex is temporary because some strings in wasm code exceed the size in 65353 bytes.
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
@ -71,6 +71,38 @@ project(':examples') {
|
|||||||
dependencies {
|
dependencies {
|
||||||
compileOnly project(':compiler')
|
compileOnly project(':compiler')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// C/C++ example helpers
|
||||||
|
|
||||||
|
task cToWasm {
|
||||||
|
doFirst {
|
||||||
|
mkdir 'build'
|
||||||
|
exec {
|
||||||
|
def cFileName = fileTree(dir: 'src', includes: ['*.c']).files.iterator().next()
|
||||||
|
commandLine 'clang', '--target=wasm32-unknown-unknown-wasm', '-O3', cFileName, '-c', '-o', 'build/lib.wasm'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task showCWast(type: JavaExec) {
|
||||||
|
dependsOn cToWasm
|
||||||
|
classpath configurations.compileClasspath
|
||||||
|
main = 'asmble.cli.MainKt'
|
||||||
|
doFirst {
|
||||||
|
args 'translate', 'build/lib.wasm'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task compileCWasm(type: JavaExec) {
|
||||||
|
dependsOn cToWasm
|
||||||
|
classpath configurations.compileClasspath
|
||||||
|
main = 'asmble.cli.MainKt'
|
||||||
|
doFirst {
|
||||||
|
def outFile = 'build/wasm-classes/' + wasmCompiledClassName.replace('.', '/') + '.class'
|
||||||
|
file(outFile).parentFile.mkdirs()
|
||||||
|
args 'compile', 'build/lib.wasm', wasmCompiledClassName, '-out', outFile
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Go example helpers
|
// Go example helpers
|
||||||
|
|
||||||
@ -146,10 +178,31 @@ project(':examples') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
project(':examples:c-simple') {
|
||||||
|
if (project.name in skipExamples) {
|
||||||
|
println("[Note!] Building and runnig for ${project.name} was skipped")
|
||||||
|
test.onlyIf { false } // explicit skipping tests
|
||||||
|
compileJava.onlyIf { false } // explicit skipping compile
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'application'
|
||||||
|
ext.wasmCompiledClassName = 'asmble.generated.CSimple'
|
||||||
|
dependencies {
|
||||||
|
compile files('build/wasm-classes')
|
||||||
|
}
|
||||||
|
|
||||||
|
compileJava {
|
||||||
|
dependsOn compileCWasm
|
||||||
|
}
|
||||||
|
mainClassName = 'asmble.examples.csimple.Main'
|
||||||
|
}
|
||||||
|
|
||||||
project(':examples:go-simple') {
|
project(':examples:go-simple') {
|
||||||
if (project.name in skipExamples) {
|
if (project.name in skipExamples) {
|
||||||
println("[Note!] Building and runnig for ${project.name} was skipped")
|
println("[Note!] Building and runnig for ${project.name} was skipped")
|
||||||
|
test.onlyIf { false } // explicit skipping tests
|
||||||
|
compileJava.onlyIf { false } // explicit skipping compile
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
apply plugin: 'application'
|
apply plugin: 'application'
|
||||||
@ -164,6 +217,13 @@ project(':examples:go-simple') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
project(':examples:rust-regex') {
|
project(':examples:rust-regex') {
|
||||||
|
if (project.name in skipExamples) {
|
||||||
|
println("[Note!] Building and runnig for ${project.name} was skipped")
|
||||||
|
test.onlyIf { false } // explicit skipping tests
|
||||||
|
compileJava.onlyIf { false } // explicit skipping compile
|
||||||
|
compileTestJava.onlyIf { false } // explicit skipping compile
|
||||||
|
return
|
||||||
|
}
|
||||||
apply plugin: 'application'
|
apply plugin: 'application'
|
||||||
apply plugin: 'me.champeau.gradle.jmh'
|
apply plugin: 'me.champeau.gradle.jmh'
|
||||||
ext.wasmCompiledClassName = 'asmble.generated.RustRegex'
|
ext.wasmCompiledClassName = 'asmble.generated.RustRegex'
|
||||||
@ -176,13 +236,6 @@ project(':examples:go-simple') {
|
|||||||
}
|
}
|
||||||
mainClassName = 'asmble.examples.rustregex.Main'
|
mainClassName = 'asmble.examples.rustregex.Main'
|
||||||
|
|
||||||
// the building will run but no test and benchmarks will run
|
|
||||||
if (project.name in skipExamples) {
|
|
||||||
println("[Note!] Building and runnig for ${project.name} was skipped")
|
|
||||||
test.onlyIf { false } // explicit skipping tests
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
test {
|
test {
|
||||||
testLogging.showStandardStreams = true
|
testLogging.showStandardStreams = true
|
||||||
testLogging.events 'PASSED', 'SKIPPED'
|
testLogging.events 'PASSED', 'SKIPPED'
|
||||||
@ -197,6 +250,8 @@ project(':examples:go-simple') {
|
|||||||
project(':examples:rust-simple') {
|
project(':examples:rust-simple') {
|
||||||
if (project.name in skipExamples) {
|
if (project.name in skipExamples) {
|
||||||
println("[Note!] Building and runnig for ${project.name} was skipped")
|
println("[Note!] Building and runnig for ${project.name} was skipped")
|
||||||
|
test.onlyIf { false } // explicit skipping tests
|
||||||
|
compileJava.onlyIf { false } // explicit skipping compile
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
apply plugin: 'application'
|
apply plugin: 'application'
|
||||||
@ -213,6 +268,8 @@ project(':examples:rust-simple') {
|
|||||||
project(':examples:rust-string') {
|
project(':examples:rust-string') {
|
||||||
if (project.name in skipExamples) {
|
if (project.name in skipExamples) {
|
||||||
println("[Note!] Building and runnig for ${project.name} was skipped")
|
println("[Note!] Building and runnig for ${project.name} was skipped")
|
||||||
|
test.onlyIf { false } // explicit skipping tests
|
||||||
|
compileJava.onlyIf { false } // explicit skipping compile
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
apply plugin: 'application'
|
apply plugin: 'application'
|
||||||
|
14
examples/c-simple/README.md
Normal file
14
examples/c-simple/README.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
### Example: C Simple
|
||||||
|
|
||||||
|
This shows a simple example of compiling C to WASM and then to the JVM. This is the C version of
|
||||||
|
[rust-simple](../rust-simple).
|
||||||
|
|
||||||
|
In order to run the C or C++ examples, the latest LLVM binaries must be on the `PATH`, built with the experimental
|
||||||
|
WebAssembly target. This can be built by passing `-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly` to `cmake` when
|
||||||
|
building WebAssembly. Or it can be downloaded from a nightly build site
|
||||||
|
([this one](http://gsdview.appspot.com/wasm-llvm/builds/) was used for these examples at the time of writing).
|
||||||
|
|
||||||
|
Everything else is basically the same as [rust-simple](../rust-simple) except with C code and using `clang`. To run
|
||||||
|
execute the following from the root `asmble` dir:
|
||||||
|
|
||||||
|
gradlew --no-daemon :examples:c-simple:run
|
3
examples/c-simple/src/lib.c
Normal file
3
examples/c-simple/src/lib.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
int addOne(int x) {
|
||||||
|
return x + 1;
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package asmble.examples.csimple;
|
||||||
|
|
||||||
|
import java.lang.invoke.MethodHandle;
|
||||||
|
|
||||||
|
import asmble.generated.CSimple;
|
||||||
|
|
||||||
|
class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// Doesn't need memory or method table
|
||||||
|
CSimple simple = new CSimple(0, new MethodHandle[0]);
|
||||||
|
System.out.println("25 + 1 = " + simple.addOne(25));
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
rootProject.name = 'asmble'
|
rootProject.name = 'asmble'
|
||||||
include 'annotations',
|
include 'annotations',
|
||||||
'compiler',
|
'compiler',
|
||||||
|
'examples:c-simple',
|
||||||
'examples:go-simple',
|
'examples:go-simple',
|
||||||
'examples:rust-regex',
|
'examples:rust-regex',
|
||||||
'examples:rust-simple',
|
'examples:rust-simple',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user