[project @ 2001-07-09 10:46:46 by simonmar]
[ghc-hetmet.git] / ghc / compiler / Makefile
index c7b1fc2..0c76a79 100644 (file)
@@ -1,5 +1,5 @@
 # -----------------------------------------------------------------------------
-# $Id: Makefile,v 1.164 2001/06/25 21:08:01 sof Exp $
+# $Id: Makefile,v 1.171 2001/07/09 10:46:46 simonmar Exp $
 
 TOP = ..
 include $(TOP)/mk/boilerplate.mk
@@ -46,7 +46,7 @@ $(CONFIG_HS) : $(FPTOOLS_TOP)/mk/config.mk Makefile
        @echo "cGhcWithNativeCodeGen = \"$(GhcWithNativeCodeGen)\"" >> $(CONFIG_HS)
        @echo "cGhcUnregisterised    = \"$(GhcUnregisterised)\"" >> $(CONFIG_HS)
        @echo "cLeadingUnderscore    = \"$(LeadingUnderscore)\"" >> $(CONFIG_HS)
-       @echo "cRAWCPP               = \"$(GHC_RAWCPP)\"" >> $(CONFIG_HS)
+       @echo "cRAWCPP_FLAGS         = \"$(RAWCPP_FLAGS)\"" >> $(CONFIG_HS)
        @echo "cGCC                  = \"$(WhatGccIsCalled)\"" >> $(CONFIG_HS)
        @echo "cMKDLL                = \"$(BLD_DLL)\"" >> $(CONFIG_HS)
        @echo "cGHC_DRIVER_DIR       = \"$(GHC_DRIVER_DIR)\"" >> $(CONFIG_HS)
