1
1
package com.nishtahir ;
2
2
3
3
import org.gradle.api.DefaultTask
4
+ import org.gradle.api.GradleException
4
5
import org.gradle.api.Project
5
6
import org.gradle.api.tasks.TaskAction
6
7
import java.io.File
@@ -13,43 +14,54 @@ open class CargoBuildTask : DefaultTask() {
13
14
extensions[CargoExtension ::class ].apply {
14
15
targets.forEach { target ->
15
16
val toolchain = toolchains.find { (arch) -> arch == target }
16
- if (toolchain != null ) {
17
- buildProjectForTarget(project, toolchain, this )
18
17
19
- val targetDirectory = targetDirectory ? : " ${module} /target"
18
+ if (toolchain == null ) {
19
+ throw GradleException (" No such target $target " )
20
+ }
21
+
22
+ buildProjectForTarget(project, toolchain, this )
20
23
21
- copy { spec ->
24
+ val targetDirectory = targetDirectory ? : " ${module} /target"
25
+
26
+ copy { spec ->
27
+ if (toolchain.target != null ) {
22
28
spec.from(File (project.projectDir, " ${targetDirectory} /${toolchain.target} /${profile} " ))
23
- spec.include(targetInclude)
24
29
spec.into(File (buildDir, " rustJniLibs/${toolchain.folder} " ))
30
+ } else {
31
+ spec.from(File (project.projectDir, " ${targetDirectory} /${profile} " ))
32
+ spec.into(File (buildDir, " rustResources/${defaultToolchainBuildPrefixDir} " ))
25
33
}
26
- } else {
27
- println (" No such target $target " )
34
+ spec.include(targetIncludes.asIterable())
28
35
}
29
36
}
30
37
}
31
38
}
32
39
33
40
private fun buildProjectForTarget (project : Project , toolchain : Toolchain , cargoExtension : CargoExtension ) {
34
41
project.exec { spec ->
35
- val cc = " ${project.getToolchainDirectory()} /${toolchain.cc()} "
36
- val ar = " ${project.getToolchainDirectory()} /${toolchain.ar()} "
37
- println (" using CC: $cc " )
38
- println (" using AR: $ar " )
39
42
with (spec) {
40
43
standardOutput = System .out
41
44
workingDir = File (project.project.projectDir, cargoExtension.module)
42
- environment(" CC" , cc)
43
- environment(" AR" , ar)
44
- environment(" RUSTFLAGS" , " -C linker=$cc " )
45
45
46
- val theCommandLine = mutableListOf (" cargo" , " build" , " --target=${toolchain.target} " )
46
+ val theCommandLine = mutableListOf (" cargo" , " build" );
47
+
47
48
if (cargoExtension.profile != " debug" ) {
48
- // Cargo is rigid: it accepts "--release" for release (and
49
- // nothing for dev). This is a cheap way of allowing only
50
- // two values.
51
- theCommandLine.add(" --${cargoExtension.profile} " )
49
+ // Cargo is rigid: it accepts "--release" for release (and
50
+ // nothing for dev). This is a cheap way of allowing only
51
+ // two values.
52
+ theCommandLine.add(" --${cargoExtension.profile} " )
52
53
}
54
+
55
+ if (toolchain.target != null ) {
56
+ theCommandLine.add(" --target=${toolchain.target} " )
57
+
58
+ val cc = " ${project.getToolchainDirectory()} /${toolchain.cc()} "
59
+ val ar = " ${project.getToolchainDirectory()} /${toolchain.ar()} "
60
+ environment(" CC" , cc)
61
+ environment(" AR" , ar)
62
+ environment(" RUSTFLAGS" , " -C linker=$cc " )
63
+ }
64
+
53
65
commandLine = theCommandLine
54
66
}
55
67
}.assertNormalExitValue()
0 commit comments