On 7 Mar 2014, at 7:45 am, Xavier Ducrohet <x...@google.com> 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 <darrell.deb...@gradleware.com> 
> 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 <x...@google.com> 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 <john.r.engel...@gmail.com> 
> 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



Reply via email to