Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
skiko
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuqiang
skiko
Commits
232a8c47
Unverified
Commit
232a8c47
authored
Dec 29, 2021
by
Nikolay Igotti
Committed by
GitHub
Dec 29, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simplification refactoring of build (#443)
parent
1641d30c
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
146 additions
and
134 deletions
+146
-134
build.gradle.kts
skiko/build.gradle.kts
+123
-108
CompileSkikoCppTask.kt
skiko/buildSrc/src/main/kotlin/CompileSkikoCppTask.kt
+22
-6
properties.kt
skiko/buildSrc/src/main/kotlin/properties.kt
+1
-20
No files found.
skiko/build.gradle.kts
View file @
232a8c47
...
@@ -60,9 +60,8 @@ if (supportWasm) {
...
@@ -60,9 +60,8 @@ if (supportWasm) {
includeHeadersNonRecursive
(
skiaHeadersDirs
(
skiaWasmDir
.
get
()))
includeHeadersNonRecursive
(
skiaHeadersDirs
(
skiaWasmDir
.
get
()))
flags
.
set
(
listOf
(
flags
.
set
(
listOf
(
*
skiaPreprocessorFlags
(),
*
skiaPreprocessorFlags
(
OS
.
Wasm
),
*
buildType
.
clangFlags
,
*
buildType
.
clangFlags
,
"-DSKIKO_WASM"
,
"-fno-rtti"
,
"-fno-rtti"
,
"-fno-exceptions"
"-fno-exceptions"
))
))
...
@@ -159,19 +158,13 @@ fun compileNativeBridgesTask(os: OS, arch: Arch): TaskProvider<CompileSkikoCppTa
...
@@ -159,19 +158,13 @@ fun compileNativeBridgesTask(os: OS, arch: Arch): TaskProvider<CompileSkikoCppTa
*
iosArchFlags
,
*
iosArchFlags
,
*
buildType
.
clangFlags
,
*
buildType
.
clangFlags
,
"-stdlib=libc++"
,
"-stdlib=libc++"
,
"-DSK_SHAPER_CORETEXT_AVAILABLE"
,
*
skiaPreprocessorFlags
(
OS
.
IOS
),
"-DSK_BUILD_FOR_IOS"
,
"-DSK_METAL"
,
*
skiaPreprocessorFlags
(),
))
))
}
}
OS
.
MacOS
->
{
OS
.
MacOS
->
{
flags
.
set
(
listOf
(
flags
.
set
(
listOf
(
*
buildType
.
clangFlags
,
*
buildType
.
clangFlags
,
"-DSK_SHAPER_CORETEXT_AVAILABLE"
,
*
skiaPreprocessorFlags
(
OS
.
MacOS
)
"-DSK_BUILD_FOR_MAC"
,
"-DSK_METAL"
,
*
skiaPreprocessorFlags
()
))
))
}
}
OS
.
Linux
->
{
OS
.
Linux
->
{
...
@@ -181,9 +174,8 @@ fun compileNativeBridgesTask(os: OS, arch: Arch): TaskProvider<CompileSkikoCppTa
...
@@ -181,9 +174,8 @@ fun compileNativeBridgesTask(os: OS, arch: Arch): TaskProvider<CompileSkikoCppTa
"-fno-exceptions"
,
"-fno-exceptions"
,
"-fvisibility=hidden"
,
"-fvisibility=hidden"
,
"-fvisibility-inlines-hidden"
,
"-fvisibility-inlines-hidden"
,
"-DSK_BUILD_FOR_LINUX"
,
"-D_GLIBCXX_USE_CXX11_ABI=0"
,
"-D_GLIBCXX_USE_CXX11_ABI=0"
,
*
skiaPreprocessorFlags
()
*
skiaPreprocessorFlags
(
OS
.
Linux
)
))
))
}
}
else
->
throw
GradleException
(
"$os not yet supported"
)
else
->
throw
GradleException
(
"$os not yet supported"
)
...
@@ -218,7 +210,7 @@ kotlin {
...
@@ -218,7 +210,7 @@ kotlin {
compilations
.
all
{
compilations
.
all
{
kotlinOptions
.
jvmTarget
=
"11"
kotlinOptions
.
jvmTarget
=
"11"
}
}
generateVersion
(
targetOs
,
targe
tArch
)
generateVersion
(
hostOs
,
hos
tArch
)
}
}
if
(
supportAndroid
)
{
if
(
supportAndroid
)
{
...
@@ -227,8 +219,8 @@ kotlin {
...
@@ -227,8 +219,8 @@ kotlin {
compilations
.
all
{
compilations
.
all
{
kotlinOptions
.
jvmTarget
=
"11"
kotlinOptions
.
jvmTarget
=
"11"
}
}
//
todo: what is the actual target arch? what does "jvm(android)" target even mean?
//
TODO: seems incorrect.
generateVersion
(
OS
.
Android
,
targetArch
)
generateVersion
(
OS
.
Android
,
Arch
.
Arm64
)
}
}
}
}
...
@@ -467,6 +459,7 @@ fun configureNativeTarget(os: OS, arch: Arch, target: KotlinNativeTarget) {
...
@@ -467,6 +459,7 @@ fun configureNativeTarget(os: OS, arch: Arch, target: KotlinNativeTarget) {
val
crossCompileTask
=
compileNativeBridgesTask
(
os
,
arch
)
val
crossCompileTask
=
compileNativeBridgesTask
(
os
,
arch
)
// TODO: move to LinkSkikoTask.
val
linkTask
=
project
.
registerSkikoTask
<
Exec
>(
"linkNativeBridges"
,
os
,
arch
)
{
val
linkTask
=
project
.
registerSkikoTask
<
Exec
>(
"linkNativeBridges"
,
os
,
arch
)
{
dependsOn
(
crossCompileTask
)
dependsOn
(
crossCompileTask
)
val
objectFilesDir
=
crossCompileTask
.
map
{
it
.
outDir
.
get
()
}
val
objectFilesDir
=
crossCompileTask
.
map
{
it
.
outDir
.
get
()
}
...
@@ -525,8 +518,8 @@ fun skiaHeadersDirs(skiaDir: File): List<File> =
...
@@ -525,8 +518,8 @@ fun skiaHeadersDirs(skiaDir: File): List<File> =
fun
includeHeadersFlags
(
headersDirs
:
List
<
File
>)
=
fun
includeHeadersFlags
(
headersDirs
:
List
<
File
>)
=
headersDirs
.
map
{
"-I${it.absolutePath}"
}.
toTypedArray
()
headersDirs
.
map
{
"-I${it.absolutePath}"
}.
toTypedArray
()
fun
skiaPreprocessorFlags
():
Array
<
String
>
{
fun
skiaPreprocessorFlags
(
os
:
OS
):
Array
<
String
>
{
return
listOf
(
val
base
=
listOf
(
"-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1"
,
"-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1"
,
"-DSK_FORCE_DISTANCE_FIELD_TEXT=0"
,
"-DSK_FORCE_DISTANCE_FIELD_TEXT=0"
,
"-DSK_GAMMA_APPLY_TO_A8"
,
"-DSK_GAMMA_APPLY_TO_A8"
,
...
@@ -541,7 +534,42 @@ fun skiaPreprocessorFlags(): Array<String> {
...
@@ -541,7 +534,42 @@ fun skiaPreprocessorFlags(): Array<String> {
"-DU_DISABLE_RENAMING"
,
"-DU_DISABLE_RENAMING"
,
"-DSK_USING_THIRD_PARTY_ICU"
,
"-DSK_USING_THIRD_PARTY_ICU"
,
*
buildType
.
flags
*
buildType
.
flags
).
toTypedArray
()
)
val
perOs
=
when
(
os
)
{
OS
.
MacOS
->
listOf
(
"-DSK_SHAPER_CORETEXT_AVAILABLE"
,
"-DSK_BUILD_FOR_MAC"
,
"-DSK_METAL"
)
OS
.
IOS
->
listOf
(
"-DSK_BUILD_FOR_IOS"
,
"-DSK_SHAPER_CORETEXT_AVAILABLE"
,
"-DSK_METAL"
)
OS
.
Windows
->
listOf
(
"-DSK_BUILD_FOR_WIN"
,
"-D_CRT_SECURE_NO_WARNINGS"
,
"-D_HAS_EXCEPTIONS=0"
,
"-DWIN32_LEAN_AND_MEAN"
,
"-DNOMINMAX"
,
"-DSK_GAMMA_APPLY_TO_A8"
,
"-DSK_DIRECT3D"
)
OS
.
Linux
->
listOf
(
"-DSK_BUILD_FOR_LINUX"
,
"-D_GLIBCXX_USE_CXX11_ABI=0"
)
OS
.
Wasm
->
listOf
(
"-DSKIKO_WASM"
)
OS
.
Android
->
listOf
(
"-DSK_BUILD_FOR_ANDROID"
)
else
->
TODO
(
"unsupported $os"
)
}
return
(
base
+
perOs
).
toTypedArray
()
}
}
fun
skiaStaticLibraries
(
skiaDir
:
String
,
targetString
:
String
):
List
<
String
>
{
fun
skiaStaticLibraries
(
skiaDir
:
String
,
targetString
:
String
):
List
<
String
>
{
...
@@ -572,30 +600,66 @@ fun skiaStaticLibraries(skiaDir: String, targetString: String): List<String> {
...
@@ -572,30 +600,66 @@ fun skiaStaticLibraries(skiaDir: String, targetString: String): List<String> {
}
}
}
}
val
skiaJvmBindingsDir
:
Provider
<
File
>
=
registerOrGetSkiaDirProvider
(
targetOs
,
targetArch
)
val
allJvmRuntimeJars
=
mutableMapOf
<
Pair
<
OS
,
Arch
>,
TaskProvider
<
Jar
>>()
val
compileJvmBindings
=
createCompileJvmBindingsTask
(
targetOs
,
targetArch
,
skiaJvmBindingsDir
)
val
linkJvmBindings
=
createLinkJvmBindings
(
targetOs
,
targetArch
,
skiaJvmBindingsDir
,
compileJvmBindings
)
val
maybeSign
=
maybeSignTask
(
targetOs
,
targetArch
,
linkJvmBindings
)
val
createChecksums
=
createChecksumsTask
(
targetOs
,
targetArch
,
maybeSign
,
skiaJvmBindingsDir
)
val
skikoJvmRuntimeJar
=
skikoJvmRuntimeJarTask
(
targetOs
,
targetArch
,
maybeSign
,
createChecksums
,
skiaJvmBindingsDir
)
val
skikoRuntimeDirForTests
=
skikoRuntimeDirForTestsTask
(
targetOs
,
targetArch
,
skikoJvmRuntimeJar
)
val
allJvmRuntimeJars
=
mutableMapOf
((
targetOs
to
targetArch
)
to
skikoJvmRuntimeJar
)
val
skikoJvmRuntimeJar
=
createSkikoJvmJarTask
(
hostOs
,
hostArch
)
val
skikoRuntimeDirForTests
=
skikoRuntimeDirForTestsTask
(
hostOs
,
hostArch
,
skikoJvmRuntimeJar
)
if
(
supportAndroid
)
{
if
(
supportAndroid
)
{
val
os
=
OS
.
Android
val
os
=
OS
.
Android
for
(
arch
in
arrayOf
(
Arch
.
X64
,
Arch
.
Arm64
))
{
for
(
arch
in
arrayOf
(
Arch
.
X64
,
Arch
.
Arm64
))
{
val
skiaAndroidBindingsDir
=
registerOrGetSkiaDirProvider
(
os
,
arch
)
createSkikoJvmJarTask
(
os
,
arch
)
val
compileAndroidBindings
=
createCompileJvmBindingsTask
(
os
,
arch
,
skiaAndroidBindingsDir
)
val
linkAndroidBindings
=
createLinkJvmBindings
(
OS
.
Android
,
arch
,
skiaAndroidBindingsDir
,
compileAndroidBindings
)
val
maybeSignAndroid
=
maybeSignTask
(
os
,
arch
,
linkAndroidBindings
)
val
createChecksumsAndroid
=
createChecksumsTask
(
os
,
arch
,
maybeSignAndroid
,
skiaAndroidBindingsDir
)
val
skikoJvmRuntimeJarAndroid
=
skikoJvmRuntimeJarTask
(
os
,
arch
,
maybeSignAndroid
,
createChecksumsAndroid
,
skiaAndroidBindingsDir
)
allJvmRuntimeJars
[
os
to
arch
]
=
skikoJvmRuntimeJarAndroid
}
}
}
}
fun
createSkikoJvmJarTask
(
os
:
OS
,
arch
:
Arch
):
TaskProvider
<
Jar
>
{
val
skiaBindingsDir
=
registerOrGetSkiaDirProvider
(
os
,
arch
)
val
compileBindings
=
createCompileJvmBindingsTask
(
os
,
arch
,
skiaBindingsDir
)
val
objcCompile
=
if
(
os
==
OS
.
MacOS
)
createObjcCompileTask
(
os
,
arch
,
skiaBindingsDir
)
else
null
val
linkBindings
=
createLinkJvmBindings
(
os
,
arch
,
skiaBindingsDir
,
compileBindings
,
objcCompile
)
val
maybeSign
=
maybeSignTask
(
os
,
arch
,
linkBindings
)
val
createChecksums
=
createChecksumsTask
(
os
,
arch
,
maybeSign
,
skiaBindingsDir
)
val
skikoJvmRuntimeJar
=
skikoJvmRuntimeJarTask
(
os
,
arch
,
maybeSign
,
createChecksums
,
skiaBindingsDir
)
allJvmRuntimeJars
[
os
to
arch
]
=
skikoJvmRuntimeJar
return
skikoJvmRuntimeJar
}
fun
createObjcCompileTask
(
os
:
OS
,
arch
:
Arch
,
skiaJvmBindingsDir
:
Provider
<
File
>
)
=
registerSkikoTask
<
CompileSkikoObjCTask
>(
"objcCompile"
,
os
,
arch
)
{
dependsOn
(
skiaJvmBindingsDir
)
val
srcDirs
=
projectDirs
(
"src/jvmMain/objectiveC/${os.id}"
)
sourceRoots
.
set
(
srcDirs
)
val
jdkHome
=
File
(
System
.
getProperty
(
"java.home"
)
?:
error
(
"'java.home' is null"
))
includeHeadersNonRecursive
(
jdkHome
.
resolve
(
"include"
))
includeHeadersNonRecursive
(
jdkHome
.
resolve
(
"include/darwin"
))
includeHeadersNonRecursive
(
skiaHeadersDirs
(
skiaJvmBindingsDir
.
get
()))
includeHeadersNonRecursive
(
projectDir
.
resolve
(
"src/jvmMain/cpp/include"
))
includeHeadersNonRecursive
(
projectDir
.
resolve
(
"src/commonMain/cpp/common/include"
))
compiler
.
set
(
"clang"
)
buildVariant
.
set
(
buildType
)
buildTargetOS
.
set
(
os
)
buildTargetArch
.
set
(
arch
)
flags
.
set
(
listOf
(
"-fobjc-arc"
,
"-arch"
,
if
(
arch
==
Arch
.
Arm64
)
"arm64"
else
"x86_64"
,
*
os
.
clangFlags
,
*
buildType
.
clangFlags
,
*
skiaPreprocessorFlags
(
os
),
"-fPIC"
)
)
}
fun
androidHome
()
=
when
(
hostOs
)
{
fun
androidHome
()
=
when
(
hostOs
)
{
OS
.
MacOS
->
File
(
"${System.getProperty("
user
.
home
")}/Library/Android/sdk"
)
OS
.
MacOS
->
File
(
"${System.getProperty("
user
.
home
")}/Library/Android/sdk"
)
OS
.
Linux
->
File
(
"${System.getProperty("
user
.
home
")}/.android"
)
OS
.
Linux
->
File
(
"${System.getProperty("
user
.
home
")}/.android"
)
...
@@ -668,10 +732,7 @@ fun createCompileJvmBindingsTask(
...
@@ -668,10 +732,7 @@ fun createCompileJvmBindingsTask(
"-fPIC"
,
"-fPIC"
,
"-stdlib=libc++"
,
"-stdlib=libc++"
,
"-fvisibility=hidden"
,
"-fvisibility=hidden"
,
"-fvisibility-inlines-hidden"
,
"-fvisibility-inlines-hidden"
"-DSK_SHAPER_CORETEXT_AVAILABLE"
,
"-DSK_BUILD_FOR_MAC"
,
"-DSK_METAL"
,
)
)
}
}
OS
.
Linux
->
{
OS
.
Linux
->
{
...
@@ -682,9 +743,7 @@ fun createCompileJvmBindingsTask(
...
@@ -682,9 +743,7 @@ fun createCompileJvmBindingsTask(
"-fno-rtti"
,
"-fno-rtti"
,
"-fno-exceptions"
,
"-fno-exceptions"
,
"-fvisibility=hidden"
,
"-fvisibility=hidden"
,
"-fvisibility-inlines-hidden"
,
"-fvisibility-inlines-hidden"
"-DSK_BUILD_FOR_LINUX"
,
"-D_GLIBCXX_USE_CXX11_ABI=0"
,
)
)
}
}
OS
.
Windows
->
{
OS
.
Windows
->
{
...
@@ -694,13 +753,6 @@ fun createCompileJvmBindingsTask(
...
@@ -694,13 +753,6 @@ fun createCompileJvmBindingsTask(
osFlags
=
arrayOf
(
osFlags
=
arrayOf
(
"/nologo"
,
"/nologo"
,
*
buildType
.
msvcCompilerFlags
,
*
buildType
.
msvcCompilerFlags
,
"-DSK_BUILD_FOR_WIN"
,
"-D_CRT_SECURE_NO_WARNINGS"
,
"-D_HAS_EXCEPTIONS=0"
,
"-DWIN32_LEAN_AND_MEAN"
,
"-DNOMINMAX"
,
"-DSK_GAMMA_APPLY_TO_A8"
,
"-DSK_DIRECT3D"
,
"/utf-8"
,
"/utf-8"
,
"/GR-"
,
// no-RTTI.
"/GR-"
,
// no-RTTI.
// LATER. Ange rendering arguments:
// LATER. Ange rendering arguments:
...
@@ -716,8 +768,7 @@ fun createCompileJvmBindingsTask(
...
@@ -716,8 +768,7 @@ fun createCompileJvmBindingsTask(
"-fno-rtti"
,
"-fno-rtti"
,
"-fno-exceptions"
,
"-fno-exceptions"
,
"-fvisibility=hidden"
,
"-fvisibility=hidden"
,
"-fPIC"
,
"-fPIC"
"-DSK_BUILD_FOR_ANDROID"
)
)
}
}
OS
.
Wasm
,
OS
.
IOS
->
error
(
"Should not reach here"
)
OS
.
Wasm
,
OS
.
IOS
->
error
(
"Should not reach here"
)
...
@@ -725,7 +776,7 @@ fun createCompileJvmBindingsTask(
...
@@ -725,7 +776,7 @@ fun createCompileJvmBindingsTask(
flags
.
set
(
flags
.
set
(
listOf
(
listOf
(
*
skiaPreprocessorFlags
(),
*
skiaPreprocessorFlags
(
targetOs
),
*
osFlags
*
osFlags
)
)
)
)
...
@@ -735,7 +786,8 @@ fun createLinkJvmBindings(
...
@@ -735,7 +786,8 @@ fun createLinkJvmBindings(
targetOs
:
OS
,
targetOs
:
OS
,
targetArch
:
Arch
,
targetArch
:
Arch
,
skiaJvmBindingsDir
:
Provider
<
File
>,
skiaJvmBindingsDir
:
Provider
<
File
>,
compileTask
:
TaskProvider
<
CompileSkikoCppTask
>
compileTask
:
TaskProvider
<
CompileSkikoCppTask
>,
objcCompileTask
:
TaskProvider
<
CompileSkikoObjCTask
>?
)
=
project
.
registerSkikoTask
<
LinkSkikoTask
>(
"linkJvmBindings"
,
targetOs
,
targetArch
)
{
)
=
project
.
registerSkikoTask
<
LinkSkikoTask
>(
"linkJvmBindings"
,
targetOs
,
targetArch
)
{
val
target
=
targetId
(
targetOs
,
targetArch
)
val
target
=
targetId
(
targetOs
,
targetArch
)
val
skiaBinSubdir
=
"out/${buildType.id}-$target"
val
skiaBinSubdir
=
"out/${buildType.id}-$target"
...
@@ -750,7 +802,6 @@ fun createLinkJvmBindings(
...
@@ -750,7 +802,6 @@ fun createLinkJvmBindings(
objectFiles
=
fileTree
(
compileTask
.
map
{
it
.
outDir
.
get
()
})
{
objectFiles
=
fileTree
(
compileTask
.
map
{
it
.
outDir
.
get
()
})
{
include
(
"**/*.o"
)
include
(
"**/*.o"
)
}
}
val
libNamePrefix
=
if
(
targetOs
.
isWindows
)
"skiko"
else
"libskiko"
val
libNamePrefix
=
if
(
targetOs
.
isWindows
)
"skiko"
else
"libskiko"
libOutputFileName
.
set
(
"$libNamePrefix-${targetOs.id}-${targetArch.id}${targetOs.dynamicLibExt}"
)
libOutputFileName
.
set
(
"$libNamePrefix-${targetOs.id}-${targetArch.id}${targetOs.dynamicLibExt}"
)
buildTargetOS
.
set
(
targetOs
)
buildTargetOS
.
set
(
targetOs
)
...
@@ -760,13 +811,13 @@ fun createLinkJvmBindings(
...
@@ -760,13 +811,13 @@ fun createLinkJvmBindings(
when
(
targetOs
)
{
when
(
targetOs
)
{
OS
.
MacOS
->
{
OS
.
MacOS
->
{
dependsOn
(
"objcCompile"
)
dependsOn
(
objcCompileTask
!!
)
objectFiles
+=
fileTree
(
"$buildDir/objc/$target"
)
{
objectFiles
+=
fileTree
(
objcCompileTask
.
map
{
it
.
outDir
.
get
()
}
)
{
include
(
"**/*.o"
)
include
(
"**/*.o"
)
}
}
osFlags
=
arrayOf
(
osFlags
=
arrayOf
(
*
targetOs
.
clangFlags
,
*
targetOs
.
clangFlags
,
"-arch"
,
if
(
targetArch
==
Arch
.
Arm64
)
"arm64"
else
"x86_64"
,
"-shared"
,
"-shared"
,
"-dead_strip"
,
"-dead_strip"
,
"-lobjc"
,
"-lobjc"
,
...
@@ -831,41 +882,6 @@ fun createLinkJvmBindings(
...
@@ -831,41 +882,6 @@ fun createLinkJvmBindings(
flags
.
set
(
listOf
(*
osFlags
))
flags
.
set
(
listOf
(*
osFlags
))
}
}
if
(
hostOs
==
OS
.
MacOS
)
{
// Very hacky way to compile Objective-C sources and add the
// resulting object files into the final library.
// TODO: rewrite using SkikoCompileTask
project
.
tasks
.
register
<
Exec
>(
"objcCompile"
)
{
val
target
=
targetId
(
targetOs
,
targetArch
)
val
inputDir
=
"$projectDir/src/jvmMain/objectiveC/${targetOs.id}"
val
outDir
=
"$buildDir/objc/$target"
val
names
=
File
(
inputDir
).
listFiles
()
!!
.
map
{
it
.
name
.
removeSuffix
(
".mm"
)
}
val
srcs
=
names
.
map
{
"$inputDir/$it.mm"
}.
toTypedArray
()
val
outs
=
names
.
map
{
"$outDir/$it.o"
}.
toTypedArray
()
workingDir
=
File
(
outDir
)
val
skiaDir
=
skiaJvmBindingsDir
.
get
().
absolutePath
dependsOn
(
skiaJvmBindingsDir
)
commandLine
=
listOf
(
"clang"
,
*
targetOs
.
clangFlags
,
*
buildType
.
clangFlags
,
"-I$jdkHome/include"
,
"-I$jdkHome/include/darwin"
,
"-I$skiaDir"
,
"-I$skiaDir/include"
,
"-I$skiaDir/include/gpu"
,
"-fobjc-arc"
,
"-DSK_METAL"
,
"-c"
,
*
srcs
)
file
(
outDir
).
mkdirs
()
inputs
.
files
(
srcs
)
outputs
.
files
(
outs
)
}
}
fun
KotlinTarget
.
generateVersion
(
fun
KotlinTarget
.
generateVersion
(
targetOs
:
OS
,
targetOs
:
OS
,
targetArch
:
Arch
targetArch
:
Arch
...
@@ -948,13 +964,14 @@ fun createChecksumsTask(
...
@@ -948,13 +964,14 @@ fun createChecksumsTask(
maybeSign
:
Provider
<
SealAndSignSharedLibraryTask
>,
maybeSign
:
Provider
<
SealAndSignSharedLibraryTask
>,
bindingsDir
:
Provider
<
File
>
bindingsDir
:
Provider
<
File
>
)
=
project
.
registerSkikoTask
<
Checksum
>(
"createChecksums"
,
targetOs
,
targetArch
)
{
)
=
project
.
registerSkikoTask
<
Checksum
>(
"createChecksums"
,
targetOs
,
targetArch
)
{
val
skiaBinSubdir
=
"out/${buildType.id}-${targetOs.id}-${targetArch.id}"
val
skiaBinSubdir
=
"out/${buildType.id}-${targetOs.id}-${targetArch.id}"
dependsOn
(
maybeSign
)
dependsOn
(
maybeSign
)
files
=
project
.
files
(
maybeSign
.
flatMap
{
it
.
outputFiles
})
+
files
=
project
.
files
(
maybeSign
.
flatMap
{
it
.
outputFiles
})
+
if
(
targetOs
.
isWindows
)
files
(
bindingsDir
.
map
{
it
.
resolve
(
"${skiaBinSubdir}/icudtl.dat"
)
})
else
files
()
if
(
targetOs
.
isWindows
)
files
(
bindingsDir
.
map
{
it
.
resolve
(
"${skiaBinSubdir}/icudtl.dat"
)
})
else
files
()
algorithm
=
Checksum
.
Algorithm
.
SHA256
algorithm
=
Checksum
.
Algorithm
.
SHA256
outputDir
=
file
(
"$buildDir/checksums
"
)
outputDir
=
file
(
"$buildDir/checksums-${targetOs.id}-${targetArch.id}
"
)
}
}
fun
skikoJvmRuntimeJarTask
(
fun
skikoJvmRuntimeJarTask
(
targetOs
:
OS
,
targetOs
:
OS
,
...
@@ -1164,15 +1181,6 @@ afterEvaluate {
...
@@ -1164,15 +1181,6 @@ afterEvaluate {
}
}
}
}
// Kotlin/JS has a bug preventing compilation on non-x86 Linux machines,
// see https://youtrack.jetbrains.com/issue/KT-48631
// It always downloads and uses x86 version, so on those architectures
if
(
hostOs
==
OS
.
Linux
&&
hostArch
!=
Arch
.
X64
)
{
rootProject
.
plugins
.
withType
(
org
.
jetbrains
.
kotlin
.
gradle
.
targets
.
js
.
nodejs
.
NodeJsRootPlugin
::
class
.
java
)
{
rootProject
.
the
<
org
.
jetbrains
.
kotlin
.
gradle
.
targets
.
js
.
nodejs
.
NodeJsRootExtension
>().
download
=
false
}
}
/**
/**
* Do not call inside tasks.register or tasks.call callback
* Do not call inside tasks.register or tasks.call callback
* (tasks' registration during other task's registration is prohibited)
* (tasks' registration during other task's registration is prohibited)
...
@@ -1216,5 +1224,12 @@ tasks.withType<AbstractTestTask> {
...
@@ -1216,5 +1224,12 @@ tasks.withType<AbstractTestTask> {
}
}
rootProject
.
plugins
.
withType
<
org
.
jetbrains
.
kotlin
.
gradle
.
targets
.
js
.
nodejs
.
NodeJsRootPlugin
>
{
rootProject
.
plugins
.
withType
<
org
.
jetbrains
.
kotlin
.
gradle
.
targets
.
js
.
nodejs
.
NodeJsRootPlugin
>
{
rootProject
.
the
<
org
.
jetbrains
.
kotlin
.
gradle
.
targets
.
js
.
nodejs
.
NodeJsRootExtension
>().
nodeVersion
=
"16.0.0"
val
nodeExtension
=
rootProject
.
the
<
org
.
jetbrains
.
kotlin
.
gradle
.
targets
.
js
.
nodejs
.
NodeJsRootExtension
>()
nodeExtension
.
nodeVersion
=
"16.0.0"
// Kotlin/JS has a bug preventing compilation on non-x86 Linux machines,
// see https://youtrack.jetbrains.com/issue/KT-48631
// It always downloads and uses x86 version, so on those architectures
if
(
hostOs
==
OS
.
Linux
&&
hostArch
!=
Arch
.
X64
)
{
nodeExtension
.
download
=
false
}
}
}
skiko/buildSrc/src/main/kotlin/CompileSkikoCppTask.kt
View file @
232a8c47
...
@@ -15,7 +15,13 @@ import java.util.*
...
@@ -15,7 +15,13 @@ import java.util.*
import
java.util.concurrent.Callable
import
java.util.concurrent.Callable
import
kotlin.collections.HashSet
import
kotlin.collections.HashSet
abstract
class
CompileSkikoCppTask
:
AbstractSkikoNativeToolTask
()
{
abstract
class
CompileSkikoCppTask
()
:
AbstractSkikoNativeToolTask
()
{
@get
:
Internal
open
val
srcExtensions
:
Array
<
String
>
=
arrayOf
(
"cc"
)
@get
:
Internal
open
val
headerExtensions
:
Array
<
String
>
=
arrayOf
(
"h"
,
"hh"
)
@get
:
Input
@get
:
Input
abstract
val
flags
:
ListProperty
<
String
>
abstract
val
flags
:
ListProperty
<
String
>
...
@@ -34,7 +40,9 @@ abstract class CompileSkikoCppTask : AbstractSkikoNativeToolTask() {
...
@@ -34,7 +40,9 @@ abstract class CompileSkikoCppTask : AbstractSkikoNativeToolTask() {
project
.
files
(
Callable
{
project
.
files
(
Callable
{
val
sources
=
project
.
objects
.
fileCollection
()
val
sources
=
project
.
objects
.
fileCollection
()
for
(
sourceRoot
in
sourceRoots
.
get
())
{
for
(
sourceRoot
in
sourceRoots
.
get
())
{
sources
.
from
(
project
.
fileTree
(
sourceRoot
)
{
include
(
"**/*.cc"
)
})
for
(
srcExtension
in
srcExtensions
)
{
sources
.
from
(
project
.
fileTree
(
sourceRoot
)
{
include
(
"**/*.$srcExtension"
)
})
}
}
}
sources
sources
})
})
...
@@ -53,15 +61,17 @@ abstract class CompileSkikoCppTask : AbstractSkikoNativeToolTask() {
...
@@ -53,15 +61,17 @@ abstract class CompileSkikoCppTask : AbstractSkikoNativeToolTask() {
for
(
dir
in
headersDirs
)
{
for
(
dir
in
headersDirs
)
{
headers
.
from
(
project
.
fileTree
(
dir
)
{
headers
.
from
(
project
.
fileTree
(
dir
)
{
// headers from include dirs should be included non-recursively
// headers from include dirs should be included non-recursively
include
(
"*.h"
)
for
(
headerExtension
in
headerExtensions
)
{
include
(
"*.hh"
)
include
(
"*.$headerExtension"
)
}
})
})
}
}
for
(
sourceRoot
in
sourceRoots
.
get
())
{
for
(
sourceRoot
in
sourceRoots
.
get
())
{
headers
.
from
(
project
.
fileTree
(
sourceRoot
)
{
headers
.
from
(
project
.
fileTree
(
sourceRoot
)
{
// headers from source roots should be included recursively
// headers from source roots should be included recursively
include
(
"**/*.h"
)
for
(
headerExtension
in
headerExtensions
)
{
include
(
"**/*.hh"
)
include
(
"*.$headerExtension"
)
}
})
})
}
}
headers
headers
...
@@ -256,3 +266,9 @@ abstract class CompileSkikoCppTask : AbstractSkikoNativeToolTask() {
...
@@ -256,3 +266,9 @@ abstract class CompileSkikoCppTask : AbstractSkikoNativeToolTask() {
}
}
}
}
abstract
class
CompileSkikoObjCTask
:
CompileSkikoCppTask
()
{
override
val
srcExtensions
=
arrayOf
(
"mm"
)
override
val
outDirNameForTool
:
String
get
()
=
"compileObjC"
}
skiko/buildSrc/src/main/kotlin/properties.kt
View file @
232a8c47
...
@@ -100,26 +100,7 @@ val hostArch by lazy {
...
@@ -100,26 +100,7 @@ val hostArch by lazy {
}
}
}
}
fun
findTargetOs
()
=
when
(
System
.
getProperty
(
"skiko.target.os.name"
))
{
fun
targetId
(
os
:
OS
,
arch
:
Arch
)
=
"${os.id}-${arch.id}"
"linux"
->
OS
.
Linux
"macos"
->
OS
.
MacOS
"windows"
->
OS
.
Windows
"wasm"
->
OS
.
Wasm
else
->
null
}
fun
findTargetArch
()
=
when
(
System
.
getProperty
(
"skiko.target.os.arch"
))
{
"x64"
->
Arch
.
X64
"arm64"
->
Arch
.
Arm64
"wasm"
->
Arch
.
Wasm
else
->
null
}
val
targetOs
=
findTargetOs
()
?:
hostOs
val
targetArch
=
findTargetArch
()
?:
hostArch
fun
targetId
(
os
:
OS
,
arch
:
Arch
)
=
"${os.id}-${arch.id}"
val
jdkHome
=
System
.
getProperty
(
"java.home"
)
?:
error
(
"'java.home' is null"
)
val
jdkHome
=
System
.
getProperty
(
"java.home"
)
?:
error
(
"'java.home' is null"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment