asmble/build.gradle

342 lines
10 KiB
Groovy
Raw Normal View History

2017-03-02 16:23:08 -06:00
group 'asmble'
2018-03-02 17:58:40 -06:00
version '0.2.0'
2017-03-02 16:23:08 -06:00
buildscript {
2018-09-12 16:01:46 -05:00
ext.kotlin_version = '1.2.61'
ext.asm_version = '6.2.1'
2017-03-02 16:23:08 -06:00
repositories {
mavenCentral()
2017-11-28 17:00:38 -06:00
maven {
url "https://plugins.gradle.org/m2/"
}
2017-03-02 16:23:08 -06:00
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'me.champeau.gradle:jmh-gradle-plugin:0.4.5'
2018-08-14 17:22:30 +04:00
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
2017-03-02 16:23:08 -06:00
}
}
2017-04-24 18:49:54 -05:00
allprojects {
apply plugin: 'java'
2018-07-20 15:59:03 -05:00
group 'com.github.cretz.asmble'
2019-08-06 10:45:16 +03:00
version '0.4.9-fl'
2018-11-09 10:03:44 +04:00
// skips building and running for the specified examples
ext.skipExamples = ['c-simple', 'go-simple', 'rust-regex']
2018-11-09 10:03:44 +04:00
// todo disabling Rust regex is temporary because some strings in wasm code exceed the size in 65353 bytes.
2017-03-26 16:40:30 -05:00
2017-04-24 18:49:54 -05:00
repositories {
mavenCentral()
}
2017-03-02 16:23:08 -06:00
}
2018-07-20 15:59:03 -05:00
project(':annotations') {
javadoc {
options.links 'https://docs.oracle.com/javase/8/docs/api/'
// TODO: change when https://github.com/gradle/gradle/issues/2354 is fixed
options.addStringOption 'Xdoclint:all', '-Xdoclint:-missing'
}
2018-08-14 17:32:10 +04:00
publishSettings(project, 'asmble-annotations', 'Asmble WASM Annotations')
2018-07-20 15:59:03 -05:00
}
2017-04-24 18:49:54 -05:00
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')
2017-04-24 18:49:54 -05:00
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"
2018-11-09 10:30:38 +04:00
compile "org.ow2.asm:asm-commons:$asm_version"
2017-04-24 18:49:54 -05:00
testCompile 'junit:junit:4.12'
testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
}
2018-07-20 15:59:03 -05:00
2018-08-14 17:32:10 +04:00
publishSettings(project, 'asmble-compiler', 'Asmble WASM Compiler')
2017-03-02 16:23:08 -06:00
}
2017-11-28 17:00:38 -06:00
project(':examples') {
subprojects {
dependencies {
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
}
}
2017-11-28 17:00:38 -06:00
2018-07-26 17:16:11 -05:00
// Go example helpers
task goToWasm {
doFirst {
mkdir 'build'
exec {
def goFileName = fileTree(dir: '.', includes: ['*.go']).files.iterator().next()
environment 'GOOS': 'js', 'GOARCH': 'wasm'
commandLine 'go', 'build', '-o', 'build/lib.wasm', goFileName
}
}
}
task compileGoWasm(type: JavaExec) {
dependsOn goToWasm
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', 'build/lib.wasm', wasmCompiledClassName, '-out', outFile, '-log', 'debug'
}
}
2017-12-15 14:43:21 -06:00
// Rust example helpers
2017-11-29 13:03:36 -06:00
ext.rustBuildRelease = true
2017-11-28 17:00:38 -06:00
task rustToWasm(type: Exec) {
2017-11-29 13:03:36 -06:00
if (rustBuildRelease) {
commandLine 'cargo', 'build', '--release'
} else {
commandLine 'cargo', 'build'
}
2017-11-28 17:00:38 -06:00
}
2017-11-29 16:42:12 -06:00
ext.rustWasmFileName = { ->
2017-11-29 13:03:36 -06:00
def buildType = rustBuildRelease ? 'release' : 'debug'
def wasmFiles = fileTree(dir: "target/wasm32-unknown-unknown/$buildType", includes: ['*.wasm']).files
2017-11-28 17:00:38 -06:00
if (wasmFiles.size() != 1) throw new GradleException('Expected single WASM file, got ' + wasmFiles.size())
return wasmFiles.iterator().next()
}
2017-11-29 16:42:12 -06:00
task rustWasmFile() {
2017-11-28 17:00:38 -06:00
dependsOn rustToWasm
doFirst {
2017-11-29 16:42:12 -06:00
println 'File: ' + rustWasmFileName()
2017-11-28 17:00:38 -06:00
}
}
2017-11-29 16:42:12 -06:00
task showRustWast(type: JavaExec) {
2017-11-28 17:00:38 -06:00
dependsOn rustToWasm
classpath configurations.compileClasspath
main = 'asmble.cli.MainKt'
doFirst {
2017-11-29 16:42:12 -06:00
args 'translate', rustWasmFileName()
2017-11-28 17:00:38 -06:00
}
}
2017-11-29 16:42:12 -06:00
task compileRustWasm(type: JavaExec) {
2017-11-28 17:00:38 -06:00
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()
2017-11-29 16:42:12 -06:00
args 'compile', rustWasmFileName(), wasmCompiledClassName, '-out', outFile
2017-11-28 17:00:38 -06:00
}
}
}
}
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'
}
2017-12-15 14:43:21 -06:00
2018-07-26 17:16:11 -05:00
project(':examples:go-simple') {
2018-11-09 10:03:44 +04:00
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
2018-11-09 10:03:44 +04:00
return
}
2018-07-26 17:16:11 -05:00
apply plugin: 'application'
ext.wasmCompiledClassName = 'asmble.generated.GoSimple'
dependencies {
compile files('build/wasm-classes')
}
compileJava {
dependsOn compileGoWasm
}
mainClassName = 'asmble.examples.gosimple.Main'
}
2018-11-09 10:03:44 +04:00
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
}
2018-11-09 10:03:44 +04:00
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
}
}
2017-11-29 16:42:12 -06:00
2017-11-28 17:00:38 -06:00
project(':examples:rust-simple') {
2018-11-09 10:03:44 +04:00
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
2018-11-09 10:03:44 +04:00
return
}
2017-11-28 17:00:38 -06:00
apply plugin: 'application'
ext.wasmCompiledClassName = 'asmble.generated.RustSimple'
dependencies {
compile files('build/wasm-classes')
}
compileJava {
2017-11-29 16:42:12 -06:00
dependsOn compileRustWasm
2017-11-28 17:00:38 -06:00
}
mainClassName = 'asmble.examples.rustsimple.Main'
2017-11-29 13:03:36 -06:00
}
project(':examples:rust-string') {
2018-11-09 10:03:44 +04:00
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
2018-11-09 10:03:44 +04:00
return
}
2017-11-29 13:03:36 -06:00
apply plugin: 'application'
ext.wasmCompiledClassName = 'asmble.generated.RustString'
dependencies {
compile files('build/wasm-classes')
}
compileJava {
2017-11-29 16:42:12 -06:00
dependsOn compileRustWasm
2017-11-29 13:03:36 -06:00
}
mainClassName = 'asmble.examples.ruststring.Main'
2018-07-20 15:59:03 -05:00
}
2018-08-14 17:22:30 +04:00
def publishSettings(project, projectName, projectDescription) {
2018-07-20 15:59:03 -05:00
project.with {
2018-08-14 17:22:30 +04:00
apply plugin: 'com.jfrog.bintray'
apply plugin: 'maven-publish'
2018-07-20 15:59:03 -05:00
apply plugin: 'maven'
2018-08-14 17:22:30 +04:00
task sourcesJar(type: Jar) {
from sourceSets.main.allJava
2018-07-20 15:59:03 -05:00
classifier = 'sources'
}
2018-08-14 17:22:30 +04:00
publishing {
publications {
MyPublication(MavenPublication) {
from components.java
groupId group
artifactId projectName
artifact sourcesJar
version version
}
2018-07-20 15:59:03 -05:00
}
}
2018-08-14 17:22:30 +04:00
bintray {
if(!hasProperty("bintrayUser") || !hasProperty("bintrayKey")) {
return
}
2018-08-14 17:22:30 +04:00
user = bintrayUser
key = bintrayKey
publications = ['MyPublication']
//[Default: false] Whether to override version artifacts already published
override = false
//[Default: false] Whether version should be auto published after an upload
publish = true
pkg {
repo = 'releases'
name = projectName
userOrg = 'fluencelabs'
licenses = ['MIT']
vcsUrl = 'https://github.com/fluencelabs/asmble'
version {
name = project.version
desc = projectDescription
released = new Date()
vcsTag = project.version
2018-07-20 15:59:03 -05:00
}
}
2018-08-14 17:22:30 +04:00
2018-07-20 15:59:03 -05:00
}
}
2018-08-14 17:22:30 +04:00
}