Skip to content

Commit

Permalink
add includedirs for swig
Browse files Browse the repository at this point in the history
  • Loading branch information
tokomine committed Dec 11, 2023
1 parent 4262122 commit 84513cd
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 3 deletions.
14 changes: 14 additions & 0 deletions tests/projects/swig/auto_include/src/example.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
double My_variable = 3.0;

/* Compute factorial of n */
int fact(int n) {
if (n <= 1)
return 1;
else
return n*fact(n-1);
}

/* Compute n mod m */
int my_mod(int n, int m) {
return(n % m);
}
13 changes: 13 additions & 0 deletions tests/projects/swig/auto_include/src/example.i
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
%module example

%{
/* Put headers and other declarations here */
#include "nlohmann/json.hpp"
extern double My_variable;
extern int fact(int);
extern int my_mod(int n, int m);
%}

extern double My_variable;
extern int fact(int);
extern int my_mod(int n, int m);
10 changes: 10 additions & 0 deletions tests/projects/swig/auto_include/xmake.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
add_rules("mode.release", "mode.debug")
add_requires("python 3.x")
add_requires("nlohmann_json")

target("example")
add_rules("swig.cpp", {moduletype = "python"})
add_files("src/example.i", {scriptdir = "share", auto_include=true})
add_files("src/example.cpp")
add_packages("python")
add_packages("nlohmann_json")
28 changes: 25 additions & 3 deletions xmake/rules/swig/build_module_file.lua
Original file line number Diff line number Diff line change
Expand Up @@ -22,26 +22,48 @@
import("lib.detect.find_tool")

function main(target, batchcmds, sourcefile, opt)

-- get swig
opt = opt or {}
local swig = assert(find_tool("swig"), "swig not found!")
local sourcefile_cx = path.join(target:autogendir(), "rules", "swig", path.basename(sourcefile) .. (opt.sourcekind == "cxx" and ".cpp" or ".c"))
local sourcefile_cx = path.join(target:autogendir(), "rules", "swig",
path.basename(sourcefile) .. (opt.sourcekind == "cxx" and ".cpp" or ".c"))

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

-- add commands
local moduletype = assert(target:data("swig.moduletype"), "swig.moduletype not found!")
local argv = {"-" .. moduletype, "-o", sourcefile_cx}
local argv = { "-" .. moduletype, "-o", sourcefile_cx }
if opt.sourcekind == "cxx" then
table.insert(argv, "-c++")
end
local fileconfig = target:fileconfig(sourcefile)
if fileconfig.swigflags then
table.join2(argv, fileconfig.swigflags)
end

-- add includedirs
if fileconfig.auto_include then
local function _get_values_from_target(target, name)
local values = {}
for _, value in ipairs((target:get_from(name, "*"))) do
table.join2(values, value)
end
return table.unique(values)
end
local pathmaps = {
{ "includedirs", "includedir" },
{ "sysincludedirs", "includedir" },
{ "frameworkdirs", "frameworkdir" }
}
for _, pathmap in ipairs(pathmaps) do
for _, item in ipairs(_get_values_from_target(target, pathmap[1])) do
table.join2(argv, "-I" .. item)
end
end
end

table.insert(argv, sourcefile)
batchcmds:show_progress(opt.progress, "${color.build.object}compiling.swig.%s %s", moduletype, sourcefile)
batchcmds:mkdir(path.directory(sourcefile_cx))
Expand Down

0 comments on commit 84513cd

Please sign in to comment.