Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#5426 after_load for capnproto #6129

Merged
merged 1 commit into from
Jan 31, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 35 additions & 7 deletions xmake/rules/capnproto/capnp.lua
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,40 @@ function _get_capnp(target)
end

-- generate build commands
function buildcmd(target, batchcmds, sourcefile_capnp, opt)
function load(target)
-- get the first sourcefile
local sourcefile_capnp
local sourcebatch = target:sourcebatches()["capnproto.cpp"]
if sourcebatch and sourcebatch.sourcefiles then
sourcefile_capnp = sourcebatch.sourcefiles[1]
end
if not sourcefile_capnp then
return
end

-- get c/c++ source file for capnproto
local prefixdir
local public
local fileconfig = target:fileconfig(sourcefile_capnp)
if fileconfig then
public = fileconfig.capnp_public
prefixdir = fileconfig.capnp_rootdir
end
local rootdir = path.join(target:autogendir(), "rules", "capnproto")
local filename = path.basename(sourcefile_capnp) .. ".capnp.c++"
local sourcefile_cx = target:autogenfile(sourcefile_capnp, {rootdir = rootdir, filename = filename})
local sourcefile_dir = prefixdir and path.join(rootdir, prefixdir) or path.directory(sourcefile_cx)

-- add includedirs
target:add("includedirs", sourcefile_dir, {public = true})

-- add objectfile, @see https://github.com/xmake-io/xmake/issues/5426
local objectfile = target:objectfile(sourcefile_cx)
table.insert(target:objectfiles(), objectfile)
end

-- generate build commands
function buildcmd(target, batchcmds, sourcefile_capnp, opt)
-- get capnp
local capnp = _get_capnp(target)

Expand All @@ -56,12 +88,8 @@ function buildcmd(target, batchcmds, sourcefile_capnp, opt)
local sourcefile_cx = target:autogenfile(sourcefile_capnp, {rootdir = rootdir, filename = filename})
local sourcefile_dir = prefixdir and path.join(rootdir, prefixdir) or path.directory(sourcefile_cx)

-- add includedirs
target:add("includedirs", sourcefile_dir, {public = public})

-- add objectfile
local objectfile = target:objectfile(sourcefile_cx)
table.insert(target:objectfiles(), objectfile)

-- add commands
batchcmds:mkdir(sourcefile_dir)
Expand All @@ -77,10 +105,10 @@ function buildcmd(target, batchcmds, sourcefile_capnp, opt)
table.insert(argv, path(prefixdir, function (p) return "--src-prefix=" .. p end))
end
table.insert(argv, "-o")
table.insert(argv, path(sourcefile_dir, function (p) return "c++:" .. p end))
table.insert(argv, path(rootdir, function (p) return "c++:" .. p end))
table.insert(argv, path(sourcefile_capnp))
batchcmds:vrunv(capnp, argv)
local configs = {includedirs = sourcefile_dir, languages = "c++14"}
local configs = {includedirs = sourcefile_dir, languages = (fileconfig and fileconfig.cpp_version) or "c++14"}
if target:is_plat("windows") then
configs.cxflags = "/TP"
end
Expand Down
4 changes: 4 additions & 0 deletions xmake/rules/capnproto/xmake.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@

-- define rule: capnproto.cpp
rule("capnproto.cpp")
add_deps("c++")
set_extensions(".capnp")
after_load(function (target)
return import("capnp").load(target)
end)
before_buildcmd_file(function (target, batchcmds, sourcefile_capnp, opt)
return import("capnp").buildcmd(target, batchcmds, sourcefile_capnp, opt)
end)
Loading