a19bd2ed2e
It's going to be deprecated in Gradle 8.3 There's currently no way to pass a `org.gradle.api.provider.Provider` to the JavaExec.systemProperty or Test.systemProperty. There's a workaround using `org.gradle.process.CommandLineArgumentProvider`, but I intentionally don't rework these calls as Gradle is going to allow passing providers to configure system properties: https://github.com/gradle/gradle/issues/12247#issuecomment-1568427242 ^KTI-1473 In Progress
129 lines
4.5 KiB
Groovy
129 lines
4.5 KiB
Groovy
import org.jetbrains.kotlin.MPPTools
|
|
import org.jetbrains.kotlin.PlatformInfo
|
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
|
|
|
buildscript {
|
|
ext.rootBuildDirectory = file('../..')
|
|
apply from: "$rootProject.projectDir/../gradle/kotlinGradlePlugin.gradle"
|
|
}
|
|
|
|
apply plugin: 'kotlin-multiplatform'
|
|
|
|
|
|
def toolsPath = '../../tools'
|
|
def frameworkName = 'benchmarksAnalyzer'
|
|
|
|
def buildType = NativeBuildType.valueOf(findProperty('nativeBuildType') ?: 'DEBUG')
|
|
|
|
def archSuffix = PlatformInfo.hostName.substring(PlatformInfo.hostName.lastIndexOf('_') + 1).capitalize()
|
|
|
|
kotlin {
|
|
sourceSets {
|
|
commonMain {
|
|
kotlin.srcDir "$toolsPath/benchmarks/shared/src"
|
|
kotlin.srcDir "$toolsPath/benchmarksAnalyzer/src/main/kotlin"
|
|
kotlin.srcDir "$rootProject.projectDir/../endorsedLibraries/kotlinx.cli/src/main/kotlin"
|
|
}
|
|
nativeMain {
|
|
dependsOn commonMain
|
|
kotlin.srcDir "$rootProject.projectDir/../endorsedLibraries/kotlinx.cli/src/main/kotlin-native"
|
|
kotlin.srcDir "$toolsPath/benchmarksAnalyzer/src/main/kotlin-native"
|
|
}
|
|
macosX64Main { dependsOn nativeMain }
|
|
macosArm64Main { dependsOn nativeMain }
|
|
}
|
|
|
|
configure([macosX64(), macosArm64()]) {
|
|
compilations.main.cinterops {
|
|
libcurl {
|
|
defFile "$toolsPath/benchmarksAnalyzer/src/nativeInterop/cinterop/libcurl.def"
|
|
}
|
|
}
|
|
}
|
|
|
|
macosX64().binaries {
|
|
framework(frameworkName, [buildType])
|
|
}
|
|
|
|
macosArm64().binaries {
|
|
framework(frameworkName, [buildType])
|
|
}
|
|
}
|
|
|
|
MPPTools.addTimeListener(project)
|
|
|
|
task konanRun {
|
|
if (PlatformInfo.isMac()) {
|
|
dependsOn "linkBenchmarksAnalyzerDebugFrameworkMacos${archSuffix}"
|
|
}
|
|
}
|
|
|
|
/**
|
|
* TODO: it would be better to make help function generating such nop task in buildSrc.
|
|
*/
|
|
task jvmRun {
|
|
doLast {
|
|
println("JVM run is unsupported")
|
|
}
|
|
}
|
|
|
|
def compilerFlags(def buildType) {
|
|
def result = []
|
|
if (buildType.optimized) {
|
|
result.add("-opt")
|
|
}
|
|
if (buildType.debuggable) {
|
|
result.add("-g")
|
|
}
|
|
return result
|
|
}
|
|
|
|
def getMacTarget() {
|
|
if (PlatformInfo.isMac()) {
|
|
if (PlatformInfo.hostName == "macos_x64")
|
|
return kotlin.macosX64("macosX64")
|
|
else return kotlin.macosArm64("macosArm64")
|
|
}
|
|
throw new GradleException('Current host isn\'t run with Mac OS')
|
|
}
|
|
|
|
task konanJsonReport {
|
|
doLast {
|
|
if (PlatformInfo.isMac()) {
|
|
def applicationName = "FrameworkBenchmarksAnalyzer"
|
|
def macTarget = getMacTarget()
|
|
def frameworkPath = macTarget.binaries.
|
|
getFramework(frameworkName, macTarget.binaries.DEBUG).outputFile.absolutePath
|
|
def nativeExecutable = new File("$frameworkPath/$frameworkName").canonicalPath
|
|
def nativeCompileTime = MPPTools.getNativeCompileTime(project, applicationName, ["compileKotlinMacos${archSuffix}".toString(),
|
|
"linkBenchmarksAnalyzerDebugFrameworkMacos${archSuffix}".toString(),
|
|
"cinteropLibcurlMacos${archSuffix}".toString()])
|
|
def properties = getCommonProperties() + ['type' : 'native',
|
|
'compilerVersion': "${kotlinVersion}".toString(),
|
|
'flags' : compilerFlags(buildType).sort(),
|
|
'benchmarks' : '[]',
|
|
'compileTime' : [nativeCompileTime],
|
|
'codeSize' : MPPTools.getCodeSizeBenchmark(applicationName, nativeExecutable)]
|
|
def output = MPPTools.createJsonReport(properties)
|
|
layout.buildDirectory.file(nativeJson).get().asFile.write(output)
|
|
}
|
|
}
|
|
}
|
|
|
|
task jvmJsonReport {
|
|
doLast {
|
|
println("JVM run is unsupported")
|
|
}
|
|
}
|
|
|
|
jvmRun.finalizedBy jvmJsonReport
|
|
konanRun.finalizedBy konanJsonReport
|
|
|
|
private def getCommonProperties() {
|
|
return ['cpu': System.getProperty("os.arch"),
|
|
'os': System.getProperty("os.name"), // OperatingSystem.current().getName()
|
|
'jdkVersion': System.getProperty("java.version"), // org.gradle.internal.jvm.Jvm.current().javaVersion
|
|
'jdkVendor': System.getProperty("java.vendor"),
|
|
'kotlinVersion': "${kotlinVersion}".toString()]
|
|
}
|