Skip to content

Commit a4293d1

Browse files
committed
---
yaml --- r: 225139 b: refs/heads/stable c: 00b8983 h: refs/heads/master i: 225137: 4468af7 225135: b231005 v: v3
1 parent 9ff6a42 commit a4293d1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+2612
-1711
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ refs/heads/tmp: e5d90d98402475b6e154ce216f9efcb80da1a747
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: 1fe32ca12c51afcd761d9962f51a74ff0d07a591
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: 31026c846ea27d6ebc3bbcdf74edfd8dc9da3432
32+
refs/heads/stable: 00b89831a99de899ed03565d75c8d131d7feadf3
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375
3434
refs/tags/1.1.0: bc3c16f09287e5545c1d3f76b7abd54f2eca868b

branches/stable/Makefile.in

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,3 @@ ifneq ($(strip $(findstring TAGS.emacs,$(MAKECMDGOALS)) \
266266
CFG_INFO := $(info cfg: including ctags rules)
267267
include $(CFG_SRC_DIR)mk/ctags.mk
268268
endif
269-
270-
# Find all of the .d files and include them to add information about
271-
# header file dependencies.
272-
ALL_DEP_FILES := $(ALL_OBJ_FILES:%.o=%.d)
273-
-include $(ALL_DEP_FILES)

branches/stable/configure

Lines changed: 98 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ CFG_TARGET=$(to_llvm_triple $CFG_TARGET)
610610
# there's no rpath. This is where the build system itself puts libraries;
611611
# --libdir is used to configure the installation directory.
612612
# FIXME: This needs to parameterized over target triples. Do it in platform.mk
613-
if [ "$CFG_OSTYPE" = "pc-windows-gnu" ]
613+
if [ "$CFG_OSTYPE" = "pc-windows-gnu" ] || [ "$CFG_OSTYPE" = "pc-windows-msvc" ]
614614
then
615615
CFG_LIBDIR_RELATIVE=bin
616616
else
@@ -628,7 +628,8 @@ esac
628628

629629
CFG_LIBDIR_RELATIVE=`echo ${CFG_LIBDIR} | cut -c$((${#CFG_PREFIX}+${CAT_INC}))-`
630630

631-
if [ "$CFG_OSTYPE" = "pc-windows-gnu" ] && [ "$CFG_LIBDIR_RELATIVE" != "bin" ]; then
631+
if ( [ "$CFG_OSTYPE" = "pc-windows-gnu" ] || [ "$CFG_OSTYPE" = "pc-windows-msvc" ] ) \
632+
&& [ "$CFG_LIBDIR_RELATIVE" != "bin" ]; then
632633
err "libdir on windows should be set to 'bin'"
633634
fi
634635

@@ -817,7 +818,7 @@ then
817818
fi
818819

819820
BIN_SUF=
820-
if [ "$CFG_OSTYPE" = "pc-windows-gnu" ]
821+
if [ "$CFG_OSTYPE" = "pc-windows-gnu" ] || [ "$CFG_OSTYPE" = "pc-windows-msvc" ]
821822
then
822823
BIN_SUF=.exe
823824
fi
@@ -1097,6 +1098,65 @@ do
10971098
err "musl libc $CFG_MUSL_ROOT/lib/libc.a not found"
10981099
fi
10991100
;;
1101+
1102+
x86_64-*-msvc)
1103+
# Currently the build system is not configured to build jemalloc
1104+
# with MSVC, so we omit this optional dependency.
1105+
step_msg "targeting MSVC, disabling jemalloc"
1106+
CFG_DISABLE_JEMALLOC=1
1107+
putvar CFG_DISABLE_JEMALLOC
1108+
1109+
# There are some MSYS python builds which will auto-translate
1110+
# windows-style paths to MSYS-style paths in Python itself.
1111+
# Unfortunately this breaks LLVM's build system as somewhere along
1112+
# the line LLVM prints a path into a file from Python and then CMake
1113+
# later tries to interpret that path. If Python prints a MSYS path
1114+
# and CMake tries to use it as a Windows path, you're gonna have a
1115+
# Bad Time.
1116+
#
1117+
# Consequently here we try to detect when that happens and print an
1118+
# error if it does.
1119+
if $CFG_PYTHON -c 'import sys; print sys.argv[1]' `pwd` | grep '^/'
1120+
then
1121+
err "python is silently translating windows paths to MSYS paths \
1122+
and the build will fail if this python is used.\n\n \
1123+
Either an official python install must be used or an \
1124+
alternative python package in MinGW must be used."
1125+
fi
1126+
1127+
# MSVC requires cmake because that's how we're going to build LLVM
1128+
probe_need CFG_CMAKE cmake
1129+
1130+
# Use the REG program to figure out where VS is installed
1131+
# We need to figure out where cl.exe and link.exe are, so we do some
1132+
# munging and some probing here. We also look for the default
1133+
# INCLUDE and LIB variables for MSVC so we can set those in the
1134+
# build system as well.
1135+
install=$(reg QUERY \
1136+
'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0' \
1137+
-v InstallDir)
1138+
need_ok "couldn't find visual studio install root"
1139+
CFG_MSVC_ROOT=$(echo "$install" | grep InstallDir | sed 's/.*REG_SZ[ ]*//')
1140+
CFG_MSVC_ROOT=$(dirname "$CFG_MSVC_ROOT")
1141+
CFG_MSVC_ROOT=$(dirname "$CFG_MSVC_ROOT")
1142+
CFG_MSVC_CL="${CFG_MSVC_ROOT}/VC/bin/amd64/cl.exe"
1143+
CFG_MSVC_LIB="${CFG_MSVC_ROOT}/VC/bin/amd64/lib.exe"
1144+
CFG_MSVC_LINK="${CFG_MSVC_ROOT}/VC/bin/amd64/link.exe"
1145+
1146+
vcvarsall="${CFG_MSVC_ROOT}/VC/vcvarsall.bat"
1147+
CFG_MSVC_INCLUDE_PATH=$(cmd /c "\"$vcvarsall\" amd64 && cmd /c echo %INCLUDE%")
1148+
need_ok "failed to learn about MSVC's INCLUDE"
1149+
CFG_MSVC_LIB_PATH=$(cmd /c "\"$vcvarsall\" amd64 && cmd /c echo %LIB%")
1150+
need_ok "failed to learn about MSVC's LIB"
1151+
1152+
putvar CFG_MSVC_ROOT
1153+
putvar CFG_MSVC_CL
1154+
putvar CFG_MSVC_LIB
1155+
putvar CFG_MSVC_LINK
1156+
putvar CFG_MSVC_INCLUDE_PATH
1157+
putvar CFG_MSVC_LIB_PATH
1158+
;;
1159+
11001160
*)
11011161
;;
11021162
esac
@@ -1138,6 +1198,7 @@ do
11381198
do
11391199
make_dir $t/rt/stage$s
11401200
make_dir $t/rt/jemalloc
1201+
make_dir $t/rt/compiler-rt
11411202
for i in \
11421203
isaac sync test \
11431204
arch/i386 arch/x86_64 arch/arm arch/aarch64 arch/mips arch/powerpc
@@ -1301,7 +1362,39 @@ do
13011362
done
13021363
fi
13031364

