add_rules("mode.debug", "mode.release") add_rules("plugin.compile_commands.autoupdate") set_warnings("all") set_warnings("error") add_requires("civetweb", "cjson", "leveldb", "jwt-cpp", "cryptopp", "nlohmann_json") local npm = "npm" if is_host("windows") then npm = "npm.cmd" end target("jwt") set_languages("c++23") set_kind("static") add_packages("jwt-cpp") add_includedirs("include/jwt") add_files("src/jwt/**.cpp") target("hash") set_languages("c++23") set_kind("static") add_packages("cryptopp") add_includedirs("include/hash") add_files("src/hash/**.cpp") target("db") set_languages("c++23") set_kind("static") add_packages("leveldb", "nlohmann_json") add_deps("hash") add_includedirs("include/db", "include") add_files("src/db/**.cpp") after_build(function (target) local target_dir = target:targetdir() os.cp("configs", target_dir) if not os.exists(target_dir .. "/db") then os.mkdir(target_dir .. "/db") end end) target("server") set_languages("c23") set_kind("binary") add_packages("civetweb", "cjson") add_deps("jwt", "db") add_includedirs("include") add_files("src/server/**.c") add_files("src/main.c") target("ui") on_build(function (target) os.execv(npm, {"--prefix", "ui", "run", "build"}) local target_dir = target:targetdir() os.cp("ui/dist", target_dir) os.mv(target_dir .. "/dist", target_dir .. "/www") end) on_run(function (target) os.execv(npm, {"--prefix", "ui", "run", "dev"}) end) target("math") add_deps("ui") add_deps("server") on_build(function (target) end) on_run(function (target) os.exec("xmake run server") end)