123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package("nzsl")
- set_homepage("https://github.com/NazaraEngine/ShaderLang")
- set_description("NZSL is a shader language inspired by Rust and C++ which compiles to GLSL or SPIRV")
- set_license("MIT")
- add_urls("https://github.com/NazaraEngine/ShaderLang/archive/refs/tags/$(version).tar.gz",
- "https://github.com/NazaraEngine/ShaderLang.git")
- add_versions("v1.0.0", "ef434fec5d32ddf64f2f7c7691a4d96a6ac24cab4cc6c091d46a542c86825359")
- set_policy("package.strict_compatibility", true)
- add_deps("nazarautils")
- add_deps("fast_float", "frozen", "ordered_map", {private = true})
- add_configs("cbinding", {description = "Builds the C binding library (CNZSL)", default = false, type = "boolean"})
- add_configs("nzsla", {description = "Includes standalone archiver", default = true, type = "boolean"})
- add_configs("nzslc", {description = "Includes standalone compiler", default = true, type = "boolean"})
- add_configs("symbols", {description = "Enable debug symbols in release", default = false, type = "boolean"})
- if is_plat("windows", "linux", "mingw", "macosx", "bsd") then
- add_configs("fs_watcher", {description = "Includes filesystem watcher", default = true, type = "boolean"})
- end
- if is_plat("wasm") then
- add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
- end
- on_load(function (package)
- package:addenv("PATH", "bin")
- if not package:config("shared") then
- package:add("defines", "NZSL_STATIC")
- package:add("deps", "fmt")
- end
- if package:config("fs_watcher") then
- package:add("deps", "efsw")
- end
- if package:config("nzsla") then
- package:add("deps", "lz4", {private = package:config("shared")})
- end
- if package:config("nzslc") then
- package:add("deps", "cxxopts >=3.1.1", "nlohmann_json", {private = true})
- end
- end)
- on_install(function (package)
- local configs = {}
- configs.cbinding = package:config("cbinding")
- configs.fs_watcher = package:config("fs_watcher") or false
- configs.erronwarn = false
- configs.examples = false
- configs.tests = false
- configs.with_nzsla = package:config("nzsla") or false
- configs.with_nzslc = package:config("nzslc") or false
- -- enable unitybuild for faster compilation except on MinGW (doesn't like big object even with /bigobj)
- if not os.getenv("NAZARA_DISABLE_UNITYBUILD") then
- configs.unitybuild = not package:is_plat("mingw")
- end
- if package:is_debug() then
- configs.mode = "debug"
- elseif package:config("symbols") then
- configs.mode = "releasedbg"
- else
- configs.mode = "release"
- end
- import("package.tools.xmake").install(package, configs)
- package:add("linkorders", "cnzsl", "nzsl")
- end)
- on_test(function (package)
- if (package:config("nzsla") or package:config("nzslc")) and not package:is_cross() then
- local envs
- if package:is_plat("windows") then
- import("core.tool.toolchain")
- local msvc = package:toolchain("msvc")
- if msvc and msvc:check() then
- envs = msvc:runenvs()
- end
- elseif package:is_plat("mingw") then
- import("core.tool.toolchain")
- local mingw = package:toolchain("mingw")
- if mingw and mingw:check() then
- envs = mingw:runenvs()
- end
- end
- if package:config("nzsla") then
- os.vrunv("nzsla", {"--version"}, {envs = envs})
- end
- if package:config("nzslc") then
- os.vrunv("nzslc", {"--version"}, {envs = envs})
- end
- end
- if not package:is_binary() then
- assert(package:check_cxxsnippets({test = [[
- void test() {
- nzsl::Ast::ModulePtr shaderModule = nzsl::Parse(R"(
- [nzsl_version("1.0")]
- module;
- struct FragOut
- {
- value: vec4[f32]
- }
- [entry(frag)]
- fn fragShader() -> FragOut
- {
- let output: FragOut;
- output.value = vec4[f32](0.0, 0.0, 1.0, 1.0);
- return output;
- }
- )");
- }
- ]]}, {configs = {languages = "c++17"}, includes = "NZSL/Parser.hpp"}))
- end
- end)
|