From 190b2d90f92f61eb802275729106b5d9fb9a7a7c Mon Sep 17 00:00:00 2001 From: Matthias Kilian Date: Sat, 18 Sep 2010 20:50:40 +0000 Subject: [PATCH] Enable shared libs on OpenBSD --- compiler/HsVersions.h | 2 +- compiler/main/DriverPipeline.hs | 2 +- compiler/main/StaticFlags.hs | 7 +++++++ compiler/nativeGen/Platform.hs | 4 ++++ libffi/ghc.mk | 2 ++ mk/config.mk.in | 7 ++++++- 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/compiler/HsVersions.h b/compiler/HsVersions.h index ad17189..4d8e521 100644 --- a/compiler/HsVersions.h +++ b/compiler/HsVersions.h @@ -17,7 +17,7 @@ you will screw up the layout where they are used in case expressions! #include "ghc_boot_platform.h" /* This macro indicates that the target OS supports ELF-like shared libraries */ -#if linux_TARGET_OS || freebsd_TARGET_OS +#if linux_TARGET_OS || freebsd_TARGET_OS || openbsd_TARGET_OS #define elf_OBJ_FORMAT 1 #endif diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index 08d568f..464aa28 100644 --- a/compiler/main/DriverPipeline.hs +++ b/compiler/main/DriverPipeline.hs @@ -1538,7 +1538,7 @@ linkBinary dflags o_files dep_packages = do let thread_opts | WayThreaded `elem` ways = [ -#if !defined(mingw32_TARGET_OS) && !defined(freebsd_TARGET_OS) && !defined(haiku_TARGET_OS) +#if !defined(mingw32_TARGET_OS) && !defined(freebsd_TARGET_OS) && !defined(openbsd_TARGET_OS) && !defined(haiku_TARGET_OS) "-lpthread" #endif #if defined(osf3_TARGET_OS) diff --git a/compiler/main/StaticFlags.hs b/compiler/main/StaticFlags.hs index a8e3551..52a8694 100644 --- a/compiler/main/StaticFlags.hs +++ b/compiler/main/StaticFlags.hs @@ -413,6 +413,9 @@ way_details = -- the problems are our fault or theirs, but it seems that using the -- alternative 1:1 threading library libthr works around it: "-optl-lthr" +#elif defined(openbsd_TARGET_OS) + "-optc-pthread" + , "-optl-pthread" #elif defined(solaris2_TARGET_OS) "-optl-lrt" #endif @@ -428,6 +431,10 @@ way_details = -- with -fPIC. Labels not in the current package are assumed to be in a DLL -- different from the current one. , "-fPIC" +#elif defined(openbsd_TARGET_OS) + -- Without this, linking the shared libHSffi fails because + -- it uses pthread mutexes. + , "-optl-pthread" #endif ], diff --git a/compiler/nativeGen/Platform.hs b/compiler/nativeGen/Platform.hs index afbf0b2..6c6b124 100644 --- a/compiler/nativeGen/Platform.hs +++ b/compiler/nativeGen/Platform.hs @@ -49,6 +49,7 @@ data OS | OSSolaris | OSMinGW32 | OSFreeBSD + | OSOpenBSD deriving (Show, Eq) @@ -56,6 +57,7 @@ data OS osElfTarget :: OS -> Bool osElfTarget OSLinux = True osElfTarget OSFreeBSD = True +osElfTarget OSOpenBSD = True osElfTarget _ = False -- | This is the target platform as far as the #ifdefs are concerned. @@ -96,6 +98,8 @@ defaultTargetOS = OSSolaris defaultTargetOS = OSMinGW32 #elif freebsd_TARGET_OS defaultTargetOS = OSFreeBSD +#elif openbsd_TARGET_OS +defaultTargetOS = OSOpenBSD #else defaultTargetOS = OSUnknown #endif diff --git a/libffi/ghc.mk b/libffi/ghc.mk index 8001fb2..eaffa3f 100644 --- a/libffi/ghc.mk +++ b/libffi/ghc.mk @@ -75,6 +75,8 @@ libffi_DYNAMIC_PROG = ifeq "$(darwin_TARGET_OS)" "1" libffi_DYNAMIC_LIBS = libffi/dist-install/build/libffi$(soext) \ libffi/dist-install/build/libffi.5$(soext) +else ifeq "$(openbsd_TARGET_OS)" "1" +libffi_DYNAMIC_LIBS = libffi/dist-install/build/libffi.so.5.10 else libffi_DYNAMIC_LIBS = libffi/dist-install/build/libffi.so \ libffi/dist-install/build/libffi.so.5 diff --git a/mk/config.mk.in b/mk/config.mk.in index c3c421a..3882c26 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -104,7 +104,12 @@ GhcDynamic=NO GhcProfiled=NO # Do we support shared libs? -PlatformSupportsSharedLibs = $(if $(filter $(TARGETPLATFORM),i386-unknown-linux x86_64-unknown-linux i386-unknown-freebsd x86_64-unknown-freebsd i386-unknown-mingw32 i386-apple-darwin powerpc-apple-darwin),YES,NO) +PlatformSupportsSharedLibs = $(if $(filter $(TARGETPLATFORM),\ + i386-unknown-linux x86_64-unknown-linux \ + i386-unknown-freebsd x86_64-unknown-freebsd \ + i386-unknown-openbsd x86_64-unknown-openbsd \ + i386-unknown-mingw32 \ + i386-apple-darwin powerpc-apple-darwin),YES,NO) # Build a compiler that will build *unregisterised* libraries and # binaries by default. Unregisterised code is supposed to compile and -- 1.7.10.4