set_project("liba")
set_xmakever("2.5.0")
set_version("0.1.0", {build = "%Y%m%d%H%M"})
set_languages("c11", "c++11")
if is_plat("windows") then
set_languages("c++17")
end
option("warnings")
set_default(false)
set_showmenu(true)
set_description("Enable or disable warnings")
option_end()
if has_config("warnings") then
set_warnings("everything")
if is_plat("windows") then
add_cxflags("/wd4514", "/wd4710", "/wd4711", "/wd5039", "/wd5045")
end
add_cxflags("-Wno-reserved-identifier", "-Wno-used-but-marked-unused")
add_cflags("-Wno-declaration-after-statement")
add_cxxflags("-Wno-c++98-compat-pedantic")
end
add_rules("mode.check", "mode.debug", "mode.release")
if is_mode("check") and not is_plat("mingw") then
local flags = {
"-fsanitize=address,undefined",
"-fsanitize-recover=address",
"-fno-omit-frame-pointer",
"-fsanitize=leak",
}
add_cxflags(flags)
add_ldflags(flags)
end
target("ac.objs")
set_kind("object")
on_load(function (target)
import("lib.detect.find_programver")
target:set("configvar", "XMAKE_VERSION", find_programver("xmake"))
end)
add_configfiles("xmake/config.h", {filename = "a.config.h"})
set_configdir("$(curdir)/include")
if is_kind("shared") then
add_defines("A_EXPORTS")
add_defines("A_SHARED", {interface = true})
end
add_includedirs("include", {public = true})
add_headerfiles("include/(**.h)")
add_files("src/**.c")
if not is_plat("windows", "mingw") then
add_cxflags("-fPIC")
add_syslinks("m")
end
target_end()
target("ac")
set_kind("$(kind)")
add_deps("ac.objs")
target_end()
target("ax.objs")
set_kind("object")
if is_kind("shared") then
add_defines("A_EXPORTS")
add_defines("A_SHARED", {interface = true})
end
add_includedirs("include", {public = true})
add_headerfiles("include/(**.hpp)")
add_files("src/**.cpp")
if not is_plat("windows", "mingw") then
add_cxflags("-fPIC")
add_syslinks("m")
end
target_end()
target("ax")
set_kind("$(kind)")
add_deps("ax.objs")
target_end()
target("a.objs")
set_kind("object")
add_deps("ac.objs", "ax.objs")
target_end()
target("a")
set_kind("$(kind)")
add_deps("a.objs")
target_end()
includes("ffi/lua")
option("with-rust")
set_default(false)
set_showmenu(true)
set_description("Enable or disable rust")
option_end()
if has_config("with-rust") then
add_requires("cargo::liba", {configs = {cargo_toml = path.join(os.projectdir(), "Cargo.toml")}})
target("a-rust")
set_basename("a")
set_kind("static")
add_deps("a.objs")
add_files("src/**.rs")
add_packages("cargo::liba")
target_end()
end
includes("test")