[stage][link][debug] always produce code with debug info.
This commit is contained in:
committed by
vvlevchenko
parent
b1db2fa182
commit
7ef5cbb52a
+24
-28
@@ -144,7 +144,7 @@ build.dependsOn 'compilerClasses','cli_bcClasses','bc_frontendClasses'
|
||||
|
||||
|
||||
// These are just a couple of aliases
|
||||
task stdlib(dependsOn: "${host}Stdlib")
|
||||
task stdlib(dependsOn: "${host}Stdlib")
|
||||
task start(dependsOn: "${host}Start")
|
||||
|
||||
// These files are built before the 'dist' is complete,
|
||||
@@ -152,23 +152,27 @@ task start(dependsOn: "${host}Start")
|
||||
// -runtime, -properties, -library and -Djava.library.path
|
||||
|
||||
targetList.each { target ->
|
||||
def konanJvmArgs = ["-ea",
|
||||
"-Dkonan.home=${project.parent.file('dist')}",
|
||||
"-Djava.library.path=${project.buildDir}/nativelibs",
|
||||
"-Dfile.encoding=UTF-8"]
|
||||
|
||||
def konanArgs = ['-nopack', '-nostdlib','-ea', '-g',
|
||||
'-target', target,
|
||||
'-runtime', project(':runtime').file("build/${target}/runtime.bc"),
|
||||
'-properties', rootProject.konanPropertiesFile.canonicalPath,
|
||||
*project.globalBuildArgs]
|
||||
|
||||
task("${target}Stdlib", type: JavaExec) {
|
||||
main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
||||
classpath = project.configurations.cli_bc
|
||||
jvmArgs "-ea",
|
||||
"-Dkonan.home=${project.parent.file('dist')}",
|
||||
"-Djava.library.path=${project.buildDir}/nativelibs",
|
||||
"-Dfile.encoding=UTF-8"
|
||||
args('-output', project(':runtime').file("build/${target}Stdlib"),
|
||||
'-nopack', '-nostdlib','-ea',
|
||||
'-produce', 'library', '-target', target,
|
||||
'-runtime', project(':runtime').file("build/${target}/runtime.bc"),
|
||||
'-properties', project(':backend.native').file('konan.properties'),
|
||||
project(':runtime').file('src/main/kotlin'),
|
||||
project(':Interop:Runtime').file('src/main/kotlin'),
|
||||
project(':Interop:Runtime').file('src/native/kotlin'),
|
||||
*project.globalBuildArgs)
|
||||
|
||||
jvmArgs.addAll(konanJvmArgs)
|
||||
args = [*konanArgs,
|
||||
'-output', project(':runtime').file("build/${target}Stdlib"),
|
||||
'-produce', 'library',
|
||||
project(':Interop:Runtime').file('src/main/kotlin'),
|
||||
project(':Interop:Runtime').file('src/native/kotlin'),
|
||||
project(':runtime').file('src/main/kotlin')]
|
||||
inputs.dir(project(':runtime').file('src/main/kotlin'))
|
||||
inputs.dir(project(':Interop:Runtime').file('src/main/kotlin'))
|
||||
inputs.dir(project(':Interop:Runtime').file('src/native/kotlin'))
|
||||
@@ -176,23 +180,15 @@ targetList.each { target ->
|
||||
|
||||
dependsOn ":runtime:${target}Runtime"
|
||||
}
|
||||
}
|
||||
|
||||
targetList.each { target ->
|
||||
task("${target}Start", type: JavaExec) {
|
||||
main = 'org.jetbrains.kotlin.cli.bc.K2NativeKt'
|
||||
classpath = project.configurations.cli_bc
|
||||
jvmArgs "-ea",
|
||||
"-Dkonan.home=${project.parent.file('dist')}",
|
||||
"-Djava.library.path=${project.buildDir}/nativelibs"
|
||||
args('-output', project(':runtime').file("build/${target}Start"),
|
||||
'-nopack', '-nostdlib', '-ea',
|
||||
'-produce', 'bitcode', '-target', target,
|
||||
'-library', project(':runtime').file("build/${target}Stdlib"),
|
||||
'-runtime', project(':runtime').file("build/${target}/runtime.bc"),
|
||||
'-properties', rootProject.konanPropertiesFile.canonicalPath,
|
||||
project(':runtime').file('src/launcher/kotlin'),
|
||||
*project.globalBuildArgs)
|
||||
jvmArgs(*jvmArgs)
|
||||
args = [*konanArgs, '-produce', 'bitcode',
|
||||
'-output', project(':runtime').file("build/${target}Start"),
|
||||
'-library', project(':runtime').file("build/${target}Stdlib"),
|
||||
project(':runtime').file('src/launcher/kotlin')]
|
||||
|
||||
inputs.dir(project(':runtime').file('src/launcher/kotlin'))
|
||||
outputs.file(project(':runtime').file("build/${target}Start"))
|
||||
|
||||
+57
-39
@@ -44,11 +44,13 @@ internal abstract class PlatformFlags(val distribution: Distribution) {
|
||||
= propertyTargetList("linkerOptimizationFlags")
|
||||
open val linkerKonanFlags
|
||||
= propertyTargetList("linkerKonanFlags")
|
||||
open val linkerDebugFlags
|
||||
= propertyTargetList("linkerDebugFlags")
|
||||
|
||||
open val useCompilerDriverAsLinker: Boolean get() = false // TODO: refactor.
|
||||
|
||||
abstract fun linkCommand(objectFiles: List<ObjectFile>,
|
||||
executable: ExecutableFile, optimize: Boolean): List<String>
|
||||
executable: ExecutableFile, optimize: Boolean, debug: Boolean): List<String>
|
||||
|
||||
open fun linkCommandSuffix(): List<String> = emptyList()
|
||||
|
||||
@@ -71,11 +73,17 @@ internal open class AndroidPlatform(distribution: Distribution)
|
||||
|
||||
override val useCompilerDriverAsLinker: Boolean get() = true
|
||||
|
||||
override fun linkCommand(objectFiles: List<String>, executable: String, optimize: Boolean): List<String> {
|
||||
return mutableListOf<String>(clang, "-o", executable, "-fPIC", "-shared") +
|
||||
objectFiles +
|
||||
(if (optimize) linkerOptimizationFlags else emptyList()) +
|
||||
linkerKonanFlags
|
||||
override fun linkCommand(objectFiles: List<ObjectFile>, executable: ExecutableFile, optimize: Boolean, debug: Boolean): List<String> {
|
||||
return mutableListOf(clang).apply{
|
||||
add("-o")
|
||||
add(executable)
|
||||
add("-fPIC")
|
||||
add("-shared")
|
||||
addAll(objectFiles)
|
||||
if (optimize) addAll(linkerOptimizationFlags)
|
||||
if (!debug) addAll(linkerDebugFlags)
|
||||
addAll(linkerKonanFlags)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,15 +100,19 @@ internal open class MacOSBasedPlatform(distribution: Distribution)
|
||||
propertyTargetString("osVersionMin") + ".0")
|
||||
}
|
||||
|
||||
override fun linkCommand(objectFiles: List<String>, executable: String, optimize: Boolean): List<String> {
|
||||
return mutableListOf(linker, "-demangle") +
|
||||
listOf("-object_path_lto", "temporary.o", "-lto_library", distribution.libLTO) +
|
||||
listOf("-dynamic", "-arch", propertyTargetString("arch")) +
|
||||
osVersionMin +
|
||||
listOf("-syslibroot", distribution.targetSysRoot, "-o", executable) +
|
||||
objectFiles +
|
||||
(if (optimize) linkerOptimizationFlags else emptyList()) +
|
||||
linkerKonanFlags + listOf("-lSystem")
|
||||
override fun linkCommand(objectFiles: List<ObjectFile>, executable: ExecutableFile, optimize: Boolean, debug: Boolean): List<String> {
|
||||
return mutableListOf(linker).apply {
|
||||
add("-demangle")
|
||||
addAll(listOf("-object_path_lto", "temporary.o", "-lto_library", distribution.libLTO))
|
||||
addAll(listOf("-dynamic", "-arch", propertyTargetString("arch")))
|
||||
addAll(osVersionMin)
|
||||
addAll(listOf("-syslibroot", distribution.targetSysRoot, "-o", executable))
|
||||
addAll(objectFiles)
|
||||
if (optimize) addAll(linkerOptimizationFlags)
|
||||
if (!debug) addAll(linkerDebugFlags)
|
||||
addAll(linkerKonanFlags)
|
||||
add("-lSystem")
|
||||
}
|
||||
}
|
||||
|
||||
open fun dsymutilCommand(executable: ExecutableFile): List<String> {
|
||||
@@ -123,26 +135,29 @@ internal open class LinuxBasedPlatform(distribution: Distribution)
|
||||
val specificLibs
|
||||
= propertyTargetList("abiSpecificLibraries").map{it -> "-L${targetSysRoot}/$it"}
|
||||
|
||||
override fun linkCommand(objectFiles: List<String>, executable: String, optimize: Boolean): List<String> {
|
||||
override fun linkCommand(objectFiles: List<ObjectFile>, executable: ExecutableFile, optimize: Boolean, debug: Boolean): List<String> {
|
||||
// TODO: Can we extract more to the konan.properties?
|
||||
return mutableListOf(linker,
|
||||
"--sysroot=${targetSysRoot}",
|
||||
"-export-dynamic", "-z", "relro", "--hash-style=gnu",
|
||||
"--build-id", "--eh-frame-hdr", // "-m", "elf_x86_64",
|
||||
"-dynamic-linker", propertyTargetString("dynamicLinker"),
|
||||
"-o", executable,
|
||||
"${targetSysRoot}/usr/lib64/crt1.o", "${targetSysRoot}/usr/lib64/crti.o", "${libGcc}/crtbegin.o",
|
||||
"-L${llvmLib}", "-L${libGcc}") +
|
||||
specificLibs +
|
||||
listOf("-L${targetSysRoot}/../lib", "-L${targetSysRoot}/lib", "-L${targetSysRoot}/usr/lib") +
|
||||
(if (optimize) listOf("-plugin", "$llvmLib/LLVMgold.so") + pluginOptimizationFlags else emptyList<String>()) +
|
||||
objectFiles +
|
||||
(if (optimize) linkerOptimizationFlags else emptyList<String>()) +
|
||||
linkerKonanFlags +
|
||||
listOf("-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed",
|
||||
"-lc", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed",
|
||||
"${libGcc}/crtend.o",
|
||||
"${targetSysRoot}/usr/lib64/crtn.o")
|
||||
return mutableListOf(linker).apply {
|
||||
addAll(listOf("--sysroot=${targetSysRoot}",
|
||||
"-export-dynamic", "-z", "relro", "--hash-style=gnu",
|
||||
"--build-id", "--eh-frame-hdr", // "-m", "elf_x86_64",
|
||||
"-dynamic-linker", propertyTargetString("dynamicLinker"),
|
||||
"-o", executable,
|
||||
"${targetSysRoot}/usr/lib64/crt1.o",
|
||||
"${targetSysRoot}/usr/lib64/crti.o", "${libGcc}/crtbegin.o",
|
||||
"-L${llvmLib}", "-L${libGcc}"))
|
||||
addAll(specificLibs)
|
||||
addAll(listOf("-L${targetSysRoot}/../lib", "-L${targetSysRoot}/lib", "-L${targetSysRoot}/usr/lib"))
|
||||
if (optimize) addAll(listOf("-plugin", "$llvmLib/LLVMgold.so") + pluginOptimizationFlags)
|
||||
addAll(objectFiles)
|
||||
if (optimize) addAll(linkerOptimizationFlags)
|
||||
if (!debug) addAll(linkerDebugFlags)
|
||||
addAll(linkerKonanFlags)
|
||||
addAll(listOf("-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed",
|
||||
"-lc", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed",
|
||||
"${libGcc}/crtend.o",
|
||||
"${targetSysRoot}/usr/lib64/crtn.o"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,10 +168,13 @@ internal open class MingwPlatform(distribution: Distribution)
|
||||
|
||||
override val useCompilerDriverAsLinker: Boolean get() = true
|
||||
|
||||
override fun linkCommand(objectFiles: List<String>, executable: String, optimize: Boolean): List<String> {
|
||||
return listOf(linker, "-o", executable) +
|
||||
objectFiles +
|
||||
(if (optimize) linkerOptimizationFlags else emptyList())
|
||||
override fun linkCommand(objectFiles: List<ObjectFile>, executable: ExecutableFile, optimize: Boolean, debug: Boolean): List<String> {
|
||||
return mutableListOf(linker).apply {
|
||||
addAll(listOf("-o", executable))
|
||||
addAll(objectFiles)
|
||||
if (optimize) addAll(linkerOptimizationFlags)
|
||||
if (!debug) addAll(linkerDebugFlags)
|
||||
}
|
||||
}
|
||||
|
||||
override fun linkCommandSuffix() = linkerKonanFlags
|
||||
@@ -234,7 +252,7 @@ internal class LinkStage(val context: Context) {
|
||||
|
||||
fun link(objectFiles: List<ObjectFile>): ExecutableFile {
|
||||
val executable = config.get(KonanConfigKeys.OUTPUT_FILE)!!
|
||||
val linkCommand = platform.linkCommand(objectFiles, executable, optimize) +
|
||||
val linkCommand = platform.linkCommand(objectFiles, executable, optimize, config.getBoolean(KonanConfigKeys.DEBUG)) +
|
||||
distribution.libffi +
|
||||
asLinkerArgs(config.getNotNull(KonanConfigKeys.LINKER_ARGS)) +
|
||||
entryPointSelector +
|
||||
|
||||
@@ -30,6 +30,7 @@ llvmLtoOptFlags.osx = -O3 -function-sections
|
||||
llvmLtoNooptFlags.osx = -O1
|
||||
linkerKonanFlags.osx = -lc++
|
||||
linkerOptimizationFlags.osx = -dead_strip
|
||||
linkerDebugFlags.osx = -S
|
||||
osVersionMinFlagLd.osx = -macosx_version_min
|
||||
osVersionMinFlagClang.osx = -mmacosx-version-min
|
||||
osVersionMin.osx = 10.11
|
||||
@@ -51,6 +52,7 @@ targetSysRoot.ios = target-sysroot-2-darwin-ios
|
||||
libffiDir.ios = libffi-3.2.1-2-darwin-ios
|
||||
llvmLtoFlags.ios = -exported-symbol=_Konan_main
|
||||
llvmLtoOptFlags.ios = -O3 -function-sections
|
||||
linkerDebugFlags.ios = -S
|
||||
llvmLtoNooptFlags.ios = -O1
|
||||
linkerKonanFlags.ios = -lc++
|
||||
linkerOptimizationFlags.ios = -dead_strip
|
||||
@@ -74,6 +76,7 @@ llvmLtoOptFlags.ios_sim = -O3 -function-sections
|
||||
llvmLtoNooptFlags.ios_sim = -O1
|
||||
linkerKonanFlags.ios_sim = -lc++
|
||||
linkerOptimizationFlags.ios_sim = -dead_strip
|
||||
linkerDebugFlags.ios_sim = -S
|
||||
osVersionMinFlagLd.ios_sim = -ios_simulator_version_min
|
||||
osVersionMinFlagClang.ios_sim = -mios-simulator-version-min
|
||||
osVersionMin.ios_sim = 8.0
|
||||
@@ -94,6 +97,7 @@ llvmLtoNooptFlags.linux = -O1
|
||||
llvmLlcFlags.linux = -march=x86-64
|
||||
linkerKonanFlags.linux = -Bstatic -lstdc++ -Bdynamic -ldl -lm -lpthread
|
||||
linkerOptimizationFlags.linux = --gc-sections
|
||||
linkerDebugFlags.linux = -S
|
||||
pluginOptimizationFlags.linux = -plugin-opt=mcpu=x86-64 -plugin-opt=O3
|
||||
dynamicLinker.linux = /lib64/ld-linux-x86-64.so.2
|
||||
entrySelector.linux = --defsym main=Konan_main
|
||||
@@ -151,6 +155,7 @@ quadruple.android_arm32 = arm-linux-androideabi
|
||||
entrySelector.android_arm32 = -Wl,--defsym -Wl,main=Konan_main
|
||||
llvmLtoFlags.android_arm32 = -exported-symbol=Konan_main -emulated-tls -relocation-model=pic
|
||||
llvmLtoOptFlags.android_arm32 = -O3 -function-sections
|
||||
linkerDebugFlags.android_arm32 = -S
|
||||
llvmLtoNooptFlags.android_arm32 = -O1
|
||||
targetSysRoot.android_arm32 = target-sysroot-21-android_arm32
|
||||
libffiDir.android_arm32 = libffi-3.2.1-2-android_arm32
|
||||
@@ -177,6 +182,7 @@ llvmLtoFlags.android_arm64 = -exported-symbol=Konan_main -emulated-tls -relocati
|
||||
targetSysRoot.android_arm64 = target-sysroot-21-android_arm64
|
||||
libffiDir.android_arm64 = libffi-3.2.1-2-android_arm64
|
||||
linkerKonanFlags.android_arm64 = -lm -latomic -lstdc++ -landroid
|
||||
linkerDebugFlags.android_arm64 = -S
|
||||
|
||||
# Windows x86-64, based on mingw-w64.
|
||||
llvmVersion.mingw = 3.9.1
|
||||
@@ -189,6 +195,7 @@ libffiDir.mingw = libffi-3.2.1-mingw-w64-x86-64
|
||||
llvmLtoFlags.mingw = -exported-symbol=Konan_main
|
||||
llvmLtoOptFlags.mingw = -O3 -function-sections
|
||||
llvmLtoNooptFlags.mingw = -O1
|
||||
linkerDebugFlags.mingw = -Wl,-S
|
||||
linkerKonanFlags.mingw = -static-libgcc -static-libstdc++ \
|
||||
-Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive,-Bdynamic
|
||||
linkerOptimizationFlags.mingw = -Wl,--gc-sections
|
||||
|
||||
+3
-3
@@ -344,9 +344,9 @@ task crossDistRuntime(type: Copy) {
|
||||
|
||||
targetList.each { target ->
|
||||
task("${target}CrossDistRuntime", type: Copy) {
|
||||
dependsOn ":runtime:${target}Runtime"
|
||||
dependsOn ":backend.native:${target}Stdlib"
|
||||
dependsOn ":backend.native:${target}Start"
|
||||
dependsOn ":runtime:${target}Runtime"
|
||||
dependsOn ":backend.native:${target}Stdlib"
|
||||
dependsOn ":backend.native:${target}Start"
|
||||
|
||||
destinationDir file('dist')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user