aboutsummaryrefslogtreecommitdiff
path: root/toolchains
diff options
context:
space:
mode:
Diffstat (limited to 'toolchains')
-rw-r--r--toolchains/ue_clang.lua60
-rw-r--r--toolchains/xmake.lua3
2 files changed, 63 insertions, 0 deletions
diff --git a/toolchains/ue_clang.lua b/toolchains/ue_clang.lua
new file mode 100644
index 000000000..1fdb05ff9
--- /dev/null
+++ b/toolchains/ue_clang.lua
@@ -0,0 +1,60 @@
+-- Copyright Epic Games, Inc. All Rights Reserved.
+
+-- Custom toolchain for building with the Unreal Engine Linux clang toolchain.
+--
+-- Usage:
+-- xmake config --toolchain=ue-clang [--sdk=/path/to/ue-toolchain]
+--
+-- If --sdk is not given, the toolchain is resolved in order:
+-- 1. $UE_TOOLCHAIN_DIR environment variable
+-- 2. ~/.ue-toolchain (default get_ue_toolchain.sh download location)
+
+toolchain("ue-clang")
+ set_kind("standalone")
+
+ on_load(function (toolchain)
+ -- Resolve SDK directory: --sdk flag > $UE_TOOLCHAIN_DIR > ~/.ue-toolchain
+ local sdkdir = toolchain:sdkdir()
+ if not sdkdir or sdkdir == "" then
+ sdkdir = os.getenv("UE_TOOLCHAIN_DIR")
+ end
+ if not sdkdir or sdkdir == "" then
+ local default_path = path.join(os.getenv("HOME"), ".ue-toolchain")
+ if os.isdir(default_path) then
+ sdkdir = default_path
+ end
+ end
+ if not sdkdir or sdkdir == "" then
+ return
+ end
+
+ toolchain:config_set("sdkdir", sdkdir)
+
+ local bindir = path.join(sdkdir, "bin")
+
+ -- Compiler and linker tools
+ toolchain:set("toolset", "cc", path.join(bindir, "clang"))
+ toolchain:set("toolset", "cxx", path.join(bindir, "clang++"))
+ toolchain:set("toolset", "ld", path.join(bindir, "clang++"))
+ toolchain:set("toolset", "sh", path.join(bindir, "clang++"))
+ toolchain:set("toolset", "ar", path.join(bindir, "llvm-ar"))
+ toolchain:set("toolset", "strip", path.join(bindir, "x86_64-unknown-linux-gnu-strip"))
+ toolchain:set("toolset", "objcopy", path.join(bindir, "llvm-objcopy"))
+ toolchain:set("toolset", "as", path.join(bindir, "clang"))
+ toolchain:set("toolset", "ranlib", path.join(bindir, "llvm-ranlib"))
+
+ -- Sysroot and stdlib flags for both C and C++
+ local sysroot_flag = "--sysroot=" .. sdkdir
+ toolchain:add("cxflags", sysroot_flag, {force = true})
+ toolchain:add("cxflags", "-stdlib=libc++", {force = true})
+
+ -- Linker flags: sysroot and stdlib selection only.
+ -- Static libc++ overrides are applied at project level (xmake.lua) so they
+ -- don't leak into cmake package builds (e.g. sentry-native/crashpad).
+ toolchain:add("ldflags", sysroot_flag, {force = true})
+ toolchain:add("ldflags", "-stdlib=libc++", {force = true})
+
+ toolchain:add("shflags", sysroot_flag, {force = true})
+ toolchain:add("shflags", "-stdlib=libc++", {force = true})
+ end)
+toolchain_end()
diff --git a/toolchains/xmake.lua b/toolchains/xmake.lua
new file mode 100644
index 000000000..2817a1586
--- /dev/null
+++ b/toolchains/xmake.lua
@@ -0,0 +1,3 @@
+-- Copyright Epic Games, Inc. All Rights Reserved.
+
+includes("ue_clang.lua")