1304-
if [ ${do_reconfigure} -ne 0 ]
1365+
use_cmake=0
1366+
case "$t" in
1367+
(*-msvc)
1368+
use_cmake=1
1369+
;;
1370+
esac
1371+
1372+
if [ ${do_reconfigure} -ne 0 ] && [ ${use_cmake} -ne 0 ]
1373+
then
1374+
msg "configuring LLVM for $t with cmake"
1375+
1376+
CMAKE_ARGS="-DLLVM_INCLUDE_TESTS=OFF"
1377+
if [ ! -z "$CFG_DISABLE_OPTIMIZE_LLVM" ]; then
1378+
CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_BUILD_TYPE=Debug"
1379+
else
1380+
CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release"
1381+
fi
1382+
if [ -z "$CFG_ENABLE_LLVM_ASSERTIONS" ]
1383+
then
1384+
CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=OFF"
1385+
else
1386+
CMAKE_ARGS="$CMAKE_ARGS -DLLVM_ENABLE_ASSERTIONS=ON"
1387+
fi
1388+
1389+
msg "configuring LLVM with:"
1390+
msg "$CMAKE_ARGS"
1391+
(cd $LLVM_BUILD_DIR && "$CFG_CMAKE" $CFG_LLVM_SRC_DIR \
1392+
-G "Visual Studio 12 2013 Win64" \
1393+
$CMAKE_ARGS)
1394+
need_ok "LLVM cmake configure failed"
1395+
fi
1396+
1397+
if [ ${do_reconfigure} -ne 0 ] && [ ${use_cmake} -eq 0 ]
13051398
then
13061399
# LLVM's configure doesn't recognize the new Windows triples yet
13071400
gnu_t=$(to_gnu_triple $t)
@@ -1325,7 +1418,7 @@ do
13251418
# (llvm's configure tries to find pthread first, so we have to disable it explicitly.)
13261419
# Also note that pthreads works badly on mingw-w64 systems: #8996
13271420
case "$CFG_BUILD" in
1328-
(*-windows-*)
1421+
(*-windows-gnu)
13291422
LLVM_OPTS="$LLVM_OPTS --disable-pthreads"
13301423
;;
13311424
esac
@@ -1509,11 +1602,6 @@ do
15091602
putvar $CFG_LLVM_INST_DIR
15101603
done
15111604

