group 'asmble' version '0.1.0' buildscript { ext.kotlin_version = '1.1.51' ext.asm_version = '5.2' repositories { mavenCentral() maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'me.champeau.gradle:jmh-gradle-plugin:0.4.4' } } allprojects { apply plugin: 'java' repositories { mavenCentral() } } project(':emscripten-runtime') { dependencies { compile project(':annotations') } } project(':compiler') { apply plugin: 'kotlin' apply plugin: 'application' applicationName = "asmble" mainClassName = "asmble.cli.MainKt" distTar.archiveName = 'asmble.tar' distZip.archiveName = 'asmble.zip' dependencies { compile project(':emscripten-runtime') compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" compile "org.ow2.asm:asm-tree:$asm_version" compile "org.ow2.asm:asm-util:$asm_version" testCompile 'junit:junit:4.12' testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" testCompile "org.ow2.asm:asm-debug-all:$asm_version" } } project(':examples') { subprojects { dependencies { compileOnly project(':compiler') } ext.rustBuildRelease = true task rustToWasm(type: Exec) { if (rustBuildRelease) { commandLine 'cargo', 'build', '--release' } else { commandLine 'cargo', 'build' } } ext.wasmFileName = { -> def buildType = rustBuildRelease ? 'release' : 'debug' def wasmFiles = fileTree(dir: "target/wasm32-unknown-unknown/$buildType", includes: ['*.wasm']).files if (wasmFiles.size() != 1) throw new GradleException('Expected single WASM file, got ' + wasmFiles.size()) return wasmFiles.iterator().next() } task wasmFile() { dependsOn rustToWasm doFirst { println 'File: ' + wasmFileName() } } task showWast(type: JavaExec) { dependsOn rustToWasm classpath configurations.compileClasspath main = 'asmble.cli.MainKt' doFirst { args 'translate', wasmFileName() } } task compileWasm(type: JavaExec) { dependsOn rustToWasm classpath configurations.compileClasspath main = 'asmble.cli.MainKt' doFirst { // args 'help', 'compile' def outFile = 'build/wasm-classes/' + wasmCompiledClassName.replace('.', '/') + '.class' file(outFile).parentFile.mkdirs() args 'compile', wasmFileName(), wasmCompiledClassName, '-out', outFile } } } } project(':examples:rust-simple') { apply plugin: 'application' ext.wasmCompiledClassName = 'asmble.generated.RustSimple' dependencies { compile files('build/wasm-classes') } compileJava { dependsOn compileWasm } mainClassName = 'asmble.examples.rustsimple.Main' } project(':examples:rust-string') { apply plugin: 'application' ext.wasmCompiledClassName = 'asmble.generated.RustString' dependencies { compile files('build/wasm-classes') } compileJava { dependsOn compileWasm } mainClassName = 'asmble.examples.ruststring.Main' }