diff options
| author | ruki <[email protected]> | 2020-12-02 00:54:31 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-12-02 00:54:31 +0800 |
| commit | b0384dc3b81f05d4028f9e06dbb6caaa46f42013 (patch) | |
| tree | 4cbf771e45362e726dabcd2bf9bdb326081a9d76 /xmake/modules/package/tools/gn.lua | |
| parent | 7d1894ff02004c542f44794af00d537bd756c07a (diff) | |
add tools/gn and ninja
Diffstat (limited to 'xmake/modules/package/tools/gn.lua')
| -rw-r--r-- | xmake/modules/package/tools/gn.lua | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/xmake/modules/package/tools/gn.lua b/xmake/modules/package/tools/gn.lua new file mode 100644 index 000000000..6e3a8dfd7 --- /dev/null +++ b/xmake/modules/package/tools/gn.lua @@ -0,0 +1,98 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-2020, TBOOX Open Source Group. +-- +-- @author ruki +-- @file gn.lua +-- + +-- imports +import("core.base.option") +import("core.tool.toolchain") +import("lib.detect.find_tool") +import("package.tools.ninja") + +-- get build directory +function _get_buildir(opt) + if opt and opt.buildir then + return opt.buildir + else + _g.buildir = _g.buildir or ("build_" .. hash.uuid4():split('%-')[1]) + return _g.buildir + end +end + +-- get configs +function _get_configs(package, configs, opt) + return configs +end + +-- get the build environments +function buildenvs(package, opt) + local envs = {} + if package:is_plat("windows") then + table.join2(envs, toolchain.load("msvc"):runenvs()) + end + return envs +end + +-- generate build files for ninja +function generate(package, configs, opt) + + -- init options + opt = opt or {} + + -- pass configurations + local argv = {} + local args = {} + table.insert(argv, "gen") + table.insert(argv, _get_buildir(opt)) + for name, value in pairs(_get_configs(package, configs, opt)) do + if type(name) == "string" then + table.insert(args, name .. '=\"' .. value .. "\"") + else + table.insert(args, name .. "=" .. tostring(value)) + end + end + table.insert(argv, "--args='" .. table.concat(args, ' ') .. "'") + + -- do configure + local gn = assert(find_tool("gn"), "gn not found!") + os.vrunv(gn.program, argv, {envs = opt.envs or buildenvs(package)}) +end + +-- build package +function build(package, configs, opt) + + -- generate build files + opt = opt or {} + generate(package, configs, opt) + + -- do build + local buildir = _get_buildir(opt) + ninja.build(package, {}, {buildir = buildir, envs = opt.envs or buildenvs(package, opt)}) +end + +-- install package +function install(package, configs, opt) + + -- generate build files + opt = opt or {} + generate(package, configs, opt) + + -- do build and install + local buildir = _get_buildir(opt) + ninja.install(package, {}, {buildir = buildir, envs = opt.envs or buildenvs(package, opt)}) +end |