1512-
# Munge any paths that appear in config.mk back to posix-y
1513-
cp config.tmp config.tmp.bak
1514-
sed -e 's@ \([a-zA-Z]\):[/\\]@ /\1/@g;' <config.tmp.bak >config.tmp
1515-
rm -f config.tmp.bak
1516-
15171605
msg
15181606
copy_if_changed ${CFG_SRC_DIR}Makefile.in ./Makefile
15191607
move_if_changed config.tmp config.mk

branches/stable/mk/cfg/aarch64-apple-ios.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ ifneq ($(findstring darwin,$(CFG_OSTYPE)),)
55
CFG_IOS_SDK_aarch64-apple-ios := $(shell xcrun --show-sdk-path -sdk iphoneos 2>/dev/null)
66
CFG_IOS_SDK_FLAGS_aarch64-apple-ios := -target aarch64-apple-darwin -isysroot $(CFG_IOS_SDK_aarch64-apple-ios) -mios-version-min=7.0 -arch arm64
77
CC_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos clang)
8+
LINK_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos clang)
89
CXX_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos clang++)
910
CPP_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos clang++)
1011
AR_aarch64-apple-ios = $(shell xcrun -find -sdk iphoneos ar)

branches/stable/mk/cfg/aarch64-linux-android.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# aarch64-linux-android configuration
22
# CROSS_PREFIX_aarch64-linux-android-
33
CC_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-gcc
4+
LINK_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-gcc
45
CXX_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-g++
56
CPP_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-gcc -E
67
AR_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-ar

branches/stable/mk/cfg/aarch64-unknown-linux-gnu.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# aarch64-unknown-linux-gnu configuration
22
CROSS_PREFIX_aarch64-unknown-linux-gnu=aarch64-linux-gnu-
33
CC_aarch64-unknown-linux-gnu=gcc
4+
LINK_aarch64-unknown-linux-gnu=gcc
45
CXX_aarch64-unknown-linux-gnu=g++
56
CPP_aarch64-unknown-linux-gnu=gcc -E
67
AR_aarch64-unknown-linux-gnu=ar

branches/stable/mk/cfg/arm-linux-androideabi.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# arm-linux-androideabi configuration
2+
LINK_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc
23
CC_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc
34
CXX_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-g++
45
CPP_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc -E

