On 7 Mar 2014, at 7:45 am, Xavier Ducrohet <[email protected]> wrote:
> Thanks Daz for confirming what John said.
>
> So here's my current attempt:
>
> model {
> platforms {
> linux32 {
> architecture "i386"
> operatingSystem "linux"
> }
> linux64 {
> architecture "x86_64"
> operatingSystem "linux"
> }
> windows32 {
> architecture "i386"
> operatingSystem "windows"
> }
> darwin32 {
> architecture "i386"
> operatingSystem "osx"
> }
> }
> toolchains {
> mingw(Gcc) {
> path '/usr/bin/i586-mingw32msvc-gcc’
This is a path to use to search for the ‘gcc’ binary, rather than the path to
the binary itself.
You also need to separately tell the toolchain which binary to use:
mingw(Gcc) {
cCompile.executable = ‘i586-mingw32msvc-gcc’
...
}
> addPlatformConfiguration(new MingwOnLinuxConfiguration())
> }
> }
> }
>
> class MingwOnLinuxConfiguration implements TargetPlatformConfiguration {
> boolean supportsPlatform(Platform element) {
> return element.getOperatingSystem().name == "windows"
> }
>
> List<String> getCppCompilerArgs() {
> []
> }
>
> List<String> getCCompilerArgs() {
> []
> }
>
> List<String> getObjectiveCCompilerArgs() {
> []
> }
>
> List<String> getObjectiveCppCompilerArgs() {
> []
> }
>
> List<String> getAssemblerArgs() {
> []
> }
>
> List<String> getLinkerArgs() {
> []
> }
>
> List<String> getStaticLibraryArchiverArgs() {
> []
> }
> }
>
> When I try to build the windows exe on linux it says:
>
> * What went wrong:
> Execution failed for task ':compileWindows32MksdcardExecutableMksdcardC'.
> > No tool chain is available to build for platform 'windows32':
> - Tool chain 'visualCpp' (Visual Studio): Visual Studio is not available
> on this operating system.
> - Tool chain 'gcc' (GNU GCC): Don't know how to build for platform
> 'windows32'.
> - Tool chain 'clang' (Clang): Could not find C++ compiler 'clang++' in
> system path.
>
> It seems it didn't even add my custom toolchain?
>
>
> On Thu, Mar 6, 2014 at 11:52 AM, Daz DeBoer <[email protected]>
> wrote:
> Hi Xav
> The current DSL for configuring a cross compiler is not great, but it should
> be functional. The way it works is you can define any number of Gcc tool
> chains: Gradle will iterate over them in order, checking if each can build
> for the target platform. By default a Gcc tool chain can target 'i386',
> 'x86-64', and the 'tool chain default' architecture. The last one is what you
> get if you don't define a platform for your binary.
>
> You can specify that a tool chain can support a platform with
> `PlatformConfigurableToolChain.addPlatformConfiguration()`. One ugly part of
> the DSL is that you need to implement TargetPlatformConfiguration to do this.
>
> So let's say you have:
> toolChains {
> gcc(Gcc) // The default gcc install
> mingw(Gcc) {
> path "path-to-my-cross-compiler"
> addPlatformConfiguration(new MingwOnLinuxConfiguration()) // returns
> "true" for supportsPlatform(windows), and supplies necessary args
> }
> }
>
> Then when trying to build for windows, Gradle will first check 'gcc', which
> cannot target windows, then mingw, which can.
>
> Let me know if that still doesn't make sense.
>
> There are some plans to improve the DSL for this. Any suggestion would be
> welcome:
>
> https://github.com/gradle/gradle/blob/master/design-docs/continuous-delivery-for-c-plus-plus.md#story-improved-dsl-for-tool-chain-configuration
> https://github.com/gradle/gradle/blob/master/design-docs/continuous-delivery-for-c-plus-plus.md#story-improved-dsl-for-platform-specific-tool-chain-configuration
>
> cheers
> Daz
>
>
>
> On Thu, Mar 6, 2014 at 11:39 AM, Xavier Ducrohet <[email protected]> wrote:
> thanks for this pointer, I'll take a look.
>
> I'm still not clear how the platform thing work and how "Gradle will attempt
> to locate a ToolChain that is able to build for the target platform." In my
> case I need it to use a custom toolchain and all the things that goes with
> it. I'll experiment.
>
>
>
>
> On Wed, Mar 5, 2014 at 7:10 PM, johnrengelman <[email protected]>
> wrote:
> I have no experience using the native tools but I think you can reference the
> GccToolChainCustomisationIntegrationTest class in gradle-core.
>
> In that test they are doing the following:
> model {
> toolChains {
> ${gcc.id} {
> addPlatformConfiguration(new ArmArchitecture())
> }
> }
> platforms {
> arm {
> architecture "arm"
> }
> i386 {
> architecture "i386"
> }
> }
> }
>
> class ArmArchitecture implements TargetPlatformConfiguration {
> boolean supportsPlatform(Platform element) {
> return element.getArchitecture().name == "arm"
> }
>
> List<String> getCppCompilerArgs() {
> ["-m32", "-DFRENCH"]
> }
>
> List<String> getCCompilerArgs() {
> ["-m32", "-DFRENCH"]
> }
>
> List<String> getObjectiveCCompilerArgs() {
> []
> }
>
> List<String> getObjectiveCppCompilerArgs() {
> []
> }
>
> List<String> getAssemblerArgs() {
> []
> }
>
> List<String> getLinkerArgs() {
> ["-m32"]
> }
>
> List<String> getStaticLibraryArchiverArgs() {
> []
> }
> }
>
> My guess is that you'll want to do something like that.
>
> -- John
>
> On Wednesday, March 5, 2014 at 8:44 PM, Xavier Ducrohet [via Gradle] wrote:
>
>> Hey all,
>>
>> I'm looking at the native support to attempt to build the tools part of the
>> Android SDK with gradle. We have a few small native tools that needs to be
>> compile and we cross compile the windows version on linux using mingw32.
>>
>> I was wondering if that would be supported since it's (like?) gcc? also I've
>> been looking for an example of cross compilation but there isn't any, and
>> the PlatformConfigurableToolChain DSL reference isn't super helpful :\
>>
>> A quick pointer on how to define a cross compilation target would be
>> awesome, thanks!
>> Xav
>>
>>
>> If you reply to this email, your message will be added to the discussion
>> below:
>> http://gradle.1045684.n5.nabble.com/Sample-for-native-cross-compilation-tp5712413.html
>> To start a new topic under gradle-dev, email [hidden email]
>> To unsubscribe from gradle-dev, click here.
>> NAML
>
>
> View this message in context: Re: Sample for native cross compilation?
> Sent from the gradle-dev mailing list archive at Nabble.com.
>
>
>
--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com