Commit 9412e629 authored by Ian Lynagh's avatar Ian Lynagh

Get building GHC itself with Cabal more-or-less working

Installing and bindist creation don't work, but they were already broken.
Only tested validating with one setup.
parent e0b93c02
......@@ -67,12 +67,12 @@ include $(TOP)/mk/boilerplate.mk
# We can't 'make boot' in libraries until stage1 is built
ifeq "$(BootingFromHc)" "YES"
SUBDIRS_BUILD = includes rts compiler docs utils driver
SUBDIRS_BUILD = includes rts compiler ghc docs utils driver
else
SUBDIRS_BUILD = includes utils driver docs compiler rts libraries/Cabal/doc
SUBDIRS_BUILD = includes utils driver docs compiler ghc rts libraries/Cabal/doc
endif
SUBDIRS = gmp libffi includes utils driver docs rts libraries compiler libraries/Cabal/doc
SUBDIRS = gmp libffi includes utils driver docs rts compiler ghc libraries libraries/Cabal/doc
check-all: check-tools check-packages
......@@ -142,6 +142,7 @@ stage1 : $(GCC_LIB_DEP) check-all
stage2 : check-all
$(MAKE) -C compiler boot stage=2
$(MAKE) -C compiler stage=2
$(MAKE) -C ghc stage=2
stage3 : check-all
......
......@@ -17,163 +17,169 @@
TOP = ..
# Use GHC for compiling C bits (NB. must be before boilerplate include)
#
UseGhcForCc = YES
# We don't want to compile stage1 in multiple ways
ifeq "$(findstring $(stage), 2 3)" ""
WAYS=
ifeq "$(stage)" ""
stage=1
endif
include $(TOP)/mk/boilerplate.mk
include $(TOP)/mk/cabal-flags.mk
ifeq "$(GhcThreaded)$(GhcProfiled)" "YESYES"
ifeq "$(GhcThreaded) $(GhcProfiled)" "YES YES"
$(error Cannot make GHC both threaded and profiled)
endif
CONFIG_HS = main/Config.hs
PRIMOP_BITS = primop-data-decl.hs-incl \
primop-tag.hs-incl \
primop-list.hs-incl \
primop-has-side-effects.hs-incl \
primop-out-of-line.hs-incl \
primop-commutable.hs-incl \
primop-needs-wrapper.hs-incl \
primop-can-fail.hs-incl \
primop-strictness.hs-incl \
primop-primop-info.hs-incl
all:: build.stage$(stage)
#-----------------------------------------------------------------------------
# Counting source code lines
stage1 ::
$(MAKE) stage=1
USER_SRCS = $(filter-out $(DERIVED_SRCS),$(SRCS))
count :
./count_lines $(USER_SRCS)
stage2 ::
$(MAKE) stage=2
# -----------------------------------------------------------------------------
# Bootstrapping
stage3 ::
$(MAKE) stage=3
# The stage1/stage2/stage3 business is quite delicate. Here's how it works:
#
# - the variable $(stage) holds the current stage number. To build a
# particular stage, you say 'make stage=N' where N is 1, 2, or 3.
# N defaults to 1.
#
# - for stage N, object files and .hi files are placed inside
# the directory stageN, in subdirectories as per the sources.
#
# - we use explicit -o and -ohi options to direct the output from C &
# Haskell compilations.
#
# - we generate a different .depend file for each build. They need to be
# different, because each stage might include different files: stage1
# might not include GHCi, for example. For each stage, a normal .depend
# file is generated, and then post-processed to add the correct stageN/
# prefix to each object and .hi filename. The resulting .depend file
# is named .depend-$(stage). See the end of this Makefile for details.
#
# - normal implicit rules don't work any more, because they're of the form
#
# %.o : %.hs
#
# whereas we really need
#
# stageN/%.o : %.hs
#
# so suffix.mk now defines the appropriate suffix rules when
# $(odir) is set to a non-empty value. Here we set $(odir) to
# stage1, stage2, or stage3.
#
# There are other plausible designs that might work, but each has different
# problems:
#
# - using -odir and -hidir:
# -odir puts all the objects in one directory (strips off the
# subdirectory part), which eventually forces us to use VPATH to find
# the sources. I have a really bad feeling about VPATH.
#
# - invoke make in the stageN subdirectory. This probably requires VPATH
# too.
#
# - create a link tree. The problem with requiring link trees is that
# Windows doesn't support symbolic links.
clean distclean::
-$(CABAL) clean --distpref dist-stage1
-$(CABAL) clean --distpref dist-stage2
$(RM) -f Makefile-stage1
$(RM) -f Makefile-stage2
$(RM) -f prelude/primops.txt
$(RM) -f $(PRIMOP_BITS)
$(RM) -f $(CONFIG_HS)
ifeq "$(stage)" ""
stage=1
ifeq "$(GhcWithInterpreter)" "YES"
CONFIGURE_FLAGS_STAGE2 += --flags=ghci
# If we are going to use dynamic libraries instead of .o files for ghci,
# we will need to always retain CAFs in the compiler.
# ghci/keepCAFsForGHCi contains a GNU C __attribute__((constructor))
# function which sets the keepCAFs flag for the RTS before any Haskell
# code is run.
ifeq "$(GhcBuildDylibs)" "YES"
CONFIGURE_FLAGS_STAGE2 += --flags=dynlibs
else
CONFIGURE_FLAGS_STAGE2 += --flags=-dynlibs
endif
.DUMMY: stage_dir
stage_dirs :
$(MKDIRHIER) stage$(stage)
for i in $(ALL_DIRS); do \
$(MKDIRHIER) stage$(stage)/$$i; \
done
ifeq "$(GhcEnableTablesNextToCode) $(GhcUnregisterised)" "YES NO"
# Should GHCI be building info tables in the TABLES_NEXT_TO_CODE style
# or not?
# XXX This should logically be a CPP option, but there doesn't seem to
# be a flag for that
CONFIGURE_FLAGS_STAGE2 += --ghc-option=-DGHCI_TABLES_NEXT_TO_CODE
endif
# Should the debugger commands be enabled?
ifeq "$(GhciWithDebugger)" "YES"
CONFIGURE_FLAGS_STAGE2 += --ghc-option=-DDEBUGGER
endif
ifeq "$(stage)" "1"
UsingHsBoot = YES
# Enable editline if either:
# - we're building stage 1 and $(GhcHasEditline)="YES"
# - we're building stage 2/3, and we have built the editline package
#
# But we don't enable editline on Windows, as Windows terminals have
# editline-like support builtin.
#
ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
CONFIGURE_FLAGS_STAGE1 += --flags=-editline
CONFIGURE_FLAGS_STAGE2 += --flags=-editline
else
ifneq "$(findstring $(stage), 2 3)" ""
UsingHsBoot = YES
ifeq "$(GhcHasEditline)" "YES"
CONFIGURE_FLAGS_STAGE1 += --flags=editline
else
UsingHsBoot = NO
CONFIGURE_FLAGS_STAGE1 += --flags=-editline
endif
ifeq "$(wildcard $(FPTOOLS_TOP_ABS)/libraries/editline/unbuildable)" ""
CONFIGURE_FLAGS_STAGE2 += --flags=editline
else
CONFIGURE_FLAGS_STAGE2 += --flags=-editline
endif
boot :: stage_dirs
ifeq "$(stage)" "1"
HC=$(GHC)
endif
ifeq "$(stage)" "2"
HC=$(GHC_STAGE1)
else
CONFIGURE_FLAGS_STAGE2 += --flags=-ghci
endif
ifeq "$(stage)" "3"
HC=$(GHC_STAGE2)
ifeq "$(GhcWithNativeCodeGen)" "NO"
# XXX This should logically be a CPP option, but there doesn't seem to
# be a flag for that
CONFIGURE_FLAGS_STAGE1 += --ghc-option=-DOMIT_NATIVE_CODEGEN
CONFIGURE_FLAGS_STAGE2 += --ghc-option=-DOMIT_NATIVE_CODEGEN
endif
stage1 ::
$(MAKE) stage=1
stage2 ::
$(MAKE) stage=2
stage3 ::
$(MAKE) stage=3
odir=stage$(stage)
SRC_HC_OPTS += $(patsubst %, -i$(odir)/%, $(ALL_DIRS))
SRC_HC_OPTS += -Wall -fno-warn-name-shadowing -fno-warn-orphans
HS_OBJS = $(patsubst %, $(odir)/%, $(addsuffix .$(way_)o,$(basename $(HS_SRCS))))
C_OBJS = $(patsubst %, $(odir)/%, $(addsuffix .$(way_)o,$(basename $(C_SRCS))))
# Our standard cleaning rules don't know that we're doing our output
# into $(odir), so we have to augment CLEAN_FILES appropriateliy.
CLEAN_FILES += $(odir)/*/*.$(way_)hi $(odir)/*/*.$(way_)hi-boot $(odir)/*/*.$(way_)o-boot
ifeq "$(TargetOS_CPP)" "openbsd"
CONFIGURE_FLAGS_STAGE1 += --ld-options="-Xlinker -E"
CONFIGURE_FLAGS_STAGE2 += --ld-options="-Xlinker -E"
endif
ifeq "$(UsingHsBoot)" "YES"
CLEAN_FILES += $(odir)/*/*.hi-boot $(odir)/*/*.o-boot
ifeq "$(GhcUnregisterised)" "NO"
ifeq "$(HOSTPLATFORM)" "ia64-unknown-linux"
# needed for generating proper relocation in large binaries: trac #856
CONFIGURE_FLAGS_STAGE1 += --ld-option=-Wl,--relax
CONFIGURE_FLAGS_STAGE2 += --ld-option=-Wl,--relax
endif
endif
ifeq "$(stage)" "1"
mostlyclean clean distclean maintainer-clean ::
$(MAKE) $@ stage=2
$(MAKE) $@ stage=3
ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32"
# The #include is vital for the via-C route with older compilers, 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
# As it's only important for older compilers we don't need to do anything
# for stage2+.
CONFIGURE_FLAGS_STAGE1 += --ghc-options='-\#include <windows.h> -\#include <process.h>'
endif
# -----------------------------------------------------------------------------
# Set HS_PROG
# ghc_strlen percolates through so many modules that it is easier to get its
# prototype via a global option instead of a myriad of per-file OPTIONS.
# Again, this is only important for older compilers, so we don't do it in
# stage 2+.
CONFIGURE_FLAGS_STAGE1 += --ghc-options='-\#include "cutils.h"'
build.stage1: $(PRIMOP_BITS)
$(CABAL) configure --distpref dist-stage1 \
$(CONFIGURE_FLAGS_STAGE1) \
$(INSTALL_DIRS_CONFIGURE_FLAGS) \
$(USE_BOOT_CONFIGURE_FLAGS) \
$(COMMON_CONFIGURE_FLAGS) \
--flags=-ghci \
--flags=stage1 \
--ghc-option=-DSTAGE=1
$(RM) -f Makefile-stage1
$(CABAL) makefile --distpref dist-stage1 -f Makefile-stage1
$(MAKE) -f Makefile-stage1 stage=1
$(CABAL) register --distpref dist-stage1 --inplace
build.stage2: $(PRIMOP_BITS)
$(CABAL) configure --distpref dist-stage2 \
$(CONFIGURE_FLAGS_STAGE2) \
$(INSTALL_DIRS_CONFIGURE_FLAGS) \
$(USE_STAGE1_CONFIGURE_FLAGS) \
$(COMMON_CONFIGURE_FLAGS) \
--flags=-stage1 \
--ghc-option=-DSTAGE=2
$(RM) -f Makefile-stage2
$(CABAL) makefile --distpref dist-stage2 -f Makefile-stage2
$(MAKE) -f Makefile-stage2 stage=2
$(CABAL) register --distpref dist-stage2 --inplace
# Note: there have been reports of people running up against the ARG_MAX limit
# when linking ghc with all its constituent object files. The likely source of
# the problem is that the environment is a bit too big, so a workaround could
# be to do `env PATH=$(PATH) make ghc' to minimise the environment. (or the
# equivalent of `env' if it doesn't exist locally).
#
ifneq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
GHC_PROG=$(odir)/ghc$(_way)-$(ProjectVersion)
else
GHC_PROG=$(odir)/ghc$(_way)
endif
stage_dirs :
$(MKDIRHIER) stage$(stage)
ifeq "$(stage)" "1"
HS_PROG = $(GHC_PROG)
endif
boot :: stage_dirs
# -----------------------------------------------------------------------------
# Create compiler configuration
......@@ -181,7 +187,6 @@ endif
# The 'echo' commands simply spit the values of various make variables
# into Config.hs, whence they can be compiled and used by GHC itself
CONFIG_HS = main/Config.hs
boot :: $(CONFIG_HS)
$(CONFIG_HS) : $(FPTOOLS_TOP)/mk/config.mk
......@@ -199,7 +204,7 @@ $(CONFIG_HS) : $(FPTOOLS_TOP)/mk/config.mk
@echo "cBooterVersion :: String" >> $(CONFIG_HS)
@echo "cBooterVersion = \"$(GhcVersion)\"" >> $(CONFIG_HS)
@echo "cStage :: String" >> $(CONFIG_HS)
@echo "cStage = STAGE" >> $(CONFIG_HS)
@echo "cStage = show (STAGE :: Int)" >> $(CONFIG_HS)
@echo "cHscIfaceFileVersion :: String" >> $(CONFIG_HS)
@echo "cHscIfaceFileVersion = \"$(HscIfaceFileVersion)\"" >> $(CONFIG_HS)
@echo "cSplitObjs :: String" >> $(CONFIG_HS)
......@@ -278,8 +283,6 @@ else
endif
@echo done.
CLEAN_FILES += $(CONFIG_HS)
# -----------------------------------------------------------------------------
# Create platform includes
......@@ -379,254 +382,19 @@ endif
@echo "#endif /* __PLATFORM_H__ */" >> $@
@echo "Done."
stage3/$(PLATFORM_H) : stage_dirs stage2/$(PLATFORM_H)
$(CP) stage2/$(PLATFORM_H) stage3/$(PLATFORM_H)
STAGE_PLATFORM_H = stage$(stage)/$(PLATFORM_H)
boot :: $(STAGE_PLATFORM_H)
SRC_HC_OPTS += -Istage$(stage)
# -----------------------------------------------------------------------------
# Set SRCS etc.
#
# First figure out ALL_DIRS, the source sub-directories
ALL_DIRS = \
utils basicTypes types hsSyn prelude rename typecheck deSugar coreSyn \
vectorise specialise simplCore stranal stgSyn simplStg codeGen main \
profiling parser cprAnalysis iface cmm
# Make sure we include Config.hs even if it doesn't exist yet...
ALL_SRCS += $(CONFIG_HS)
# HsGeneric.hs is not used just now
EXCLUDED_SRCS += hsSyn/HsGeneric.hs
ifeq ($(GhcWithNativeCodeGen),YES)
ALL_DIRS += nativeGen
else
SRC_HC_OPTS += -DOMIT_NATIVE_CODEGEN
endif
ifeq "$(BootingFromHc)" "YES"
# HC files are always from a self-booted compiler
bootstrapped = YES
else
ifneq "$(findstring $(stage), 2 3)" ""
bootstrapped = YES
else
bootstrapped = NO
endif
endif
# Beyond stage 1, honour any Mac OS X depolyment target options. If we use
# these options in stage 1 we get a linker error if the bootstrap compiler is
# for a more recent OS version
ifneq "$(findstring $(stage), 2 3)" ""
SRC_CC_OPTS += $(MACOSX_DEPLOYMENT_CC_OPTS)
SRC_HC_OPTS += $(addprefix -optc, $(MACOSX_DEPLOYMENT_CC_OPTS))
SRC_LD_OPTS += $(addprefix -optl, $(MACOSX_DEPLOYMENT_LD_OPTS))
endif
# -----------------------------------------------------------------------------
# Building a compiler with interpreter support
#
# The interpreter, GHCi interface, Template Haskell and Hpc are only
# enabled when we are bootstrapping with the same version of GHC, and
# the interpreter is supported on this platform.
ifeq "$(bootstrapped)" "YES"
SRC_HC_OPTS += -package bytestring
PKG_DEPENDS += bytestring
endif
SRC_HC_OPTS += -package hpc
PKG_DEPENDS += hpc
ifeq "$(GhcWithInterpreter) $(bootstrapped)" "YES YES"
# Yes, include the interepreter and Template Haskell extensions
SRC_HC_OPTS += -DGHCI -package template-haskell
PKG_DEPENDS += template-haskell
# Should GHCI be building info tables in the TABLES_NEXT_TO_CODE style
# or not?
ifeq "$(GhcEnableTablesNextToCode) $(GhcUnregisterised)" "YES NO"
SRC_HC_OPTS += -DGHCI_TABLES_NEXT_TO_CODE
endif
ifeq "$(GhcThreaded)" "YES"
# Use threaded RTS with GHCi, so threads don't get blocked at the prompt.
SRC_LD_OPTS += -threaded
endif
ifeq "$(GhcProfiled)" "YES"
SRC_LD_OPTS += -prof
endif
ifeq "$(GhcDebugged)" "YES"
SRC_LD_OPTS += -debug
endif
SRC_HC_OPTS += -I$(FPTOOLS_TOP)/libffi/build/include
SRC_HSC2HS_OPTS += -I$(FPTOOLS_TOP)/libffi/build/include
ALL_DIRS += ghci
# If we are going to use dynamic libraries instead of .o files for ghci,
# we will need to always retain CAFs in the compiler.
# ghci/keepCAFsForGHCi contains a GNU C __attribute__((constructor))
# function which sets the keepCAFs flag for the RTS before any Haskell
# code is run.
ifeq "$(GhcBuildDylibs)" "YES"
else
EXCLUDED_SRCS += ghci/keepCAFsForGHCi.c
endif
# Enable editline if either:
# - we're building stage 1 and $(GhcHasEditline)="YES"
# - we're building stage 2/3, and we have built the editline package
#
# But we don't enable editline on Windows, as Windows terminals have
# editline-like support builtin.
#
ifneq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
ifeq "$(stage)" "1"
ifeq "$(GhcHasEditline)" "YES"
SRC_HC_OPTS += -package editline -DUSE_EDITLINE
PKG_DEPENDS += editline
endif
else
ifeq "$(wildcard $(FPTOOLS_TOP_ABS)/libraries/editline/unbuildable)" ""
SRC_HC_OPTS += -package editline -DUSE_EDITLINE
PKG_DEPENDS += editline
endif
endif # stage=1
endif # not windows
else
# No interpreter, so exclude Template Haskell modules
EXCLUDED_SRCS += deSugar/DsMeta.hs typecheck/TcSplice.lhs hsSyn/Convert.lhs
endif # bootstrapped with interpreter
# -----------------------------------------------
# mkdependC stuff
#
# Big Fudge to get around inherent problem that Makefile setup
# has got with 'mkdependC'.
#
SRC_MKDEPENDC_OPTS += -D__GLASGOW_HASKELL__=$(ProjectVersionInt)
# XXX not really correct, hschooks.c actually gets include files like
# RtsFlags.c from the installed GHC, but we can't tell mkdependC about that.
SRC_MKDEPENDC_OPTS += -I$(GHC_INCLUDE_DIR)
# -----------------------------------------------------------------------------
# Haskell compilations
SRC_HC_OPTS += -cpp -fglasgow-exts -Rghc-timing -I. -Iparser -Iutil
ifeq "$(ghc_ge_609)" "NO"
SRC_HC_OPTS += -fno-generics
else
SRC_HC_OPTS += -XNoGenerics
endif
# 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
# We need System.Posix (or Posix when ghc < 6.2)
ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
ifeq "$(bootstrapped)" "YES"
SRC_HC_OPTS += -package Win32
PKG_DEPENDS += Win32
endif
else
SRC_HC_OPTS += -package unix
PKG_DEPENDS += unix
endif
SRC_HC_OPTS += -package Cabal
PKG_DEPENDS += Cabal
# Ignore lang, to avoid potential clash with the Generics module if
# lang happens to be a dependency of some exposed package in the local
# GHC installation (eg. wxHaskell did this around 6.4).
SRC_HC_OPTS += -ignore-package lang
SRC_CC_OPTS += -Iparser -I. -O
SRC_HC_OPTS += $(GhcHcOpts) $(GhcStage$(stage)HcOpts)
SRC_HC_OPTS += -H16M
ifeq "$(BootingFromHc)" "YES"
SRC_CC_OPTS += -D__GLASGOW_HASKELL__=$(ProjectVersionInt)
endif
# ---- Profiling ----
#simplCore/Simplify_HC_OPTS = -auto-all
#simplCore/SimplEnv_HC_OPTS = -auto-all
#simplCore/SimplUtils_HC_OPTS = -auto-all
# 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 "$(HOSTPLATFORM)" "i386-unknown-mingw32"
main/SysTools_HC_OPTS += '-\#include <windows.h>' '-\#include <process.h>'
endif
# ghc_strlen percolates through so many modules that it is easier to get its
# prototype via a global option instead of a myriad of per-file OPTIONS
SRC_HC_OPTS += '-\#include "cutils.h"'
# ----------------------------------------------------------------------------
# Generate supporting stuff for prelude/PrimOp.lhs
# from prelude/primops.txt
PRIMOP_BITS=primop-data-decl.hs-incl \
primop-tag.hs-incl \
primop-list.hs-incl \
primop-has-side-effects.hs-incl \
primop-out-of-line.hs-incl \
primop-commutable.hs-incl \
primop-needs-wrapper.hs-incl \
primop-can-fail.hs-incl \
primop-strictness.hs-incl \
primop-primop-info.hs-incl
CLEAN_FILES += prelude/primops.txt
CLEAN_FILES += $(PRIMOP_BITS)
SRC_CPP_OPTS += -I$(GHC_INCLUDE_DIR)
SRC_CPP_OPTS += ${GhcCppOpts}
ifneq "$(BootingFromHc)" "YES"
prelude/PrimOp.lhs $(odir)/prelude/PrimOp.o: $(PRIMOP_BITS)
endif
ifneq "$(BootingFromHc)" "YES"
depend :: $(PRIMOP_BITS)
endif
# This is an ugly hack: we need stage1/$(PLATFORM_H) built before we
# preprocess primops.txt.pp, but we don't want to just add that
# dependency because we don't want $(PLATFORM_H) built during normal
# operations, because we don't have have dependencies from the .hs
# sources on it, and we don't want those dependencies because that
# would cause everything to be rebuilt every time the Makefile
# changed. So here we add the required dependency only when making
# boot or depend:
ifneq "$(findstring boot, $(MAKECMDGOALS))$(findstring depend, $(MAKECMDGOALS))" ""
prelude/primops.txt.pp : stage1/$(PLATFORM_H)
endif
prelude/primops.txt parser/Parser.y: %: %.pp stage1/$(PLATFORM_H)
$(CPP) $(RAWCPP_FLAGS) -P $(CPP_OPTS) -x c $< | grep -v '^#pragma GCC' > $@
primop-data-decl.hs-incl: prelude/primops.txt
$(GENPRIMOP) --data-decl < $< > $@
......@@ -654,342 +422,25 @@ primop-primop-info.hs-incl: prelude/primops.txt
primop-usage.hs-incl: prelude/primops.txt
$(GENPRIMOP) --usage < $< > $@
#-----------------------------------------------------------------------------
# Linking
ifeq "$(GhcUnregisterised)" "NO"
ifeq "$(HOSTPLATFORM)" "ia64-unknown-linux"
# needed for generating proper relocation in large binaries: trac #856
SRC_LD_OPTS += -optl-Wl,--relax
endif
endif
# -----------------------------------------------------------------------------
# create ghc-inplace, a convenient way to run ghc from the build tree...
# See comments in $(FPTOOLS_TOP)/utils/ghc-pkg/Makefile for why we use
# a real binary here rather than a shell script.
INPLACE_SRC = $(odir)/ghc-inplace.c
INPLACE_PROG = $(odir)/ghc-inplace$(_way)$(exeext)
INPLACE_EXTRA_FLAGS = -I$(TOP)/includes
EXCLUDED_C_SRCS += ghc-inplace.c
CLEAN_FILES += $(INPLACE_SRC)
GHC_PATH=$(FPTOOLS_TOP_ABS)/$(GHC_COMPILER_DIR_REL)/$(GHC_PROG)$(exeext)
$(INPLACE_PROG): ghc-inplace.c
$(SED) -e "s@GHC_PATH@$(GHC_PATH)@g" -e "s@TOP_ABS@$(FPTOOLS_TOP_ABS)@g" < $< > $(INPLACE_SRC)
$(HC) -cpp $(INPLACE_EXTRA_FLAGS) $(INPLACE_SRC) -o $@
all :: $(INPLACE_PROG)
CLEAN_FILES += $(INPLACE_PROG)
ifeq "$(stage)" "1"
ghc-inplace : $(INPLACE_PROG)
$(RM) -f $@ && $(LN_S) $< $@