Forked from
Glasgow Haskell Compiler / GHC
31716 commits behind the upstream repository.
-
tibbe authored
This build generates the same code as the "perf" build and is thus good for compiling benchmarks and inspecting the generated code. However, it compiles the stage2 compiler faster at the expense of compiler user programs more slowly.
tibbe authoredThis build generates the same code as the "perf" build and is thus good for compiling benchmarks and inspecting the generated code. However, it compiles the stage2 compiler faster at the expense of compiler user programs more slowly.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
build.mk.sample 7.48 KiB
# -----------------------------------------------------------------------------
# A Sample build.mk
#
# Uncomment one of the following BuildFlavour settings to get the desired
# overall build type, and then tweak the options in the relevant section
# below.
# -------- Build profiles -----------------------------------------------------
# Uncomment one of these to select a build profile below:
# Full build with max optimisation and everything enabled (very slow build)
#BuildFlavour = perf
# As above but build GHC using the LLVM backend
#BuildFlavour = perf-llvm
# Perf build configured for a cross-compiler
#BuildFlavour = perf-cross
# Fast build with optimised libraries, no profiling (RECOMMENDED):
#BuildFlavour = quick
# Fast build with optimised libraries, no profiling, with LLVM:
#BuildFlavour = quick-llvm
# Fast build configured for a cross compiler
#BuildFlavour = quick-cross
# Even faster build. NOT RECOMMENDED: the libraries will be
# completely unoptimised, so any code built with this compiler
# (including stage2) will run very slowly:
#BuildFlavour = quickest
# Profile the stage2 compiler:
#BuildFlavour = prof
# A development build, working on the stage 1 compiler:
#BuildFlavour = devel1
# A development build, working on the stage 2 compiler:
#BuildFlavour = devel2
# A build with max optimisation that still builds the stage2 compiler
# quickly. Compiled code will be the same as with "perf". Programs
# will compile more slowly.
#BuildFlavour = bench
# As above but build GHC using the LLVM backend
#BuildFlavour = bench-llvm
# Bench build configured for a cross-compiler
#BuildFlavour = bench-cross
# -------- Miscellaneous variables --------------------------------------------
# Set to V = 0 to get prettier build output.
# Please use V = 1 when reporting GHC bugs.
V = 1
# After stage 1 and the libraries have been built, you can uncomment this line:
#stage=2
# Then stage 1 will not be touched by the build system, until
# you comment the line again. This is a useful trick for when you're
# working on stage 2 and want to freeze stage 1 and the libraries for
# a while.
GhcLibWays = $(if $(filter $(DYNAMIC_GHC_PROGRAMS),YES),v dyn,v)
# ----------- A Performance/Distribution build --------------------------------
ifeq "$(BuildFlavour)" "perf"
# perf matches the default settings, repeated here for comparison:
SRC_HC_OPTS = -O -H64m
GhcStage1HcOpts = -O -fasm
GhcStage2HcOpts = -O2 -fasm
GhcHcOpts = -Rghc-timing
GhcLibHcOpts = -O2
GhcLibWays += p
ifeq "$(PlatformSupportsSharedLibs)" "YES"
GhcLibWays += dyn
endif
endif
# ---------------- Perf build using LLVM --------------------------------------
ifeq "$(BuildFlavour)" "perf-llvm"
SRC_HC_OPTS = -O -H64m -fllvm
GhcStage1HcOpts = -O -fllvm
GhcStage2HcOpts = -O2 -fllvm
GhcHcOpts = -Rghc-timing
GhcLibHcOpts = -O2
GhcLibWays += p
endif
# ------- A Perf build configured for cross-compilation ----------------------
ifeq "$(BuildFlavour)" "perf-cross"
SRC_HC_OPTS = -O -H64m -fllvm
GhcStage1HcOpts = -O2 -fllvm
GhcStage2HcOpts = -O2 -fllvm
GhcHcOpts = -Rghc-timing
GhcLibHcOpts = -O2
GhcLibWays += p
INTEGER_LIBRARY = integer-simple
Stage1Only = YES
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
DYNAMIC_BY_DEFAULT = NO
DYNAMIC_GHC_PROGRAMS = NO
endif
# -------- A Fast build -------------------------------------------------------
ifeq "$(BuildFlavour)" "quickest"
SRC_HC_OPTS = -H64m -O0 -fasm
GhcStage1HcOpts = -O -fasm
GhcStage2HcOpts = -O0 -fasm
GhcLibHcOpts = -O0 -fasm
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
endif
# -------- A Fast build with optimised libs -----------------------------------
ifeq "$(BuildFlavour)" "quick"
SRC_HC_OPTS = -H64m -O0 -fasm
GhcStage1HcOpts = -O -fasm
GhcStage2HcOpts = -O0 -fasm
GhcLibHcOpts = -O -fasm
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
endif
# -------- A Fast build with optimised libs using LLVM ------------------------
ifeq "$(BuildFlavour)" "quick-llvm"
SRC_HC_OPTS = -H64m -O0 -fllvm
GhcStage1HcOpts = -O -fllvm
GhcStage2HcOpts = -O0 -fllvm
GhcLibHcOpts = -O -fllvm
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
endif
# -------- A Fast build configured for cross-compilation ----------------------
ifeq "$(BuildFlavour)" "quick-cross"
SRC_HC_OPTS = -H64m -O0
GhcStage1HcOpts = -O -fllvm
GhcStage2HcOpts = -O0 -fllvm
GhcLibHcOpts = -O -fllvm
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
INTEGER_LIBRARY = integer-simple
Stage1Only = YES
DYNAMIC_BY_DEFAULT = NO
DYNAMIC_GHC_PROGRAMS = NO
endif
# -------- Profile the stage2 compiler ----------------------------------------
ifeq "$(BuildFlavour)" "prof"
SRC_HC_OPTS = -H64m -O0 -fasm
GhcStage1HcOpts = -O -fasm
GhcStage2HcOpts = -O -fasm
GhcLibHcOpts = -O -fasm
GhcLibWays += p
GhcProfiled = YES
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
endif
# -------- A Development build (stage 1) --------------------------------------
ifeq "$(BuildFlavour)" "devel1"
SRC_HC_OPTS = -H64m -O -fasm
GhcLibHcOpts = -O -dcore-lint
GhcStage1HcOpts = -Rghc-timing -O0 -DDEBUG
GhcStage2HcOpts = -Rghc-timing -O -fasm
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
LAX_DEPENDENCIES = YES
endif
# -------- A Development build (stage 2) --------------------------------------
ifeq "$(BuildFlavour)" "devel2"
SRC_HC_OPTS = -H64m -O -fasm
GhcLibHcOpts = -O -dcore-lint
GhcStage1HcOpts = -Rghc-timing -O -fasm
GhcStage2HcOpts = -Rghc-timing -O0 -DDEBUG
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
LAX_DEPENDENCIES = YES
endif
# -------- A bench build with optimised libs -----------------------------------
ifeq "$(BuildFlavour)" "bench"
SRC_HC_OPTS = -O -H64m
GhcStage1HcOpts = -O -fasm
GhcStage2HcOpts = -O0 -fasm
GhcLibHcOpts = -O2 -fasm
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
endif
# ---------------- Perf build using LLVM --------------------------------------
ifeq "$(BuildFlavour)" "bench-llvm"
SRC_HC_OPTS = -O -H64m
GhcStage1HcOpts = -O -fllvm
GhcStage2HcOpts = -O0 -fllvm
GhcLibHcOpts = -O2 -fllvm
SplitObjs = NO
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
endif
# ------- A Perf build configured for cross-compilation ----------------------
ifeq "$(BuildFlavour)" "bench-cross"
SRC_HC_OPTS = -O -H64m
GhcStage1HcOpts = -O -fasm
GhcStage2HcOpts = -O0 -fasm
GhcLibHcOpts = -O2 -fasm
SplitObjs = NO
INTEGER_LIBRARY = integer-simple
Stage1Only = YES
HADDOCK_DOCS = NO
BUILD_DOCBOOK_HTML = NO
BUILD_DOCBOOK_PS = NO
BUILD_DOCBOOK_PDF = NO
DYNAMIC_BY_DEFAULT = NO
DYNAMIC_GHC_PROGRAMS = NO
endif
# -----------------------------------------------------------------------------
# Other settings that might be useful
# NoFib settings
NoFibWays =
STRIP_CMD = :