summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Kilian <kili@outback.escape.de>2010-09-18 20:50:40 +0000
committerMatthias Kilian <kili@outback.escape.de>2010-09-18 20:50:40 +0000
commit190b2d90f92f61eb802275729106b5d9fb9a7a7c (patch)
treef3c5e62159da1ee498abeb0ec1619763bc742120
parenta6f2d598e1e7760d334d1b5ea0b7745e66835e11 (diff)
downloadhaskell-190b2d90f92f61eb802275729106b5d9fb9a7a7c.tar.gz
Enable shared libs on OpenBSD
-rw-r--r--compiler/HsVersions.h2
-rw-r--r--compiler/main/DriverPipeline.hs2
-rw-r--r--compiler/main/StaticFlags.hs7
-rw-r--r--compiler/nativeGen/Platform.hs4
-rw-r--r--libffi/ghc.mk2
-rw-r--r--mk/config.mk.in7
6 files changed, 21 insertions, 3 deletions
diff --git a/compiler/HsVersions.h b/compiler/HsVersions.h
index ad17189907..4d8e52133f 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 08d568fa6b..464aa28350 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 a8e35516ad..52a86948e4 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 afbf0b2ae2..6c6b124a15 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 8001fb27a9..eaffa3fc7f 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 c3c421a2ce..3882c26bdb 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