summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-10-08 00:37:44 +0800
committerruki <[email protected]>2022-10-08 00:37:44 +0800
commitd848aa52eaca3e4dea1df3ade79bec2490d0b82f (patch)
tree601c7d2cf8d31f3d3298e3067a9ad4a755b0bfd0
parentf210bb148f933253f5dc1338d08382a19df6b245 (diff)
support export symbols for dmd
-rw-r--r--tests/projects/dlang/shared_library/xmake.lua3
-rw-r--r--xmake/rules/utils/symbols/export_list/xmake.lua21
2 files changed, 19 insertions, 5 deletions
diff --git a/tests/projects/dlang/shared_library/xmake.lua b/tests/projects/dlang/shared_library/xmake.lua
index 9535bf1d3..6fd4a6c8f 100644
--- a/tests/projects/dlang/shared_library/xmake.lua
+++ b/tests/projects/dlang/shared_library/xmake.lua
@@ -4,6 +4,9 @@ target("interfaces")
set_kind("shared")
add_files("src/interfaces.d")
add_includedirs("src", {public = true})
+ add_rules("utils.symbols.export_list", {symbols = {
+ "add",
+ "sub"}})
target("test")
set_kind("binary")
diff --git a/xmake/rules/utils/symbols/export_list/xmake.lua b/xmake/rules/utils/symbols/export_list/xmake.lua
index 4184432a4..34303b72a 100644
--- a/xmake/rules/utils/symbols/export_list/xmake.lua
+++ b/xmake/rules/utils/symbols/export_list/xmake.lua
@@ -54,7 +54,22 @@ rule("utils.symbols.export_list")
end
end
assert(exportsymbols and #exportsymbols > 0, 'rule("utils.symbols.export_list"): no exported symbols!')
- if target:has_tool("ld", "link") then
+ local linkername = target:linker():name()
+ if linkername == "dmd" then
+ if target:is_plat("windows") then
+ exportkind = "def"
+ exportfile = path.join(target:autogendir(), "rules", "symbols", "export_list.def")
+ target:add("shflags", "-L/def:" .. exportfile, {force = true})
+ elseif target:is_plat("macosx", "iphoneos", "watchos", "appletvos") then
+ exportkind = "apple"
+ exportfile = path.join(target:autogendir(), "rules", "symbols", "export_list.exp")
+ target:add("shflags", {"-L-exported_symbols_list", "-L" .. exportfile}, {force = true, expand = false})
+ else
+ exportkind = "ver"
+ exportfile = path.join(target:autogendir(), "rules", "symbols", "export_list.map")
+ target:add("shflags", "-L--version-script=" .. exportfile, {force = true})
+ end
+ elseif target:has_tool("ld", "link") then
exportkind = "def"
exportfile = path.join(target:autogendir(), "rules", "symbols", "export_list.def")
target:add("shflags", "/def:" .. exportfile, {force = true})
@@ -67,10 +82,6 @@ rule("utils.symbols.export_list")
exportkind = "ver"
exportfile = path.join(target:autogendir(), "rules", "symbols", "export_list.map")
target:add("shflags", "-Wl,--version-script=" .. exportfile, {force = true})
- elseif target:has_tool("ld", "dmd") or target:has_tool("sh", "dmd") then
- exportkind = "ver"
- exportfile = path.join(target:autogendir(), "rules", "symbols", "export_list.map")
- target:add("shflags", "-L--version-script=" .. exportfile, {force = true})
elseif target:has_tool("ld", "ld") or target:has_tool("sh", "ld") then
exportkind = "ver"
exportfile = path.join(target:autogendir(), "rules", "symbols", "export_list.map")