Open dinocore1 opened 4 years ago
I moved the issue to the native organization.
I'm unsure what the purpose of targetMachines
is if not to do this. The documentation seems to suggest that building for non-host targets is exactly what targetMachines
is supposed to do, but it doesn't?
By default, Gradle will attempt to create a C++ binary variant for the host operating system and architecture. It is possible to override this by specifying the set of TargetMachine on the application or library script block:
I guess my question is - does targetMachines
have any effect currently, if so, what, and is there any way to set up the currently missing pieces using an official gradle release (currently- v5.6.2) (eg. manually create variants)?
setting targetMachines
does not currently have any effect. I think I have tracked down the source of the problem to CppLibraryPlugin.java#L137.
It seems that tryToBuildOnHost(variantIdentity)
returns false for cross-compile targets and thus does not add the shared or static libraries to the build.
I have fixed it with my pull request
I should point out that setting targetMachines
does have an effect in that gradle will build multiple host architectures if there are multiple architectures of the host's platform in the targetMachines
list.
Are there any updates/milestones when the C++ cross-compilation will be fixed in New C++ Plugin? Mind that the old C++ plugin is deprecated in the latest Gradle version.
any update?
Native library plugin do not allow building for diffrent hosts
Building a native library using the 'cpp-library' plugin does not allow targeting builds for hosts other than the current host. This is a very common senario when using a cross-compiler. For example using mingw on Linux targeting Windows builds. Consider the following example being run on Ubuntu machine with mingw installed.
Expected Behavior
running
gradle tasks
should produce two sets of assemble and build tasks with naming convention following:assembleLinuxX86
andassembleWindowsX86
Current Behavior
Gradle creates
assemble
task targeting the local host machine only. It is impossible to cross-compile builds targeting Operating Systems other than the host.Context
I work mainly with C/C++ developing cross-platform software. We target Windows, Linux, Mac, and Android. I really like to be able to use Maven for native builds just like its done in the Java ecosystem.
Steps to Reproduce
example.zip
Your Environment
https://gradle.com/s/vhbk6go52j5uo