Inside the model { }, you need 'toolChains' instead of 'toolchain'
-- John
On Thursday, March 6, 2014 at 2:46 PM, Xavier Ducrohet [via Gradle] 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'
> 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 <[hidden email]
> (/user/SendEmail.jtp?type=node&node=5712429&i=0)> 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 <[hidden email]
> > (/user/SendEmail.jtp?type=node&node=5712429&i=1)> 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
> > > (http://www.gradle.org/docs/current/dsl/org.gradle.nativebinaries.toolchain.ToolChain.html)
> > > 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 <[hidden email]
> > > (/user/SendEmail.jtp?type=node&node=5712429&i=2)> 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 (http://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]
> > > > > (http://user/SendEmail.jtp?type=node&node=5712414&i=0)
> > > > > To unsubscribe from gradle-dev, click here.
> > > > > NAML
> > > > > (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml)
> > > > >
> > > >
> > > >
> > > > View this message in context: Re: Sample for native cross compilation?
> > > > (http://gradle.1045684.n5.nabble.com/Sample-for-native-cross-compilation-tp5712413p5712414.html)
> > > > Sent from the gradle-dev mailing list archive
> > > > (http://gradle.1045684.n5.nabble.com/gradle-dev-f1436218.html) at
> > > > Nabble.com (http://Nabble.com).
> > >
> >
>
>
>
> 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-tp5712413p5712429.html
>
> To start a new topic under gradle-dev, email
> [email protected]
> (mailto:[email protected])
> To unsubscribe from gradle-dev, click here
> (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=1436218&code=am9obi5yLmVuZ2VsbWFuQGdtYWlsLmNvbXwxNDM2MjE4fDIyMTUyNjEzNQ==).
> NAML
> (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml)
>
--
View this message in context:
http://gradle.1045684.n5.nabble.com/Sample-for-native-cross-compilation-tp5712413p5712430.html
Sent from the gradle-dev mailing list archive at Nabble.com.