summaryrefslogtreecommitdiff
path: root/toolchain
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-07-21 19:16:46 +0200
committerLéo Lam <leo@leolam.fr>2021-07-21 22:26:11 +0200
commit8cf3dd776bf5a839f9941059ccb7b28e27c6791f (patch)
treed6cae2d5d797968b8caebb75f88c54a315b02f6c /toolchain
parent1c8152de2228a7011852d0bdd69c397ea8692fd3 (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.cmake42
m---------toolchain/musl0
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