branches/stable/mk/cfg/x86_64-pc-windows-gnu.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# x86_64-pc-windows-gnu configuration
22
CROSS_PREFIX_x86_64-pc-windows-gnu=x86_64-w64-mingw32-
33
CC_x86_64-pc-windows-gnu=gcc
4+
LINK_x86_64-pc-windows-gnu=gcc
45
CXX_x86_64-pc-windows-gnu=g++
56
CPP_x86_64-pc-windows-gnu=gcc -E
67
AR_x86_64-pc-windows-gnu=ar
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# x86_64-pc-windows-msvc configuration
2+
CC_x86_64-pc-windows-msvc="$(CFG_MSVC_CL)" -nologo
3+
LINK_x86_64-pc-windows-msvc="$(CFG_MSVC_LINK)" -nologo
4+
CXX_x86_64-pc-windows-msvc="$(CFG_MSVC_CL)" -nologo
5+
CPP_x86_64-pc-windows-msvc="$(CFG_MSVC_CL)" -nologo
6+
AR_x86_64-pc-windows-msvc="$(CFG_MSVC_LIB)" -nologo
7+
CFG_LIB_NAME_x86_64-pc-windows-msvc=$(1).dll
8+
CFG_STATIC_LIB_NAME_x86_64-pc-windows-msvc=$(1).lib
9+
CFG_LIB_GLOB_x86_64-pc-windows-msvc=$(1)-*.dll
10+
CFG_LIB_DSYM_GLOB_x86_64-pc-windows-msvc=$(1)-*.dylib.dSYM
11+
CFG_JEMALLOC_CFLAGS_x86_64-pc-windows-msvc :=
12+
CFG_GCCISH_CFLAGS_x86_64-pc-windows-msvc :=
13+
CFG_GCCISH_CXXFLAGS_x86_64-pc-windows-msvc :=
14+
CFG_GCCISH_LINK_FLAGS_x86_64-pc-windows-msvc :=
15+
CFG_GCCISH_DEF_FLAG_x86_64-pc-windows-msvc :=
16+
CFG_LLC_FLAGS_x86_64-pc-windows-msvc :=
17+
CFG_INSTALL_NAME_x86_64-pc-windows-msvc =
18+
CFG_EXE_SUFFIX_x86_64-pc-windows-msvc := .exe
19+
CFG_WINDOWSY_x86_64-pc-windows-msvc := 1
20+
CFG_UNIXY_x86_64-pc-windows-msvc :=
21+
CFG_LDPATH_x86_64-pc-windows-msvc :=
22+
CFG_RUN_x86_64-pc-windows-msvc=$(2)
23+
CFG_RUN_TARG_x86_64-pc-windows-msvc=$(call CFG_RUN_x86_64-pc-windows-msvc,,$(2))
24+
CFG_GNU_TRIPLE_x86_64-pc-windows-msvc := x86_64-pc-win32
25+
26+
# These two environment variables are scraped by the `./configure` script and
27+
# are necessary for `cl.exe` to find standard headers (the INCLUDE variable) and
28+
# for `link.exe` to find standard libraries (the LIB variable).
29+
ifdef CFG_MSVC_INCLUDE_PATH
30+
export INCLUDE := $(CFG_MSVC_INCLUDE_PATH)
31+
endif
32+
ifdef CFG_MSVC_LIB_PATH
33+
export LIB := $(CFG_MSVC_LIB_PATH)
34+
endif
35+
36+
# Unfortunately `link.exe` is also a program in `/usr/bin` on MinGW installs,
37+
# but it's not the one that we want. As a result we make sure that our detected
38+
# `link.exe` shows up in PATH first.
39+
ifdef CFG_MSVC_LINK
40+
export PATH := $(CFG_MSVC_ROOT)/VC/bin/amd64:$(PATH)
41+
endif
42+
43+
# There are more comments about this available in the target specification for
44+
# Windows MSVC in the compiler, but the gist of it is that we use `llvm-ar.exe`
45+
# instead of `lib.exe` for assembling archives, so we need to inject this custom
46+
# dependency here.
47+
NATIVE_TOOL_DEPS_core_T_x86_64-pc-windows-msvc += llvm-ar.exe
48+
INSTALLED_BINS_x86_64-pc-windows-msvc += llvm-ar.exe
49+
50+
# When working with MSVC on windows, each DLL needs to explicitly declare its
51+
# interface to the outside world through some means. The options for doing so
52+
# include:
53+
#
54+
# 1. A custom attribute on each function itself
55+
# 2. A linker argument saying what to export
56+
# 3. A file which lists all symbols that need to be exported
57+
#
58+
# The Rust compiler takes care (1) for us for all Rust code by annotating all
59+
# public-facing functions with dllexport, but we have a few native dependencies
60+
# which need to cross the DLL boundary. The most important of these dependencies
61+
# is LLVM which is linked into `rustc_llvm.dll` but primarily used from
62+
# `rustc_trans.dll`. This means that many of LLVM's C API functions need to be
63+
# exposed from `rustc_llvm.dll` to be forwarded over the boundary.
64+
#
65+
# Unfortunately, at this time, LLVM does not handle this sort of exportation on
66+
# Windows for us, so we're forced to do it ourselves if we want it (which seems
67+
# like the path of least resistance right now). To do this we generate a `.DEF`
68+
# file [1] which we then custom-pass to the linker when building the rustc_llvm
69+
# crate. This DEF file list all symbols that are exported from
70+
# `src/librustc_llvm/lib.rs` and is generated by a small python script.
71+
#
72+
# Fun times!
73+
#
74+
# [1]: https://msdn.microsoft.com/en-us/library/28d6s79h.aspx
75+
RUSTFLAGS_rustc_llvm_T_x86_64-pc-windows-msvc += \
76+
-C link-args="-DEF:x86_64-pc-windows-msvc/rt/rustc_llvm.def"
77+
CUSTOM_DEPS_rustc_llvm_T_x86_64-pc-windows-msvc += \
78+
x86_64-pc-windows-msvc/rt/rustc_llvm.def
79+
80+
x86_64-pc-windows-msvc/rt/rustc_llvm.def: $(S)src/etc/mklldef.py \
81+
$(S)src/librustc_llvm/lib.rs
82+
$(CFG_PYTHON) $^ $@ rustc_llvm-$(CFG_FILENAME_EXTRA)

