build: Refactor dependencies updating

This commit is contained in:
Ilya Matveev
2017-08-16 17:05:29 +07:00
committed by ilmat192
parent 5c3e8d63d4
commit 4931b2f05b
7 changed files with 57 additions and 81 deletions
-2
View File
@@ -237,5 +237,3 @@ protobuf {
artifact = "com.google.protobuf:protoc:${protobufVersion}"
}
}
@@ -55,7 +55,7 @@ class Distribution(val targetManager: TargetManager,
} else {
KonanProperties(host, properties, dependenciesDir)
}
val dependencies = targetProperties.hostTargetList("dependencies")
val dependencies = targetProperties.dependencies
val llvmHome = hostProperties.absoluteLlvmHome
val hostSysRoot = hostProperties.absoluteTargetSysRoot
+6 -6
View File
@@ -22,11 +22,11 @@ defaultTasks 'clean', 'dist'
convention.plugins.platformInfo = new PlatformInfo()
ext {
konanPropertiesFile = project(':backend.native').file('konan.properties')
konanProperties = PropertiesKt.loadProperties(konanPropertiesFile.absolutePath)
konanPropertiesFile = project(':backend.native').file('konan.properties')
konanProperties = PropertiesKt.loadProperties(konanPropertiesFile.absolutePath)
dependenciesDir = rootProject.file("dist/dependencies")
clangManager = new ClangManager(konanProperties, dependenciesDir.absolutePath)
dependenciesDir = rootProject.file("dist/dependencies")
clangManager = new ClangManager(konanProperties, dependenciesDir.absolutePath)
}
allprojects {
@@ -74,7 +74,7 @@ void setupClang(Project project) {
toolChains {
gcc(Gcc) {
path "$mingwWithLlvmDir/bin"
path "$llvmDir/bin"
}
}
} else {
@@ -326,4 +326,4 @@ task clean {
}
delete bundle.outputs.files
}
}
}
@@ -100,6 +100,8 @@ abstract class KonanTest extends JavaExec {
try {
main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
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
args = ["-output", output,
*filesToCompile,
+45 -69
View File
@@ -14,7 +14,8 @@
* limitations under the License.
*/
import static DependencyTaskKind.*
import groovy.transform.stc.ClosureParams
import org.jetbrains.kotlin.konan.target.*
import static org.jetbrains.kotlin.konan.target.KonanTarget.*
import org.jetbrains.kotlin.konan.properties.KonanProperties
@@ -185,86 +186,61 @@ class HelperNativeDep extends TgzNativeDep {
}
}
enum DependencyTaskKind {
LIBFFI("Libffi"), SYSROOT("Sysroot")
enum DependencyKind {
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.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 }
}
void dependencyTask(KonanTarget target, DependencyTaskKind kind) {
String dependencyBaseName
def properties = rootProject.ext.konanProperties
def dirs = new KonanProperties(target, properties, null)
switch (kind) {
case LIBFFI:
dependencyBaseName = dirs.libffiDir
break
case SYSROOT:
dependencyBaseName = dirs.targetSysRoot
break
}
if (dependencyBaseName == null) {
throw project.unsupportedPlatformException()
TargetManager.enabled.each { target ->
def konanProperties = new KonanProperties(target,
rootProject.ext.konanProperties,
rootProject.ext.dependenciesDir.canonicalPath
)
konanProperties.dependencies.each { dependency ->
task "${target.userName}-${dependency}"(type: HelperNativeDep) {
baseName = dependency
}
}
task "${target.userName}${kind}"(type: HelperNativeDep) {
baseName = dependencyBaseName
DependencyKind.values().each { kind ->
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) {
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 targetArg get() = targetString("quadruple")
val llvmHome get() = targetString("llvmHome")
// Notice: this one is host-target.
val targetToolchain get() = hostTargetString("targetToolchain")
// Notice: these ones are host-target.
val targetToolchain get() = hostTargetString("targetToolchain")
val dependencies get() = hostTargetList("dependencies")
fun absolute(value: String?) = "${baseDir!!}/${value!!}"
-1
View File
@@ -164,4 +164,3 @@ task testHelpers {
dependsOn testCompilerHelper
dependsOn testParallel
}