distdir-way-opts.mk 5.95 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
# -----------------------------------------------------------------------------
#
# (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
#
# -----------------------------------------------------------------------------

Ian Lynagh's avatar
Ian Lynagh committed
13 14 15

# Set compilation flags that additionally depend on a particular way

16
define distdir-way-opts # args: $1 = dir, $2 = distdir, $3 = way, $4 = stage
Ian Lynagh's avatar
Ian Lynagh committed
17

Simon Marlow's avatar
Simon Marlow committed
18 19 20 21 22 23 24 25 26 27 28 29 30
# Here is how the command line for a Haskell compilation is constructed.
#   $1 is the directory we're building in
#   $2 is the distdir (e.g. "dist", "dist-install" etc.)
#   $3 is the way (e.g. "v", "p", etc.)
#   $4 is the stage ("1", "2", "3")
# 
# -----------------------------
# The variables affecting Haskell compilations are as follows, including
# the places in the build system that may define them.
#
#  Variable              Purpose                           Defined by
#  --------------        ------------------------------    --------------
#  $1_PACKAGE            Package name for this dir,        $1/$2/ghc.mk
31 32
#                        if it is a package   
#   
Simon Marlow's avatar
Simon Marlow committed
33
#  CONF_HC_OPTS          GHC options from ./configure      mk/config.mk.in
34
#   
Simon Marlow's avatar
Simon Marlow committed
35
#  CONF_HC_OPTS_STAGE$4  GHC options from ./configure      mk/config.mk.in
36 37
#                        specific to stage $4   
#   
Simon Marlow's avatar
Simon Marlow committed
38
#  WAY_$3_HC_OPTS        GHC options specific to way $3    mk/ways.mk
39
#   
Simon Marlow's avatar
Simon Marlow committed
40 41 42
#  SRC_HC_OPTS           source-tree-wide GHC options      mk/config.mk.in
#                                                          mk/build.mk
#                                                          mk/validate.mk
43
#   
Ian Lynagh's avatar
Ian Lynagh committed
44 45 46 47
#  SRC_HC_WARNING_OPTS   source-tree-wide GHC warning      mk/config.mk.in
#                        options                           mk/build.mk
#                                                          mk/validate.mk
#   
Simon Marlow's avatar
Simon Marlow committed
48
#  EXTRA_HC_OPTS         for supplying extra options on    make EXTRA_HC_OPTS=...
49 50
#                        the command line   
#   
Simon Marlow's avatar
Simon Marlow committed
51 52
#  $1_HC_OPTS            GHC options specific to this      $1/$2/package-data.mk
#                        dir
53
#   
Simon Marlow's avatar
Simon Marlow committed
54 55
#  $1_$2_HC_OPTS         GHC options specific to this      $1/$2/package-data.mk
#                        dir and distdir
56
#   
Simon Marlow's avatar
Simon Marlow committed
57 58
#  $1_$2_$3_HC_OPTS      GHC options specific to this      $1/$2/package-data.mk
#                        dir, distdir and way
59
#   
Simon Marlow's avatar
Simon Marlow committed
60
#  $1_$2_MORE_HC_OPTS    GHC options for this dir/distdir  ???
61
#   
Simon Marlow's avatar
Simon Marlow committed
62
#  $1_$2_EXTRA_HC_OPTS   GHC options for this dir/distdir  mk/build.mk
63
#   
64
#  $1_$2_HC_PKGCONF      -package-db flag if necessary   rules/package-config.mk
65
#   
Simon Marlow's avatar
Simon Marlow committed
66
#  $1_$2_HS_SRC_DIRS     dirs relative to $1 containing    $1/$2/package-data.mk
67 68
#                        source files   
#   
Simon Marlow's avatar
Simon Marlow committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82
#  $1_$2_CPP_OPTS        CPP options                       $1/$2/package-data.mk
#  
#  <file>_HC_OPTS        GHC options for this source       $1/$2/ghc.mk
#                        file (without the extension)

# -----------------------------

# The actual options passed to a Haskell compilation are defined
# below.  Note that in general, more specific sets of options come
# after the less specific, so that we can override global options
# on a per-directory or per-way basis, for example.

# $1_$2_$3_MOST_HC_OPTS is also passed to C compilations when we use
# GHC as the C compiler.
Ian Lynagh's avatar
Ian Lynagh committed
83 84 85

