diff options
| author | Léo Lam <leo@leolam.fr> | 2021-07-21 19:16:46 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2021-07-21 22:26:11 +0200 |
| commit | 8cf3dd776bf5a839f9941059ccb7b28e27c6791f (patch) | |
| tree | d6cae2d5d797968b8caebb75f88c54a315b02f6c /toolchain | |
| parent | 1c8152de2228a7011852d0bdd69c397ea8692fd3 (diff) | |
build: Clean up build toolchain (and use musl for libc)
Using musl is required to match several functions that use <math.h>
floating point functions like isnan.
This also removes a dependency on devkitA64. We previously only needed
it because Clang insisted on using GCC to link the final executable
owing to the use of a "bare metal" target like aarch64-none-elf.
We can make Clang invoke the linker itself by using a Linux target.
Diffstat (limited to 'toolchain')
| -rw-r--r-- | toolchain/ToolchainNX64.cmake | 42 | ||||
| m--------- | toolchain/musl | 0 |
2 files changed, 42 insertions, 0 deletions
diff --git a/toolchain/ToolchainNX64.cmake b/toolchain/ToolchainNX64.cmake new file mode 100644 index 00000000..bc967750 --- /dev/null +++ b/toolchain/ToolchainNX64.cmake @@ -0,0 +1,42 @@ +if (DEFINED ENV{UKING_CLANG}) + set(UKING_CLANG "$ENV{UKING_CLANG}") +else() + set(UKING_CLANG "toolchain/clang") +endif() + +set(NX64_OPT_FLAGS "-O3 -g") +set(NX64_TRIPLE aarch64-linux-elf) + +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +set(CMAKE_SYSROOT ${CMAKE_CURRENT_LIST_DIR}/musl) +set(CMAKE_C_COMPILER "${UKING_CLANG}/bin/clang") +set(CMAKE_C_COMPILER_TARGET ${NX64_TRIPLE}) +set(CMAKE_CXX_COMPILER "${UKING_CLANG}/bin/clang++") +set(CMAKE_CXX_COMPILER_TARGET ${NX64_TRIPLE}) + +set(CMAKE_C_FLAGS_RELEASE ${NX64_OPT_FLAGS}) +set(CMAKE_CXX_FLAGS_RELEASE ${NX64_OPT_FLAGS}) +set(CMAKE_C_FLAGS_RELWITHDEBINFO ${NX64_OPT_FLAGS}) +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO ${NX64_OPT_FLAGS}) + +# Target options +add_compile_options(-mcpu=cortex-a57+fp+simd+crypto+crc) +add_compile_options(-mno-implicit-float) +# Environment +add_compile_options(-stdlib=libc++) +add_compile_options(-fPIC) +# Helps with matching as this causes Clang to emit debug type info even for dynamic classes +# with undefined vtables. +add_compile_options(-fstandalone-debug) + +add_definitions(-D SWITCH) +add_definitions(-D NNSDK) +add_definitions(-D MATCHING_HACK_NX_CLANG) + +add_link_options(-stdlib=libc++ -nostdlib) +add_link_options(-fPIC -Wl,-Bsymbolic-functions -shared) +# Use lld for performance reasons (and because we don't want a dependency on GNU tools) +add_link_options(-fuse-ld=lld) diff --git a/toolchain/musl b/toolchain/musl new file mode 160000 +Subproject 9a9252a54a67f54c066966f8f0599c450391bd4 |
