[GHC] #12606: Linux (ELF) Support for "ghc -static -shared"

#12606: Linux (ELF) Support for "ghc -static -shared" ----------------------------------------+--------------------------------- Reporter: tmobile | Owner: Type: feature request | Status: new Priority: normal | Milestone: ⊥ Component: Compiler | Version: 8.0.1 Keywords: | Operating System: Linux Architecture: Unknown/Multiple | Type of failure: None/Unknown Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: ----------------------------------------+--------------------------------- On some platforms it is possible to create a stand-alone shared library out of some object `Foo.o` including foreign exports with something like: `ghc -static -shared Foo.o ...` The resulting library will have `Foo`'s dependencies including `base` as well as the RTS statically linked in. On BSDs this is possible because generating position independent code is the default there, and on Windows this is possible because the dynamic loader uses some magic that doesn't require position independent code. Unfortunately on Linux this is not possible because `libHSbase`, `libHSrts`, etc. are not built with `-fPIC` unless one specifically asks for it when building GHC. As far as I know this is the only way to get `-static -shared` to work on this platform. There are use cases for compiling Haskell code into a single shared object that does not have additional runtime dependencies. Suppose one wishes to write a plugin for a program in Haskell. It would be nice to provide the plugin as a single shared object, rather than requiring GHC's libraries to be present at runtime as well. An easy solution might be adding a switch to the configure script or `build.mk` to make it easier to build GHC+libs with `-fPIC` on Linux. Ideally it would be possible to build and install both PIC and non-PIC libraries and have GHC choose the correct one at link time based on the flags and target platform, since PIC code carries a small space/performance overhead and isn't necessary on Linux in most cases. I don't know my way around GHC(outside of the GHC API) or the build system that well yet, but if adding extra build system flags and GHC link-time flag handling code to make this work is an acceptable solution I'm happy to spend the time to get this working. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12606 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#12606: Linux (ELF) Support for "ghc -static -shared" -------------------------------------+------------------------------------- Reporter: tmobile | Owner: (none) Type: feature request | Status: closed Priority: normal | Milestone: ⊥ Component: Compiler | Version: 8.0.1 Resolution: wontfix | Keywords: Operating System: Linux | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by tmobile): * status: new => closed * resolution: => wontfix -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12606#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC