corda/sgx-jvm/avian/build.gradle

324 lines
7.6 KiB
Groovy
Raw Normal View History

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:2.2.4'
}
}
apply plugin: 'native-component'
apply plugin: 'ivy-publish'
apply plugin: 'java'
apply plugin: 'artifactory-publish'
enum SupportedOS implements OperatingSystem {
LINUX, WINDOWS, MACOSX;
public static final SupportedOS CURRENT;
static {
String p = System.properties['os.name']
switch(p.replaceAll(' ', '').toLowerCase()) {
case ~/.*linux.*/: CURRENT = LINUX; break;
case ~/.*darwin.*/: CURRENT = MACOSX; break;
case ~/.*osx.*/: CURRENT = MACOSX; break;
case ~/.*win.*/: CURRENT = WINDOWS; break;
default:
String m = "SupportedOS: unrecognized platform: ${p}"
println(m)
throw new IllegalArgumentException(m)
}
}
public String getName() {
return toString().toLowerCase()
}
public String getDisplayName() {
return getName()
}
public boolean isCurrent() { return this == CURRENT }
public boolean isFreeBSD() { return false }
public boolean isLinux() { return this == LINUX }
public boolean isMacOsX() { return this == MACOSX }
public boolean isSolaris() { return false }
public boolean isWindows() { return this == WINDOWS }
}
public String adjustArch(String arch) {
switch(arch) {
case ~/.*64.*/: return 'x86_64'
default: return 'i386'
}
}
ext {
currentPlatform = SupportedOS.CURRENT.getName()
currentArch = adjustArch(System.properties['os.arch'])
currentPlatformArch = "${currentPlatform}-${currentArch}"
platform = project.hasProperty('platform') ? platform : currentPlatform
arch = project.hasProperty('arch') ? arch : currentArch
platformArch = "${platform}-${arch}"
java_home = System.properties.'java.home'
if(java_home.endsWith("/jre")) {
java_home = java_home.substring(0, java_home.length() - "/jre".length())
}
java_home = java_home
libDir = "${buildDir}/lib"
lzmaDir = "${libDir}/lzma"
buildOptions = ['', '-lzma']
}
repositories {
ivy {
name "ivyLocal"
url "${System.env.HOME}/.ivy2/local"
layout 'maven'
}
ivy {
name "jcenter"
if(version.contains("SNAPSHOT")) {
url "http://oss.jfrog.org/artifactory/oss-snapshot-local"
} else {
url "http://oss.jfrog.org/artifactory/oss-release-local"
}
layout 'maven'
}
}
configurations {
create('windows-i386')
create('windows-x86_64')
}
dependencies {
'windows-i386' "com.readytalk:win32:1.0.0-SNAPSHOT"
'windows-x86_64' "com.readytalk:win64:1.0.0-SNAPSHOT"
}
model {
platforms {
create(platformArch) {
operatingSystem SupportedOS.valueOf(platform.toUpperCase())
architecture "${arch}"
}
}
tasks {
buildOptions.each { buildOption ->
platforms.each { platform ->
if(platform.operatingSystem.name == "windows") {
def artifactName = platform.architecture.name == "i386" ? 'win32' : 'win64'
task "extract${platform.name}${buildOption}"(type: Copy) {
from {
tarTree(configurations."${platform.name}".find { it.name =~ artifactName })
}
into "${libDir}/tools"
}
}
task "build${platform.name}${buildOption}"(type: Exec) {
executable "make"
args "platform=${platform.operatingSystem.name}",
"arch=${platform.architecture.name}"
if(buildOption == "-lzma") {
dependsOn 'extractLzma'
args "lzma=${lzmaDir}"
}
if(platform.operatingSystem.name == "windows") {
dependsOn "extract${platform.name}${buildOption}"
args "win32=${libDir}/tools/win32",
"win64=${libDir}/tools/win64"
}
environment JAVA_HOME: java_home
}
assemble {
dependsOn "build${platform.name}${buildOption}"
}
}
}
}
}
tasks.withType(JavaCompile) {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
options.with {
encoding = "UTF-8"
bootClasspath = sourceSets.main.output.classesDir
}
}
sourceSets {
main {
java {
srcDir 'classpath'
}
}
}
javadoc {
title = "Avian v${version} Class Library API"
}
task javadocJar(type: Jar) {
dependsOn javadoc
classifier = 'javadoc'
from {
javadoc.destinationDir
}
}
jar {
baseName "classpath-avian"
}
task downloadLzma(type: Exec) {
commandLine "curl"
args "--create-dirs", "-o", "${lzmaDir}/lzma920.tar.bz2", "-f", "http://oss.readytalk.com/avian-web/lzma920.tar.bz2"
}
task extractLzma(type: Copy) {
dependsOn downloadLzma
from {
tarTree(resources.bzip2("${lzmaDir}/lzma920.tar.bz2"))
}
into lzmaDir
}
task install {
dependsOn assemble, publish
}
publishing {
repositories {
add(project.repositories."ivyLocal")
}
publications {
ivy(IvyPublication) {
from components.java
artifact(javadocJar)
artifact("vm.pro") {
name "vm"
type "proguard"
extension "pro"
}
module "classpath-avian"
}
create("tools-avian-${currentPlatformArch}", IvyPublication) {
module "tools-avian-${currentPlatformArch}"
def publishBinSuffix = currentPlatform == "windows" ? "exe" : "bin"
def binSuffix = currentPlatform == "windows" ? ".exe" : ""
artifact("${buildDir}/${currentPlatform}-${currentArch}/binaryToObject/binaryToObject${binSuffix}") {
name "binaryToObject"
type publishBinSuffix
extension publishBinSuffix
}
}
buildOptions.each { buildOption ->
platforms.each { platform ->
def binSuffix=""
def publishBinSuffix="bin"
create("${platform.name}${buildOption}", IvyPublication) {
def nativeBuildDir = "${buildDir}/${platform.operatingSystem.name}-${platform.architecture.name}${buildOption}"
if(platform.operatingSystem.name == "windows") {
publishBinSuffix = "exe"
binSuffix = ".${publishBinSuffix}"
}
module "runtime-avian${buildOption}-${platform.name}"
artifact("${nativeBuildDir}/avian${binSuffix}") {
name "avian"
type publishBinSuffix
extension publishBinSuffix
}
artifact("${nativeBuildDir}/libavian.a") {
name "libavian"
type "a"
extension "a"
}
if (buildOption == "-lzma") {
artifact("${nativeBuildDir}/libavian-lzma.a") {
name "libavian-lzma"
type "a"
extension "a"
}
artifact("${nativeBuildDir}/lzma/lzma${binSuffix}") {
name "lzma"
type publishBinSuffix
extension publishBinSuffix
}
}
}
}
}
}
}
artifactoryPublish {
onlyIf {
// TRAVIS_BRANCH reports master if it is a master build or a PR going to master
// TRAVIS_PULL_REQUEST reports false if not a pull request and the PR number if it is
System.env.'TRAVIS_BRANCH' == "master" && System.env.'TRAVIS_PULL_REQUEST' == "false"
}
dependsOn assemble
}
artifactory {
contextUrl = "http://oss.jfrog.org"
resolve {
repository {
repoKey = 'libs-releases'
}
}
publish {
repository {
repoKey = 'oss-snapshot-local'
username = System.env.BINTRAY_USER
password = System.env.BINTRAY_API_KEY
ivy {
ivyLayout = "[organisation]/[module]/[revision]/ivy-[revision].xml"
}
}
defaults {
platforms.each {
publications it.name
}
}
}
}
task wrapper(type: Wrapper) {
distributionUrl = 'http://services.gradle.org/distributions/gradle-2.0-bin.zip'
}