$1_$2_$3_MOST_HC_OPTS = \
 $$(WAY_$3_HC_OPTS) \
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
 $$(CONF_HC_OPTS) \
 $$(SRC_HC_OPTS) \
 $$($1_HC_OPTS) \
 $$($1_$2_HC_PKGCONF) \
 $$(if $$($1_$2_PROG),, \
        $$(if $$($1_PACKAGE),-package-name $$($1_PACKAGE)-$$($1_$2_VERSION))) \
 $$(if $$($1_PACKAGE),-hide-all-packages) \
 -i $$(if $$($1_$2_HS_SRC_DIRS),$$(foreach dir,$$($1_$2_HS_SRC_DIRS),-i$1/$$(dir)),-i$1) \
 -i$1/$2/build -i$1/$2/build/autogen \
 -I$1/$2/build -I$1/$2/build/autogen \
 $$(foreach dir,$$(filter-out /%,$$($1_$2_INCLUDE_DIRS)),-I$1/$$(dir)) \
 $$(foreach dir,$$(filter /%,$$($1_$2_INCLUDE_DIRS)),-I$$(dir)) \
 $$(foreach inc,$$($1_$2_INCLUDE),-\#include "$$(inc)") \
 $$(foreach opt,$$($1_$2_CPP_OPTS),-optP$$(opt)) \
 $$(if $$($1_PACKAGE),-optP-include -optP$1/$2/build/autogen/cabal_macros.h) \
 $$(foreach pkg,$$($1_$2_DEPS),-package $$(pkg)) \
 $$($1_$2_HC_OPTS) \
103
 $$(CONF_HC_OPTS_STAGE$4) \
104
 $$($1_$2_MORE_HC_OPTS) \
105
 $$($1_$2_EXTRA_HC_OPTS) \
Ian Lynagh's avatar
Ian Lynagh committed
106
 $$($1_$2_$3_HC_OPTS) \
Ian Lynagh's avatar
Ian Lynagh committed
107
 $$($$(basename $$(subst ./,,$$<))_HC_OPTS) \
Ian Lynagh's avatar
Ian Lynagh committed
108
 $$(SRC_HC_WARNING_OPTS) \
Ian Lynagh's avatar
Ian Lynagh committed
109 110
 $$(EXTRA_HC_OPTS)

111 112 113 114
$1_$2_$3_MOST_DIR_HC_OPTS = \
 $$($1_$2_$3_MOST_HC_OPTS) \
 -odir $1/$2/build -hidir $1/$2/build -stubdir $1/$2/build

Simon Marlow's avatar
Simon Marlow committed
115 116 117 118 119
# NB. CONF_HC_OPTS_STAGE$4 has to be late enough to override $1_$2_HC_OPTS, so
# that -O0 is effective (see #5484)

# $1_$2_$3_ALL_HC_OPTS: this is all the options we will pass to GHC
# for a given ($1,$2,$3).
Ian Lynagh's avatar
Ian Lynagh committed
120
$1_$2_$3_ALL_HC_OPTS = \
121 122 123 124
 -hisuf $$($3_hisuf) -osuf  $$($3_osuf) -hcsuf $$($3_hcsuf) \
 $$($1_$2_$3_MOST_DIR_HC_OPTS) \
 $$(if $$(findstring YES,$$($1_$2_SplitObjs)),$$(if $$(findstring dyn,$3),,-split-objs),) \
 $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),$$(if $$(findstring v,$3),-dynamic-too))
Ian Lynagh's avatar
Ian Lynagh committed
125

126 127 128 129 130 131 132 133 134 135 136 137
ifeq "$3" "dyn"
ifneq "$4" "0"
ifeq "$$(TargetOS_CPP)" "linux"
$1_$2_$3_GHC_LD_OPTS += \
    -fno-use-rpaths \
    $$(foreach d,$$($1_$2_TRANSITIVE_DEPS),-optl-Wl$$(comma)-rpath -optl-Wl$$(comma)'$$$$ORIGIN/../$$d')
else ifeq "$$(TargetOS_CPP)" "darwin"
$1_$2_$3_GHC_LD_OPTS += -optl-Wl,-headerpad_max_install_names
endif
endif
endif

Ian Lynagh's avatar
Ian Lynagh committed
138 139
$1_$2_$3_ALL_CC_OPTS = \
 $$(WAY_$3_CC_OPTS) \
140
 $$($1_$2_DIST_GCC_CC_OPTS) \
Ian Lynagh's avatar
Ian Lynagh committed
141
 $$($1_$2_$3_CC_OPTS) \
142
 $$($$(basename $$<)_CC_OPTS) \
143
 $$($1_$2_EXTRA_CC_OPTS) \
Ian Lynagh's avatar
Ian Lynagh committed
144 145 146
 $$(EXTRA_CC_OPTS)

$1_$2_$3_GHC_CC_OPTS = \
147 148 149 150 151
 $$(addprefix -optc, \
     $$(WAY_$3_CC_OPTS) \
     $$($1_$2_DIST_CC_OPTS) \
     $$($1_$2_$3_CC_OPTS) \
     $$($$(basename $$<)_CC_OPTS) \
152
     $$($1_$2_EXTRA_CC_OPTS) \
153
     $$(EXTRA_CC_OPTS)) \
Ian Lynagh's avatar
Ian Lynagh committed
154 155 156
 $$($1_$2_$3_MOST_HC_OPTS)

$1_$2_$3_ALL_AS_OPTS = \
157
 $$(CONF_AS_OPTS) \
158
 $$(SRC_AS_OPTS) \
Ian Lynagh's avatar
Ian Lynagh committed
159 160 161 162 163 164 165 166
 $$(WAY_$3_AS_OPTS) \
 $$($1_AS_OPTS) \
 $$($1_$2_AS_OPTS) \
 $$($1_$2_$3_AS_OPTS) \
 $$(EXTRA_AS_OPTS)

endef