Hey guys,
I'm currently working on improving the toolchain configuration.
With my latest changes it is possible to tweak commandline arguments
also for visualcpp toolchain:
model {
toolChains {
visualCpp(VisualCpp) {
cppCompiler.withArguments { args ->
args << "-DFRENCH"
}
}
}
}
Furthermore I tweaked the AbstractGccToolchain to allow a custom
executable per targetplatform:
model {
toolChains {
clang(Clang) {
target("arm"){
cCompiler.executable = '/usr/bin/my-c-compiler'
}
}
}
platforms {
arm {
architecture "arm" // uses custom-c-compiler
}
i386 {
architecture "i386" // uses default clang
}
}
}
I'm not sure if customizing the executable for a visualcpp toolchain is
necessary. I don't have a usecase for that in mind.
In
https://github.com/gradle/gradle/blob/master/design-docs/continuous-delivery-for-c-plus-plus.md#story-improved-dsl-for-tool-chain-configuration
we replace the withArgument method with a "withInvocation" block:
model {
toolChains {
gcc(Gcc) {
cppCompiler.withInvocation {
executable "my-cpp-compiler"
args.replace("-m32", "-march=i386")
}
}
}
}
This defers the configuration of the executable just before the
compilation is started. IMO has different pros & cons
- we can react on the default selected executable (e.g. pipe all clang++
calls via my own clang script)
- a possible expensive configuration is only done when compilation is
done in the build
- every toolchain evaluates if the necessary tools are available. in the
last example this would look for a clang executable when detecting
available toolchains, even though it is not used.
I discussed the current need for "withInvocation" with Daz a while ago
and I'm not sure about the benefit of this atm. Are there usecases here
I havn't thought of?
cheers,
René