]> git.lizzy.rs Git - rust.git/blob - mk/platform.mk
doc: 'if' expressions no longer require parens
[rust.git] / mk / platform.mk
1
2 CFG_GCCISH_CFLAGS := -fno-strict-aliasing
3 CFG_GCCISH_LINK_FLAGS :=
4
5 # On Darwin, we need to run dsymutil so the debugging information ends
6 # up in the right place.  On other platforms, it automatically gets
7 # embedded into the executable, so use a no-op command.
8 CFG_DSYMUTIL := true
9
10 ifneq ($(CFG_VALGRIND),)
11   CFG_GCCISH_CFLAGS += -DHAVE_VALGRIND
12 endif
13
14 ifneq ($(findstring freebsd,$(CFG_OSTYPE)),)
15   CFG_LIB_NAME=lib$(1).so
16   CFG_GCCISH_CFLAGS += -fPIC -march=i686 -I/usr/local/include
17   CFG_GCCISH_LINK_FLAGS += -shared -fPIC -lpthread -lrt
18   ifeq ($(CFG_CPUTYPE), x86_64)
19     CFG_GCCISH_CFLAGS += -m32
20     CFG_GCCISH_LINK_FLAGS += -m32
21   endif
22   CFG_UNIXY := 1
23   CFG_LDENV := LD_LIBRARY_PATH
24   CFG_DEF_SUFFIX := .bsd.def
25   CFG_INSTALL_NAME =
26 endif
27
28 ifneq ($(findstring linux,$(CFG_OSTYPE)),)
29   CFG_LIB_NAME=lib$(1).so
30   CFG_GCCISH_CFLAGS += -fPIC -march=i686
31   CFG_GCCISH_LINK_FLAGS += -shared -fPIC -ldl -lpthread -lrt
32   CFG_GCCISH_DEF_FLAG := -Wl,--export-dynamic,--dynamic-list=
33   CFG_GCCISH_PRE_LIB_FLAGS := -Wl,-whole-archive
34   CFG_GCCISH_POST_LIB_FLAGS := -Wl,-no-whole-archive
35   ifeq ($(CFG_CPUTYPE), x86_64)
36     CFG_GCCISH_CFLAGS += -m32
37     CFG_GCCISH_LINK_FLAGS += -m32
38   endif
39   CFG_UNIXY := 1
40   CFG_LDENV := LD_LIBRARY_PATH
41   CFG_DEF_SUFFIX := .linux.def
42   ifdef CFG_PERF
43         CFG_PERF_TOOL := $(CFG_PERF) stat -r 3
44   else
45     ifdef CFG_VALGRIND
46       CFG_PERF_TOOL :=\
47         $(CFG_VALGRIND) --tool=cachegrind --cache-sim=yes --branch-sim=yes
48     else
49       CFG_PERF_TOOL := /usr/bin/time --verbose
50     endif
51   endif
52   CFG_INSTALL_NAME =
53 endif
54
55 ifneq ($(findstring darwin,$(CFG_OSTYPE)),)
56   CFG_LIB_NAME=lib$(1).dylib
57   CFG_UNIXY := 1
58   CFG_LDENV := DYLD_LIBRARY_PATH
59   CFG_GCCISH_LINK_FLAGS += -dynamiclib -lpthread -framework CoreServices
60   CFG_GCCISH_DEF_FLAG := -Wl,-exported_symbols_list,
61   # Darwin has a very blurry notion of "64 bit", and claims it's running
62   # "on an i386" when the whole userspace is 64-bit and the compiler
63   # emits 64-bit binaries by default. So we just force -m32 here. Smarter
64   # approaches welcome!
65   #
66   # NB: Currently GCC's optimizer breaks rustrt (task-comm-1 hangs) on Darwin.
67   CFG_GCC_CFLAGS += -m32
68   CFG_CLANG_CFLAGS += -m32
69   ifeq ($(CFG_CPUTYPE), x86_64)
70     CFG_GCCISH_CFLAGS += -arch i386
71     CFG_GCCISH_LINK_FLAGS += -arch i386
72   endif
73   CFG_GCCISH_LINK_FLAGS += -m32
74   CFG_DSYMUTIL := dsymutil
75   CFG_DEF_SUFFIX := .darwin.def
76   # Mac requires this flag to make rpath work
77   CFG_INSTALL_NAME = -Wl,-install_name,@rpath/$(1)
78 endif
79
80 ifneq ($(findstring mingw,$(CFG_OSTYPE)),)
81   CFG_WINDOWSY := 1
82 endif
83
84 ifdef CFG_DISABLE_OPTIMIZE_CXX
85   $(info cfg: disabling C++ optimization (CFG_DISABLE_OPTIMIZE_CXX))
86   CFG_GCCISH_CFLAGS += -O0
87 else
88   CFG_GCCISH_CFLAGS += -O2
89 endif
90
91 CFG_TESTLIB=$(CFG_BUILD_DIR)/$(strip \
92  $(if $(findstring stage0,$(1)), \
93        stage0/lib, \
94       $(if $(findstring stage1,$(1)), \
95            stage1/lib, \
96           $(if $(findstring stage2,$(1)), \
97                stage2/lib, \
98                $(if $(findstring stage3,$(1)), \
99                     stage3/lib, \
100                )))))/rustc/$(CFG_HOST_TRIPLE)/lib
101
102 ifdef CFG_UNIXY
103   CFG_INFO := $(info cfg: unix-y environment)
104
105   CFG_PATH_MUNGE := true
106   CFG_EXE_SUFFIX :=
107   CFG_LDPATH :=
108   CFG_RUN=$(2)
109   CFG_RUN_TARG=$(call CFG_RUN,,$(2))
110   CFG_RUN_TEST=$(call CFG_RUN,,$(CFG_VALGRIND) $(1))
111   CFG_LIBUV_LINK_FLAGS=-lpthread
112
113   ifdef CFG_ENABLE_MINGW_CROSS
114     CFG_WINDOWSY := 1
115     CFG_INFO := $(info cfg: mingw-cross)
116     CFG_GCCISH_CROSS := i586-mingw32msvc-
117     ifdef CFG_VALGRIND
118       CFG_VALGRIND += wine
119     endif
120
121     CFG_GCCISH_CFLAGS := -fno-strict-aliasing -march=i586
122     CFG_GCCISH_PRE_LIB_FLAGS :=
123     CFG_GCCISH_POST_LIB_FLAGS :=
124     CFG_GCCISH_DEF_FLAG :=
125     CFG_GCCISH_LINK_FLAGS := -shared
126
127     ifeq ($(CFG_CPUTYPE), x86_64)
128       CFG_GCCISH_CFLAGS += -m32
129       CFG_GCCISH_LINK_FLAGS += -m32
130     endif
131   endif
132   ifdef CFG_VALGRIND
133     CFG_VALGRIND += --leak-check=full \
134                     --error-exitcode=100 \
135                     --quiet --suppressions=$(CFG_SRC_DIR)src/etc/x86.supp
136   endif
137 endif
138
139
140 ifdef CFG_WINDOWSY
141   CFG_INFO := $(info cfg: windows-y environment)
142
143   CFG_EXE_SUFFIX := .exe
144   CFG_LIB_NAME=$(1).dll
145   CFG_DEF_SUFFIX := .def
146   CFG_LDPATH :=$(CFG_LLVM_BINDIR)
147   CFG_LDPATH :=$(CFG_LDPATH):$$PATH
148   CFG_RUN=PATH="$(CFG_LDPATH):$(1)" $(2)
149   CFG_RUN_TARG=$(call CFG_RUN,$(HOST_LIB$(1)),$(2))
150   CFG_RUN_TEST=$(call CFG_RUN,$(call CFG_TESTLIB,$(1)),$(1))
151   CFG_LIBUV_LINK_FLAGS=-lWs2_32
152
153   ifndef CFG_ENABLE_MINGW_CROSS
154     CFG_PATH_MUNGE := $(strip perl -i.bak -p             \
155                              -e 's@\\(\S)@/\1@go;'       \
156                              -e 's@^/([a-zA-Z])/@\1:/@o;')
157     CFG_GCCISH_CFLAGS += -march=i686
158     CFG_GCCISH_LINK_FLAGS += -shared -fPIC
159   endif
160   CFG_INSTALL_NAME =
161 endif
162
163
164 CFG_INFO := $(info cfg: using $(CFG_C_COMPILER))
165 ifeq ($(CFG_C_COMPILER),clang)
166   CC=clang
167   CXX=clang++
168   CFG_GCCISH_CFLAGS += -Wall -Werror -fno-rtti -g
169   CFG_GCCISH_LINK_FLAGS += -g
170   CFG_COMPILE_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) \
171     $(CFG_CLANG_CFLAGS) -c -o $(1) $(2)
172   CFG_DEPEND_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) -MT "$(1)" \
173     -MM $(2)
174   CFG_LINK_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_LINK_FLAGS) -o $(1) \
175     $(CFG_GCCISH_DEF_FLAG)$(3) $(2) $(call CFG_INSTALL_NAME,$(4))
176 else
177 ifeq ($(CFG_C_COMPILER),gcc)
178   CC=gcc
179   CXX=g++
180   CFG_GCCISH_CFLAGS += -Wall -Werror -fno-rtti -g
181   CFG_GCCISH_LINK_FLAGS += -g
182   CFG_COMPILE_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) \
183     $(CFG_GCC_CFLAGS) -c -o $(1) $(2)
184   CFG_DEPEND_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_CFLAGS) -MT "$(1)" \
185     -MM $(2)
186   CFG_LINK_C = $(CFG_GCCISH_CROSS)$(CXX) $(CFG_GCCISH_LINK_FLAGS) -o $(1) \
187                $(CFG_GCCISH_DEF_FLAG)$(3) $(2) $(call CFG_INSTALL_NAME,$(4))
188 else
189   CFG_ERR := $(error please try on a system with gcc or clang)
190 endif
191 endif