Skip to content

Commit 2016291

Browse files
Add support for both cmake_layout and non cmake_layout when generating toolchain file
1 parent 7fd34b1 commit 2016291

4 files changed

Lines changed: 22 additions & 5 deletions

File tree

UpcomingReleaseNotes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add support for both cmake_layout and non cmake_layout when generating toolchain file.

src/main/kotlin/app/opendocument/ConanAndroidGradlePlugin.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class ConanAndroidGradlePlugin: Plugin<Project> {
4747
}
4848
preBuild.dependsOn(conanInstallTask)
4949
syncTask?.dependsOn(conanInstallTask)
50+
generateToolchainFileTask.get().dependsOn(conanInstallTask)
5051
}
5152
}
5253
}

src/main/kotlin/app/opendocument/ConanInstallTask.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121
package app.opendocument
2222

2323
import org.gradle.api.file.Directory
24+
import org.gradle.api.file.RegularFile
2425
import org.gradle.api.provider.Property
2526
import org.gradle.api.provider.Provider
2627
import org.gradle.api.tasks.Exec
2728
import org.gradle.api.tasks.Input
2829
import org.gradle.api.tasks.OutputDirectory
30+
import org.gradle.api.tasks.OutputFile
2931

3032

3133
abstract class ConanInstallTask : Exec() {
@@ -46,6 +48,9 @@ abstract class ConanInstallTask : Exec() {
4648
@get:OutputDirectory
4749
val outputDirectory: Provider<Directory> = arch.map { project.layout.buildDirectory.get().dir("conan/$it") }
4850

51+
@get:OutputFile
52+
val conanToolchainFile: Provider<RegularFile> = arch.map { project.layout.buildDirectory.get().file("conan/$it/conan_toolchain.cmake") }
53+
4954
override fun exec() {
5055
commandLine(
5156
"conan",
@@ -56,5 +61,16 @@ abstract class ConanInstallTask : Exec() {
5661
"--settings:host", "arch=" + arch.get(),
5762
)
5863
super.exec()
64+
65+
// conan install creates toolchain in one of two places:
66+
// 1: conan/armv8/conan_toolchain.cmake
67+
// 2: conan/armv8/build/${CMAKE_BUILD_TYPE}/generators/conan_toolchain.cmake
68+
conanToolchainFile.get().asFile.let { toolchainFile ->
69+
if (!toolchainFile.exists()) {
70+
val CMAKE_CURRENT_LIST_DIR = "\${CMAKE_CURRENT_LIST_DIR}"
71+
val CMAKE_BUILD_TYPE = "\${CMAKE_BUILD_TYPE}"
72+
toolchainFile.writeText("include(\"${CMAKE_CURRENT_LIST_DIR}/build/${CMAKE_BUILD_TYPE}/generators/conan_toolchain.cmake\")\n")
73+
}
74+
}
5975
}
6076
}

src/main/kotlin/app/opendocument/GenerateConanToolchainFileTask.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ abstract class GenerateConanToolchainFileTask : DefaultTask() {
3737
fun writeToolchain() {
3838
val ANDROID_ABI = "\${ANDROID_ABI}"
3939
val CMAKE_CURRENT_LIST_DIR = "\${CMAKE_CURRENT_LIST_DIR}"
40-
val CMAKE_BUILD_TYPE = "\${CMAKE_BUILD_TYPE}"
4140
conanToolchainFile.get().asFile.writeText("""
4241
# During multiple stages of CMake configuration, the toolchain file is processed and command-line
4342
# variables may not be always available. The script exits prematurely if essential variables are absent.
@@ -46,13 +45,13 @@ if ( NOT ANDROID_ABI OR NOT CMAKE_BUILD_TYPE )
4645
return()
4746
endif()
4847
if(${ANDROID_ABI} STREQUAL "x86_64")
49-
include("${CMAKE_CURRENT_LIST_DIR}/x86_64/build/${CMAKE_BUILD_TYPE}/generators/conan_toolchain.cmake")
48+
include("${CMAKE_CURRENT_LIST_DIR}/x86_64/conan_toolchain.cmake")
5049
elseif(${ANDROID_ABI} STREQUAL "x86")
51-
include("${CMAKE_CURRENT_LIST_DIR}/x86/build/${CMAKE_BUILD_TYPE}/generators/conan_toolchain.cmake")
50+
include("${CMAKE_CURRENT_LIST_DIR}/x86/conan_toolchain.cmake")
5251
elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
53-
include("${CMAKE_CURRENT_LIST_DIR}/armv8/build/${CMAKE_BUILD_TYPE}/generators/conan_toolchain.cmake")
52+
include("${CMAKE_CURRENT_LIST_DIR}/armv8/conan_toolchain.cmake")
5453
elseif(${ANDROID_ABI} STREQUAL "armeabi-v7a")
55-
include("${CMAKE_CURRENT_LIST_DIR}/armv7/build/${CMAKE_BUILD_TYPE}/generators/conan_toolchain.cmake")
54+
include("${CMAKE_CURRENT_LIST_DIR}/armv7/conan_toolchain.cmake")
5655
else()
5756
message(FATAL "Not supported configuration")
5857
endif()

0 commit comments

Comments
 (0)