Skip to content

Custom Toolchain

We can use toolchain() to define custom toolchains to support special compilers or cross-compilation environments.

For details on custom toolchain configuration, see: Custom Toolchain API.

Basic Example

EXPLORER
src
main.cpp
xmake.lua
Lua xmake.lua
12345678910111213141516171819
add_rules("mode.debug", "mode.release")

toolchain("myclang")
    set_kind("standalone")
    set_toolset("cc", "clang")
    set_toolset("cxx", "clang++")
    set_toolset("ld", "clang++")
    on_check(function (toolchain)
        return import("lib.detect.find_tool")("clang")
    end)
    on_load(function (toolchain)
        toolchain:add("cxflags", "-DTEST_MACRO")
    end)
toolchain_end()

target("test")
    set_kind("binary")
    add_files("src/main.cpp")
    set_toolchains("myclang")

Build and Run

bash
$ xmake
$ xmake run

Unknown Toolchain

If we need to support a completely unknown compiler toolchain, we need to implement the detection script of the toolchain, as well as the script configuration of all tool sets such as compilation, linking, archiving, etc.

EXPLORER
src
foo.cpp
test.cpp
xmake
modules
core
tools
cl6x
has_flags.lua
parse_deps.lua
ar6x.lua
cl6x.lua
detect
tools
find_ar6x.lua
find_cl6x.lua
toolchains
my-c6000
xmake.lua
xmake.lua
Lua xmake.lua
123456789101112131415
add_rules("mode.debug", "mode.release")

add_moduledirs("xmake/modules")
add_toolchaindirs("xmake/toolchains")

set_toolchains("my-c6000")

target("test")
    set_kind("static")
    add_files("src/foo.cpp")

target("demo")
    set_kind("binary")
    add_deps("test")
    add_files("src/test.cpp")