blob: aec75f93a4db9d52c676f0687346aff96c3cd54b [file] [log] [blame]
/*
* Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
apply plugin: 'kotlin-multiplatform'
apply from: rootProject.file("gradle/targets.gradle")
project.ext.nativeMainSets = []
project.ext.nativeTestSets = []
project.ext.nativeCompilations = []
kotlin {
targets.metaClass.addTarget = { preset ->
def target = delegate.fromPreset(preset, preset.name)
project.ext.nativeMainSets.add(target.compilations['main'].kotlinSourceSets.first())
project.ext.nativeTestSets.add(target.compilations['test'].kotlinSourceSets.first())
project.ext.nativeCompilations.add(target.compilations['main'])
}
targets {
// JVM & JS -- always
fromPreset(presets.jvm, 'jvm')
fromPreset(presets.js, 'js')
if (project.ext.ideaActive) {
fromPreset(project.ext.ideaPreset, 'native')
} else {
addTarget(presets.linuxX64)
addTarget(presets.iosArm64)
addTarget(presets.iosArm32)
addTarget(presets.iosX64)
addTarget(presets.macosX64)
addTarget(presets.mingwX64)
addTarget(presets.tvosArm64)
addTarget(presets.tvosX64)
addTarget(presets.watchosArm32)
addTarget(presets.watchosArm64)
addTarget(presets.watchosX86)
}
}
sourceSets {
commonMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
}
}
commonTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test-common'
implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common'
}
}
jsMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-js'
}
}
jsTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-test-js'
}
}
jvmMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib'
}
}
jvmTest {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-reflect'
implementation 'org.jetbrains.kotlin:kotlin-test'
implementation 'org.jetbrains.kotlin:kotlin-test-junit'
implementation "junit:junit:$junit_version"
}
}
nativeMain { dependsOn commonMain }
nativeTest {}
if (!project.ext.ideaActive) {
configure(nativeMainSets) {
dependsOn nativeMain
}
configure(nativeTestSets) {
dependsOn nativeTest
}
}
}
configure(project.ext.nativeCompilations) {
cinterops {
interop {
defFile 'src/nativeInterop/cinterop/interop.def'
}
}
}
}
configurations {
transformer
}
apply from: rootProject.file('gradle/compile-options.gradle')
ext.configureKotlin(org.jetbrains.kotlin.gradle.tasks.KotlinCompile)
dependencies {
transformer project(":atomicfu-transformer")
}
// ==== CONFIGURE JS =====
tasks.withType(compileKotlinJs.getClass()) {
kotlinOptions {
moduleKind = "umd"
sourceMap = true
metaInfo = true
}
}
compileKotlinJs {
kotlinOptions {
// NOTE: Module base-name must be equal to the package name declared in package.json
def baseName = "kotlinx-atomicfu"
outputFile = new File(outputFile.parent, baseName + ".js")
}
}
apply from: file("$rootProject.projectDir/gradle/node-js.gradle")
apply from: file("$rootProject.projectDir/gradle/test-mocha-js.gradle")
apply from: file("$rootProject.projectDir/gradle/publish-npm-js.gradle")
// Workaround the problem with Node downloading
repositories.whenObjectAdded {
if (it instanceof IvyArtifactRepository) {
metadataSources {
artifact()
}
}
}
def originalJsFile = "$buildDir/classes/kotlin/js/test/atomicfu_test.js"
def transformedJsFile = "$buildDir/classes/kotlin/js/test/atomicfu_test_transformed.js"
task transformJS(type: JavaExec, dependsOn: [compileTestKotlinJs]) {
main = "kotlinx.atomicfu.transformer.AtomicFUTransformerJSKt"
args = [originalJsFile, transformedJsFile, true]
classpath = configurations.transformer
inputs.file(originalJsFile)
outputs.file(transformedJsFile)
}
testMochaNode.dependsOn transformJS
// ==== CONFIGURE JVM =====
def classesPreAtomicFuDir = file("$buildDir/classes/kotlin/jvm/test")
def classesPostTransformFU = file("$buildDir/classes/kotlin/jvm/postTransformedFU")
def classesPostTransformVH = file("$buildDir/classes/kotlin/jvm/postTransformedVH")
def classesPostTransformBOTH = file("$buildDir/classes/kotlin/jvm/postTransformedBOTH")
task transformFU(type: JavaExec, dependsOn: compileTestKotlinJvm) {
main = "kotlinx.atomicfu.transformer.AtomicFUTransformerKt"
args = [classesPreAtomicFuDir, classesPostTransformFU, "FU"]
classpath = configurations.transformer
inputs.dir(classesPreAtomicFuDir)
outputs.dir(classesPostTransformFU)
}
task transformBOTH(type: JavaExec, dependsOn: compileTestKotlinJvm) {
main = "kotlinx.atomicfu.transformer.AtomicFUTransformerKt"
args = [classesPreAtomicFuDir, classesPostTransformBOTH, "BOTH"]
classpath = configurations.transformer
inputs.dir(classesPreAtomicFuDir)
outputs.dir(classesPostTransformBOTH)
}
task transformVH(type: JavaExec, dependsOn: compileTestKotlinJvm) {
main = "kotlinx.atomicfu.transformer.AtomicFUTransformerKt"
args = [classesPreAtomicFuDir, classesPostTransformVH, "VH"]
classpath = configurations.transformer
inputs.dir(classesPreAtomicFuDir)
outputs.dir(classesPostTransformVH)
}
task checkJdk16() {
doLast {
if (!System.env.JDK_16) {
throw new GradleException("JDK_16 environment variable is not defined. " +
"Can't build against JDK 1.6 runtime and run JDK 1.6 compatibility tests. " +
"Please ensure JDK 1.6 is installed and that JDK_16 points to it.")
}
}
}
task transformedTestFU_6(type: Test, dependsOn: [checkJdk16, transformFU]) {
executable = "$System.env.JDK_16/bin/java"
classpath = configurations.jvmTestRuntimeClasspath + project.files(classesPostTransformFU)
testClassesDirs = project.files(classesPostTransformFU)
exclude '**/*LFTest.*'
}
task transformedTestFU_current(type: Test, dependsOn: transformFU) {
classpath = files(configurations.jvmTestRuntimeClasspath, classesPostTransformFU)
testClassesDirs = project.files(classesPostTransformFU)
exclude '**/*LFTest.*'
}
task transformedTestBOTH_6(type: Test, dependsOn: [checkJdk16, transformBOTH]) {
executable = "$System.env.JDK_16/bin/java"
classpath = files(configurations.jvmTestRuntimeClasspath, classesPostTransformBOTH)
testClassesDirs = project.files(classesPostTransformBOTH)
exclude '**/*LFTest.*'
}
task transformedTestBOTH_current(type: Test, dependsOn: transformBOTH) {
classpath = files(configurations.jvmTestRuntimeClasspath, classesPostTransformBOTH)
testClassesDirs = project.files(classesPostTransformBOTH)
exclude '**/*LFTest.*'
}
task transformedTestVH(type: Test, dependsOn: transformVH) {
classpath = files(configurations.jvmTestRuntimeClasspath, classesPostTransformVH)
testClassesDirs = project.files(classesPostTransformVH)
exclude '**/*LFTest.*'
}
transformedTestVH.onlyIf {
logger.println(JavaVersion.current())
JavaVersion.current().ordinal() >= JavaVersion.VERSION_1_9.ordinal()
}
task jvmTestAll(dependsOn: [
transformedTestFU_6,
transformedTestFU_current,
transformedTestBOTH_6,
transformedTestBOTH_current,
transformedTestVH])
tasks.withType(Test) {
testLogging {
showStandardStreams = true
events "passed", "failed"
}
}
jvmTest.dependsOn jvmTestAll
afterEvaluate {
publishing.publications {
jvm.artifactId = 'atomicfu'
js.artifactId = 'atomicfu-js'
metadata.artifactId = 'atomicfu-common'
kotlinMultiplatform.artifactId = 'atomicfu-native'
}
}