@@ -60,6 +60,40 @@ project(':examples') {
60
60
compileOnly project(' :compiler' )
61
61
}
62
62
63
+ // C/C++ example helpers
64
+
65
+ task cToWasm {
66
+ doFirst {
67
+ mkdir ' build'
68
+ exec {
69
+ def cFileName = fileTree(dir : ' src' , includes : [' *.c' ]). files. iterator(). next()
70
+ commandLine ' clang' , ' --target=wasm32-unknown-unknown-wasm' , ' -O3' , cFileName, ' -c' , ' -o' , ' build/lib.wasm'
71
+ }
72
+ }
73
+ }
74
+
75
+ task showCWast(type : JavaExec ) {
76
+ dependsOn cToWasm
77
+ classpath configurations. compileClasspath
78
+ main = ' asmble.cli.MainKt'
79
+ doFirst {
80
+ args ' translate' , ' build/lib.wasm'
81
+ }
82
+ }
83
+
84
+ task compileCWasm(type : JavaExec ) {
85
+ dependsOn cToWasm
86
+ classpath configurations. compileClasspath
87
+ main = ' asmble.cli.MainKt'
88
+ doFirst {
89
+ def outFile = ' build/wasm-classes/' + wasmCompiledClassName. replace(' .' , ' /' ) + ' .class'
90
+ file(outFile). parentFile. mkdirs()
91
+ args ' compile' , ' build/lib.wasm' , wasmCompiledClassName, ' -out' , outFile
92
+ }
93
+ }
94
+
95
+ // Rust example helpers
96
+
63
97
ext. rustBuildRelease = true
64
98
65
99
task rustToWasm(type : Exec ) {
@@ -107,6 +141,18 @@ project(':examples') {
107
141
}
108
142
}
109
143
144
+ project(' :examples:c-simple' ) {
145
+ apply plugin : ' application'
146
+ ext. wasmCompiledClassName = ' asmble.generated.CSimple'
147
+ dependencies {
148
+ compile files(' build/wasm-classes' )
149
+ }
150
+ compileJava {
151
+ dependsOn compileCWasm
152
+ }
153
+ mainClassName = ' asmble.examples.csimple.Main'
154
+ }
155
+
110
156
project(' :examples:rust-regex' ) {
111
157
apply plugin : ' application'
112
158
apply plugin : ' me.champeau.gradle.jmh'
0 commit comments