-- 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()