diff --git a/samples/androidNativeActivity/build.gradle b/samples/androidNativeActivity/build.gradle index 5f07720d784..857f1a561af 100644 --- a/samples/androidNativeActivity/build.gradle +++ b/samples/androidNativeActivity/build.gradle @@ -53,13 +53,13 @@ android { } kotlin { - targets { - fromPreset(presets.androidNativeArm32, 'arm32') - fromPreset(presets.androidNativeArm64, 'arm64') - - configure([arm32, arm64]) { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.androidnative.main' + [new Tuple(presets.androidNativeArm32, 'arm32'), new Tuple(presets.androidNativeArm64, 'arm64')].each { + targetFromPreset(it[0], it[1]) { + binaries { + executable() { + entryPoint = 'sample.androidnative.main' + } + } compilations.main.cinterops { bmpformat } @@ -77,24 +77,22 @@ tasks.compileKotlinMetadata.enabled = false afterEvaluate { kotlin.targets { targets -> [arm32, arm64].collect { target -> - target.compilations.main { mainCompilation -> - String buildType = 'RELEASE' // Change to 'DEBUG' to include debug symbols. - Object linkTask = mainCompilation.getLinkTask('EXECUTABLE', buildType) + String buildType = 'RELEASE' // Change to 'DEBUG' to include debug symbols. + Object linkTask = binaries.getExecutable(buildType).linkTask - // Rename binary files to 'libpoly.so' and put them to the appropriate location. - File binaryFile = linkTask.outputFile.get() - linkTask.doLast { - copy { - from binaryFile - into libsDirMapping[target.targetName] - rename { - 'libpoly.so' - } + // Rename binary files to 'libpoly.so' and put them to the appropriate location. + File binaryFile = binaries.getExecutable(buildType).outputFile + linkTask.doLast { + copy { + from binaryFile + into libsDirMapping[target.targetName] + rename { + 'libpoly.so' } } - - tasks.preBuild.dependsOn linkTask } + + tasks.preBuild.dependsOn linkTask } } } diff --git a/samples/buildSrc/src/main/kotlin/MPPTools.kt b/samples/buildSrc/src/main/kotlin/MPPTools.kt index 7e7d37fa8bb..2dc0659cff5 100644 --- a/samples/buildSrc/src/main/kotlin/MPPTools.kt +++ b/samples/buildSrc/src/main/kotlin/MPPTools.kt @@ -8,7 +8,7 @@ import groovy.lang.Closure import org.gradle.api.Project import org.gradle.api.Task -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetPreset import org.jetbrains.kotlin.konan.target.KonanTarget @@ -65,16 +65,3 @@ fun defaultHostPreset( else throw Exception("Host OS '$hostOs' is not supported in Kotlin/Native ${subproject.displayName}.") } - -// A short-cut to add a Kotlin/Native run task. -@JvmOverloads -fun createRunTask( - subproject: Project, - name: String, - target: KotlinTarget, - configureClosure: Closure? = null -): Task { - val task = subproject.tasks.create(name, RunKotlinNativeTask::class.java, target) - task.configure(configureClosure ?: task.emptyConfigureClosure()) - return task -} diff --git a/samples/buildSrc/src/main/kotlin/RunKotlinNativeTask.kt b/samples/buildSrc/src/main/kotlin/RunKotlinNativeTask.kt deleted file mode 100644 index 2ad0c63849d..00000000000 --- a/samples/buildSrc/src/main/kotlin/RunKotlinNativeTask.kt +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -import groovy.lang.Closure -import org.gradle.api.DefaultTask -import org.gradle.api.Task -import org.gradle.api.tasks.TaskAction -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import javax.inject.Inject - -open class RunKotlinNativeTask @Inject constructor( - private val myTarget: KotlinTarget -): DefaultTask() { - - var buildType = "RELEASE" - var workingDir: Any = project.projectDir - private var myArgs: List = emptyList() - private val myEnvironment: MutableMap = mutableMapOf() - - fun args(vararg args: Any) { - myArgs = args.map { it.toString() } - } - - fun environment(map: Map) { - myEnvironment += map - } - - override fun configure(configureClosure: Closure): Task { - val task = super.configure(configureClosure) - this.dependsOn += myTarget.compilations.main.linkTaskName("EXECUTABLE", buildType) - return task - } - - @TaskAction - fun run() { - project.exec { - it.executable = myTarget.compilations.main.getBinary("EXECUTABLE", buildType).toString() - it.args = myArgs - it.environment = myEnvironment - it.workingDir(workingDir) - } - } - - internal fun emptyConfigureClosure() = object : Closure(this) { - override fun call(): RunKotlinNativeTask { - return this@RunKotlinNativeTask - } - } -} diff --git a/samples/calculator/androidApp/build.gradle b/samples/calculator/androidApp/build.gradle index 04650a84e8c..211a555cb9a 100644 --- a/samples/calculator/androidApp/build.gradle +++ b/samples/calculator/androidApp/build.gradle @@ -20,7 +20,5 @@ dependencies { } kotlin { - targets { - fromPreset(presets.android, 'android') - } + android() } diff --git a/samples/calculator/cliApp/build.gradle b/samples/calculator/cliApp/build.gradle index 2197c99386a..cbd2cd14391 100644 --- a/samples/calculator/cliApp/build.gradle +++ b/samples/calculator/cliApp/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'org.jetbrains.kotlin.multiplatform' kotlin { targets { - fromPreset(presets.jvm, 'jvm') + jvm() } sourceSets { diff --git a/samples/csvparser/README.md b/samples/csvparser/README.md index d2deb9efa94..18e7181ace7 100644 --- a/samples/csvparser/README.md +++ b/samples/csvparser/README.md @@ -6,7 +6,7 @@ from EU is being used. To build use `../gradlew assemble`. -To run use `../gradlew runProgram` or execute the program directly: +To run use `../gradlew runReleaseExecutableCsvParser` or execute the program directly: ./build/bin/csvParser/main/release/executable/csvparser.kexe ./European_Mammals_Red_List_Nov_2009.csv 4 100 diff --git a/samples/csvparser/build.gradle b/samples/csvparser/build.gradle index b9851a9813a..1737efa4064 100644 --- a/samples/csvparser/build.gradle +++ b/samples/csvparser/build.gradle @@ -6,14 +6,12 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project) kotlin { - targets { - fromPreset(hostPreset, 'csvParser') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.csvparser.main' + targetFromPreset(hostPreset, 'csvParser') { + binaries { + executable() { + entryPoint = 'sample.csvparser.main' + runTask.args './European_Mammals_Red_List_Nov_2009.csv', 4, 100 + } } } -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.csvParser) { - args './European_Mammals_Red_List_Nov_2009.csv', 4, 100 -} +} \ No newline at end of file diff --git a/samples/curl/README.md b/samples/curl/README.md index c0567cdcfcc..d3a8624094a 100644 --- a/samples/curl/README.md +++ b/samples/curl/README.md @@ -6,7 +6,7 @@ built by [libcurl sample](../libcurl) so you need to run it first. To build use `../gradlew assemble`. -To run use `../gradlew runProgram` or execute the program directly: +To run use `../gradlew runReleaseExecutableCurl` or execute the program directly: ./build/bin/curl/main/release/executable/curl.kexe 'https://www.jetbrains.com/' diff --git a/samples/curl/build.gradle b/samples/curl/build.gradle index e8551222648..86eae5cefd5 100644 --- a/samples/curl/build.gradle +++ b/samples/curl/build.gradle @@ -12,14 +12,16 @@ repositories { def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64, kotlin.presets.mingwX64]) kotlin { - targets { - fromPreset(hostPreset, 'curl') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.curl.main' - - if (presets.mingwX64 == hostPreset) { - // Add lib path to `libcurl` and its dependencies: - compilations.main.linkerOpts "-L${MPPTools.mingwPath()}/lib" + targetFromPreset(hostPreset, 'curl') { + binaries { + executable() { + entryPoint = 'sample.curl.main' + if (presets.mingwX64 == hostPreset) { + // Add lib path to `libcurl` and its dependencies: + linkerOpts += ["-L${MPPTools.mingwPath()}/lib".toString()] + runTask.environment('PATH': "${MPPTools.mingwPath()}/bin".toString()) + } + runTask.args('https://www.jetbrains.com/') } } } @@ -33,13 +35,6 @@ kotlin { } } -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.curl) { - if (kotlin.presets.mingwX64 == hostPreset) { - environment 'PATH': "${MPPTools.mingwPath()}/bin" - } - args 'https://www.jetbrains.com/' -} - // The code snippet below is needed to make all compile tasks depend on publication of // "libcurl" library. So that to the time of compilation the library will already be // in Maven repo and will be successfully resolved as a dependency of this project. diff --git a/samples/echoServer/README.md b/samples/echoServer/README.md index 95486f2f17b..3426bed1d7e 100644 --- a/samples/echoServer/README.md +++ b/samples/echoServer/README.md @@ -2,7 +2,7 @@ To build use `../gradlew assemble`. -To run use `../gradlew runProgram` or execute the program directly: +To run use `../gradlew runReleaseExecutableEchoServer` or execute the program directly: ./build/bin/echoServer/main/release/executable/echoServer.kexe 3000 & diff --git a/samples/echoServer/build.gradle b/samples/echoServer/build.gradle index def74c2b46a..86ddd03c0fc 100644 --- a/samples/echoServer/build.gradle +++ b/samples/echoServer/build.gradle @@ -9,10 +9,12 @@ def hostPreset = MPPTools.defaultHostPreset(project) def raspberryPiPresets = [kotlin.presets.linuxArm32Hfp, kotlin.presets.linuxArm64] kotlin { - targets { - fromPreset(hostPreset, 'echoServer') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.echoserver.main' + targetFromPreset(hostPreset, 'echoServer') { + binaries { + executable() { + entryPoint = 'sample.echoserver.main' + runTask.args(3000) + } } raspberryPiPresets.each { preset -> @@ -31,7 +33,3 @@ kotlin { } } } - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.echoServer) { - args 3000 -} diff --git a/samples/gitchurn/README.md b/samples/gitchurn/README.md index 47d0fddcc88..c17c130ecc5 100644 --- a/samples/gitchurn/README.md +++ b/samples/gitchurn/README.md @@ -9,7 +9,7 @@ not have MSYS2-MinGW64 installed - install it first as described in http://www.m To build use `../gradlew assemble`. -To run use `../gradlew runProgram` or execute the program directly: +To run use `../gradlew runReleaseExecutableGitChurn` or execute the program directly: ./build/bin/gitChurn/main/release/executable/gitchurn.kexe ../../ diff --git a/samples/gitchurn/build.gradle b/samples/gitchurn/build.gradle index 79f5489a286..6d92f6d1ddd 100644 --- a/samples/gitchurn/build.gradle +++ b/samples/gitchurn/build.gradle @@ -6,35 +6,31 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project) kotlin { - targets { - fromPreset(hostPreset, 'gitChurn') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.gitchurn.main' - compilations.main.cinterops { - libgit2 { - switch (hostPreset) { - case presets.macosX64: - includeDirs.headerFilterOnly '/opt/local/include', '/usr/local/include' - break - case presets.linuxX64: - includeDirs.headerFilterOnly '/usr/include' - break - case presets.mingwX64: - includeDirs.headerFilterOnly "${MPPTools.mingwPath()}/include" - break - } + targetFromPreset(hostPreset, 'gitChurn') { + binaries { + executable() { + entryPoint = 'sample.gitchurn.main' + if (presets.mingwX64 == hostPreset) { + linkerOpts = ["-L${MPPTools.mingwPath()}/lib".toString()] + runTask.environment('PATH', "${MPPTools.mingwPath()}/bin".toString()) } + runTask.args(project.getRootProject().getRootDir().toString() + '/..') } - if (presets.mingwX64 == hostPreset) { - compilations.main.linkerOpts "-L${MPPTools.mingwPath()}/lib" + } + compilations.main.cinterops { + libgit2 { + switch (hostPreset) { + case presets.macosX64: + includeDirs.headerFilterOnly '/opt/local/include', '/usr/local/include' + break + case presets.linuxX64: + includeDirs.headerFilterOnly '/usr/include' + break + case presets.mingwX64: + includeDirs.headerFilterOnly "${MPPTools.mingwPath()}/include" + break + } } } } } - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.gitChurn) { - if (kotlin.presets.mingwX64 == hostPreset) { - environment 'PATH': "${MPPTools.mingwPath()}/bin" - } - args project.getRootProject().getRootDir().toString() + '/..' -} diff --git a/samples/globalState/README.md b/samples/globalState/README.md index 96fb6050dff..d5e55550ebb 100644 --- a/samples/globalState/README.md +++ b/samples/globalState/README.md @@ -4,6 +4,6 @@ This example shows how one could implement global shared state using interop mec To build use `../gradlew assemble`. -To run use `../gradlew runProgram` or execute the program directly: +To run use `../gradlew runReleaseExecutableGlobalState` or execute the program directly: ./build/bin/globalState/main/release/executable/globalState.kexe diff --git a/samples/globalState/build.gradle b/samples/globalState/build.gradle index ef9b245df9f..c151997839d 100644 --- a/samples/globalState/build.gradle +++ b/samples/globalState/build.gradle @@ -6,15 +6,14 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project) kotlin { - targets { - fromPreset(hostPreset, 'globalState') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.globalstate.main' - compilations.main.cinterops { - global + targetFromPreset(hostPreset, 'globalState') { + binaries { + executable() { + entryPoint = 'sample.globalstate.main' } } + compilations.main.cinterops { + global + } } -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.globalState) +} \ No newline at end of file diff --git a/samples/gradle.properties b/samples/gradle.properties index 6a84bd78324..2c8d39d61c2 100644 --- a/samples/gradle.properties +++ b/samples/gradle.properties @@ -5,7 +5,7 @@ org.gradle.parallel=true # Pin Kotlin version: # CHANGE_VERSION_WITH_RELEASE -kotlin_version=1.3.40-dev-2451 +kotlin_version=1.3.40-eap-40 # Use custom Kotlin/Native home: org.jetbrains.kotlin.native.home=../../dist diff --git a/samples/gtk/README.md b/samples/gtk/README.md index 172a0f8e189..cb70baa55cb 100644 --- a/samples/gtk/README.md +++ b/samples/gtk/README.md @@ -7,7 +7,7 @@ To build use `../gradlew assemble`. Do not forget to install GTK3. See bellow. -To run on Mac also install XQuartz X server (https://www.xquartz.org/), and then `../gradlew runProgram` or execute the program directly: +To run on Mac also install XQuartz X server (https://www.xquartz.org/), and then `../gradlew runReleaseExecutableGtk` or execute the program directly: ./build/bin/gtk/main/release/executable/gtk.kexe diff --git a/samples/gtk/build.gradle b/samples/gtk/build.gradle index f9cee5829f3..0a3de2c226a 100644 --- a/samples/gtk/build.gradle +++ b/samples/gtk/build.gradle @@ -6,51 +6,47 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project) kotlin { - targets { - fromPreset(hostPreset, 'gtk') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.gtk.main' - compilations.main.cinterops { - gtk3 { - switch (hostPreset) { - case presets.macosX64: - case presets.linuxX64: - ['/opt/local/include', - '/usr/include', - '/usr/local/include' - ].each { - includeDirs "$it/atk-1.0", - "$it/gdk-pixbuf-2.0", - "$it/cairo", - "$it/pango-1.0", - "$it/gtk-3.0", - "$it/glib-2.0" - } - includeDirs '/opt/local/lib/glib-2.0/include', - '/usr/lib/x86_64-linux-gnu/glib-2.0/include', - '/usr/local/lib/glib-2.0/include' - break - case presets.mingwX64: - includeDirs "${MPPTools.mingwPath()}/include/atk-1.0", - "${MPPTools.mingwPath()}/include/gdk-pixbuf-2.0", - "${MPPTools.mingwPath()}/include/cairo", - "${MPPTools.mingwPath()}/include/pango-1.0", - "${MPPTools.mingwPath()}/include/gtk-3.0", - "${MPPTools.mingwPath()}/include/glib-2.0", - "${MPPTools.mingwPath()}/lib/glib-2.0/include" - break - } + targetFromPreset(hostPreset, 'gtk') { + binaries { + executable() { + entryPoint = 'sample.gtk.main' + if (presets.mingwX64 == hostPreset) { + linkerOpts += ["-L${MPPTools.mingwPath()}/lib".toString()] + runTask.environment('PATH', "${MPPTools.mingwPath()}/bin".toString()) } } - if (presets.mingwX64 == hostPreset) { - compilations.main.linkerOpts "-L${MPPTools.mingwPath()}/lib" + } + compilations.main.cinterops { + gtk3 { + switch (hostPreset) { + case presets.macosX64: + case presets.linuxX64: + ['/opt/local/include', + '/usr/include', + '/usr/local/include' + ].each { + includeDirs "$it/atk-1.0", + "$it/gdk-pixbuf-2.0", + "$it/cairo", + "$it/pango-1.0", + "$it/gtk-3.0", + "$it/glib-2.0" + } + includeDirs '/opt/local/lib/glib-2.0/include', + '/usr/lib/x86_64-linux-gnu/glib-2.0/include', + '/usr/local/lib/glib-2.0/include' + break + case presets.mingwX64: + includeDirs "${MPPTools.mingwPath()}/include/atk-1.0", + "${MPPTools.mingwPath()}/include/gdk-pixbuf-2.0", + "${MPPTools.mingwPath()}/include/cairo", + "${MPPTools.mingwPath()}/include/pango-1.0", + "${MPPTools.mingwPath()}/include/gtk-3.0", + "${MPPTools.mingwPath()}/include/glib-2.0", + "${MPPTools.mingwPath()}/lib/glib-2.0/include" + break + } } } } -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.gtk) { - if (kotlin.presets.mingwX64 == hostPreset) { - environment 'PATH': "${MPPTools.mingwPath()}/bin" - } -} +} \ No newline at end of file diff --git a/samples/html5Canvas/build.gradle b/samples/html5Canvas/build.gradle index b5d7b116343..b26d2799f44 100644 --- a/samples/html5Canvas/build.gradle +++ b/samples/html5Canvas/build.gradle @@ -16,13 +16,14 @@ String packageName = 'kotlinx.interop.wasm.dom' String jsinteropKlibFileName = Paths.get(buildDir.toString(), 'klib', "$packageName-jsinterop.klib").toString() kotlin { - targets { - fromPreset(presets.wasm32, 'html5Canvas') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.html5canvas.main' + targetFromPreset(presets.wasm32, 'html5Canvas') { + binaries { + executable() { + entryPoint = 'sample.html5canvas.main' + } } - fromPreset(presets.jvm, 'httpServer') } + jvm('httpServer') sourceSets { html5CanvasMain { dependencies { diff --git a/samples/nonBlockingEchoServer/README.md b/samples/nonBlockingEchoServer/README.md index c61491b8ad3..c7601aad8e3 100644 --- a/samples/nonBlockingEchoServer/README.md +++ b/samples/nonBlockingEchoServer/README.md @@ -9,7 +9,7 @@ each individual connection handler is written in simple linear manner. To build use `../gradlew assemble`. -To run use `../gradlew runProgram` or execute the program directly: +To run use `../gradlew runReleaseExecutableNonBlockingEchoServer` or execute the program directly: ./build/bin/nonBlockingEchoServer/main/release/executable/nonBlockingEchoServer.kexe 3000 & diff --git a/samples/nonBlockingEchoServer/build.gradle b/samples/nonBlockingEchoServer/build.gradle index 41eb99b0ac0..4c407b4df3f 100644 --- a/samples/nonBlockingEchoServer/build.gradle +++ b/samples/nonBlockingEchoServer/build.gradle @@ -6,14 +6,12 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64]) kotlin { - targets { - fromPreset(hostPreset, 'nonBlockingEchoServer') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.nbechoserver.main' + targetFromPreset(hostPreset, 'nonBlockingEchoServer') { + binaries { + executable() { + entryPoint = 'sample.nbechoserver.main' + runTask.args(3000) + } } } -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.nonBlockingEchoServer) { - args 3000 -} +} \ No newline at end of file diff --git a/samples/objc/build.gradle b/samples/objc/build.gradle index df54bf7da85..1af3f01110e 100644 --- a/samples/objc/build.gradle +++ b/samples/objc/build.gradle @@ -6,12 +6,11 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64]) kotlin { - targets { - fromPreset(hostPreset, 'objc') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.objc.main' + targetFromPreset(hostPreset, 'objc') { + binaries { + executable() { + entryPoint = 'sample.objc.main' + } } } -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.objc) +} \ No newline at end of file diff --git a/samples/opengl/README.md b/samples/opengl/README.md index 9df29f71a91..f4e99586b82 100644 --- a/samples/opengl/README.md +++ b/samples/opengl/README.md @@ -5,7 +5,7 @@ MacOS shall work as is. To build use `../gradlew assemble`. -To run use `../gradlew runProgram` or execute the program directly: +To run use `../gradlew runReleaseExecutableOpengl` or execute the program directly: ./build/bin/opengl/main/release/executable/opengl.kexe diff --git a/samples/opengl/build.gradle b/samples/opengl/build.gradle index 7f173b56e6d..d1762bb0353 100644 --- a/samples/opengl/build.gradle +++ b/samples/opengl/build.gradle @@ -6,12 +6,11 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64]) kotlin { - targets { - fromPreset(hostPreset, 'opengl') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.opengl.main' + targetFromPreset(hostPreset, 'opengl') { + binaries { + executable() { + entryPoint = 'sample.opengl.main' + } } } -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.opengl) +} \ No newline at end of file diff --git a/samples/symbolication/build.gradle b/samples/symbolication/build.gradle index 2b0f81f6ad9..fe42efec6d4 100644 --- a/samples/symbolication/build.gradle +++ b/samples/symbolication/build.gradle @@ -6,18 +6,15 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project) kotlin { - targets { - fromPreset(hostPreset, 'symbolication') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'symbolication.main' - compilations.main.cinterops { - coreSymbolication { - } + targetFromPreset(hostPreset, 'symbolication') { + binaries { + executable() { + entryPoint = 'symbolication.main' + } + } + compilations.main.cinterops { + coreSymbolication { } } } -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.symbolication) { - //args "./test.kexe.dSYM/Contents/Resources/DWARF/test.kexe" -} +} \ No newline at end of file diff --git a/samples/tensorflow/README.md b/samples/tensorflow/README.md index bf853eaade6..ae394fddf2d 100644 --- a/samples/tensorflow/README.md +++ b/samples/tensorflow/README.md @@ -20,7 +20,7 @@ To build use `../gradlew assemble`. Then run - ../gradlew runProgram + ../gradlew runReleaseExecutableTensorflow Alternatively you can run the artifact directly through diff --git a/samples/tensorflow/build.gradle b/samples/tensorflow/build.gradle index d4006547e68..8793c3d64d9 100644 --- a/samples/tensorflow/build.gradle +++ b/samples/tensorflow/build.gradle @@ -8,15 +8,18 @@ def tensorflowHome = "${MPPTools.kotlinNativeDataPath()}/third-party/tensorflow" def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64]) kotlin { - targets { - fromPreset(hostPreset, 'tensorflow') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.tensorflow.main' - compilations.main.linkerOpts "-L$tensorflowHome/lib", '-ltensorflow' - compilations.main.cinterops { - tensorflow { - includeDirs "$tensorflowHome/include" - } + targetFromPreset(hostPreset, 'tensorflow') { + binaries { + executable() { + entryPoint = 'sample.tensorflow.main' + linkerOpts += ["-L$tensorflowHome/lib".toString(), '-ltensorflow'] + runTask.environment('LD_LIBRARY_PATH', "$tensorflowHome/lib".toString()) + runTask.environment('DYLD_LIBRARY_PATH', "$tensorflowHome/lib".toString()) + } + } + compilations.main.cinterops { + tensorflow { + includeDirs "$tensorflowHome/include" } } } @@ -26,10 +29,4 @@ task downloadTensorflow(type: Exec) { workingDir projectDir commandLine './downloadTensorflow.sh' } -tasks[kotlin.targets.tensorflow.compilations.main.cinterops.tensorflow.interopProcessingTaskName].dependsOn downloadTensorflow - - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.tensorflow) { - environment 'LD_LIBRARY_PATH': "$tensorflowHome/lib" - environment 'DYLD_LIBRARY_PATH': "$tensorflowHome/lib" -} +tasks[kotlin.targets.tensorflow.compilations.main.cinterops.tensorflow.interopProcessingTaskName].dependsOn downloadTensorflow \ No newline at end of file diff --git a/samples/tetris/README.md b/samples/tetris/README.md index 708b49aacfd..62c52214b1c 100644 --- a/samples/tetris/README.md +++ b/samples/tetris/README.md @@ -15,7 +15,7 @@ To build Tetris application for your host platform use `../gradlew assemble`. Note that SDL2 must be installed on the host. -Now you can run the game using `../gradlew runProgram` or directly with +Now you can run the game using `../gradlew runReleaseExecutableTetris` or directly with ./build/bin/tetris/main/release/executable/tetris.kexe diff --git a/samples/tetris/build.gradle b/samples/tetris/build.gradle index 4508c917035..38b39d9ea93 100644 --- a/samples/tetris/build.gradle +++ b/samples/tetris/build.gradle @@ -6,56 +6,59 @@ File winCompiledResourceFile = file("$buildDir/compiledWindowsResources/Tetris.r def hostPreset = determinePreset() kotlin { - targets { - fromPreset(hostPreset, 'tetris') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.tetris.main' - - switch (hostPreset) { - case presets.macosX64: - compilations.main.linkerOpts '-L/opt/local/lib', '-L/usr/local/lib', '-lSDL2' - break - case presets.linuxX64: - compilations.main.linkerOpts '-L/usr/lib64', '-L/usr/lib/x86_64-linux-gnu', '-lSDL2' - break - case presets.mingwX86: - case presets.mingwX64: - compilations.main.linkerOpts winCompiledResourceFile.path, - "-L${MPPTools.mingwPath(hostPreset)}/lib", - '-Wl,-Bstatic', - '-lstdc++', - '-static', - '-lSDL2', - '-limm32', - '-lole32', - '-loleaut32', - '-lversion', - '-lwinmm', - '-lsetupapi', - '-mwindows' - break - case presets.linuxArm32Hfp: - compilations.main.linkerOpts '-lSDL2' - break + targetFromPreset(hostPreset, 'tetris') { + binaries { + executable() { + entryPoint = 'sample.tetris.main' + switch (hostPreset) { + case presets.macosX64: + linkerOpts += ['-L/opt/local/lib', '-L/usr/local/lib', '-lSDL2'] + break + case presets.linuxX64: + linkerOpts += ['-L/usr/lib64', '-L/usr/lib/x86_64-linux-gnu', '-lSDL2'] + break + case presets.mingwX86: + case presets.mingwX64: + linkerOpts += [winCompiledResourceFile.path, + "-L${MPPTools.mingwPath(hostPreset)}/lib".toString(), + '-Wl,-Bstatic', + '-lstdc++', + '-static', + '-lSDL2', + '-limm32', + '-lole32', + '-loleaut32', + '-lversion', + '-lwinmm', + '-lsetupapi', + '-mwindows'] + break + case presets.linuxArm32Hfp: + linkerOpts += ['-lSDL2'] + break + } + runTask.workingDir(project.provider { + kotlin.targets.tetris.binaries.getExecutable(buildType).outputDirectory + }) } - - compilations.main.cinterops { - sdl { - switch (hostPreset) { - case presets.macosX64: - includeDirs '/opt/local/include/SDL2', '/usr/local/include/SDL2' - break - case presets.linuxX64: - includeDirs '/usr/include/SDL2' - break - case presets.mingwX86: - case presets.mingwX64: - includeDirs "${MPPTools.mingwPath(hostPreset)}/include/SDL2" - break - case presets.linuxArm32Hfp: - includeDirs "${MPPTools.kotlinNativeDataPath()}/dependencies/target-sysroot-1-raspberrypi/usr/include/SDL2" - break - } + } + + compilations.main.cinterops { + sdl { + switch (hostPreset) { + case presets.macosX64: + includeDirs '/opt/local/include/SDL2', '/usr/local/include/SDL2' + break + case presets.linuxX64: + includeDirs '/usr/include/SDL2' + break + case presets.mingwX86: + case presets.mingwX64: + includeDirs "${MPPTools.mingwPath(hostPreset)}/include/SDL2" + break + case presets.linuxArm32Hfp: + includeDirs "${MPPTools.kotlinNativeDataPath()}/dependencies/target-sysroot-1-raspberrypi/usr/include/SDL2" + break } } } @@ -82,16 +85,10 @@ if ((hostPreset == kotlin.presets.mingwX86) || (hostPreset == kotlin.presets.min } } -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.tetris) { - workingDir = project.provider { - kotlin.targets.tetris.compilations.main.getBinary('EXECUTABLE', buildType).parentFile - } -} - afterEvaluate { kotlin.targets.tetris.compilations.main { mainCompilation -> def linkTasks = ['RELEASE', 'DEBUG'] - .collect { mainCompilation.findLinkTask('EXECUTABLE', it) } + .collect { kotlin.targets.tetris.binaries.getExecutable(it).linkTask } .findAll { it != null } def compileWindowsResourcesTask = tasks.findByName('compileWindowsResources') diff --git a/samples/torch/README.md b/samples/torch/README.md index 760c8f970ec..7c0bf73a233 100644 --- a/samples/torch/README.md +++ b/samples/torch/README.md @@ -35,7 +35,7 @@ will download and unzip the [MNIST dataset](https://en.wikipedia.org/wiki/MNIST_ Then run - ../gradlew runProgram + ../gradlew runReleaseExecutableTorch Alternatively you can run the artifact directly through diff --git a/samples/torch/build.gradle b/samples/torch/build.gradle index 027cb43f740..0fe41d2dc35 100644 --- a/samples/torch/build.gradle +++ b/samples/torch/build.gradle @@ -8,15 +8,19 @@ def torchHome = "${MPPTools.kotlinNativeDataPath()}/third-party/torch" def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64]) kotlin { - targets { - fromPreset(hostPreset, 'torch') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.torch.main' - compilations.main.linkerOpts "-L$torchHome/lib", '-lATen' - compilations.main.cinterops { - torch { - includeDirs "$torchHome/include", "$torchHome/include/TH" - } + targetFromPreset(hostPreset, 'torch') { + binaries { + executable() { + entryPoint = 'sample.torch.main' + linkerOpts += ["-L$torchHome/lib".toString(), '-lATen'] + runTask.dependsOn 'downloadMNIST' + runTask.environment('LD_LIBRARY_PATH', "$torchHome/lib".toString()) + runTask.environment('DYLD_LIBRARY_PATH', "$torchHome/lib".toString()) + } + } + compilations.main.cinterops { + torch { + includeDirs "$torchHome/include", "$torchHome/include/TH" } } } @@ -31,10 +35,4 @@ tasks[kotlin.targets.torch.compilations.main.cinterops.torch.interopProcessingTa task downloadMNIST(type: Exec) { workingDir projectDir commandLine './downloadMNIST.sh' -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.torch) { - dependsOn downloadMNIST - environment 'LD_LIBRARY_PATH': "$torchHome/lib" - environment 'DYLD_LIBRARY_PATH': "$torchHome/lib" -} +} \ No newline at end of file diff --git a/samples/videoplayer/build.gradle b/samples/videoplayer/build.gradle index 15740df5d9f..218fe03c42c 100644 --- a/samples/videoplayer/build.gradle +++ b/samples/videoplayer/build.gradle @@ -6,49 +6,50 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.macosX64, kotlin.presets.linuxX64, kotlin.presets.mingwX64]) kotlin { - targets { - fromPreset(hostPreset, 'videoPlayer') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.videoplayer.main' + targetFromPreset(hostPreset, 'videoPlayer') { + binaries { + executable() { + entryPoint = 'sample.videoplayer.main' - switch (hostPreset) { - case presets.macosX64: - compilations.main.linkerOpts '-L/opt/local/lib', '-L/usr/local/lib' - break - case presets.linuxX64: - compilations.main.linkerOpts '-L/usr/lib/x86_64-linux-gnu', '-L/usr/lib64' - break - case presets.mingwX64: - compilations.main.linkerOpts "-L${MPPTools.mingwPath()}/lib" - break - } - - compilations.main.cinterops { - ffmpeg { - switch (hostPreset) { - case presets.macosX64: - includeDirs.headerFilterOnly '/opt/local/include', '/usr/local/include' - break - case presets.linuxX64: - includeDirs.headerFilterOnly '/usr/include', '/usr/include/x86_64-linux-gnu', '/usr/include/ffmpeg' - break - case presets.mingwX64: - includeDirs "${MPPTools.mingwPath()}/include" - break - } + switch (hostPreset) { + case presets.macosX64: + linkerOpts += ['-L/opt/local/lib', '-L/usr/local/lib'] + break + case presets.linuxX64: + linkerOpts += ['-L/usr/lib/x86_64-linux-gnu', '-L/usr/lib64'] + break + case presets.mingwX64: + linkerOpts += ["-L${MPPTools.mingwPath()}/lib".toString()] + break } - sdl { - switch (hostPreset) { - case presets.macosX64: - includeDirs '/opt/local/include/SDL2', '/usr/local/include/SDL2' - break - case presets.linuxX64: - includeDirs '/usr/include/SDL2' - break - case presets.mingwX64: - includeDirs "${MPPTools.mingwPath()}/include/SDL2" - break - } + } + } + + compilations.main.cinterops { + ffmpeg { + switch (hostPreset) { + case presets.macosX64: + includeDirs.headerFilterOnly '/opt/local/include', '/usr/local/include' + break + case presets.linuxX64: + includeDirs.headerFilterOnly '/usr/include', '/usr/include/x86_64-linux-gnu', '/usr/include/ffmpeg' + break + case presets.mingwX64: + includeDirs "${MPPTools.mingwPath()}/include" + break + } + } + sdl { + switch (hostPreset) { + case presets.macosX64: + includeDirs '/opt/local/include/SDL2', '/usr/local/include/SDL2' + break + case presets.linuxX64: + includeDirs '/usr/include/SDL2' + break + case presets.mingwX64: + includeDirs "${MPPTools.mingwPath()}/include/SDL2" + break } } } diff --git a/samples/win32/README.md b/samples/win32/README.md index 3d48fc52e37..dab020610de 100644 --- a/samples/win32/README.md +++ b/samples/win32/README.md @@ -2,6 +2,6 @@ To build use `..\gradlew assemble`. -To run use `..\gradlew runProgram` or execute the program directly: +To run use `..\gradlew runReleaseExecutableWin32` or execute the program directly: `.\build\exe\main\release\MessageBox.exe`. diff --git a/samples/win32/build.gradle b/samples/win32/build.gradle index d33a5510992..64fcdf94681 100644 --- a/samples/win32/build.gradle +++ b/samples/win32/build.gradle @@ -6,13 +6,12 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project, [kotlin.presets.mingwX64]) kotlin { - targets { - fromPreset(hostPreset, 'win32') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.win32.main' - compilations.main.linkerOpts '-Wl,--subsystem,windows' + targetFromPreset(hostPreset, 'win32') { + binaries { + executable() { + entryPoint = 'sample.win32.main' + linkerOpts += ['-Wl,--subsystem,windows'] + } } } } - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.win32) diff --git a/samples/workers/README.md b/samples/workers/README.md index 0601c160bdb..ce9571dc91c 100644 --- a/samples/workers/README.md +++ b/samples/workers/README.md @@ -38,6 +38,6 @@ computation results. Afterwards, worker execution termination is requested with To build use `../gradlew assemble`. -To run use `../gradlew runProgram` or execute the program directly: +To run use `../gradlew runReleaseExecutableWorkers` or execute the program directly: ./build/bin/workers/main/release/executable/workers.kexe diff --git a/samples/workers/build.gradle b/samples/workers/build.gradle index 4b07d3eab66..0edb7d56cbd 100644 --- a/samples/workers/build.gradle +++ b/samples/workers/build.gradle @@ -6,12 +6,11 @@ plugins { def hostPreset = MPPTools.defaultHostPreset(project) kotlin { - targets { - fromPreset(hostPreset, 'workers') { - compilations.main.outputKinds 'EXECUTABLE' - compilations.main.entryPoint 'sample.workers.main' + targetFromPreset(hostPreset, 'workers') { + binaries { + executable() { + entryPoint = 'sample.workers.main' + } } } -} - -MPPTools.createRunTask(project, 'runProgram', kotlin.targets.workers) +} \ No newline at end of file