From 6c32539f8c3291717e2a294f41c14d4265ac896d Mon Sep 17 00:00:00 2001 From: OEOTYAN Date: Thu, 8 Aug 2024 06:08:38 +0800 Subject: [PATCH] faet: move build script to new repo --- scripts/after_build.lua | 118 ---------------------------------------- xmake.lua | 22 +------- 2 files changed, 3 insertions(+), 137 deletions(-) delete mode 100644 scripts/after_build.lua diff --git a/scripts/after_build.lua b/scripts/after_build.lua deleted file mode 100644 index 3c13302..0000000 --- a/scripts/after_build.lua +++ /dev/null @@ -1,118 +0,0 @@ -function beautify_json(value, indent) - import("core.base.json") - local json_text = "" - local stack = {} - - local function escape_str(s) - return string.gsub(s, '[%c\\"]', function(c) - local replacements = {['\b'] = '\\b', ['\f'] = '\\f', ['\n'] = '\\n', ['\r'] = '\\r', ['\t'] = '\\t', ['"'] = '\\"', ['\\'] = '\\\\'} - return replacements[c] or string.format('\\u%04x', c:byte()) - end) - end - - local function is_null(v) - return v == json.null - end - - local function is_empty_table(t) - if type(t) ~= 'table' then return false end - for _ in pairs(t) do - return false - end - return true - end - - local function is_array(t) - return type(t) == 'table' and json.is_marked_as_array(t) or #t > 0 - end - - local function serialize(val, level) - local spaces = string.rep(" ", level * indent) - - if type(val) == "table" and not stack[val] then - if is_empty_table(val) then - json_text = json_text .. (is_array(val) and "[]" or "{}") - return - end - - stack[val] = true - local isArray = is_array(val) - json_text = json_text .. (isArray and "[\n" or "{\n") - - local keys = isArray and {} or {} - for k in pairs(val) do - table.insert(keys, k) - end - if not isArray then - table.sort(keys) - end - - for _, k in ipairs(keys) do - local v = val[k] - json_text = json_text .. spaces .. (isArray and "" or '"' .. escape_str(tostring(k)) .. '": ') - serialize(v, level + 1) - json_text = json_text .. ",\n" - end - - json_text = string.sub(json_text, 1, -3) .. "\n" .. string.rep(" ", (level - 1) * indent) .. (isArray and "]" or "}") - stack[val] = nil - elseif type(val) == "string" then - json_text = json_text .. '"' .. escape_str(val) .. '"' - elseif type(val) == "number" then - if val % 1 == 0 then - json_text = json_text .. tostring(math.floor(val)) - else - json_text = json_text .. tostring(val) - end - elseif type(val) == "boolean" then - json_text = json_text .. tostring(val) - elseif is_null(val) then - json_text = json_text .. "null" - else - error("Invalid value type: " .. type(val)) - end - end - serialize(value, 1) - return json_text -end - -function string_formatter(str, variables) - return str:gsub("%${(.-)}", function(var) - return variables[var] or "${" .. var .. "}" - end) -end - -function pack_mod(target,mod_define) - import("lib.detect.find_file") - - local manifest_path = find_file("manifest.json", os.projectdir()) - if manifest_path then - local manifest = io.readfile(manifest_path) - local bindir = path.join(os.projectdir(), "bin") - local outputdir = path.join(bindir, mod_define.modName) - local targetfile = path.join(outputdir, mod_define.modFile) - local pdbfile = path.join(outputdir, path.basename(mod_define.modFile) .. ".pdb") - local manifestfile = path.join(outputdir, "manifest.json") - local oritargetfile = target:targetfile() - local oripdbfile = path.join(path.directory(oritargetfile), path.basename(oritargetfile) .. ".pdb") - - os.mkdir(outputdir) - os.cp(oritargetfile, targetfile) - if os.isfile(oripdbfile) then - os.cp(oripdbfile, pdbfile) - end - - formattedmanifest = string_formatter(manifest, mod_define) - io.writefile(manifestfile,formattedmanifest) - cprint("${bright green}[mod Packer]: ${reset}mod already generated to " .. outputdir) - else - cprint("${bright yellow}warn: ${reset}not found manifest.json in root dir!") - end -end - - -return { - pack_mod = pack_mod, - beautify_json = beautify_json, - string_formatter = string_formatter -} diff --git a/xmake.lua b/xmake.lua index 190761d..1e26505 100644 --- a/xmake.lua +++ b/xmake.lua @@ -6,12 +6,15 @@ add_repositories("liteldev-repo https://github.com/LiteLDev/xmake-repo.git") -- add_requires("levilamina develop") to use develop version -- please note that you should add bdslibrary yourself if using dev version add_requires("levilamina") +add_requires("levibuildscript") if not has_config("vs_runtime") then set_runtimes("MD") end target("my-mod") -- Change this to your mod name. + add_rules("@levibuildscript/linkrule") + add_rules("@levibuildscript/modpacker") add_cxflags( "/EHa", "/utf-8", @@ -27,26 +30,7 @@ target("my-mod") -- Change this to your mod name. add_files("src/**.cpp") add_includedirs("src") add_packages("levilamina") - add_shflags("/DELAYLOAD:bedrock_server.dll") -- To use symbols provided by SymbolProvider. set_exceptions("none") -- To avoid conflicts with /EHa. set_kind("shared") set_languages("c++20") set_symbols("debug") - - after_build(function (target) - local mod_packer = import("scripts.after_build") - - local tag = os.iorun("git describe --tags --abbrev=0 --always") - local major, minor, patch, suffix = tag:match("v(%d+)%.(%d+)%.(%d+)(.*)") - if not major then - print("Failed to parse version tag, using 0.0.0") - major, minor, patch = 0, 0, 0 - end - local mod_define = { - modName = target:name(), - modFile = path.filename(target:targetfile()), - modVersion = major .. "." .. minor .. "." .. patch, - } - - mod_packer.pack_mod(target,mod_define) - end)