Skip to content
Browse files

Resurrect UseLibFFIForAdjustors from bitrot.

* Pass -Irts/dist/build to the C preprocessor to expose libffi headers (ffi.h and ffitarget.h) to foreign import wrappers during the building process of GHC itself.
* Install libffi headers into $(ghcheaderdir) just like any other C headers. Otherwise an installed GHC can't find them when it wants to compile foreign import wrappers.
* Include libffi headers in the bindist for the same reason.
  • Loading branch information...
1 parent 3640d37 commit 616b669738e6ddaf0588957ad974b91944420983 @phonohawk phonohawk committed Dec 6, 2011
Showing with 19 additions and 10 deletions.
  1. +1 −1 compiler/ghc.mk
  2. +5 −3 ghc.mk
  3. +4 −4 libffi/ghc.mk
  4. +8 −1 rts/ghc.mk
  5. +1 −1 rts/package.conf.in
View
2 compiler/ghc.mk
@@ -497,7 +497,7 @@ compiler/hsSyn/HsLit_HC_OPTS += -fomit-interface-pragmas
endif
# LibFFI.hs #includes ffi.h
-compiler/stage2/build/LibFFI.hs : $(ffi_HEADER)
+compiler/stage2/build/LibFFI.hs : $(libffi_HEADERS)
# On Windows it seems we also need to link directly to libffi
ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32"
define windowsDynLinkToFfi
View
8 ghc.mk
@@ -929,6 +929,7 @@ $(eval $(call bindist,.,\
$(includes_H_FILES) \
$(includes_DERIVEDCONSTANTS) \
$(includes_GHCCONSTANTS) \
+ $(libffi_HEADERS) \
$(INSTALL_LIBEXECS) \
$(INSTALL_LIBEXEC_SCRIPTS) \
$(INSTALL_TOPDIRS) \
@@ -1207,9 +1208,10 @@ maintainer-clean : distclean
.PHONY: all_libraries
.PHONY: bootstrapping-files
-bootstrapping-files: includes/ghcautoconf.h
-bootstrapping-files: includes/DerivedConstants.h
-bootstrapping-files: includes/GHCConstants.h
+bootstrapping-files: $(includes_H_CONFIG)
+bootstrapping-files: $(includes_DERIVEDCONSTANTS)
+bootstrapping-files: $(includes_GHCCONSTANTS)
+bootstrapping-files: $(libffi_HEADERS)
.DELETE_ON_ERROR:
View
8 libffi/ghc.mk
@@ -32,7 +32,8 @@ libffi_EnableShared = no
endif
libffi_STATIC_LIB = libffi/build/inst/lib/libffi.a
-ffi_HEADER = rts/dist/build/ffi.h
+libffi_HEADERS = rts/dist/build/ffi.h \
+ rts/dist/build/ffitarget.h
ifeq "$(OSTYPE)" "cygwin"
LIBFFI_PATH_MANGLE = PATH=$$(cygpath "$(TOP)")/libffi:$$PATH; export PATH;
@@ -101,9 +102,8 @@ $(libffi_STAMP_INSTALL): $(libffi_STAMP_BUILD) $(TOUCH_DEP)
$(libffi_STATIC_LIB): $(libffi_STAMP_INSTALL)
@test -f $@ || { echo "$< exists, but $@ does not."; echo "Suggest removing $<."; exit 1; }
-$(ffi_HEADER): $(libffi_STAMP_INSTALL) | $$(dir $$@)/.
- cp libffi/build/inst/lib/libffi-*/include/ffitarget.h $(dir $@)
- cp libffi/build/inst/lib/libffi-*/include/ffi.h $@
+$(libffi_HEADERS): $(libffi_STAMP_INSTALL) | $$(dir $$@)/.
+ cp -f libffi/build/inst/lib/libffi-*/include/$(notdir $@) $@
$(eval $(call clean-target,libffi,, \
libffi/build $(wildcard libffi/stamp.ffi.*) libffi/dist-install))
View
9 rts/ghc.mk
@@ -455,7 +455,7 @@ endif
$(eval $(call dependencies,rts,dist,1))
-$(rts_dist_depfile_c_asm) : $(ffi_HEADER) $(DTRACEPROBES_H)
+$(rts_dist_depfile_c_asm) : $(libffi_HEADERS) $(DTRACEPROBES_H)
# -----------------------------------------------------------------------------
# compile dtrace probes if dtrace is supported
@@ -507,6 +507,13 @@ 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
+
+.PHONY: install_libffi_headers
+install_libffi_headers :
+ $(call INSTALL_DIR,"$(DESTDIR)$(ghcheaderdir)")
+ $(call INSTALL_HEADER,$(INSTALL_OPTS),$(libffi_HEADERS),"$(DESTDIR)$(ghcheaderdir)/")
+
# -----------------------------------------------------------------------------
# cleaning
View
2 rts/package.conf.in
@@ -51,7 +51,7 @@ extra-libraries:
#ifdef INSTALLING
include-dirs: INCLUDE_DIR PAPI_INCLUDE_DIR
#else /* !INSTALLING */
-include-dirs: TOP"/includes" TOP"/includes/dist-ghcconstants/header" TOP"/includes/dist-derivedconstants/header"
+include-dirs: TOP"/rts/dist/build" TOP"/includes" TOP"/includes/dist-ghcconstants/header" TOP"/includes/dist-derivedconstants/header"
#endif
includes: Stg.h

0 comments on commit 616b669

Please sign in to comment.
Something went wrong with that request. Please try again.