--!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-present, Xmake Open Source Community. -- -- @author Wu, Zhenyu -- @file xmake.lua -- -- usage: -- -- add_requires("node-addon-api") -- -- target("foo") -- do -- set_languages("cxx17") -- add_rules("nodejs.module") -- add_packages("node-addon-api") -- add_files("*.cc") -- end rule("nodejs.module") on_config(function(target) -- imports import("core.cache.detectcache") import("core.project.target", { alias = "project_target" }) -- set kind if target:is_plat("macosx") then target:set("kind", "binary") target:add("ldflags", "-bundle", "-undefined dynamic_lookup", { force = true }) else target:set("kind", "shared") end -- export symbols if target:is_plat("windows") then target:add("shflags", "/export:napi_register_module_v1", "/export:node_api_module_get_api_version_v1", { force = true }) else target:set("symbols", "none") end -- https://github.com/nodejs/node-addon-api/issues/1021 if target:is_plat("mingw") then target:add("packages", "node-api-stub") target:add("deps", target:pkg("node-api-stub")) end -- set library name local modulename = target:name():split('.', { plain = true }) modulename = modulename[#modulename] target:set("filename", modulename .. ".node") end) on_install(function(target) if target:is_plat("macosx") then target:set("kind", "shared") end local moduledir = path.directory((target:name():gsub('%.', '/'))) local mode = get_config("mode") local installdir = path.join("build", mode:sub(1, 1):upper() .. mode:sub(2)) import("target.action.install")(target, { installdir = installdir, libdir = moduledir, bindir = moduledir, includedir = path.join("include", moduledir) }) end)