asmble/build.gradle
Constantine Solovev cfa4a35af1 remove C example
2018-07-19 09:14:01 +04:00

150 lines
4.1 KiB
Groovy

group 'asmble'
version '0.2.0'
buildscript {
ext.kotlin_version = '1.2.41'
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.5'
}
}
allprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
}
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(':annotations')
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')
}
// Rust example helpers
ext.rustBuildRelease = true
task rustToWasm(type: Exec) {
if (rustBuildRelease) {
commandLine 'cargo', 'build', '--release'
} else {
commandLine 'cargo', 'build'
}
}
ext.rustWasmFileName = { ->
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 rustWasmFile() {
dependsOn rustToWasm
doFirst {
println 'File: ' + rustWasmFileName()
}
}
task showRustWast(type: JavaExec) {
dependsOn rustToWasm
classpath configurations.compileClasspath
main = 'asmble.cli.MainKt'
doFirst {
args 'translate', rustWasmFileName()
}
}
task compileRustWasm(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', rustWasmFileName(), wasmCompiledClassName, '-out', outFile
}
}
}
}
project(':examples:rust-regex') {
apply plugin: 'application'
apply plugin: 'me.champeau.gradle.jmh'
ext.wasmCompiledClassName = 'asmble.generated.RustRegex'
dependencies {
compile files('build/wasm-classes')
testCompile 'junit:junit:4.12'
}
compileJava {
dependsOn compileRustWasm
}
mainClassName = 'asmble.examples.rustregex.Main'
test {
testLogging.showStandardStreams = true
testLogging.events 'PASSED', 'SKIPPED'
}
jmh {
iterations = 5
warmupIterations = 5
fork = 3
}
}
project(':examples:rust-simple') {
apply plugin: 'application'
ext.wasmCompiledClassName = 'asmble.generated.RustSimple'
dependencies {
compile files('build/wasm-classes')
}
compileJava {
dependsOn compileRustWasm
}
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 compileRustWasm
}
mainClassName = 'asmble.examples.ruststring.Main'
}