diff options
Diffstat (limited to 'toolchains')
| -rw-r--r-- | toolchains/ue_clang.lua | 60 | ||||
| -rw-r--r-- | toolchains/xmake.lua | 3 |
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") |