Merged
Conversation
Merged
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.
Hello, this PR is more accurately described as an improvement than a fix.
This project fails to compile when
ANDROID_USE_LEGACY_TOOLCHAIN_FILE=OFFwith android x86/x86-64. Some higher-level build systems may define this switch globally to prevent the NDK toolchain file from modifying CXXFLAGS/CFLAGS.This is due to the combined implicit behavior of both CMake and NDK toolchain files:
enable_language(ASM-ATT)The actual behavior is to look up GNU as (not any assembler that supports AT&T syntax!).CMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER, causing CMake to look for tools on the host machine.This results in GNU-as being available under NDK legacy behavior (requires the host machine to have the GNU toolchain installed).
I suggest using
enable_language(ASM)instead ofenable_language(ASM-ATT). The former actually behaves in CMake as follows: uses the compiler as the assembler. Since the NDK always uses clang, and clang supports AT&T input, so you do not need to modify any assembly code.The only thing that needs to be modified is
--noexecstack. Sinceclangis a compiler driver and not a real assembler, it does not support this option, so I passed it to the linker.