diff options
| author | ruki <[email protected]> | 2022-10-08 00:37:44 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-10-08 00:37:44 +0800 |
| commit | d848aa52eaca3e4dea1df3ade79bec2490d0b82f (patch) | |
| tree | 601c7d2cf8d31f3d3298e3067a9ad4a755b0bfd0 | |
| parent | f210bb148f933253f5dc1338d08382a19df6b245 (diff) | |
support export symbols for dmd
| -rw-r--r-- | tests/projects/dlang/shared_library/xmake.lua | 3 | ||||
| -rw-r--r-- | xmake/rules/utils/symbols/export_list/xmake.lua | 21 |
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") |
