X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=libffi%2Fghc.mk;h=1216a3238f450809fd122503c1e4cdfc4c63b4ed;hp=ca6ee5e12646f96143addaa9954f3e41cd18fa9c;hb=0af418beb1aadcae1df036240151556895d00321;hpb=b547f2e28b0f07b089aada1164c1dd834f894996 diff --git a/libffi/ghc.mk b/libffi/ghc.mk index ca6ee5e..1216a32 100644 --- a/libffi/ghc.mk +++ b/libffi/ghc.mk @@ -66,23 +66,30 @@ endif BINDIST_STAMPS = libffi/stamp.ffi.build libfii/stamp.ffi.configure -INSTALL_HEADERS += libffi/ffi.h -libffi_STATIC_LIB = libffi/libffi.a -INSTALL_LIBS += libffi/libHSffi.a libffi/HSffi.o +INSTALL_HEADERS += libffi/dist-install/build/ffi.h +libffi_STATIC_LIB = libffi/dist-install/build/libffi.a +INSTALL_LIBS += libffi/dist-install/build/libHSffi.a \ + libffi/dist-install/build/libHSffi_p.a \ + libffi/dist-install/build/HSffi.o # We have to add the GHC version to the name of our dynamic libs, because # they will be residing in the system location along with dynamic libs from # other GHC installations. libffi_HS_DYN_LIB_NAME = libHSffi$(dyn_libsuf) -libffi_HS_DYN_LIB = libffi/$(libffi_HS_DYN_LIB_NAME) +libffi_HS_DYN_LIB = libffi/dist-install/build/$(libffi_HS_DYN_LIB_NAME) ifeq "$(Windows)" "YES" libffi_DYNAMIC_PROG = $(libffi_HS_DYN_LIB).a libffi_DYNAMIC_LIBS = $(libffi_HS_DYN_LIB) else libffi_DYNAMIC_PROG = -libffi_DYNAMIC_LIBS = libffi/libffi.so libffi/libffi.so.5 libffi/libffi.so.5.0.7 +ifeq "$(darwin_TARGET_OS)" "1" +libffi_DYNAMIC_LIBS = libffi/libffi$(soext) libffi/libffi.5$(soext) libffi/libffi.5.0.9$(soext) +else +libffi_DYNAMIC_LIBS = libffi/dist-install/build/libffi.so \ + libffi/dist-install/build/libffi.so.5 +endif endif ifeq "$(BuildSharedLibs)" "YES" @@ -105,66 +112,79 @@ endif ifneq "$(BINDIST)" "YES" $(libffi_STAMP_CONFIGURE): - $(RM) -rf $(LIBFFI_DIR) libffi/build - cd libffi && $(TAR) -zxf tarball/libffi*.tar.gz + "$(RM)" $(RM_OPTS) -r $(LIBFFI_DIR) libffi/build + cd libffi && $(TAR) -zxf ../ghc-tarballs/libffi/libffi*.tar.gz mv libffi/libffi-* libffi/build chmod +x libffi/ln - cd libffi && $(PATCH) -p0 < libffi.dllize-3.0.6.patch - - # This patch is just the resulting delta from running automake, autoreconf, libtoolize --force --copy - cd libffi && $(PATCH) -p0 < libffi.autotools-update.patch + cd libffi/build && "$(PATCH)" -p1 < ../libffi.dllize-3.0.8.patch + # This patch is just the resulting delta from running + # automake && autoreconf && libtoolize --force --copy + cd libffi/build && "$(PATCH)" -p1 < ../libffi.autotools-update-3.0.8.patch +# Because -Werror may be in SRC_CC_OPTS/SRC_LD_OPTS, we need to turn +# warnings off or the compilation of libffi might fail due to warnings cd libffi && \ (set -o igncr 2>/dev/null) && set -o igncr; export SHELLOPTS; \ PATH=`pwd`:$$PATH; \ export PATH; \ cd build && \ - CC=$(WhatGccIsCalled) $(SHELL) configure \ - --enable-static=yes \ + CC=$(WhatGccIsCalled) \ + CFLAGS="$(SRC_CC_OPTS) $(CONF_CC_OPTS) -w" \ + LDFLAGS="$(SRC_LD_OPTS) $(CONF_LD_OPTS) -w" \ + "$(SHELL)" configure \ + --enable-static=yes \ --enable-shared=$(libffi_EnableShared) \ - --host=$(PLATFORM) --build=$(PLATFORM) + --host=$(PLATFORM) --build=$(PLATFORM) # libffi.so needs to be built with the correct soname. # NOTE: this builds libffi_convience.so with the incorrect # soname, but we don't need that anyway! cd libffi && \ - $(CP) build/libtool build/libtool.orig; \ + "$(CP)" build/libtool build/libtool.orig; \ sed -e s/soname_spec=.*/soname_spec="$(libffi_HS_DYN_LIB_NAME)"/ build/libtool.orig > build/libtool # We don't want libtool's cygwin hacks cd libffi && \ - $(CP) build/libtool build/libtool.orig; \ + "$(CP)" build/libtool build/libtool.orig; \ sed -e s/dlname=\'\$$tdlname\'/dlname=\'\$$dlname\'/ build/libtool.orig > build/libtool touch $@ -libffi/ffi.h: $(libffi_STAMP_CONFIGURE) - $(CP) libffi/build/include/ffi.h $@ +libffi/dist-install/build/ffi.h: $(libffi_STAMP_CONFIGURE) | $$(dir $$@)/. + "$(CP)" libffi/build/include/ffi.h $@ -$(libffi_STAMP_BUILD): $(libffi_STAMP_CONFIGURE) - cd libffi && \ - $(MAKE) -C build MAKEFLAGS=; \ - (cd build; ./libtool --mode=install cp libffi.la $(TOP)/libffi) + +$(libffi_STAMP_BUILD): $(libffi_STAMP_CONFIGURE) | libffi/dist-install/build/. + $(MAKE) -C libffi/build MAKEFLAGS= + cd libffi/build && ./libtool --mode=install cp libffi.la $(TOP)/libffi/dist-install/build + + # We actually want both static and dllized libraries, because we build + # the runtime system both ways. libffi_convenience.a is the static version. +ifeq "$(Windows)" "YES" + cp libffi/build/.libs/libffi_convenience.a $(libffi_STATIC_LIB) +endif + + touch $@ $(libffi_STATIC_LIB): $(libffi_STAMP_BUILD) # Rename libffi.a to libHSffi.a -libffi/libHSffi.a libffi/libHSffi_p.a: $(libffi_STATIC_LIB) - $(CP) $(libffi_STATIC_LIB) libffi/libHSffi.a - $(CP) $(libffi_STATIC_LIB) libffi/libHSffi_p.a +libffi/dist-install/build/libHSffi.a libffi/dist-install/build/libHSffi_p.a: $(libffi_STATIC_LIB) + "$(CP)" $(libffi_STATIC_LIB) libffi/dist-install/build/libHSffi.a + "$(CP)" $(libffi_STATIC_LIB) libffi/dist-install/build/libHSffi_p.a -$(eval $(call all-target,libffi,libffi/libHSffi.a libffi/libHSffi_p.a)) +$(eval $(call all-target,libffi,$(INSTALL_HEADERS) $(INSTALL_LIBS))) # The GHCi import lib isn't needed as compiler/ghci/Linker.lhs + rts/Linker.c # link the interpreted references to FFI to the compiled FFI. # Instead of adding libffi to the list preloaded packages (see # compiler/ghci/Linker.lhs:emptyPLS) we generate an empty HSffi.o -libffi/HSffi.o: libffi/libHSffi.a - cd libffi && \ - touch empty.c; \ - $(CC) -c empty.c -o HSffi.o +libffi/dist-install/build/HSffi.o: libffi/dist-install/build/libHSffi.a + cd libffi/dist-install/build && \ + touch empty.c && \ + "$(CC)" $(SRC_CC_OPTS) $(CONF_CC_OPTS) -c empty.c -o HSffi.o -$(eval $(call all-target,libffi,libffi/HSffi.o)) +$(eval $(call all-target,libffi,libffi/dist-install/build/HSffi.o)) ifeq "$(BuildSharedLibs)" "YES" ifeq "$(Windows)" "YES" @@ -173,27 +193,27 @@ libffi/libffi.dll.a $(libffi_HS_DYN_LIB): $(libffi_STAMP_BUILD) # there is no need to copy from libffi.dll to libHSffi...dll. # However, the renaming is still required for the import library # libffi.dll.a. -$(libffi_HS_DYN_LIB).a: libffi/libffi.dll.a - $(CP) libffi/libffi.dll.a $(libffi_HS_DYN_LIB).a +$(libffi_HS_DYN_LIB).a: libffi/dist-install/build/libffi.dll.a | $$(dir $$@)/. + "$(CP)" $< $@ $(eval $(call all-target,libffi,$(libffi_HS_DYN_LIB).a)) else $(libffi_DYNAMIC_LIBS): $(libffi_STAMP_BUILD) # Rename libffi.so to libHSffi...so -$(libffi_HS_DYN_LIB): $(libffi_DYNAMIC_LIBS) - $(CP) $(word 1,$(libffi_DYNAMIC_LIBS)) $(libffi_HS_DYN_LIB) +$(libffi_HS_DYN_LIB): $(libffi_DYNAMIC_LIBS) | $$(dir $$@)/. + "$(CP)" $(word 1,$(libffi_DYNAMIC_LIBS)) $(libffi_HS_DYN_LIB) +ifeq "$(darwin_TARGET_OS)" "1" + # Ensure library's install name is correct before anyone links with it. + install_name_tool -id $(ghclibdir)/$(libffi_HS_DYN_LIB_NAME) $(libffi_HS_DYN_LIB) +endif $(eval $(call all-target,libffi,$(libffi_HS_DYN_LIB))) endif endif $(eval $(call clean-target,libffi,, \ - libffi/build libffi/stamp.ffi.* libffi/ffi.h libffi/empty.c \ - libffi/libffi.a libffi/libffi.la \ - libffi/HSffi.o libffi/libHSffi.a libffi/libHSffi_p.a \ - $(libffi_DYNAMIC_PROG) $(libffi_DYNAMIC_LIBS) \ - $(libffi_HS_DYN_LIB) $(libffi_HS_DYN_LIB).a)) + libffi/build libffi/stamp.ffi.* libffi/dist-install)) endif #-----------------------------------------------------------------------------