用gradle构建libxml
你能分享一下你对交叉编译库的智慧吗,比如用gradle构建libxml,gradle,cross-platform,Gradle,Cross Platform,你能分享一下你对交叉编译库的智慧吗,比如libxml2,libpng,libfreetype,它使用gradle为android和其他主机(如linux、windows和Mac Os X)提供配置脚本和生成文件 目前,我没有这两个库的完整工作示例,但希望有一个类似于以下内容的解决方案: buildSrc/src/main/groovy/com/ulabs/gradle/*。groovy包含: package com.ulabs.gradle import org.gradle.api.Def
libxml2
,libpng
,libfreetype
,它使用gradle为android和其他主机(如linux、windows和Mac Os X)提供配置脚本和生成文件
目前,我没有这两个库的完整工作示例,但希望有一个类似于以下内容的解决方案:
buildSrc/src/main/groovy/com/ulabs/gradle/*。groovy
包含:
package com.ulabs.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.Project
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
class AutoConfigureTask extends DefaultTask {
@Input
@Optional
def extraArgs
@TaskAction
def execConfigure(IncrementalTaskInputs inputs) {
println "Launching AutoConfigureTask from: " + project.projectDir
if(!new File(project.projectDir, 'configure.ac').exists() &&
!new File(project.projectDir, 'configure.in').exists()) {
throw new FileNotFoundException(
'autoconfigure task should have either configure.in or configure.ac ')
}
boolean outDated = false
inputs.outOfDate { change ->
outDated = true
}
if(outDated) {
project.exec {
executable "autoreconf"
args "-ivf", hasProperty("extraArgs") ? extraArgs : ""
}
}
}
}
package com.ulabs.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.Project
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
class ConfigureTask extends DefaultTask {
@Input
@Optional
def extraArgs
@TaskAction
def execConfigure(IncrementalTaskInputs inputs) {
if(!new File(project.projectDir, 'configure').exists()) {
throw new FileNotFoundException(
'configure task should have a configure script')
}
boolean outDated = false
inputs.outOfDate { change ->
outDated = true
}
if(outDated) {
project.exec {
executable "./configure"
args hasProperty("extraArgs") ? extraArgs : ""
}
}
}
}
package com.ulabs.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.Project
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
class MakefileTask extends DefaultTask {
@Input
@Optional
def extraArgs
@Input
@Optional
def env
@TaskAction
def execConfigure(IncrementalTaskInputs inputs) {
if(!new File(project.projectDir, 'configure').exists()) {
throw new FileNotFoundException(
'makefile task should have a Makefile script')
}
boolean outDated = false
inputs.outOfDate { change ->
outDated = true
}
if(outDated) {
project.exec {
executable "make"
args hasProperty("extraArgs") ? extraArgs : "-f Makefile"
}
}
}
}
这很可能与任务的输入有关,或者任务的条件配置/运行时阶段混乱,但我尝试了许多选项,似乎都不起作用
因此,最后我希望:
,/configure
或自动工具
除非其参数更改(make
或外部参数
)环境
- 当参数更改时,我希望它们都按照依赖项指定的链运行
- 我希望
像一个可以与其他人链接的项目一样,能够与依赖者的平台/架构相匹配,具有链接api、共享或静态libxml2
task autoReconfigure(type : Exec) {
executable "autoreconf"
args "-vif"
workingDir "."
}
task configureTask(type : Exec, dependsOn : autoReconfigure) {
executable "./configure"
args "--without-zlib"
workingDir "."
}
task makeFileTask(type : Exec, dependsOn : configureTask) {
executable "make"
args "-f", "Makefile"
workingDir "."
}
build.dependsOn(makeFileTask)
assemble.dependsOn(makeFileTask)
我将尝试添加对不同工具链/平台的支持
package com.ulabs.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.Project
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
class AutoConfigureTask extends DefaultTask {
@Input
@Optional
def extraArgs
@TaskAction
def execConfigure(IncrementalTaskInputs inputs) {
println "Launching AutoConfigureTask from: " + project.projectDir
if(!new File(project.projectDir, 'configure.ac').exists() &&
!new File(project.projectDir, 'configure.in').exists()) {
throw new FileNotFoundException(
'autoconfigure task should have either configure.in or configure.ac ')
}
boolean outDated = false
inputs.outOfDate { change ->
outDated = true
}
if(outDated) {
project.exec {
executable "autoreconf"
args "-ivf", hasProperty("extraArgs") ? extraArgs : ""
}
}
}
}
package com.ulabs.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.Project
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
class ConfigureTask extends DefaultTask {
@Input
@Optional
def extraArgs
@TaskAction
def execConfigure(IncrementalTaskInputs inputs) {
if(!new File(project.projectDir, 'configure').exists()) {
throw new FileNotFoundException(
'configure task should have a configure script')
}
boolean outDated = false
inputs.outOfDate { change ->
outDated = true
}
if(outDated) {
project.exec {
executable "./configure"
args hasProperty("extraArgs") ? extraArgs : ""
}
}
}
}
package com.ulabs.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.Project
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
class MakefileTask extends DefaultTask {
@Input
@Optional
def extraArgs
@Input
@Optional
def env
@TaskAction
def execConfigure(IncrementalTaskInputs inputs) {
if(!new File(project.projectDir, 'configure').exists()) {
throw new FileNotFoundException(
'makefile task should have a Makefile script')
}
boolean outDated = false
inputs.outOfDate { change ->
outDated = true
}
if(outDated) {
project.exec {
executable "make"
args hasProperty("extraArgs") ? extraArgs : "-f Makefile"
}
}
}
}
task autoReconfigure(type : Exec) {
executable "autoreconf"
args "-vif"
workingDir "."
}
task configureTask(type : Exec, dependsOn : autoReconfigure) {
executable "./configure"
args "--without-zlib"
workingDir "."
}
task makeFileTask(type : Exec, dependsOn : configureTask) {
executable "make"
args "-f", "Makefile"
workingDir "."
}
build.dependsOn(makeFileTask)
assemble.dependsOn(makeFileTask)