1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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()
|