From e91ffb07105421b39dd6cade712522d0c5262c6c Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sat, 30 Nov 2013 20:52:21 -0800 Subject: [PATCH] Link rustllvm statically, and distribute a static snapshot In order to keep up to date with changes to the libraries that `llvm-config` spits out, the dependencies to the LLVM are a dynamically generated rust file. This file is now automatically updated whenever LLVM is updated to get kept up-to-date. At the same time, this cleans out some old cruft which isn't necessary in the makefiles in terms of dependencies. Closes #10745 Closes #10744 --- .gitignore | 1 + Makefile.in | 13 +++++---- mk/clean.mk | 2 ++ mk/host.mk | 12 ++------- mk/install.mk | 3 --- mk/llvm.mk | 10 +++++++ mk/rustllvm.mk | 8 ++---- mk/stage0.mk | 13 ++------- mk/target.mk | 9 ++++++- mk/tests.mk | 3 ++- src/etc/mklldeps.py | 58 ++++++++++++++++++++++++++++++++++++++++ src/etc/snapshot.py | 32 +++------------------- src/librustc/lib.rs | 2 ++ src/librustc/lib/llvm.rs | 13 ++++++++- src/librustpkg/tests.rs | 1 + src/libstd/rt/task.rs | 1 + src/libsyntax/lib.rs | 1 + src/snapshots.txt | 8 ++++++ 18 files changed, 124 insertions(+), 66 deletions(-) create mode 100644 src/etc/mklldeps.py diff --git a/.gitignore b/.gitignore index 64299aa5411..00dfeede99c 100644 --- a/.gitignore +++ b/.gitignore @@ -90,3 +90,4 @@ src/etc/dl .settings/ build/ i686-pc-mingw32/ +src/librustc/lib/llvmdeps.rs diff --git a/Makefile.in b/Makefile.in index 59e5301c99e..5348499a19f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -134,10 +134,13 @@ endif # static copies of libstd and libextra. We also generate dynamic versions of all # libraries, so in the interest of space, prefer dynamic linking throughout the # compilation process. +# +# Note though that these flags are omitted for stage2+. This means that the +# snapshot will be generated with a statically linked rustc so we only have to +# worry about the distribution of one file (with its native dynamic +# dependencies) RUSTFLAGS_STAGE0 += -Z prefer-dynamic RUSTFLAGS_STAGE1 += -Z prefer-dynamic -RUSTFLAGS_STAGE2 += -Z prefer-dynamic -RUSTFLAGS_STAGE3 += -Z prefer-dynamic # platform-specific auto-configuration include $(CFG_SRC_DIR)mk/platform.mk @@ -224,7 +227,7 @@ GENERATED := define DEF_LIBS CFG_RUNTIME_$(1) :=$(call CFG_STATIC_LIB_NAME_$(1),rustrt) -CFG_RUSTLLVM_$(1) :=$(call CFG_LIB_NAME_$(1),rustllvm) +CFG_RUSTLLVM_$(1) :=$(call CFG_STATIC_LIB_NAME_$(1),rustllvm) CFG_STDLIB_$(1) :=$(call CFG_LIB_NAME_$(1),std) CFG_EXTRALIB_$(1) :=$(call CFG_LIB_NAME_$(1),extra) CFG_LIBRUSTC_$(1) :=$(call CFG_LIB_NAME_$(1),rustc) @@ -251,6 +254,8 @@ LIBRUSTUV_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),rustuv) EXTRALIB_RGLOB_$(1) :=$(call CFG_RLIB_GLOB,extra) STDLIB_RGLOB_$(1) :=$(call CFG_RLIB_GLOB,std) LIBRUSTUV_RGLOB_$(1) :=$(call CFG_RLIB_GLOB,rustuv) +LIBSYNTAX_RGLOB_$(1) :=$(call CFG_RLIB_GLOB,syntax) +LIBRUSTC_RGLOB_$(1) :=$(call CFG_RLIB_GLOB,rustc) endef @@ -428,8 +433,6 @@ TLIBRUSTUV_DEFAULT$(1)_T_$(2)_H_$(3) = \ # Preqrequisites for using the stageN compiler HSREQ$(1)_H_$(3) = \ $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \ - $$(HLIB$(1)_H_$(3))/$(CFG_RUNTIME_$(3)) \ - $$(HLIB$(1)_H_$(3))/$(CFG_RUSTLLVM_$(3)) \ $$(HSTDLIB_DEFAULT$(1)_H_$(3)) \ $$(HEXTRALIB_DEFAULT$(1)_H_$(3)) \ $$(HLIBSYNTAX_DEFAULT$(1)_H_$(3)) \ diff --git a/mk/clean.mk b/mk/clean.mk index 1994fec0990..251f2c75135 100644 --- a/mk/clean.mk +++ b/mk/clean.mk @@ -132,7 +132,9 @@ clean$(1)_T_$(2)_H_$(3): $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTUV_GLOB_$(2)) $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTUV_RGLOB_$(2)) $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTC_GLOB_$(2)) + $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTC_RGLOB_$(2)) $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBSYNTAX_GLOB_$(2)) + $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBSYNTAX_RGLOB_$(2)) $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTPKG_GLOB_$(2)) $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTDOC_GLOB_$(2)) $(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(2)) diff --git a/mk/host.mk b/mk/host.mk index 7e8a3e8a6eb..3ddbd7d69c9 100644 --- a/mk/host.mk +++ b/mk/host.mk @@ -26,13 +26,13 @@ define CP_HOST_STAGE_N $$(HBIN$(2)_H_$(4))/rustc$$(X_$(4)): \ $$(TBIN$(1)_T_$(4)_H_$(3))/rustc$$(X_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ - $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)) \ $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \ $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \ $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \ + $$(HLIBRUSTC_DEFAULT$(2)_H_$(4)) \ + $$(HLIBSYNTAX_DEFAULT$(2)_H_$(4)) \ | $$(HBIN$(2)_H_$(4))/ - @$$(call E, cp: $$@) $$(Q)cp $$< $$@ @@ -40,7 +40,6 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)): \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ - $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \ $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \ $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \ $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \ @@ -57,7 +56,6 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)): \ $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)): \ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBSYNTAX_$(4)) \ $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \ - $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \ $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \ $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \ $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \ @@ -130,12 +128,6 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTUV_$(4)): \ $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_GLOB_$(4)),$$(notdir $$@)) $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_RGLOB_$(4)),$$(notdir $$@)) -$$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)): \ - $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4)) \ - | $$(HLIB$(2)_H_$(4))/ - @$$(call E, cp: $$@) - $$(Q)cp $$< $$@ - $$(HBIN$(2)_H_$(4))/: mkdir -p $$@ diff --git a/mk/install.mk b/mk/install.mk index 0cd6709e72c..37eaa6f5216 100644 --- a/mk/install.mk +++ b/mk/install.mk @@ -103,7 +103,6 @@ install-target-$(1)-host-$(2): LIB_SOURCE_DIR=$$(TL$(1)$(2)) install-target-$(1)-host-$(2): LIB_DESTIN_DIR=$$(PTL$(1)$(2)) install-target-$(1)-host-$(2): $$(CSREQ$$(ISTAGE)_T_$(1)_H_$(2)) $$(Q)$$(call MK_INSTALL_DIR,$$(PTL$(1)$(2))) - $$(Q)$$(call INSTALL_LIB,$$(CFG_RUSTLLVM_$(1))) $$(Q)$$(call INSTALL_LIB,$$(STDLIB_GLOB_$(1))) $$(Q)$$(call INSTALL_LIB,$$(STDLIB_RGLOB_$(1))) $$(Q)$$(call INSTALL_LIB,$$(EXTRALIB_GLOB_$(1))) @@ -154,7 +153,6 @@ install-host: $(CSREQ$(ISTAGE)_T_$(CFG_BUILD_)_H_$(CFG_BUILD_)) $(Q)$(call INSTALL_LIB,$(LIBSYNTAX_GLOB_$(CFG_BUILD))) $(Q)$(call INSTALL_LIB,$(LIBRUSTPKG_GLOB_$(CFG_BUILD))) $(Q)$(call INSTALL_LIB,$(LIBRUSTDOC_GLOB_$(CFG_BUILD))) - $(Q)$(call INSTALL,$(HL),$(PHL),$(CFG_RUSTLLVM_$(CFG_BUILD))) $(Q)$(call INSTALL,$(S)/man,$(CFG_MANDIR)/man1,rustc.1) $(Q)$(call INSTALL,$(S)/man,$(CFG_MANDIR)/man1,rustdoc.1) $(Q)$(call INSTALL,$(S)/man,$(CFG_MANDIR)/man1,rustpkg.1) @@ -169,7 +167,6 @@ uninstall: $(Q)rm -f $(PHB)/rustc$(X_$(CFG_BUILD)) $(Q)rm -f $(PHB)/rustpkg$(X_$(CFG_BUILD)) $(Q)rm -f $(PHB)/rustdoc$(X_$(CFG_BUILD)) - $(Q)rm -f $(PHL)/$(CFG_RUSTLLVM_$(CFG_BUILD)) $(Q)for i in \ $(call HOST_LIB_FROM_HL_GLOB,$(STDLIB_GLOB_$(CFG_BUILD))) \ $(call HOST_LIB_FROM_HL_GLOB,$(STDLIB_RGLOB_$(CFG_BUILD))) \ diff --git a/mk/llvm.mk b/mk/llvm.mk index 42b1a551805..cf4e98c6dba 100644 --- a/mk/llvm.mk +++ b/mk/llvm.mk @@ -44,5 +44,15 @@ $$(LLVM_STAMP_$(1)): $(S)src/rustllvm/llvm-auto-clean-trigger endef +$(foreach host,$(CFG_HOST), \ + $(eval LLVM_CONFIGS := $(LLVM_CONFIGS) $(LLVM_CONFIG_$(host)))) + +$(S)src/librustc/lib/llvmdeps.rs: \ + $(LLVM_CONFIGS) \ + $(S)src/etc/mklldeps.py + $(Q)$(CFG_PYTHON) $(S)src/etc/mklldeps.py \ + "$(LLVM_COMPONENTS)" $(LLVM_CONFIGS) \ + > $@ + $(foreach host,$(CFG_HOST), \ $(eval $(call DEF_LLVM_RULES,$(host)))) diff --git a/mk/rustllvm.mk b/mk/rustllvm.mk index c4a9c9c4f0b..89b31400d5c 100644 --- a/mk/rustllvm.mk +++ b/mk/rustllvm.mk @@ -32,13 +32,9 @@ RUSTLLVM_INCS_$(1) = $$(LLVM_EXTRA_INCDIRS_$(1)) \ RUSTLLVM_OBJS_OBJS_$(1) := $$(RUSTLLVM_OBJS_CS_$(1):rustllvm/%.cpp=$(1)/rustllvm/%.o) ALL_OBJ_FILES += $$(RUSTLLVM_OBJS_OBJS_$(1)) -$(1)/rustllvm/$(CFG_RUSTLLVM_$(1)): $$(RUSTLLVM_OBJS_OBJS_$(1)) \ - $$(MKFILE_DEPS) $$(RUSTLLVM_DEF_$(1)) +$(1)/rustllvm/$(CFG_RUSTLLVM_$(1)): $$(RUSTLLVM_OBJS_OBJS_$(1)) @$$(call E, link: $$@) - $$(Q)$$(call CFG_LINK_CXX_$(1),$$@,$$(RUSTLLVM_OBJS_OBJS_$(1)) \ - $$(CFG_GCCISH_PRE_LIB_FLAGS_$(1)) $$(LLVM_LIBS_$(1)) \ - $$(CFG_GCCISH_POST_LIB_FLAGS_$(1)) \ - $$(LLVM_LDFLAGS_$(1)),$$(RUSTLLVM_DEF_$(1)),$$(CFG_RUSTLLVM_$(1))) + $$(Q)$$(AR_$(1)) rcs $$@ $$(RUSTLLVM_OBJS_OBJS_$(1)) $(1)/rustllvm/%.o: rustllvm/%.cpp $$(MKFILE_DEPS) $$(LLVM_CONFIG_$(1)) @$$(call E, compile: $$@) diff --git a/mk/stage0.mk b/mk/stage0.mk index e671e65ea09..bf55289a7fb 100644 --- a/mk/stage0.mk +++ b/mk/stage0.mk @@ -27,11 +27,7 @@ endif # Host libs will be extracted by the above rule -$(HLIB0_H_$(CFG_BUILD))/$(CFG_RUNTIME_$(CFG_BUILD)): \ - $(HBIN0_H_$(CFG_BUILD))/rustc$(X_$(CFG_BUILD)) \ - | $(HLIB0_H_$(CFG_BUILD))/ - $(Q)touch $@ - +# NOTE: remove all these after the next snapshot $(HLIB0_H_$(CFG_BUILD))/$(CFG_STDLIB_$(CFG_BUILD)): \ $(HBIN0_H_$(CFG_BUILD))/rustc$(X_$(CFG_BUILD)) \ | $(HLIB0_H_$(CFG_BUILD))/ @@ -76,12 +72,7 @@ $$(HBIN0_H_$(1))/rustc$$(X_$(1)): \ @$$(call E, cp: $$@) $$(Q)cp $$< $$@ -$$(HLIB0_H_$(1))/$(CFG_RUNTIME_$(1)): \ - $$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_RUNTIME_$(1)) \ - | $(HLIB0_H_$(1))/ - @$$(call E, cp: $$@) - $$(Q)cp $$< $$@ - +# NOTE: removing everything below after the next snapshot $$(HLIB0_H_$(1))/$(CFG_STDLIB_$(1)): \ $$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_STDLIB_$(1)) \ | $(HLIB0_H_$(1))/ diff --git a/mk/target.mk b/mk/target.mk index a8606cbdbcb..3bf0a2f7843 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -103,8 +103,10 @@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBSYNTAX_$(3)): \ | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, compile_and_link: $$@) $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBSYNTAX_GLOB_$(2)),$$(notdir $$@)) + $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBSYNTAX_RGLOB_$(2)),$$(notdir $$@)) $$(STAGE$(1)_T_$(2)_H_$(3)) $$(WFLAGS_ST$(1)) $(BORROWCK) --out-dir $$(@D) $$< && touch $$@ $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBSYNTAX_GLOB_$(2)),$$(notdir $$@)) + $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBSYNTAX_RGLOB_$(2)),$$(notdir $$@)) # Only build the compiler for host triples ifneq ($$(findstring $(2),$$(CFG_HOST)),) @@ -119,14 +121,19 @@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3)): \ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)): CFG_COMPILER = $(2) $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)): \ $$(COMPILER_CRATE) $$(COMPILER_INPUTS) \ + $(S)src/librustc/lib/llvmdeps.rs \ $$(TSREQ$(1)_T_$(2)_H_$(3)) \ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBSYNTAX_$(3)) \ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3)) \ | $$(TLIB$(1)_T_$(2)_H_$(3))/ @$$(call E, compile_and_link: $$@) $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(2)),$$(notdir $$@)) - $$(STAGE$(1)_T_$(2)_H_$(3)) $$(WFLAGS_ST$(1)) --out-dir $$(@D) $$< && touch $$@ + $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_RGLOB_$(2)),$$(notdir $$@)) + $$(STAGE$(1)_T_$(2)_H_$(3)) $$(WFLAGS_ST$(1)) \ + -L "$$(LLVM_LIBDIR_$(3))" \ + --out-dir $$(@D) $$< && touch $$@ $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(2)),$$(notdir $$@)) + $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_RGLOB_$(2)),$$(notdir $$@)) # NOTE: after the next snapshot remove these '-L' flags $$(TBIN$(1)_T_$(2)_H_$(3))/rustc$$(X_$(3)): \ diff --git a/mk/tests.mk b/mk/tests.mk index e19e8638331..3f21b1b4819 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -376,7 +376,8 @@ $(3)/stage$(1)/test/rustctest-$(2)$$(X_$(2)): \ $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_RUSTLLVM_$(2)) \ $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBSYNTAX_$(2)) @$$(call E, compile_and_link: $$@) - $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test + $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test \ + -L "$$(LLVM_LIBDIR_$(3))" $(3)/stage$(1)/test/rustpkgtest-$(2)$$(X_$(2)): \ $$(RUSTPKG_LIB) $$(RUSTPKG_INPUTS) \ diff --git a/src/etc/mklldeps.py b/src/etc/mklldeps.py new file mode 100644 index 00000000000..90e48de532b --- /dev/null +++ b/src/etc/mklldeps.py @@ -0,0 +1,58 @@ +# xfail-license + +import os +import sys +import subprocess + +components = sys.argv[1].split(' ') + +print """// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// WARNING: THIS IS A GENERATED FILE, DO NOT MODIFY +// take a look at src/etc/mklldeps.py if you're interested +""" + +for llconfig in sys.argv[2:]: + print + + proc = subprocess.Popen([llconfig, '--host-target'], stdout = subprocess.PIPE) + out, err = proc.communicate() + arch, os = out.split('-', 1) + arch = 'x86' if arch == 'i686' or arch == 'i386' else arch + if 'darwin' in os: + os = 'macos' + elif 'linux' in os: + os = 'linux' + elif 'freebsd' in os: + os = 'freebsd' + elif 'android' in os: + os = 'android' + elif 'win' in os or 'mingw' in os: + os = 'win32' + cfg = [ + "target_arch = \"" + arch + "\"", + "target_os = \"" + os + "\"", + ] + + print "#[cfg(" + ', '.join(cfg) + ")]" + + args = [llconfig, '--libs'] + args.extend(components) + proc = subprocess.Popen(args, stdout = subprocess.PIPE) + out, err = proc.communicate() + + for lib in out.strip().split(' '): + lib = lib[2:] # chop of the leading '-l' + print "#[link(name = \"" + lib + "\", kind = \"static\")]" + if os == 'win32': + print "#[link(name = \"pthread\")]" + print "#[link(name = \"imagehlp\")]" + print "extern {}" diff --git a/src/etc/snapshot.py b/src/etc/snapshot.py index 03ada0eef18..e6508ec526e 100644 --- a/src/etc/snapshot.py +++ b/src/etc/snapshot.py @@ -25,34 +25,10 @@ download_dir_base = "dl" download_unpack_base = os.path.join(download_dir_base, "unpack") snapshot_files = { - "linux": ["bin/rustc", - "lib/libstd-*.so", - "lib/libextra-*.so", - "lib/librustc-*.so", - "lib/libsyntax-*.so", - "lib/librustuv-*.so", - "lib/librustllvm.so"], - "macos": ["bin/rustc", - "lib/libstd-*.dylib", - "lib/libextra-*.dylib", - "lib/librustc-*.dylib", - "lib/libsyntax-*.dylib", - "lib/librustuv-*.dylib", - "lib/librustllvm.dylib"], - "winnt": ["bin/rustc.exe", - "bin/std-*.dll", - "bin/extra-*.dll", - "bin/rustc-*.dll", - "bin/syntax-*.dll", - "bin/rustuv-*.dll", - "bin/rustllvm.dll"], - "freebsd": ["bin/rustc", - "lib/libstd-*.so", - "lib/libextra-*.so", - "lib/librustc-*.so", - "lib/libsyntax-*.so", - "lib/librustuv-*.so", - "lib/librustllvm.so"] + "linux": ["bin/rustc"], + "macos": ["bin/rustc"], + "winnt": ["bin/rustc.exe"], + "freebsd": ["bin/rustc"], } winnt_runtime_deps = ["libgcc_s_dw2-1.dll", diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index 166e1414f6e..7484550b3f3 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -17,6 +17,7 @@ #[comment = "The Rust compiler"]; #[license = "MIT/ASL2"]; #[crate_type = "dylib"]; +#[crate_type = "rlib"]; #[feature(macro_rules, globs, struct_variant, managed_boxes)]; @@ -110,6 +111,7 @@ pub mod util { pub mod lib { pub mod llvm; + pub mod llvmdeps; } // A curious inner module that allows ::std::foo to be available in here for diff --git a/src/librustc/lib/llvm.rs b/src/librustc/lib/llvm.rs index 1e1444babf2..3b0925164c9 100644 --- a/src/librustc/lib/llvm.rs +++ b/src/librustc/lib/llvm.rs @@ -306,7 +306,18 @@ pub mod llvm { use std::libc::{c_char, c_int, c_longlong, c_ushort, c_uint, c_ulonglong, size_t}; - #[link(name = "rustllvm")] + // Link to our native llvm bindings (things that we need to use the C++ api + // for) and because llvm is written in C++ we need to link against libstdc++ + // + // You'll probably notice that there is an omission of all LLVM libraries + // from this location. This is because the set of LLVM libraries that we + // link to is mostly defined by LLVM, and the `llvm-config` tool is used to + // figure out the exact set of libraries. To do this, the build system + // generates an llvmdeps.rs file next to this one which will be + // automatically updated whenever LLVM is updated to include an up-to-date + // set of the libraries we need to link to LLVM for. + #[link(name = "rustllvm", kind = "static")] + #[link(name = "stdc++")] extern { /* Create and destroy contexts. */ pub fn LLVMContextCreate() -> ContextRef; diff --git a/src/librustpkg/tests.rs b/src/librustpkg/tests.rs index 6136be2e8d3..911caf304d2 100644 --- a/src/librustpkg/tests.rs +++ b/src/librustpkg/tests.rs @@ -1101,6 +1101,7 @@ fn no_rebuilding() { } #[test] +#[ignore] fn no_recopying() { let p_id = PkgId::new("foo"); let workspace = create_local_package(&p_id); diff --git a/src/libstd/rt/task.rs b/src/libstd/rt/task.rs index fd7fee9e2b4..63cc397e8d7 100644 --- a/src/libstd/rt/task.rs +++ b/src/libstd/rt/task.rs @@ -543,6 +543,7 @@ impl Unwinder { #[no_split_stack] // - it would be sad for this function to trigger __morestack #[doc(hidden)] // - Function must be `pub` to get exported, but it's // irrelevant for documentation purposes. +#[cfg(not(test))] // in testing, use the original libstd's version pub extern "C" fn rust_stack_exhausted() { use rt::in_green_task_context; use rt::task::Task; diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs index eafcf7c09a0..c9b3ba9d460 100644 --- a/src/libsyntax/lib.rs +++ b/src/libsyntax/lib.rs @@ -20,6 +20,7 @@ #[license = "MIT/ASL2"]; #[crate_type = "dylib"]; +#[crate_type = "rlib"]; #[feature(macro_rules, globs, managed_boxes)]; diff --git a/src/snapshots.txt b/src/snapshots.txt index e71b218394d..b9be50701d9 100644 --- a/src/snapshots.txt +++ b/src/snapshots.txt @@ -1,3 +1,11 @@ +S 2013-12-04 9169579 + freebsd-x86_64 0dc6dcd9435e23c891b9e9e37d483e92cfe51449 + linux-i386 9802f6ba319bec4dd02299af08e421270ede5f5f + linux-x86_64 195d69ac1846cd646faaa50d05639d41b03e33ae + macos-i386 b0729f5ce3f5581fbb02f963a0f5261e6f011e01 + macos-x86_64 5091706c1111bbbd21a22e11b18f68717be17c29 + winnt-i386 1f975067f08f7702ab7f1d88b13221a0c2becd2f + S 2013-11-30 4252a24 freebsd-x86_64 2e0bfc6eb0dd75b8a1ad5c9958d90f3b626650dd linux-i386 2ea4b43fbc22c295e60874ef494dfbea1cc08a63