Fix default ABI to allow using target-os instead of the default one - #340
Open
uilianries wants to merge 1 commit into
Open
Fix default ABI to allow using target-os instead of the default one#340uilianries wants to merge 1 commit into
uilianries wants to merge 1 commit into
Conversation
Signed-off-by: Uilian Ries <uilianries@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Greeting!
After merging PR #334 and #335, when doing a few new validations with Boost 1.92.0-RC1 (se https://lists.boost.org/archives/list/boost@lists.boost.org/thread/U7DDTRXFCNGGZA5XZ5H6ZL2MUEFH5OLM/) I found a missing scenario when cross-building OS, mainly on Windows as host and another OS (e.g. Android) as target. The previous PRs fixed Context's ABI and binary-format defaults to derive from the deduced target (
<target-os>/<architecture>) instead of the host platform, which is fine. However, thedefault_abi()still picksmsinstead of the correct target ABI, even withtarget-os/architectureexplicitly passed:https://github.com/boostorg/context/blob/develop/boost-context-features.jam#L59
So, in case I try to cross-compile Boost Context from Windows to Android, even passing explicit
target-os,abi,address-model, andarchitecture, I still have the following error during the setup:You can see my full build log with this error here: boost-1.92.0.rc1-windows-android-context.log
As
default_abiis wired in as<conditional>@boost-context-features.default_abi, it overrides the explicitabi=on the command line too. So runningb2 ... target-os=android architecture=arm abi=aapcs ...still fails the same way on a Windows host, and there's no command-line workaround.This PR moves the
[ os.name ] = "NT"/"CYGWIN"to mirrordefault_binary_format()structure. The host name is now consulted only when neither<target-os>nor<architecture>was part of the build request, so if a user passes it explicitly, the explicit one should prevail.With this change, Context picks
make_arm64_aapcs_elf_gas.S/jump_arm64_aapcs_elf_gas.S/ontop_arm64_aapcs_elf_gas.Swhen cross-building from Windows to Android/arm64, same as it already does correctly when cross-building from macOS or Linux.I built locally, again Windows -> Android, and now I no longer have this error: boost-1.92.0.rc1-windows-android-context-patched.log
Environment
Host OS: Windows 10
Target OS: Android
Compiler: Android (13691557, based on r522817d) clang version 18.0.4 (https://android.googlesource.com/toolchain/llvm-project d8003a456d14a3deb8054cdaa529ffbf02d9b262) - Target:
Boost: 1.92.0-rc1
Steps to Reproduce
I used Conan initially, but I can reproduce when building from sources as well.
Note that as I'm cross-building, I have NDK 27d installed in my Windows, the official one from Android page. Android is just example, cross-building to Linux should result in the same.
Tell me if you need further validation or information about the case. Regards!