diff options
| author | ruki <[email protected]> | 2025-12-03 22:40:21 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-12-03 22:40:21 +0800 |
| commit | 2a37d59a3038b38a48782d5d207986ff4b45bc33 (patch) | |
| tree | 051b44d72d2f64ec4f2d1ae3b6c5da609502fb2e /xmake/modules/core/tools/flang.lua | |
| parent | 4b24a3cb479df5ce3dd19eefa0c8ad0b794e5a4c (diff) | |
fix install_name
Diffstat (limited to 'xmake/modules/core/tools/flang.lua')
| -rw-r--r-- | xmake/modules/core/tools/flang.lua | 21 |
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 |