@@ -108,14 +108,14 @@ CANON_HC_VERSION=$(shell echo "$(GhcVersion)" | sed -e 's/\.//g;s/^\(...\)......
 
 ifeq "$(BootingFromHc)" "YES"
 # HC files are always from a self-booted compiler
-ghc_411_at_least = YES
+bootstrapped = YES
 else
-ghc_411_at_least=$(shell if (test $(CANON_HC_VERSION) -ge 4110); then echo YES; else echo NO; fi)
+bootstrapped = $(shell if (test $(CANON_HC_VERSION) -ge $(ProjectVersionInt)0); then echo YES; else echo NO; fi)
 endif
 
 # Only include GHCi if we're bootstrapping with at least version 411
 ifeq "$(GhcWithInterpreter)" "YES"
-ifeq "$(ghc_411_at_least)" "YES"
+ifeq "$(bootstrapped)" "YES"
 SRC_HC_OPTS += -DGHCI
 DIRS += ghci
 endif
@@ -123,19 +123,31 @@ endif
 
 # Enable code that assumes a MSDOSish subshell. See mk/config.mk.in
 # for explanatory comment as to what this does.
-ifeq "$(MinimalUnixDeps)" "YES"
-SRC_HC_OPTS += -DMINIMAL_UNIX_DEPS
+ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
 ghc_501_at_least = $(shell if (test $(CANON_HC_VERSION) -gt 5000); then echo YES; else echo NO; fi)
 
+# -----------------------------------------------
+# GHCi calls the C procedure 'system', but alas GHC 4.08's 
+# implementation of this (in the library System) didn't work 
+# properly on Windows.  Everything is fine if you are compiling
+# GHC with GHC 5.01 or better, but lacking that we have the following
+# hack: 
+#      copy system.c from lib/std (where it is correct) 
+#      into main/system.c (where it'll be compiled and
+#                          linked with the compiler)
+
 ifneq "$(ghc_501_at_least)" "YES"
-boot ::
-       $(CP) ../lib/std/cbits/system.c main
 C_SRCS += main/system.c
 SRC_CC_OPTS += -I$(GHC_LIB_DIR)/std/cbits
 SRC_MKDEPENDC_OPTS += -I$(GHC_LIB_DIR)/std/cbits
 HS_OBJS += main/system.o
+
+main/system.c : ../lib/std/cbits/system.c
+       $(CP) ../lib/std/cbits/system.c main
 endif
 endif
+#              End of system hack
+# -----------------------------------------------
 
 HS_SRCS := $(foreach dir,$(DIRS),$(wildcard $(dir)/*.lhs) $(wildcard $(dir)/*.hs))
 HS_SRCS := $(filter-out rename/ParseIface.hs parser/Parser.hs main/ParsePkgConf.hs $(CONFIG_HS), $(HS_SRCS))
@@ -151,17 +163,17 @@ ifeq "$(BootingFromHc)" "YES"
 HCS    += rename/ParseIface.hc parser/Parser.hc main/ParsePkgConf.hc
 endif
 
-HS_OBJS = \
-  $(patsubst %.hc, %.o, $(HCS)) \
-  parser/hschooks.o
-
-DESTDIR       = $(INSTALL_LIBRARY_DIR_GHC)
-
 #
 # Add misc .c helper code (used by the frontend.)
 #
 C_SRCS += parser/hschooks.c
 
+HS_OBJS = \
+  $(patsubst %.hc, %.o, $(HCS)) \
+  $(patsubst %.c, %.o, $(C_SRCS))
+
+DESTDIR       = $(INSTALL_LIBRARY_DIR_GHC)
+
 #
 # Big Fudge to get around inherent problem that Makefile setup
 # has got with 'mkdependC'.
@@ -197,14 +209,15 @@ SRC_HC_OPTS += \
   -I. -IcodeGen -InativeGen -Iparser \
   -i$(subst $(space),:,$(DIRS)) 
 
-# We should do this, to avoid the use of an explicit path
-#      in GHC source files (include "../includes/config.h"
+# Omitted:     -I$(GHC_INCLUDE_DIR)
+# We should have -I$(GHC_INCLUDE_DIR) in SRC_HC_OPTS, 
+# to avoid the use of an explicit path in GHC source files
+#      (include "../includes/config.h"
 # But alas GHC 4.08 (and others for all I know) uses this very
 # same include path when compiling the .hc files it generates.
 # Disaster!  Then the hc file sees the GHC 5.02 (or whatever)
 # include files.   For the moment we've reverted to using
 # an explicit path in the .hs sources
-#  -I$(GHC_INCLUDE_DIR) \
 
 ifneq "$(mingw32_TARGET_OS)" "1"
 SRC_HC_OPTS += -package concurrent -package posix -package text -package util
@@ -273,6 +286,13 @@ main/DriverUtil_HC_OPTS            = -fno-cse
 main/Finder_HC_OPTS            = -fno-cse
 main/SysTools_HC_OPTS          = -fno-cse
 
+# The #include is vital for the via-C route, else the C
+# compiler doesn't realise that the stcall foreign imports are indeed
+# stdcall, and doesn't generate the Foo@8 name for them
+ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
+main/SysTools_HC_OPTS          += '-\#include <windows.h>'
+endif
+
 # ----------------------------------------------------------------------------
 #              C compilations
 
@@ -348,11 +368,11 @@ all :: ghc-inplace
 ghc-inplace : $(HS_PROG)
        @$(RM) $@
        echo '#!/bin/sh' >>$@
-       echo exec $(FPTOOLS_TOP_ABS_UNIX)/ghc/compiler/$(HS_PROG) -B$(FPTOOLS_TOP_ABS)/ghc/compiler '"$$@"' >>$@
+       echo exec $(FPTOOLS_TOP_ABS_UNIX)/ghc/compiler/$(HS_PROG) -B$(FPTOOLS_TOP_ABS) '"$$@"' >>$@
        chmod 755 $@
-ifeq "$(TARGETPLATFORM) and $(MinimalUnixDeps)" "i386-unknown-mingw32 and YES"
+ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
        @$(RM) $@.bat
-       echo "@"$(subst /,\\,$(FPTOOLS_TOP_ABS)/ghc/compiler/$(HS_PROG)) "-B$(FPTOOLS_TOP_ABS)/ghc/compiler %*" >$@.bat
+       echo "@"$(subst /,\\,$(FPTOOLS_TOP_ABS)/ghc/compiler/$(HS_PROG)) "-B$(FPTOOLS_TOP_ABS) %*" >$@.bat
        chmod 755 $@.bat
 endif