branches/stable/mk/clean.mk

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -118,16 +118,3 @@ $(foreach host, $(CFG_HOST), \
118118
$(eval $(foreach target, $(CFG_TARGET), \
119119
$(eval $(foreach stage, 0 1 2 3, \
120120
$(eval $(call CLEAN_TARGET_STAGE_N,$(stage),$(target),$(host))))))))
121-
122-
define DEF_CLEAN_LLVM_HOST
123-
ifeq ($(CFG_LLVM_ROOT),)
124-
clean-llvm$(1):
125-
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) clean
126-
else
127-
clean-llvm$(1): ;
128-
129-
endif
130-
endef
131-
132-
$(foreach host, $(CFG_HOST), \
133-
$(eval $(call DEF_CLEAN_LLVM_HOST,$(host))))

branches/stable/mk/crates.mk

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,6 @@ ONLY_RLIB_rustc_bitflags := 1
125125
# Documented-by-default crates
126126
DOC_CRATES := std alloc collections core libc rustc_unicode
127127

128-
# Installed objects/libraries by default
129-
INSTALLED_OBJECTS := libmorestack.a libcompiler-rt.a
130-
131128
################################################################################
132129
# You should not need to edit below this line
133130
################################################################################

branches/stable/mk/dist.mk

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,11 @@ dist/$$(PKG_NAME)-$(1).tar.gz: dist-install-dir-$(1) prepare-overlay-$(1)
144144
@$(call E, build: $$@)
145145
# Copy essential gcc components into installer
146146
ifdef CFG_WINDOWSY_$(1)
147+
ifeq ($$(findstring gnu,$(1)),gnu)
147148
$$(Q)rm -Rf tmp/dist/win-rust-gcc-$(1)
148149
$$(Q)$$(CFG_PYTHON) $$(S)src/etc/make-win-dist.py tmp/dist/$$(PKG_NAME)-$(1)-image tmp/dist/win-rust-gcc-$(1) $(1)
149150
$$(Q)cp -r $$(S)src/etc/third-party tmp/dist/$$(PKG_NAME)-$(1)-image/share/doc/
151+
endif
150152
endif
151153
$$(Q)$$(S)src/rust-installer/gen-installer.sh \
152154
--product-name=Rust \
@@ -213,7 +215,14 @@ endif
213215
dist-install-dirs: $(foreach host,$(CFG_HOST),dist-install-dir-$(host))
214216

215217
ifdef CFG_WINDOWSY_$(CFG_BUILD)
216-
MAYBE_MINGW_TARBALLS=$(foreach host,$(CFG_HOST),dist/$(MINGW_PKG_NAME)-$(host).tar.gz)
218+
define BUILD_MINGW_TARBALL
219+
ifeq ($$(findstring gnu,$(1)),gnu)
220+
MAYBE_MINGW_TARBALLS += dist/$(MINGW_PKG_NAME)-$(1).tar.gz
221+
endif
222+
endef
223+
224+
$(foreach host,$(CFG_HOST),\
225+
$(eval $(call BUILD_MINGW_TARBALL,$(host))))
217226
endif
218227

219228
ifeq ($(CFG_DISABLE_DOCS),)

0 commit comments

Comments
 (0)