X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=libffi%2Fghc.mk;h=3f101dffedd38a7a9c365b5284f6ed87dc2846d3;hb=22c42ec32752ea67b5071df32fd9997a3f4d7346;hp=eca8dd2e116a6e71e011499115e6545c4efb3ca6;hpb=34cc75e1a62638f2833815746ebce0a9114dc26b;p=ghc-hetmet.git diff --git a/libffi/ghc.mk b/libffi/ghc.mk index eca8dd2..3f101df 100644 --- a/libffi/ghc.mk +++ b/libffi/ghc.mk @@ -1,3 +1,15 @@ +# ----------------------------------------------------------------------------- +# +# (c) 2009 The University of Glasgow +# +# This file is part of the GHC build system. +# +# To understand how the build system works and how to modify it, see +# http://hackage.haskell.org/trac/ghc/wiki/Building/Architecture +# http://hackage.haskell.org/trac/ghc/wiki/Building/Modifying +# +# ----------------------------------------------------------------------------- + # We package libffi as Haskell package for two reasons: @@ -45,11 +57,11 @@ PLATFORM := $(shell echo $(HOSTPLATFORM) | sed 's/i[567]86/i486/g') # path that always fails. ifeq "$(BuildSharedLibs)" "YES" -libffi_STAMP_BUILD = libffi/stamp.ffi.build-shared libffi_STAMP_CONFIGURE = libffi/stamp.ffi.configure-shared +libffi_STAMP_BUILD = libffi/stamp.ffi.build-shared else -libffi_STAMP_BUILD = libffi/stamp.ffi.build libffi_STAMP_CONFIGURE = libffi/stamp.ffi.configure +libffi_STAMP_BUILD = libffi/stamp.ffi.build endif BINDIST_STAMPS = libffi/stamp.ffi.build libfii/stamp.ffi.configure @@ -62,12 +74,12 @@ INSTALL_LIBS += libffi/libHSffi.a libffi/HSffi.o # they will be residing in the system location along with dynamic libs from # other GHC installations. -libffi_HS_DYN_LIB_NAME=libHSffi-ghc$(ProjectVersion)$(soext) -libffi_HS_DYN_LIB_PATH=libffi/$(libffi_HS_DYN_LIB_NAME) +libffi_HS_DYN_LIB_NAME = libHSffi$(dyn_libsuf) +libffi_HS_DYN_LIB = libffi/$(libffi_HS_DYN_LIB_NAME) ifeq "$(Windows)" "YES" -libffi_DYNAMIC_PROG = $(libffi_HS_DYN_LIB_PATH).a -libffi_DYNAMIC_LIBS = $(libffi_HS_DYN_LIB_PATH) +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 @@ -80,9 +92,9 @@ libffi_EnableShared=no endif ifeq "$(BuildSharedLibs)" "YES" -INSTALL_LIBS += $(libffi_HS_DYN_LIB_PATH) +INSTALL_LIBS += $(libffi_HS_DYN_LIB) ifeq "$(Windows)" "YES" -INSTALL_PROGS += $(libffi_HS_DYN_LIB_PATH).a +INSTALL_PROGS += $(libffi_HS_DYN_LIB).a endif endif @@ -93,53 +105,60 @@ endif ifneq "$(BINDIST)" "YES" $(libffi_STAMP_CONFIGURE): - $(RM) -rf $(LIBFFI_DIR) libffi/build + "$(RM)" $(RM_OPTS) -r $(LIBFFI_DIR) libffi/build cd libffi && $(TAR) -zxf tarball/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 && "$(PATCH)" -p0 < libffi.autotools-update.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) -w" \ + LDFLAGS="$(SRC_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 $@ + "$(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) - $(CP) $(libffi_STATIC_LIB) libffi/libHSffi.a - $(CP) $(libffi_STATIC_LIB) libffi/libHSffi_p.a touch $@ -libffi/libHSffi.a libffi/libHSffi_p.a: $(libffi_STAMP_BUILD) +$(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 -all_libffi : libffi/libHSffi.a libffi/libHSffi_p.a +$(eval $(call all-target,libffi,libffi/libHSffi.a libffi/libHSffi_p.a)) # 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. @@ -149,26 +168,29 @@ all_libffi : libffi/libHSffi.a libffi/libHSffi_p.a libffi/HSffi.o: libffi/libHSffi.a cd libffi && \ touch empty.c; \ - $(CC) -c empty.c -o HSffi.o + "$(CC)" $(SRC_CC_OPTS) -c empty.c -o HSffi.o -all_libffi : libffi/HSffi.o +$(eval $(call all-target,libffi,libffi/HSffi.o)) ifeq "$(BuildSharedLibs)" "YES" ifeq "$(Windows)" "YES" +libffi/libffi.dll.a $(libffi_HS_DYN_LIB): $(libffi_STAMP_BUILD) # Windows libtool creates .dll, and as we already patched that # 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_PATH).a: $(libffi_STAMP_BUILD) - $(CP) libffi/libffi.dll.a $(libffi_HS_DYN_LIB_PATH).a -all_libffi : $(libffi_HS_DYN_LIB_PATH).a +$(libffi_HS_DYN_LIB).a: libffi/libffi.dll.a + "$(CP)" libffi/libffi.dll.a $(libffi_HS_DYN_LIB).a + +$(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_PATH): $(libffi_DYNAMIC_LIBS) - $(CP) $(word 1,$(libffi_DYNAMIC_LIBS)) $(libffi_HS_DYN_LIB_PATH) +$(libffi_HS_DYN_LIB): $(libffi_DYNAMIC_LIBS) + "$(CP)" $(word 1,$(libffi_DYNAMIC_LIBS)) $(libffi_HS_DYN_LIB) -all_libffi : $(libffi_HS_DYN_LIB_PATH) +$(eval $(call all-target,libffi,$(libffi_HS_DYN_LIB))) endif endif @@ -177,7 +199,7 @@ $(eval $(call clean-target,libffi,, \ 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_NAME) $(libffi_HS_DYN_LIB_NAME).a)) + $(libffi_HS_DYN_LIB) $(libffi_HS_DYN_LIB).a)) endif #-----------------------------------------------------------------------------