Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
Alex D
GHC
Commits
34cc75e1
Commit
34cc75e1
authored
Apr 26, 2009
by
Ian Lynagh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
GHC new build system megapatch
parent
74e1368d
Changes
130
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
130 changed files
with
6150 additions
and
6245 deletions
+6150
-6245
Makefile
Makefile
+113
-633
bindisttest/Makefile
bindisttest/Makefile
+2
-2
boot
boot
+18
-2
compiler/LICENSE
compiler/LICENSE
+31
-0
compiler/Makefile
compiler/Makefile
+10
-497
compiler/ghc.cabal.in
compiler/ghc.cabal.in
+18
-1
compiler/ghc.mk
compiler/ghc.mk
+432
-0
compiler/main/DriverMkDepend.hs
compiler/main/DriverMkDepend.hs
+18
-10
compiler/main/SysTools.lhs
compiler/main/SysTools.lhs
+58
-142
compiler/rename/RnNames.lhs
compiler/rename/RnNames.lhs
+8
-2
configure.ac
configure.ac
+109
-17
distrib/configure-bin.ac
distrib/configure-bin.ac
+2
-2
docs/ext-core/Makefile
docs/ext-core/Makefile
+0
-3
docs/man/Makefile
docs/man/Makefile
+0
-1
docs/users_guide/ghc.mk
docs/users_guide/ghc.mk
+7
-0
driver/ghc-pkg/Makefile
driver/ghc-pkg/Makefile
+0
-18
driver/ghc.mk
driver/ghc.mk
+11
-0
driver/ghc/ghc.mk
driver/ghc/ghc.mk
+10
-0
driver/ghci/Makefile
driver/ghci/Makefile
+3
-63
driver/ghci/ghc.mk
driver/ghci/ghc.mk
+50
-0
driver/mangler/Makefile
driver/mangler/Makefile
+3
-26
driver/mangler/ghc.mk
driver/mangler/ghc.mk
+7
-0
driver/runhaskell/Makefile
driver/runhaskell/Makefile
+0
-14
driver/split/Makefile
driver/split/Makefile
+3
-21
driver/split/ghc.mk
driver/split/ghc.mk
+7
-0
ghc.mk
ghc.mk
+841
-0
ghc.spec.in
ghc.spec.in
+3
-0
ghc/Main.hs
ghc/Main.hs
+0
-2
ghc/Makefile
ghc/Makefile
+11
-150
ghc/ghc-bin.cabal.in
ghc/ghc-bin.cabal.in
+3
-0
ghc/ghc.mk
ghc/ghc.mk
+127
-0
ghc/ghc.wrapper
ghc/ghc.wrapper
+0
-2
gmp/ghc.mk
gmp/ghc.mk
+124
-0
gmp/gmp-4.2.1-nodoc.tar.gz
gmp/gmp-4.2.1-nodoc.tar.gz
+0
-0
gmp/tarball/gmp-4.2.4-nodoc.tar.bz2
gmp/tarball/gmp-4.2.4-nodoc.tar.bz2
+0
-0
includes/Makefile
includes/Makefile
+3
-202
includes/Regs.h
includes/Regs.h
+1
-1
includes/Stg.h
includes/Stg.h
+1
-1
includes/ghc.mk
includes/ghc.mk
+179
-0
libffi/Makefile
libffi/Makefile
+3
-199
libffi/ghc.mk
libffi/ghc.mk
+193
-0
libffi/libffi.autotools-update.patch
libffi/libffi.autotools-update.patch
+0
-0
libffi/libffi.dllize-3.0.6.patch
libffi/libffi.dllize-3.0.6.patch
+0
-0
libffi/package.conf.in
libffi/package.conf.in
+3
-3
libffi/tarball/libffi-3.0.6.tar.gz
libffi/tarball/libffi-3.0.6.tar.gz
+0
-0
libraries/Makefile
libraries/Makefile
+0
-441
mk/bindist.mk
mk/bindist.mk
+0
-45
mk/boilerplate.mk
mk/boilerplate.mk
+0
-82
mk/build.mk.sample
mk/build.mk.sample
+3
-5
mk/cabal-flags.mk
mk/cabal-flags.mk
+0
-129
mk/cabal.mk
mk/cabal.mk
+0
-68
mk/config.mk.in
mk/config.mk.in
+120
-339
mk/custom-settings.mk
mk/custom-settings.mk
+4
-4
mk/install.mk
mk/install.mk
+0
-307
mk/old-config.mk.in
mk/old-config.mk.in
+1416
-0
mk/opts.mk
mk/opts.mk
+0
-109
mk/package.mk
mk/package.mk
+0
-315
mk/paths.mk
mk/paths.mk
+0
-277
mk/project.mk.in
mk/project.mk.in
+143
-0
mk/recurse.mk
mk/recurse.mk
+0
-101
mk/sub-makefile.mk
mk/sub-makefile.mk
+34
-0
mk/suffix.mk
mk/suffix.mk
+0
-392
mk/target.mk
mk/target.mk
+0
-701
mk/validate-settings.mk
mk/validate-settings.mk
+2
-2
rts/Capability.h
rts/Capability.h
+1
-1
rts/Interpreter.c
rts/Interpreter.c
+1
-1
rts/Makefile
rts/Makefile
+3
-496
rts/ghc.mk
rts/ghc.mk
+393
-0
rts/package.conf.in
rts/package.conf.in
+5
-5
rules/all-target.mk
rules/all-target.mk
+7
-0
rules/bindist.mk
rules/bindist.mk
+16
-0
rules/build-dependencies.mk
rules/build-dependencies.mk
+48
-0
rules/build-package-data.mk
rules/build-package-data.mk
+16
-0
rules/build-package-way.mk
rules/build-package-way.mk
+52
-0
rules/build-package.mk
rules/build-package.mk
+135
-0
rules/build-perl.mk
rules/build-perl.mk
+45
-0
rules/build-prog.mk
rules/build-prog.mk
+139
-0
rules/c-objs.mk
rules/c-objs.mk
+5
-0
rules/c-sources.mk
rules/c-sources.mk
+4
-0
rules/c-suffix-rules.mk
rules/c-suffix-rules.mk
+60
-0
rules/clean-target.mk
rules/clean-target.mk
+9
-0
rules/distdir-opts.mk
rules/distdir-opts.mk
+60
-0
rules/distdir-way-opts.mk
rules/distdir-way-opts.mk
+78
-0
rules/docbook.mk
rules/docbook.mk
+24
-0
rules/haddock.mk
rules/haddock.mk
+27
-0
rules/hi-rule.mk
rules/hi-rule.mk
+25
-0
rules/hs-objs.mk
rules/hs-objs.mk
+5
-0
rules/hs-sources.mk
rules/hs-sources.mk
+46
-0
rules/hs-suffix-rules-srcdir.mk
rules/hs-suffix-rules-srcdir.mk
+70
-0
rules/hs-suffix-rules.mk
rules/hs-suffix-rules.mk
+17
-0
rules/includes-sources.mk
rules/includes-sources.mk
+14
-0
rules/manual-package-config.mk
rules/manual-package-config.mk
+33
-0
rules/package-config.mk
rules/package-config.mk
+41
-0
rules/shell-wrapper.mk
rules/shell-wrapper.mk
+63
-0
rules/way-prelims.mk
rules/way-prelims.mk
+13
-0
utils/genapply/Makefile
utils/genapply/Makefile
+3
-29
utils/genapply/ghc.mk
utils/genapply/ghc.mk
+16
-0
utils/genprimopcode/Makefile
utils/genprimopcode/Makefile
+3
-10
utils/genprimopcode/ghc.mk
utils/genprimopcode/ghc.mk
+4
-0
utils/ghc-cabal/ghc-cabal.hs
utils/ghc-cabal/ghc-cabal.hs
+246
-0
utils/ghc-cabal/ghc.mk
utils/ghc-cabal/ghc.mk
+54
-0
utils/ghc-pkg/Main.hs
utils/ghc-pkg/Main.hs
+29
-26
utils/ghc-pkg/Makefile
utils/ghc-pkg/Makefile
+3
-21
utils/ghc-pkg/ghc.mk
utils/ghc-pkg/ghc.mk
+69
-0
utils/hasktags/Makefile
utils/hasktags/Makefile
+3
-5
utils/hasktags/ghc.mk
utils/hasktags/ghc.mk
+10
-0
utils/hp2ps/Main.h
utils/hp2ps/Main.h
+1
-1
utils/hp2ps/Makefile
utils/hp2ps/Makefile
+3
-20
utils/hp2ps/ghc.mk
utils/hp2ps/ghc.mk
+10
-0
utils/hpc/Main.hs
utils/hpc/Main.hs
+0
-0
utils/hpc/Makefile
utils/hpc/Makefile
+3
-5
utils/hpc/ghc.mk
utils/hpc/ghc.mk
+7
-0
utils/installPackage/Makefile
utils/installPackage/Makefile
+0
-13
utils/installPackage/installPackage.cabal
utils/installPackage/installPackage.cabal
+0
-28
utils/installPackage/installPackage.hs
utils/installPackage/installPackage.hs
+0
-154
utils/mkdependC/Makefile
utils/mkdependC/Makefile
+3
-24
utils/mkdependC/ghc.mk
utils/mkdependC/ghc.mk
+12
-0
utils/mkdependC/mkdependC.prl
utils/mkdependC/mkdependC.prl
+2
-0
utils/mkdirhier/Makefile
utils/mkdirhier/Makefile
+3
-17
utils/mkdirhier/ghc.mk
utils/mkdirhier/ghc.mk
+11
-0
utils/parallel/Makefile
utils/parallel/Makefile
+0
-2
utils/runghc/Makefile
utils/runghc/Makefile
+3
-12
utils/runghc/ghc.mk
utils/runghc/ghc.mk
+29
-0
utils/runghc/runghc.hs
utils/runghc/runghc.hs
+1
-3
utils/touchy/ghc.mk
utils/touchy/ghc.mk
+5
-0
utils/touchy/touchy.c
utils/touchy/touchy.c
+1
-0
utils/unlit/Makefile
utils/unlit/Makefile
+3
-25
utils/unlit/ghc.mk
utils/unlit/ghc.mk
+9
-0
utils/unlit/unlit.c
utils/unlit/unlit.c
+9
-15
validate
validate
+6
-1
No files found.
Makefile
View file @
34cc75e1
This diff is collapsed.
Click to expand it.
bindisttest/Makefile
View file @
34cc75e1
...
...
@@ -6,14 +6,14 @@ default_target: all
# Ideally we'd just include something to give us variables
# for paths and arguments to tools etc, and those set in mk/build.mk.
TOP
=
..
include
$(TOP)/mk/
boilerplate
.mk
include
$(TOP)/mk/
config
.mk
all
:
$(RM)
-rf
$(BIN_DIST_INST_SUBDIR)
$(RM)
-rf
ghc
*
$(RM)
HelloWorld HelloWorld.o HelloWorld.hi output
# --force-local makes tar not think that c:/foo refers to a remote file
$(TAR)
--force-local
-jxf
$(FPTOOLS_TOP_ABS)
/
$(BIN_DIST_TAR_BZ2)
$(TAR)
--force-local
-jxf
$(BIN_DIST_TAR_BZ2)
ifeq
"$(Windows)" "YES"
mv
$(BIN_DIST_NAME)
$(BIN_DIST_INST_DIR)
else
...
...
boot
View file @
34cc75e1
...
...
@@ -4,9 +4,9 @@ set -e
# Check that we have all boot packages.
for
dir
in
`
grep
"^[^# ][^ ]* *[^ ][^ ]* *[^ ][^ ]*$"
packages |
sed
"s/ .*//"
`
do
if
test
!
-
d
$dir
if
test
!
-
f
$dir
/LICENSE
then
echo
"
Looks like you're missing
$dir
."
>
&2
echo
"
Error:
$dir
/LICENSE doesn't exist
."
>
&2
echo
"Maybe you haven't done './darcs-all get'?"
>
&2
exit
1
fi
...
...
@@ -31,3 +31,19 @@ do
fi
done
for
f
in
libraries/
*
;
do
dir
=
`
basename
$f
`
cabals
=
`
echo
$f
/
*
.cabal
`
if
test
-f
$cabals
;
then
echo
"Creating
$f
/ghc.mk"
rm
-f
$f
/ghc.mk
pkg
=
`
basename
${
cabals
%.cabal
}
`
echo
"
${
f
}
_PACKAGE =
${
pkg
}
"
>>
$f
/ghc.mk
echo
"
\$
(eval
\$
(call build-package,
${
f
}
,dist-install,1))"
>>
$f
/ghc.mk
rm
-f
$f
/GNUmakefile
echo
"Creating
$f
/GNUmakefile"
echo
"dir =
${
f
}
"
>>
$f
/GNUmakefile
echo
"TOP = ../.."
>>
$f
/GNUmakefile
echo
"include
\$
(TOP)/mk/sub-makefile.mk"
>>
$f
/GNUmakefile
fi
done
compiler/LICENSE
0 → 100644
View file @
34cc75e1
The Glasgow Haskell Compiler License
Copyright 2002, The University Court of the University of Glasgow.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
- Neither name of the University nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
compiler/Makefile
View file @
34cc75e1
This diff is collapsed.
Click to expand it.
compiler/ghc.cabal.in
View file @
34cc75e1
-- WARNING: ghc.cabal is automatically generated from ghc.cabal.in by
-- ./configure. Make sure you are editing ghc.cabal.in, not ghc.cabal.
Name: ghc
Version: @ProjectVersion@
License: BSD3
...
...
@@ -45,6 +48,15 @@ Flag ncg
Flag stage1
Description: Is this stage 1?
Default: False
Flag stage2
Description: Is this stage 2?
Default: False
Flag stage3
Description: Is this stage 3?
Default: False
Library
Exposed: False
...
...
@@ -103,7 +115,12 @@ Library
Build-Depends: extensible-exceptions
Extensions: PatternSignatures
else
Include-Dirs: stage2plus
if flag(stage2)
Include-Dirs: stage2
else
if flag(stage3)
Include-Dirs: stage2
Install-Includes: HsVersions.h, ghc_boot_platform.h
c-sources:
...
...
compiler/ghc.mk
0 → 100644
View file @
34cc75e1
# -----------------------------------------------------------------------------
# For expressing extra dependencies on source files
define compiler-hs-dependency # args
:
$1 = module
,
$2 = dependency
$$(foreach
stage,1
2
3,\
$$(foreach
way,$$(compiler_stage$$(stage)_WAYS),\
compiler/stage$$(stage)/build/$1.$($(way)_osuf)))
:
$2
endef
# -----------------------------------------------------------------------------
# Create compiler configuration
#
# The 'echo' commands simply spit the values of various make variables
# into Config.hs, whence they can be compiled and used by GHC itself
compiler_CONFIG_HS
=
compiler/main/Config.hs
ifneq
"$(BINDIST)" "YES"
compiler/stage1/package-data.mk
:
$(compiler_CONFIG_HS)
compiler/stage2/package-data.mk
:
$(compiler_CONFIG_HS)
compiler/stage3/package-data.mk
:
$(compiler_CONFIG_HS)
endif
$(compiler_CONFIG_HS)
:
mk/config.mk
$(RM)
-f
$@
@
echo
"Creating
$@
... "
@
echo
"module Config where"
>>
$@
@
echo
"cProjectName :: String"
>>
$@
@
echo
"cProjectName =
\"
$(ProjectName)
\"
"
>>
$@
@
echo
"cProjectVersion :: String"
>>
$@
@
echo
"cProjectVersion =
\"
$(ProjectVersion)
\"
"
>>
$@
@
echo
"cProjectVersionInt :: String"
>>
$@
@
echo
"cProjectVersionInt =
\"
$(ProjectVersionInt)
\"
"
>>
$@
@
echo
"cProjectPatchLevel :: String"
>>
$@
@
echo
"cProjectPatchLevel =
\"
$(ProjectPatchLevel)
\"
"
>>
$@
@
echo
"cBooterVersion :: String"
>>
$@
@
echo
"cBooterVersion =
\"
$(GhcVersion)
\"
"
>>
$@
@
echo
"cStage :: String"
>>
$@
@
echo
"cStage = show (STAGE :: Int)"
>>
$@
@
echo
"cHscIfaceFileVersion :: String"
>>
$@
@
echo
"cHscIfaceFileVersion =
\"
$(HscIfaceFileVersion)
\"
"
>>
$@
@
echo
"cSplitObjs :: String"
>>
$@
@
echo
"cSplitObjs =
\"
$(SupportsSplitObjs)
\"
"
>>
$@
@
echo
"cGhcWithInterpreter :: String"
>>
$@
@
echo
"cGhcWithInterpreter =
\"
$(GhcWithInterpreter)
\"
"
>>
$@
@
echo
"cGhcWithNativeCodeGen :: String"
>>
$@
@
echo
"cGhcWithNativeCodeGen =
\"
$(GhcWithNativeCodeGen)
\"
"
>>
$@
@
echo
"cGhcWithSMP :: String"
>>
$@
@
echo
"cGhcWithSMP =
\"
$(GhcWithSMP)
\"
"
>>
$@
@
echo
"cGhcRTSWays :: String"
>>
$@
@
echo
"cGhcRTSWays =
\"
$(GhcRTSWays)
\"
"
>>
$@
@
echo
"cGhcUnregisterised :: String"
>>
$@
@
echo
"cGhcUnregisterised =
\"
$(GhcUnregisterised)
\"
"
>>
$@
@
echo
"cGhcEnableTablesNextToCode :: String"
>>
$@
@
echo
"cGhcEnableTablesNextToCode =
\"
$(GhcEnableTablesNextToCode)
\"
"
>>
$@
@
echo
"cLeadingUnderscore :: String"
>>
$@
@
echo
"cLeadingUnderscore =
\"
$(LeadingUnderscore)
\"
"
>>
$@
@
echo
"cRAWCPP_FLAGS :: String"
>>
$@
@
echo
"cRAWCPP_FLAGS =
\"
$(RAWCPP_FLAGS)
\"
"
>>
$@
@
echo
"cGCC :: String"
>>
$@
@
echo
"cGCC =
\"
$(WhatGccIsCalled)
\"
"
>>
$@
@
echo
"cMKDLL :: String"
>>
$@
@
echo
"cMKDLL =
\"
$(BLD_DLL)
\"
"
>>
$@
@
echo
"cLdIsGNULd :: String"
>>
$@
@
echo
"cLdIsGNULd =
\"
$(LdIsGNULd)
\"
"
>>
$@
@
echo
"cLD_X :: String"
>>
$@
@
echo
"cLD_X =
\"
$(LD_X)
\"
"
>>
$@
@
echo
"cGHC_DRIVER_DIR :: String"
>>
$@
@
echo
"cGHC_DRIVER_DIR =
\"
$(GHC_DRIVER_DIR)
\"
"
>>
$@
@
echo
"cGHC_TOUCHY_PGM :: String"
>>
$@
@
echo
"cGHC_TOUCHY_PGM =
\"
$(GHC_TOUCHY_PGM)
\"
"
>>
$@
@
echo
"cGHC_TOUCHY_DIR :: String"
>>
$@
@
echo
"cGHC_TOUCHY_DIR =
\"
$(GHC_TOUCHY_DIR)
\"
"
>>
$@
@
echo
"cGHC_UNLIT_PGM :: String"
>>
$@
@
echo
"cGHC_UNLIT_PGM =
\"
$(GHC_UNLIT_PGM)
\"
"
>>
$@
@
echo
"cGHC_UNLIT_DIR :: String"
>>
$@
@
echo
"cGHC_UNLIT_DIR =
\"
$(GHC_UNLIT_DIR)
\"
"
>>
$@
@
echo
"cGHC_MANGLER_PGM :: String"
>>
$@
@
echo
"cGHC_MANGLER_PGM =
\"
$(GHC_MANGLER_PGM)
\"
"
>>
$@
@
echo
"cGHC_MANGLER_DIR :: String"
>>
$@
@
echo
"cGHC_MANGLER_DIR =
\"
$(GHC_MANGLER_DIR)
\"
"
>>
$@
@
echo
"cGHC_SPLIT_PGM :: String"
>>
$@
@
echo
"cGHC_SPLIT_PGM =
\"
$(GHC_SPLIT_PGM)
\"
"
>>
$@
@
echo
"cGHC_SPLIT_DIR :: String"
>>
$@
@
echo
"cGHC_SPLIT_DIR =
\"
$(GHC_SPLIT_DIR)
\"
"
>>
$@
@
echo
"cGHC_SYSMAN_PGM :: String"
>>
$@
@
echo
"cGHC_SYSMAN_PGM =
\"
$(GHC_SYSMAN)
\"
"
>>
$@
@
echo
"cGHC_SYSMAN_DIR :: String"
>>
$@
@
echo
"cGHC_SYSMAN_DIR =
\"
$(GHC_SYSMAN_DIR)
\"
"
>>
$@
@
echo
"cGHC_CP :: String"
>>
$@
@
echo
"cGHC_CP =
\"
$(GHC_CP)
\"
"
>>
$@
@
echo
"cGHC_PERL :: String"
>>
$@
@
echo
"cGHC_PERL =
\"
$(GHC_PERL)
\"
"
>>
$@
@
echo
"cEnableWin32DLLs :: String"
>>
$@
@
echo
"cEnableWin32DLLs =
\"
$(EnableWin32DLLs)
\"
"
>>
$@
@
echo
"cCONTEXT_DIFF :: String"
>>
$@
@
echo
"cCONTEXT_DIFF =
\"
$(CONTEXT_DIFF)
\"
"
>>
$@
@
echo
"cUSER_WAY_NAMES :: String"
>>
$@
@
echo
"cUSER_WAY_NAMES =
\"
$(USER_WAY_NAMES)
\"
"
>>
$@
@
echo
"cUSER_WAY_OPTS :: String"
>>
$@
@
echo
"cUSER_WAY_OPTS =
\"
$(USER_WAY_OPTS)
\"
"
>>
$@
@
echo
"cDEFAULT_TMPDIR :: String"
>>
$@
@
echo
"cDEFAULT_TMPDIR =
\"
$(DEFAULT_TMPDIR)
\"
"
>>
$@
@
echo
"cRelocatableBuild :: Bool"
>>
$@
ifeq
"$(RelocatableBuild)" "YES"
@
echo
"cRelocatableBuild = True"
>>
$@
else
@
echo
"cRelocatableBuild = False"
>>
$@
endif
@
echo
"cLibFFI :: Bool"
>>
$@
ifeq
"$(UseLibFFIForAdjustors)" "YES"
@
echo
"cLibFFI = True"
>>
$@
else
@
echo
"cLibFFI = False"
>>
$@
endif
@
echo
done
.
$(eval
$(call
clean-target,compiler,config_hs,$(compiler_CONFIG_HS)))
# -----------------------------------------------------------------------------
# Create platform includes
# Here we generate a little header file containing CPP symbols that GHC
# uses to determine which platform it is building on/for. The platforms
# can differ between stage1 and stage2 if we're cross-compiling, so we
# need one of these header files per stage.
PLATFORM_H
=
ghc_boot_platform.h
compiler/stage1/$(PLATFORM_H)
:
mk/config.mk
$(MKDIRHIER)
$(
dir
$@
)
$(RM)
$@
@
echo
"Creating
$@
..."
@
echo
"#ifndef __PLATFORM_H__"
>
$@
@
echo
"#define __PLATFORM_H__"
>>
$@
@
echo
>>
$@
@
echo
"#define BuildPlatform_NAME
\"
$(BUILDPLATFORM)
\"
"
>>
$@
@
echo
"#define HostPlatform_NAME
\"
$(HOSTPLATFORM)
\"
"
>>
$@
@
echo
"#define TargetPlatform_NAME
\"
$(TARGETPLATFORM)
\"
"
>>
$@
@
echo
>>
$@
@
echo
"#define
$(BuildPlatform_CPP)
_BUILD 1"
>>
$@
@
echo
"#define
$(HostPlatform_CPP)
_HOST 1"
>>
$@
@
echo
"#define
$(TargetPlatform_CPP)
_TARGET 1"
>>
$@
@
echo
>>
$@
@
echo
"#define
$(BuildArch_CPP)
_BUILD_ARCH 1"
>>
$@
@
echo
"#define
$(HostArch_CPP)
_HOST_ARCH 1"
>>
$@
@
echo
"#define
$(TargetArch_CPP)
_TARGET_ARCH 1"
>>
$@
@
echo
"#define BUILD_ARCH
\"
$(BuildArch_CPP)
\"
"
>>
$@
@
echo
"#define HOST_ARCH
\"
$(HostArch_CPP)
\"
"
>>
$@
@
echo
"#define TARGET_ARCH
\"
$(TargetArch_CPP)
\"
"
>>
$@
@
echo
>>
$@
@
echo
"#define
$(BuildOS_CPP)
_BUILD_OS 1"
>>
$@
@
echo
"#define
$(HostOS_CPP)
_HOST_OS 1"
>>
$@
@
echo
"#define
$(TargetOS_CPP)
_TARGET_OS 1"
>>
$@
@
echo
"#define BUILD_OS
\"
$(BuildOS_CPP)
\"
"
>>
$@
@
echo
"#define HOST_OS
\"
$(HostOS_CPP)
\"
"
>>
$@
@
echo
"#define TARGET_OS
\"
$(TargetOS_CPP)
\"
"
>>
$@
ifeq
"$(HostOS_CPP)" "irix"
@
echo
"#ifndef
$(IRIX_MAJOR)
_TARGET_OS "
>>
$@
@
echo
"#define
$(IRIX_MAJOR)
_TARGET_OS 1"
>>
$@
@
echo
"#endif "
>>
$@
endif
@
echo
>>
$@
@
echo
"#define
$(BuildVendor_CPP)
_BUILD_VENDOR 1"
>>
$@
@
echo
"#define
$(HostVendor_CPP)
_HOST_VENDOR 1"
>>
$@
@
echo
"#define
$(TargetVendor_CPP)
_TARGET_VENDOR 1"
>>
$@
@
echo
"#define BUILD_VENDOR
\"
$(BuildVendor_CPP)
\"
"
>>
$@
@
echo
"#define HOST_VENDOR
\"
$(HostVendor_CPP)
\"
"
>>
$@
@
echo
"#define TARGET_VENDOR
\"
$(TargetVendor_CPP)
\"
"
>>
$@
@
echo
>>
$@
@
echo
"#endif /* __PLATFORM_H__ */"
>>
$@
@
echo
"Done."
# For stage2 and above, the BUILD platform is the HOST of stage1, and
# the HOST platform is the TARGET of stage1. The TARGET remains the same
# (stage1 is the cross-compiler, not stage2).
compiler/stage2/$(PLATFORM_H)
:
mk/config.mk
$(MKDIRHIER)
$(
dir
$@
)
$(RM)
$@
@
echo
"Creating
$@
..."
@
echo
"#ifndef __PLATFORM_H__"
>
$@
@
echo
"#define __PLATFORM_H__"
>>
$@
@
echo
>>
$@
@
echo
"#define BuildPlatform_NAME
\"
$(HOSTPLATFORM)
\"
"
>>
$@
@
echo
"#define HostPlatform_NAME
\"
$(TARGETPLATFORM)
\"
"
>>
$@
@
echo
"#define TargetPlatform_NAME
\"
$(TARGETPLATFORM)
\"
"
>>
$@
@
echo
>>
$@
@
echo
"#define
$(HostPlatform_CPP)
_BUILD 1"
>>
$@
@
echo
"#define
$(TargetPlatform_CPP)
_HOST 1"
>>
$@
@
echo
"#define
$(TargetPlatform_CPP)
_TARGET 1"
>>
$@
@
echo
>>
$@
@
echo
"#define
$(HostArch_CPP)
_BUILD_ARCH 1"
>>
$@
@
echo
"#define
$(TargetArch_CPP)
_HOST_ARCH 1"
>>
$@
@
echo
"#define
$(TargetArch_CPP)
_TARGET_ARCH 1"
>>
$@
@
echo
"#define BUILD_ARCH
\"
$(HostArch_CPP)
\"
"
>>
$@
@
echo
"#define HOST_ARCH
\"
$(TargetArch_CPP)
\"
"
>>
$@
@
echo
"#define TARGET_ARCH
\"
$(TargetArch_CPP)
\"
"
>>
$@
@
echo
>>
$@
@
echo
"#define
$(HostOS_CPP)
_BUILD_OS 1"
>>
$@
@
echo
"#define
$(TargetOS_CPP)
_HOST_OS 1"
>>
$@
@
echo
"#define
$(TargetOS_CPP)
_TARGET_OS 1"
>>
$@
@
echo
"#define BUILD_OS
\"
$(HostOS_CPP)
\"
"
>>
$@
@
echo
"#define HOST_OS
\"
$(TargetOS_CPP)
\"
"
>>
$@
@
echo
"#define TARGET_OS
\"
$(TargetOS_CPP)
\"
"
>>
$@
ifeq
"$(HostOS_CPP)" "irix"
@
echo
"#ifndef
$(IRIX_MAJOR)
_TARGET_OS "
>>
$@
@
echo
"#define
$(IRIX_MAJOR)
_TARGET_OS 1"
>>
$@
@
echo
"#endif "
>>
$@
endif
@
echo
>>
$@
@
echo
"#define
$(HostVendor_CPP)
_BUILD_VENDOR 1"
>>
$@
@
echo
"#define
$(TargetVendor_CPP)
_HOST_VENDOR 1"
>>
$@
@
echo
"#define
$(TargetVendor_CPP)
_TARGET_VENDOR 1"
>>
$@
@
echo
"#define BUILD_VENDOR
\"
$(HostVendor_CPP)
\"
"
>>
$@
@
echo
"#define HOST_VENDOR
\"
$(TargetVendor_CPP)
\"
"
>>
$@
@
echo
"#define TARGET_VENDOR
\"
$(TargetVendor_CPP)
\"
"
>>
$@
@
echo
>>
$@
@
echo
"#endif /* __PLATFORM_H__ */"
>>
$@
@
echo
"Done."
compiler/stage3/$(PLATFORM_H)
:
compiler/stage2/$(PLATFORM_H)
$(CP)
$<
$@
# Every Constants.o object file depends on includes/GHCConstants.h:
$(eval
$(call
compiler-hs-dependency,Constants,$(includes_GHCCONSTANTS)))
# ----------------------------------------------------------------------------
# Generate supporting stuff for prelude/PrimOp.lhs
# from prelude/primops.txt
# XXX: these should go in stage1/stage2/stage3
PRIMOP_BITS
=
compiler/primop-data-decl.hs-incl
\
compiler/primop-tag.hs-incl
\
compiler/primop-list.hs-incl
\
compiler/primop-has-side-effects.hs-incl
\
compiler/primop-out-of-line.hs-incl
\
compiler/primop-commutable.hs-incl
\
compiler/primop-needs-wrapper.hs-incl
\
compiler/primop-can-fail.hs-incl
\
compiler/primop-strictness.hs-incl
\
compiler/primop-primop-info.hs-incl
compiler_CPP_OPTS
+=
-I
$(GHC_INCLUDE_DIR)
compiler_CPP_OPTS
+=
${GhcCppOpts}
$(PRIMOPS_TXT) compiler/parser/Parser.y
:
%: %.pp compiler/stage1/$(PLATFORM_H)
$(CPP)
$(RAWCPP_FLAGS)
-P
$(compiler_CPP_OPTS)
-x
c
$<
|
grep
-v
'^#pragma GCC'
>
$@
$(eval
$(call
clean-target,compiler,primop,
$(PRIMOPS_TXT)
compiler/parser/Parser.y
$(PRIMOP_BITS)))
compiler/primop-data-decl.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--data-decl
<
$<
>
$@
compiler/primop-tag.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--primop-tag
<
$<
>
$@
compiler/primop-list.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--primop-list
<
$<
>
$@
compiler/primop-has-side-effects.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--has-side-effects
<
$<
>
$@
compiler/primop-out-of-line.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--out-of-line
<
$<
>
$@
compiler/primop-commutable.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--commutable
<
$<
>
$@
compiler/primop-needs-wrapper.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--needs-wrapper
<
$<
>
$@
compiler/primop-can-fail.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--can-fail
<
$<
>
$@
compiler/primop-strictness.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--strictness
<
$<
>
$@
compiler/primop-primop-info.hs-incl
:
$(PRIMOPS_TXT) $(GENPRIMOP_INPLACE)
$(GENPRIMOP_INPLACE)
--primop-primop-info
<
$<
>
$@
# Every PrimOp.o object file depends on $(PRIMOP_BITS):
$(eval
$(call
compiler-hs-dependency,PrimOp,$(PRIMOP_BITS)))
# Usages aren't used any more; but the generator
# can still generate them if we want them back
compiler/primop-usage.hs-incl
:
$(PRIMOPS_TXT)
$(GENPRIMOP_INPLACE)
--usage
<
$<
>
$@
# -----------------------------------------------------------------------------
# Configuration
compiler_stage1_CONFIGURE_OPTS
+=
--flags
=
stage1
compiler_stage2_CONFIGURE_OPTS
+=
--flags
=
stage2
compiler_stage3_CONFIGURE_OPTS
+=
--flags
=
stage3
ifeq
"$(GhcWithNativeCodeGen)" "YES"
compiler_stage1_CONFIGURE_OPTS
+=
--flags
=
ncg
compiler_stage2_CONFIGURE_OPTS
+=
--flags
=
ncg
endif
ifeq
"$(GhcWithInterpreter)" "YES"
compiler_stage2_CONFIGURE_OPTS
+=
--flags
=
ghci
ifeq
"$(BuildSharedLibs)" "YES"
compiler_stage2_CONFIGURE_OPTS
+=
--enable-shared
# 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.
compiler_stage2_CONFIGURE_OPTS
+=
--flags
=
dynlibs
endif
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
compiler_stage2_CONFIGURE_OPTS
+=
--ghc-option
=
-DGHCI_TABLES_NEXT_TO_CODE
endif
# Should the debugger commands be enabled?
ifeq
"$(GhciWithDebugger)" "YES"
compiler_stage2_CONFIGURE_OPTS
+=
--ghc-option
=
-DDEBUGGER
endif
endif
ifeq
"$(GhcWithNativeCodeGen)" "NO"
# XXX This should logically be a CPP option, but there doesn't seem to
# be a flag for that
compiler_CONFIGURE_OPTS
+=
--ghc-option
=
-DOMIT_NATIVE_CODEGEN
endif
ifeq
"$(TargetOS_CPP)" "openbsd"
compiler_CONFIGURE_OPTS
+=
--ld-options
=
-E
endif
ifeq
"$(GhcUnregisterised)" "NO"
ifeq
"$(HOSTPLATFORM)" "ia64-unknown-linux"
# needed for generating proper relocation in large binaries: trac #856
compiler_CONFIGURE_OPTS
+=
--ld-option
=
-Wl
,--relax
endif
endif
# We need to turn on profiling either if we have been asked to
# (GhcLibProfiled = YES) or if we want GHC itself to be compiled with
# profiling enabled (GhcProfiled = YES).
ifneq
"$(GhcLibProfiled) $(GhcProfiled)" "NO NO"
compiler_stage2_CONFIGURE_OPTS
+=
--enable-library-profiling
# And if we're profiling GHC then we want lots of SCCs.
# We also don't want to waste time building the non-profiling library,
# either normally or for ghci. Unfortunately this means that we have to
# tell ghc-pkg --force as it gets upset when libHSghc-6.9.a doesn't
# exist.
ifeq
"$(GhcProfiled)" "YES"
compiler_stage2_CONFIGURE_OPTS
+=
--ghc-option
=
-auto-all
compiler_stage2_CONFIGURE_OPTS
+=
--disable-library-vanilla
compiler_stage2_CONFIGURE_OPTS
+=
--disable-library-for-ghci
compiler_stage2_CONFIGURE_OPTS
+=
--ghc-pkg-option
=
--force
endif
endif
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+.
compiler_stage1_CONFIGURE_OPTS
+=
--ghc-option
=
'-\#include'
\
--ghc-option
=
'"<windows.h>"'
\
--ghc-option
=
'-\#include'
\
--ghc-option
=
'"<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.
# Again, this is only important for older compilers, so we don't do it in
# stage 2+.
compiler_stage1_CONFIGURE_OPTS
+=
--ghc-options
=
'-\#include "cutils.h"'
compiler_stage3_CONFIGURE_OPTS
:=
$(compiler_stage2_CONFIGURE_OPTS)
compiler_stage1_CONFIGURE_OPTS
+=
--ghc-option
=
-DSTAGE
=
1
compiler_stage2_CONFIGURE_OPTS
+=
--ghc-option
=
-DSTAGE
=
2
compiler_stage3_CONFIGURE_OPTS
+=
--ghc-option
=
-DSTAGE
=
3
compiler_stage2_HADDOCK_OPTS
+=
--haddock-option
=
--optghc
=
-DSTAGE
=
2
compiler_stage1_CONFIGURE_OPTS
+=
--ghc-options
=
'
$(GhcStage1HcOpts)
'
compiler_stage2_CONFIGURE_OPTS
+=
--ghc-options
=
'
$(GhcStage2HcOpts)
'
compiler_stage3_CONFIGURE_OPTS
+=
--ghc-options
=
'
$(GhcStage3HcOpts)
'
compiler/stage1/package-data.mk
:
compiler/ghc.mk
compiler/stage2/package-data.mk
:
compiler/ghc.mk
compiler/stage3/package-data.mk
:
compiler/ghc.mk
# -----------------------------------------------------------------------------
# And build the package
compiler_PACKAGE
=
ghc
# haddocking only happens for stage2
compiler_stage1_DO_HADDOCK
=
NO
compiler_stage3_DO_HADDOCK
=
NO
# Don't do splitting for the GHC package, it takes too long and
# there's not much benefit.
compiler_stage1_SplitObjs
=
NO
compiler_stage2_SplitObjs
=
NO
compiler_stage3_SplitObjs
=
NO
# For now, bindists always use stage 2
ifneq
"$(BINDIST)" "YES"
# stage 1 is enabled unless $(stage) is set to something other than 1
ifeq
"$(filter-out 1,$(stage))" ""
$(eval
$(call
build-package,compiler,stage1,0))
endif
endif
# stage 2 is enabled unless $(stage) is set to something other than 2
ifeq
"$(filter-out 2,$(stage))" ""
$(eval
$(call
build-package,compiler,stage2,1))
endif
ifneq
"$(BINDIST)" "YES"
# stage 3 has to be requested explicitly with stage=3
ifeq
"$(stage)" "3"
$(eval
$(call
build-package,compiler,stage3,2))
endif
$(compiler_stage1_depfile)
:
compiler/stage1/$(PLATFORM_H)
$(compiler_stage2_depfile)
:
compiler/stage2/$(PLATFORM_H)
$(compiler_stage3_depfile)
:
compiler/stage3/$(PLATFORM_H)
$(compiler_stage1_depfile)
:
$(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
$(compiler_stage2_depfile)
:
$(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
$(compiler_stage3_depfile)
:
$(includes_H_CONFIG) $(includes_H_PLATFORM) $(includes_GHCCONSTANTS) $(includes_DERIVEDCONSTANTS) $(PRIMOP_BITS)
endif
compiler/main/DriverMkDepend.hs
View file @
34cc75e1
...
...
@@ -72,7 +72,8 @@ doMkDependHS srcs = do
-- Prcess them one by one, dumping results into makefile
-- and complaining about cycles
hsc_env
<-
getSession
mapM
(
liftIO
.
processDeps
dflags
hsc_env
excl_mods
(
mkd_tmp_hdl
files
))
sorted
root
<-
liftIO
getCurrentDirectory
mapM
(
liftIO
.
processDeps
dflags
hsc_env
excl_mods
root
(
mkd_tmp_hdl
files
))
sorted
-- If -ddump-mod-cycles, show cycles in the module graph
liftIO
$
dumpModCycles
dflags
mod_summaries
...
...
@@ -158,6 +159,7 @@ beginMkDependHS dflags = do
processDeps
::
DynFlags
->
HscEnv
->
[
ModuleName
]
->
FilePath
->
Handle
-- Write dependencies to here
->
SCC
ModSummary
->
IO
()
...
...
@@ -176,11 +178,11 @@ processDeps :: DynFlags
--
-- For {-# SOURCE #-} imports the "hi" will be "hi-boot".
processDeps
_
_
_
_
(
CyclicSCC
nodes
)
processDeps
_
_
_
_
_
(
CyclicSCC
nodes
)