summaryrefslogtreecommitdiff
path: root/xmake/modules/core/tools/flang.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2025-12-03 22:40:21 +0800
committerruki <[email protected]>2025-12-03 22:40:21 +0800
commit2a37d59a3038b38a48782d5d207986ff4b45bc33 (patch)
tree051b44d72d2f64ec4f2d1ae3b6c5da609502fb2e /xmake/modules/core/tools/flang.lua
parent4b24a3cb479df5ce3dd19eefa0c8ad0b794e5a4c (diff)
fix install_name
Diffstat (limited to 'xmake/modules/core/tools/flang.lua')
-rw-r--r--xmake/modules/core/tools/flang.lua21
1 files changed, 19 insertions, 2 deletions
diff --git a/xmake/modules/core/tools/flang.lua b/xmake/modules/core/tools/flang.lua
index 41e7643de..7e1c1153a 100644
--- a/xmake/modules/core/tools/flang.lua
+++ b/xmake/modules/core/tools/flang.lua
@@ -82,12 +82,29 @@ function nf_symbol(self, level)
end
-- make the link arguments list
--- flang doesn't support -install_name, so we don't add it
+-- flang needs to pass install_name through -Wl, for macOS shared libraries
function linkargv(self, objectfiles, targetkind, targetfile, flags, opt)
opt = opt or {}
+ -- add install_name for macOS shared libraries
+ local flags_extra = {}
+ if targetkind == "shared" and self:is_plat("macosx", "iphoneos", "watchos") then
+ -- check if install_name is already in flags
+ local has_install_name = false
+ for i, flag in ipairs(flags) do
+ if flag == "-install_name" or flag:startswith("-Wl,-install_name") then
+ has_install_name = true
+ break
+ end
+ end
+ if not has_install_name then
+ table.insert(flags_extra, "-Wl,-install_name")
+ table.insert(flags_extra, "-Wl,@rpath/" .. path.filename(targetfile))
+ end
+ end
+
-- init arguments
- local argv = table.join("-o", targetfile, objectfiles, flags)
+ local argv = table.join("-o", targetfile, objectfiles, flags, flags_extra)
if is_host("windows") and not opt.rawargs then
argv = winos.cmdargv(argv, {escape = true})
end