@@ -140,7 +140,8 @@ def _prepare_cabal_inputs(
140140 package_database ,
141141 verbose ,
142142 transitive_haddocks ,
143- dynamic_binary = None ):
143+ is_library = False ,
144+ dynamic_file = None ):
144145 """Compute Cabal wrapper, arguments, inputs."""
145146 with_profiling = is_profiling_enabled (hs )
146147
@@ -212,16 +213,19 @@ def _prepare_cabal_inputs(
212213 for arg in ["-package-db" , "./" + _dirname (package_db )]
213214 ], join_with = " " , format_each = "--ghc-arg=%s" , omit_if_empty = False )
214215 args .add ("--flags=" + " " .join (flags ))
215- if not hs . toolchain . is_darwin and not hs . toolchain . is_windows :
216+ if dynamic_file :
216217 # See Note [No PIE when linking] in haskell/private/actions/link.bzl
217- args .add ("--ghc-option=-optl-no-pie" )
218+ if not (hs .toolchain .is_darwin or hs .toolchain .is_windows ):
219+ version = [int (x ) for x in hs .toolchain .version .split ("." )]
220+ if version < [8 , 10 ] or not is_library :
221+ args .add ("--ghc-option=-optl-no-pie" )
218222 args .add_all (hs .toolchain .cabalopts )
219223 args .add_all (cabalopts )
220- if dynamic_binary :
224+ if dynamic_file :
221225 args .add_all (
222226 [
223227 "--ghc-option=-optl-Wl,-rpath," + create_rpath_entry (
224- binary = dynamic_binary ,
228+ binary = dynamic_file ,
225229 dependency = lib ,
226230 keep_filename = False ,
227231 prefix = relative_rpath_prefix (hs .toolchain .is_darwin ),
@@ -426,7 +430,8 @@ def _haskell_cabal_library_impl(ctx):
426430 cabal_wrapper = ctx .executable ._cabal_wrapper ,
427431 package_database = package_database ,
428432 verbose = ctx .attr .verbose ,
429- dynamic_binary = dynamic_library ,
433+ is_library = True ,
434+ dynamic_file = dynamic_library ,
430435 transitive_haddocks = _gather_transitive_haddocks (ctx .attr .deps ),
431436 )
432437 outputs = [
@@ -702,7 +707,7 @@ def _haskell_cabal_binary_impl(ctx):
702707 cabal_wrapper = ctx .executable ._cabal_wrapper ,
703708 package_database = package_database ,
704709 verbose = ctx .attr .verbose ,
705- dynamic_binary = binary ,
710+ dynamic_file = binary ,
706711 transitive_haddocks = _gather_transitive_haddocks (ctx .attr .deps ),
707712 )
708713 ctx .actions .run (
0 commit comments