2 CFG_GCCISH_CFLAGS := -fno-strict-aliasing
3 CFG_GCCISH_LINK_FLAGS :=
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.
10 ifneq ($(CFG_VALGRIND),)
11 CFG_GCCISH_CFLAGS += -DHAVE_VALGRIND
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
23 CFG_LDENV := LD_LIBRARY_PATH
24 CFG_DEF_SUFFIX := .bsd.def
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
40 CFG_LDENV := LD_LIBRARY_PATH
41 CFG_DEF_SUFFIX := .linux.def
43 CFG_PERF_TOOL := $(CFG_PERF) stat -r 3
47 $(CFG_VALGRIND) --tool=cachegrind --cache-sim=yes --branch-sim=yes
49 CFG_PERF_TOOL := /usr/bin/time --verbose
55 ifneq ($(findstring darwin,$(CFG_OSTYPE)),)
56 CFG_LIB_NAME=lib$(1).dylib
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
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
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)
80 ifneq ($(findstring mingw,$(CFG_OSTYPE)),)
84 ifdef CFG_DISABLE_OPTIMIZE_CXX
85 $(info cfg: disabling C++ optimization (CFG_DISABLE_OPTIMIZE_CXX))
86 CFG_GCCISH_CFLAGS += -O0
88 CFG_GCCISH_CFLAGS += -O2
91 CFG_TESTLIB=$(CFG_BUILD_DIR)/$(strip \
92 $(if $(findstring stage0,$(1)), \
94 $(if $(findstring stage1,$(1)), \
96 $(if $(findstring stage2,$(1)), \
98 $(if $(findstring stage3,$(1)), \
100 )))))/rustc/$(CFG_HOST_TRIPLE)/lib
103 CFG_INFO := $(info cfg: unix-y environment)
105 CFG_PATH_MUNGE := true
109 CFG_RUN_TARG=$(call CFG_RUN,,$(2))
110 CFG_RUN_TEST=$(call CFG_RUN,,$(CFG_VALGRIND) $(1))
111 CFG_LIBUV_LINK_FLAGS=-lpthread
113 ifdef CFG_ENABLE_MINGW_CROSS
115 CFG_INFO := $(info cfg: mingw-cross)
116 CFG_GCCISH_CROSS := i586-mingw32msvc-
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
127 ifeq ($(CFG_CPUTYPE), x86_64)
128 CFG_GCCISH_CFLAGS += -m32
129 CFG_GCCISH_LINK_FLAGS += -m32
133 CFG_VALGRIND += --leak-check=full \
134 --error-exitcode=100 \
135 --quiet --suppressions=$(CFG_SRC_DIR)src/etc/x86.supp
141 CFG_INFO := $(info cfg: windows-y environment)
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
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
164 CFG_INFO := $(info cfg: using $(CFG_C_COMPILER))
165 ifeq ($(CFG_C_COMPILER),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)" \
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))
177 ifeq ($(CFG_C_COMPILER),gcc)
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)" \
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))
189 CFG_ERR := $(error please try on a system with gcc or clang)