build: Refactor dependencies updating
This commit is contained in:
@@ -237,5 +237,3 @@ protobuf {
|
|||||||
artifact = "com.google.protobuf:protoc:${protobufVersion}"
|
artifact = "com.google.protobuf:protoc:${protobufVersion}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ class Distribution(val targetManager: TargetManager,
|
|||||||
} else {
|
} else {
|
||||||
KonanProperties(host, properties, dependenciesDir)
|
KonanProperties(host, properties, dependenciesDir)
|
||||||
}
|
}
|
||||||
val dependencies = targetProperties.hostTargetList("dependencies")
|
val dependencies = targetProperties.dependencies
|
||||||
|
|
||||||
val llvmHome = hostProperties.absoluteLlvmHome
|
val llvmHome = hostProperties.absoluteLlvmHome
|
||||||
val hostSysRoot = hostProperties.absoluteTargetSysRoot
|
val hostSysRoot = hostProperties.absoluteTargetSysRoot
|
||||||
|
|||||||
+6
-6
@@ -22,11 +22,11 @@ defaultTasks 'clean', 'dist'
|
|||||||
convention.plugins.platformInfo = new PlatformInfo()
|
convention.plugins.platformInfo = new PlatformInfo()
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
konanPropertiesFile = project(':backend.native').file('konan.properties')
|
konanPropertiesFile = project(':backend.native').file('konan.properties')
|
||||||
konanProperties = PropertiesKt.loadProperties(konanPropertiesFile.absolutePath)
|
konanProperties = PropertiesKt.loadProperties(konanPropertiesFile.absolutePath)
|
||||||
|
|
||||||
dependenciesDir = rootProject.file("dist/dependencies")
|
dependenciesDir = rootProject.file("dist/dependencies")
|
||||||
clangManager = new ClangManager(konanProperties, dependenciesDir.absolutePath)
|
clangManager = new ClangManager(konanProperties, dependenciesDir.absolutePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
@@ -74,7 +74,7 @@ void setupClang(Project project) {
|
|||||||
|
|
||||||
toolChains {
|
toolChains {
|
||||||
gcc(Gcc) {
|
gcc(Gcc) {
|
||||||
path "$mingwWithLlvmDir/bin"
|
path "$llvmDir/bin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -326,4 +326,4 @@ task clean {
|
|||||||
}
|
}
|
||||||
delete bundle.outputs.files
|
delete bundle.outputs.files
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,6 +100,8 @@ abstract class KonanTest extends JavaExec {
|
|||||||
try {
|
try {
|
||||||
main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
||||||
classpath = project.configurations.cli_bc
|
classpath = project.configurations.cli_bc
|
||||||
|
// TODO: Remove helpers classpath when downloading is moved into 'shared' project.
|
||||||
|
classpath += project.project(":tools:helpers").sourceSets.main.runtimeClasspath
|
||||||
enableAssertions = true
|
enableAssertions = true
|
||||||
args = ["-output", output,
|
args = ["-output", output,
|
||||||
*filesToCompile,
|
*filesToCompile,
|
||||||
|
|||||||
Vendored
+45
-69
@@ -14,7 +14,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import static DependencyTaskKind.*
|
|
||||||
|
import groovy.transform.stc.ClosureParams
|
||||||
import org.jetbrains.kotlin.konan.target.*
|
import org.jetbrains.kotlin.konan.target.*
|
||||||
import static org.jetbrains.kotlin.konan.target.KonanTarget.*
|
import static org.jetbrains.kotlin.konan.target.KonanTarget.*
|
||||||
import org.jetbrains.kotlin.konan.properties.KonanProperties
|
import org.jetbrains.kotlin.konan.properties.KonanProperties
|
||||||
@@ -185,86 +186,61 @@ class HelperNativeDep extends TgzNativeDep {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum DependencyTaskKind {
|
enum DependencyKind {
|
||||||
LIBFFI("Libffi"), SYSROOT("Sysroot")
|
LLVM( "llvm", { it.llvmHome }, { "llvmDir" } ),
|
||||||
|
GCC_TOOLCHAIN( "gccToolchain", { it.gccToolchain }, { "gccToolchainDir" }),
|
||||||
|
SYSROOT( "sysroot", { it.targetSysRoot } ),
|
||||||
|
LIBFFI( "libffi", { it.libffiDir } ),
|
||||||
|
TARGET_TOOLCHAIN("targetToolchain", { it.targetToolchain } )
|
||||||
|
|
||||||
DependencyTaskKind(String name) {
|
|
||||||
|
DependencyKind(String name,
|
||||||
|
@ClosureParams(KonanProperties.class) Closure<String> dirGetter,
|
||||||
|
@ClosureParams(KonanTarget.class) Closure<String> propertyNameGetter =
|
||||||
|
{target -> "${target.userName}${name.capitalize()}Dir"}) {
|
||||||
this.name = name
|
this.name = name
|
||||||
|
this.dirGetter = dirGetter
|
||||||
|
this.propertyNameGetter = propertyNameGetter
|
||||||
|
}
|
||||||
|
|
||||||
|
private String name
|
||||||
|
private Closure<String> dirGetter // KonanProperties -> String
|
||||||
|
private Closure<String> propertyNameGetter // KonanTarget -> String
|
||||||
|
|
||||||
|
String getDirectory(KonanProperties properties) {
|
||||||
|
return dirGetter(properties)
|
||||||
|
}
|
||||||
|
|
||||||
|
String getPropertyName(KonanTarget target) {
|
||||||
|
return propertyNameGetter(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
String name = ""
|
|
||||||
String toString() { return name }
|
String toString() { return name }
|
||||||
}
|
}
|
||||||
|
|
||||||
void dependencyTask(KonanTarget target, DependencyTaskKind kind) {
|
TargetManager.enabled.each { target ->
|
||||||
String dependencyBaseName
|
def konanProperties = new KonanProperties(target,
|
||||||
def properties = rootProject.ext.konanProperties
|
rootProject.ext.konanProperties,
|
||||||
def dirs = new KonanProperties(target, properties, null)
|
rootProject.ext.dependenciesDir.canonicalPath
|
||||||
switch (kind) {
|
)
|
||||||
case LIBFFI:
|
|
||||||
dependencyBaseName = dirs.libffiDir
|
konanProperties.dependencies.each { dependency ->
|
||||||
break
|
task "${target.userName}-${dependency}"(type: HelperNativeDep) {
|
||||||
case SYSROOT:
|
baseName = dependency
|
||||||
dependencyBaseName = dirs.targetSysRoot
|
}
|
||||||
break
|
|
||||||
}
|
|
||||||
if (dependencyBaseName == null) {
|
|
||||||
throw project.unsupportedPlatformException()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
task "${target.userName}${kind}"(type: HelperNativeDep) {
|
DependencyKind.values().each { kind ->
|
||||||
baseName = dependencyBaseName
|
def dir = kind.getDirectory(konanProperties)
|
||||||
|
if (dir != null) {
|
||||||
|
def path = rootProject.ext.dependenciesDir.toPath()
|
||||||
|
.resolve(dir).toFile()
|
||||||
|
.canonicalPath
|
||||||
|
rootProject.ext.set(kind.getPropertyName(target), path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLinux()) {
|
|
||||||
// The gcc toolchain contains the sysroot for linux platform.
|
|
||||||
task gccToolchain(type: HelperNativeDep) {
|
|
||||||
baseName = "target-gcc-toolchain-3-$hostSystem"
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencyTask(LINUX, LIBFFI)
|
|
||||||
dependencyTask(RASPBERRYPI, SYSROOT)
|
|
||||||
dependencyTask(RASPBERRYPI, LIBFFI)
|
|
||||||
} else if (isWindows()) {
|
|
||||||
task mingwWithLlvm(type: HelperNativeDep) {
|
|
||||||
baseName = "msys2-mingw-w64-x86_64-gcc-6.3.0-clang-llvm-3.9.1-$hostSystem"
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencyTask(MINGW, LIBFFI)
|
|
||||||
} else if (isMac()) {
|
|
||||||
dependencyTask(MACBOOK, SYSROOT)
|
|
||||||
dependencyTask(MACBOOK, LIBFFI)
|
|
||||||
dependencyTask(IPHONE, SYSROOT)
|
|
||||||
dependencyTask(IPHONE, LIBFFI)
|
|
||||||
dependencyTask(WASM32, SYSROOT)
|
|
||||||
// No FFI for webassembly.
|
|
||||||
|
|
||||||
// TODO: re-enable when we known how to bring the simulator sysroot to dependencies.
|
|
||||||
// dependencyTask("iphoneSim", SYSROOT)
|
|
||||||
} else {
|
|
||||||
throw new Error("Unsupported host")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isLinux() || isMac()) {
|
|
||||||
task llvm(type: HelperNativeDep) {
|
|
||||||
baseName = "clang-llvm-$llvmVersion-$hostSystem"
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencyTask(ANDROID_ARM32, SYSROOT)
|
|
||||||
dependencyTask(ANDROID_ARM32, LIBFFI)
|
|
||||||
dependencyTask(ANDROID_ARM64, SYSROOT)
|
|
||||||
dependencyTask(ANDROID_ARM64, LIBFFI)
|
|
||||||
}
|
|
||||||
|
|
||||||
task update(type: Copy) {
|
task update(type: Copy) {
|
||||||
dependsOn tasks.withType(NativeDep)
|
dependsOn tasks.withType(NativeDep)
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(TgzNativeDep) {
|
|
||||||
rootProject.ext.set("${name}Dir", outputDir.path)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isWindows()) {
|
|
||||||
rootProject.ext.set("llvmDir", mingwWithLlvmDir)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -50,8 +50,9 @@ class KonanProperties(val target: KonanTarget, val properties: Properties, val b
|
|||||||
val gccToolchain get() = targetString("gccToolchain")
|
val gccToolchain get() = targetString("gccToolchain")
|
||||||
val targetArg get() = targetString("quadruple")
|
val targetArg get() = targetString("quadruple")
|
||||||
val llvmHome get() = targetString("llvmHome")
|
val llvmHome get() = targetString("llvmHome")
|
||||||
// Notice: this one is host-target.
|
// Notice: these ones are host-target.
|
||||||
val targetToolchain get() = hostTargetString("targetToolchain")
|
val targetToolchain get() = hostTargetString("targetToolchain")
|
||||||
|
val dependencies get() = hostTargetList("dependencies")
|
||||||
|
|
||||||
fun absolute(value: String?) = "${baseDir!!}/${value!!}"
|
fun absolute(value: String?) = "${baseDir!!}/${value!!}"
|
||||||
|
|
||||||
|
|||||||
@@ -164,4 +164,3 @@ task testHelpers {
|
|||||||
dependsOn testCompilerHelper
|
dependsOn testCompilerHelper
|
||||||
dependsOn testParallel
|
dependsOn testParallel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user