diff --git a/haskell/cabal.bzl b/haskell/cabal.bzl index 39bc3c39f2..cced9dd8a0 100644 --- a/haskell/cabal.bzl +++ b/haskell/cabal.bzl @@ -289,6 +289,12 @@ def _prepare_cabal_inputs( ] extra_args = ["--flags=" + " ".join(flags)] + if hs.toolchain.is_darwin: + ar_bindir = paths.dirname(cc.tools.ar) + + extra_args.append("--ghc-option=-pgmotool=" + paths.join(ar_bindir, "otool")) + extra_args.append("--ghc-option=-pgminstall_name_tool=" + paths.join(ar_bindir, "install_name_tool")) + ghc_version = [int(x) for x in hs.toolchain.version.split(".")] if dynamic_file: # See Note [No PIE when linking] in haskell/private/actions/link.bzl diff --git a/haskell/private/actions/link.bzl b/haskell/private/actions/link.bzl index 493627061e..13f0a38973 100644 --- a/haskell/private/actions/link.bzl +++ b/haskell/private/actions/link.bzl @@ -133,6 +133,13 @@ def link_binary( args.add_all(cc.linker_flags, format_each = "-optl%s") if with_profiling: args.add("-prof") + + if hs.toolchain.is_darwin: + ar_bindir = paths.dirname(cc.tools.ar) + + args.add(paths.join(ar_bindir, "otool"), format = "-pgmotool=%s") + args.add(paths.join(ar_bindir, "install_name_tool"), format = "-pgminstall_name_tool=%s") + args.add_all(hs.toolchain.ghcopts) args.add_all(compiler_flags) @@ -349,6 +356,13 @@ def link_library_dynamic(hs, cc, posix, dep_info, extra_srcs, object_files, my_p args = hs.actions.args() args.add_all(cc.linker_flags, format_each = "-optl%s") args.add_all(["-shared", "-dynamic"]) + + if hs.toolchain.is_darwin: + ar_bindir = paths.dirname(cc.tools.ar) + + args.add(paths.join(ar_bindir, "otool"), format = "-pgmotool=%s") + args.add(paths.join(ar_bindir, "install_name_tool"), format = "-pgminstall_name_tool=%s") + args.add_all(hs.toolchain.ghcopts) args.add_all(compiler_flags) extra_prefix = empty_lib_prefix