summaryrefslogtreecommitdiff
path: root/utils/iserv/ghc.mk
blob: 74f90e60b7ac29ce1e01307652a19cc73d47676c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# -----------------------------------------------------------------------------
#
# (c) 2009-2012 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
#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
#
# -----------------------------------------------------------------------------

utils/iserv_USES_CABAL = YES
utils/iserv_PACKAGE = iserv
utils/iserv_EXECUTABLE = iserv

ifeq "$(GhcDebugged)" "YES"
utils/iserv_stage2_MORE_HC_OPTS += -debug
utils/iserv_stage2_p_MORE_HC_OPTS += -debug
utils/iserv_stage2_dyn_MORE_HC_OPTS += -debug
endif

ifeq "$(GhcThreaded)" "YES"
utils/iserv_stage2_MORE_HC_OPTS += -threaded
utils/iserv_stage2_p_MORE_HC_OPTS += -threaded
utils/iserv_stage2_dyn_MORE_HC_OPTS += -threaded
endif

# Add -Wl,--export-dynamic enables GHCi to load dynamic objects that
# refer to the RTS.  This is harmless if you don't use it (adds a bit
# of overhead to startup and increases the binary sizes) but if you
# need it there's no alternative.
ifeq "$(TargetElf)" "YES"
ifneq "$(TargetOS_CPP)" "solaris2"
# The Solaris linker does not support --export-dynamic option. It also
# does not need it since it exports all dynamic symbols by default
utils/iserv_stage2_MORE_HC_OPTS += -optl-Wl,--export-dynamic
utils/iserv_stage2_p_MORE_HC_OPTS += -optl-Wl,--export-dynamic
utils/iserv_stage2_dyn_MORE_HC_OPTS += -optl-Wl,--export-dynamic
endif
endif

# Override the default way, because we want a specific version of this
# program for each way.  Note that it's important to do this even for
# the vanilla version, otherwise we get a dynamic executable when
# DYNAMIC_GHC_PROGRAMS=YES.
utils/iserv_stage2_PROGRAM_WAY = v
utils/iserv_stage2_p_PROGRAM_WAY = p
utils/iserv_stage2_dyn_PROGRAM_WAY = dyn

utils/iserv_stage2_PROGNAME = ghc-iserv
utils/iserv_stage2_p_PROGNAME = ghc-iserv-prof
utils/iserv_stage2_dyn_PROGNAME = ghc-iserv-dyn

utils/iserv_stage2_MORE_HC_OPTS += -no-hs-main
utils/iserv_stage2_p_MORE_HC_OPTS += -no-hs-main
utils/iserv_stage2_dyn_MORE_HC_OPTS += -no-hs-main

utils/iserv_stage2_INSTALL = YES
utils/iserv_stage2_p_INSTALL = YES
utils/iserv_stage2_dyn_INSTALL = YES

# Install in $(libexec), not in $(bindir)
utils/iserv_stage2_TOPDIR = YES
utils/iserv_stage2_p_TOPDIR = YES
utils/iserv_stage2_dyn_TOPDIR = YES

utils/iserv_stage2_INSTALL_INPLACE = YES
utils/iserv_stage2_p_INSTALL_INPLACE = YES
utils/iserv_stage2_dyn_INSTALL_INPLACE = YES

ifeq "$(CLEANING)" "YES"

NEED_iserv = YES
NEED_iserv_p = YES
NEED_iserv_dyn = YES

else

ifneq "$(findstring v, $(GhcLibWays))" ""
NEED_iserv = YES
else
NEED_iserv = NO
endif

ifneq "$(findstring p, $(GhcLibWays))" ""
NEED_iserv_p = YES
else
NEED_iserv_p = NO
endif

ifneq "$(findstring dyn, $(GhcLibWays))" ""
NEED_iserv_dyn = YES
else
NEED_iserv_dyn = NO
endif
endif

ifeq "$(NEED_iserv)" "YES"
$(eval $(call build-prog,utils/iserv,stage2,1))
endif

ifeq "$(NEED_iserv_p)" "YES"
$(eval $(call build-prog,utils/iserv,stage2_p,1))
endif

ifeq "$(NEED_iserv_dyn)" "YES"
$(eval $(call build-prog,utils/iserv,stage2_dyn,1))
endif

all_ghc_stage2 : $(iserv-stage2_INPLACE)
all_ghc_stage2 : $(iserv-stage2_p_INPLACE)
all_ghc_stage2 : $(iserv-stage2_dyn_INPLACE)