summaryrefslogtreecommitdiff
path: root/mk/bootstrap.mk
blob: aef691dd1d02a5f7d440f46ad94200be009a02a3 (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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# -----------------------------------------------------------------------------
# $Id: bootstrap.mk,v 1.30 2004/02/04 10:00:43 simonmar Exp $
#
# Makefile rules for booting from .hc files without a driver.
#
# When booting from .hc files without a compiler installed, we don't have
# the benefit of the GHC driver to add all the magic options required to
# compile the .hc files, so we have to duplicate that functionality here.
# The result is unfortunately ugly, but we don't have another choice.

TOP_SAVED := $(TOP)
TOP:=$(TOP)/ghc

include $(TOP)/mk/version.mk
include $(TOP)/mk/paths.mk

# Reset TOP
TOP:=$(TOP_SAVED)

# -----------------------------------------------------------------------------
# Set the platform-specific options to send to the C compiler.  These should
# match the list in machdepCCOpts in ghc/compiler/DriverFlags.hs.
#

PLATFORM_CC_OPTS =
PLATFORM_HC_BOOT_CC_OPTS =

ifeq "$(i386_TARGET_ARCH)" "1"
PLATFORM_CC_OPTS += -DDONT_WANT_WIN32_DLL_SUPPORT
PLATFORM_HC_BOOT_CC_OPTS += -fno-defer-pop -fomit-frame-pointer 
endif

ifeq "$(hppa_TARGET_ARCH)" "1"
PLATFORM_CC_OPTS += -static -D_HPUX_SOURCE
endif

ifeq "$(powerpc_TARGET_ARCH)" "1"
PLATFORM_CC_OPTS += -static
PLATFORM_HC_BOOT_CC_OPTS += -finhibit-size-directive
endif

ifeq "$(rs6000_TARGET_ARCH)" "1"
PLATFORM_CC_OPTS += -static
PLATFORM_HC_BOOT_CC_OPTS += -finhibit-size-directive
endif

ifeq "$(mingw32_TARGET_OS)" "1"
PLATFORM_CC_OPTS += -mno-cygwin
endif

ifeq "$(alpha_TARGET_ARCH)" "1"
PLATFORM_CC_OPTS += -static -w
PLATFORM_HC_BOOT_CC_OPTS += -mieee
endif

ifeq "$(sparc_TARGET_ARCH)" "1"
PLATFORM_HC_BOOT_CC_OPTS += -w
endif

ifeq "$(BootingFromUnregisterisedHc)" "YES"
PLATFORM_HC_BOOT_CC_OPTS += -DNO_REGS -DUSE_MINIINTERPRETER
SRC_CC_OPTS += -DNO_REGS -DUSE_MINIINTERPRETER
# Add these flags to SRC_CC_OPTS too, because they need to be passed to the plain .c
# files in ghc/rts.
endif

PLATFORM_CC_OPTS += -D__GLASGOW_HASKELL__=$(ProjectVersionInt) 

HC_BOOT_CC_OPTS = $(PLATFORM_HC_BOOT_CC_OPTS) $(PLATFORM_CC_OPTS) $(CC_OPTS)

SRC_CC_OPTS += -I$(FPTOOLS_TOP_ABS)/ghc/includes -I$(FPTOOLS_TOP_ABS)/libraries/base/include -I$(FPTOOLS_TOP_ABS)/libraries/unix/include -I$(FPTOOLS_TOP_ABS)/libraries/parsec/include

ifeq "$(GhcWithInterpreter)" "YES"
SRC_CC_OPTS += -I$(FPTOOLS_TOP_ABS)/libraries/readline/include
endif

# -----------------------------------------------------------------------------
# Linking: we have to give all the libraries explicitly.

ifeq "$(LeadingUnderscore)" "YES"
UNDERSCORE=_
else
UNDERSCORE=
endif

ifeq "$(HaveLibGmp)" "NO"
DASH_L_GHC_RTS_GMP_DIR=-L$(FPTOOLS_TOP_ABS)/ghc/rts/gmp
endif

HC_BOOT_LD_OPTS =				\
   -L$(FPTOOLS_TOP_ABS)/ghc/rts			\
   $(DASH_L_GHC_RTS_GMP_DIR)                    \
   -L$(FPTOOLS_TOP_ABS)/libraries/base		\
   -L$(FPTOOLS_TOP_ABS)/libraries/base/cbits	\
   -L$(FPTOOLS_TOP_ABS)/libraries/haskell98

ifeq "$(GhcWithInterpreter)" "YES"
HC_BOOT_LD_OPTS += \
   -L$(FPTOOLS_TOP_ABS)/libraries/template-haskell	\
   -L$(FPTOOLS_TOP_ABS)/libraries/readline	\
   -L$(FPTOOLS_TOP_ABS)/libraries/parsec        \
   -L$(FPTOOLS_TOP_ABS)/libraries/unix          \
   -L$(FPTOOLS_TOP_ABS)/libraries/unix/cbits
endif

HC_BOOT_LD_OPTS += \
   -u "$(UNDERSCORE)GHCziBase_Izh_static_info" \
   -u "$(UNDERSCORE)GHCziBase_Czh_static_info" \
   -u "$(UNDERSCORE)GHCziFloat_Fzh_static_info" \
   -u "$(UNDERSCORE)GHCziFloat_Dzh_static_info" \
   -u "$(UNDERSCORE)GHCziPtr_Ptr_static_info" \
   -u "$(UNDERSCORE)GHCziWord_Wzh_static_info" \
   -u "$(UNDERSCORE)GHCziInt_I8zh_static_info" \
   -u "$(UNDERSCORE)GHCziInt_I16zh_static_info" \
   -u "$(UNDERSCORE)GHCziInt_I32zh_static_info" \
   -u "$(UNDERSCORE)GHCziInt_I64zh_static_info" \
   -u "$(UNDERSCORE)GHCziWord_W8zh_static_info" \
   -u "$(UNDERSCORE)GHCziWord_W16zh_static_info" \
   -u "$(UNDERSCORE)GHCziWord_W32zh_static_info" \
   -u "$(UNDERSCORE)GHCziWord_W64zh_static_info" \
   -u "$(UNDERSCORE)GHCziStable_StablePtr_static_info" \
   -u "$(UNDERSCORE)GHCziBase_Izh_con_info" \
   -u "$(UNDERSCORE)GHCziBase_Czh_con_info" \
   -u "$(UNDERSCORE)GHCziFloat_Fzh_con_info" \
   -u "$(UNDERSCORE)GHCziFloat_Dzh_con_info" \
   -u "$(UNDERSCORE)GHCziPtr_Ptr_con_info" \
   -u "$(UNDERSCORE)GHCziStable_StablePtr_con_info" \
   -u "$(UNDERSCORE)GHCziBase_False_closure" \
   -u "$(UNDERSCORE)GHCziBase_True_closure" \
   -u "$(UNDERSCORE)GHCziPack_unpackCString_closure" \
   -u "$(UNDERSCORE)GHCziIOBase_stackOverflow_closure" \
   -u "$(UNDERSCORE)GHCziIOBase_heapOverflow_closure" \
   -u "$(UNDERSCORE)GHCziIOBase_NonTermination_closure" \
   -u "$(UNDERSCORE)GHCziIOBase_BlockedOnDeadMVar_closure" \
   -u "$(UNDERSCORE)GHCziIOBase_Deadlock_closure" \
   -u "$(UNDERSCORE)GHCziWeak_runFinalizzerBatch_closure" \
   -u "$(UNDERSCORE)__stginit_Prelude"


HC_BOOT_LIBS =

ifeq "$(GhcWithInterpreter)" "YES"
HC_BOOT_LIBS += -lHSreadline -lHStemplate-haskell -lHSunix -lHSunix_cbits
endif

HC_BOOT_LIBS += -lHShaskell98 -lHSbase -lHSbase_cbits -lHSparsec -lHSrts -lgmp -lm $(EXTRA_HC_BOOT_LIBS)

ifeq "$(GhcLibsWithReadline)" "YES"
HC_BOOT_LIBS += $(patsubst %, -l%, $(LibsReadline))
endif

ifeq "$(HaveLibDL)" "YES"
HC_BOOT_LIBS += -ldl
endif