summaryrefslogtreecommitdiff
blob: 73c4aa278dd87994f49a39b8a2a9f6a04229346f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Make ghc use the libffi installed on the system instead of the bundled one.

This patch is based on the one used by Debian and Fedora, but was
augmented by additional lines to identify the libffi include directory
using pkg-config, as libffi on Gentoo installs into a subdirectory of
the system include directory.

2012-04-24 Martin von Gagern

References:
https://bugs.gentoo.org/411925
http://hackage.haskell.org/trac/ghc/ticket/5743

Index: ghc-7.4.1/ghc.mk
===================================================================
--- ghc-7.4.1.orig/ghc.mk
+++ ghc-7.4.1/ghc.mk
@@ -579,7 +579,6 @@ BUILD_DIRS += \
    driver/ghci \
    driver/ghc \
    driver/haddock \
-   libffi \
    includes \
    rts
 
Index: ghc-7.4.1/rts/ghc.mk
===================================================================
--- ghc-7.4.1.orig/rts/ghc.mk
+++ ghc-7.4.1/rts/ghc.mk
@@ -86,8 +86,7 @@
 ALL_RTS_DEF_LIBNAMES 	= base ghc-prim
 ALL_RTS_DEF_LIBS	= \
 	rts/dist/build/win32/libHSbase.dll.a \
-	rts/dist/build/win32/libHSghc-prim.dll.a \
-	libffi/build/inst/lib/libffi.dll.a
+	rts/dist/build/win32/libHSghc-prim.dll.a 
 
 # -- import libs for the regular Haskell libraries
 define make-importlib-def # args $1 = lib name
@@ -172,12 +171,12 @@
 # Making a shared library for the RTS.
 ifneq "$$(findstring dyn, $1)" ""
 ifeq "$$(HOSTPLATFORM)" "i386-unknown-mingw32"
-$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(ALL_RTS_DEF_LIBS) rts/libs.depend rts/dist/build/libffi-5.dll
+$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(ALL_RTS_DEF_LIBS) rts/libs.depend
 	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(rts_dist_HC)" -package-name rts -shared -dynamic -dynload deploy \
 	  -no-auto-link-packages -Lrts/dist/build -lffi-5 `cat rts/libs.depend` $$(rts_$1_OBJS) $$(ALL_RTS_DEF_LIBS) -o $$@
 else
-$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) rts/libs.depend rts/dist/build/libffi$$(soext)
+$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) rts/libs.depend
 	"$$(RM)" $$(RM_OPTS) $$@
 	"$$(rts_dist_HC)" -package-name rts -shared -dynamic -dynload deploy \
 	  -no-auto-link-packages -Lrts/dist/build -lffi `cat rts/libs.depend` $$(rts_$1_OBJS) \
@@ -188,9 +187,9 @@
 endif
 endif
 else
-$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) $$(rts_ffi_objs_stamp)
+$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS)
 	"$$(RM)" $$(RM_OPTS) $$@
-	echo $$(rts_ffi_objs) $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) | "$$(XARGS)" $$(XARGS_OPTS) "$$(AR_STAGE1)" \
+	echo $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) | "$$(XARGS)" $$(XARGS_OPTS) "$$(AR_STAGE1)" \
 		$$(AR_OPTS_STAGE1) $$(EXTRA_AR_ARGS_STAGE1) $$@
 endif
 
@@ -403,6 +402,12 @@
 rts/dist/build/sm/Evac_thr_CC_OPTS += -DPARALLEL_GC -Irts/sm
 rts/dist/build/sm/Scav_thr_CC_OPTS += -DPARALLEL_GC -Irts/sm
 
+# Use system libffi
+libffi_include_flags:=$(shell pkg-config --cflags-only-I libffi)
+rts/Adjustor_CC_OPTS += $(libffi_include_flags)
+rts/Interpreter_CC_OPTS += $(libffi_include_flags)
+rts/sm/Storage_CC_OPTS += $(libffi_include_flags)
+
 #-----------------------------------------------------------------------------
 # Add PAPI library if needed
 
@@ -504,10 +509,8 @@
 # installing
 
 INSTALL_LIBS += $(ALL_RTS_LIBS)
-INSTALL_LIBS += $(wildcard rts/dist/build/libffi$(soext)*)
-INSTALL_LIBS += $(wildcard rts/dist/build/libffi-5.dll)
 
-install: install_libffi_headers
+install:
 
 .PHONY: install_libffi_headers
 install_libffi_headers :
Index: ghc-7.4.1/rts/package.conf.in
===================================================================
--- ghc-7.4.1.orig/rts/package.conf.in
+++ ghc-7.4.1/rts/package.conf.in
@@ -24,8 +24,9 @@
 hs-libraries:   "HSrts"
 
 extra-libraries:
+				"ffi"
 #ifdef HAVE_LIBM
-                		"m"		/* for ldexp() */
+			      , "m"		/* for ldexp() */
 #endif
 #ifdef HAVE_LIBRT
 			      , "rt"
Index: ghc-7.4.1/compiler/ghc.mk
===================================================================
--- ghc-7.4.1.orig/compiler/ghc.mk
+++ ghc-7.4.1/compiler/ghc.mk
@@ -260,6 +260,8 @@
 
 compiler_CPP_OPTS += -I$(GHC_INCLUDE_DIR)
 compiler_CPP_OPTS += ${GhcCppOpts}
+libffi_include_flags := $(shell pkg-config --cflags-only-I libffi)
+compiler/ghci/LibFFI_HSC2HS_OPTS += $(addprefix --cflag=,$(libffi_include_flags))
 
 $(PRIMOPS_TXT) compiler/parser/Parser.y: %: %.pp compiler/stage1/$(PLATFORM_H)
 	$(CPP) $(RAWCPP_FLAGS) -P $(compiler_CPP_OPTS) -x c $< | grep -v '^#pragma GCC' > $@