export CFG_LLVM_ROOT
export CFG_ENABLE_MINGW_CROSS
export CFG_PREFIX
+export CFG_LIBDIR
######################################################################
# Subprograms
# Destinations of artifacts for the host compiler
HROOT$(1)_H_$(3) = $(3)/stage$(1)
HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin
+# FIXME: Temporary hack for moving win32 libs to the bin directory
+ifeq ($(1),0)
HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/lib
+else
+HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(CFG_LIBDIR)
+endif
# Destinations of artifacts for target architectures
TROOT$(1)_T_$(2)_H_$(3) = $$(HLIB$(1)_H_$(3))/rustc/$(2)
TBIN$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/bin
+ifeq ($(1),0)
TLIB$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/lib
+else
+TLIB$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/$$(CFG_LIBDIR)
+endif
# The name of the core and standard libraries used by rustc
ifdef CFG_DISABLE_SHAREDSTD
done
done
+# On windows we just store the libraries in the bin directory because
+# there's no rpath
+CFG_LIBDIR=lib
+if [ "$CFG_OSTYPE" = "pc-mingw32" ]
+then
+ CFG_LIBDIR=bin
+fi
+
for h in $CFG_TARGET_TRIPLES
do
for t in $CFG_TARGET_TRIPLES
make_dir $h/stage$i/bin
# host lib dir
- make_dir $h/stage$i/lib
+ make_dir $h/stage$i/$CFG_LIBDIR
+ # FIXME: Transitional. remove
+ make_dir $h/stage$i/lib
# target bin dir
- make_dir $h/stage$i/lib/rustc/$t/bin
+ make_dir $h/stage$i/$CFG_LIBDIR/rustc/$t/bin
+ # FIXME: Transitional. remove
+ make_dir $h/stage$i/lib/rustc/$t/bin
# target lib dir
- make_dir $h/stage$i/lib/rustc/$t/lib
+ make_dir $h/stage$i/$CFG_LIBDIR/rustc/$t/$CFG_LIBDIR
+ # FIXME: Transitional. remove
+ make_dir $h/stage$i/lib/rustc/$t/lib
done
done
putvar CFG_TARGET_TRIPLES
putvar CFG_C_COMPILER
putvar CFG_PREFIX
+putvar CFG_LIBDIR
# Setting this again because it may have been changed
if [ $CFG_DISABLE_MANAGE_SUBMODULES ]
CFG_TESTLIB=$(CFG_BUILD_DIR)/$(2)/$(strip \
$(if $(findstring stage0,$(1)), \
- stage0/lib, \
+ stage0/$(CFG_LIBDIR), \
$(if $(findstring stage1,$(1)), \
- stage1/lib, \
+ stage1/$(CFG_LIBDIR), \
$(if $(findstring stage2,$(1)), \
- stage2/lib, \
+ stage2/$(CFG_LIBDIR), \
$(if $(findstring stage3,$(1)), \
- stage3/lib, \
- )))))/rustc/$(CFG_HOST_TRIPLE)/lib
+ stage3/$(CFG_LIBDIR), \
+ )))))/rustc/$(CFG_HOST_TRIPLE)/$(CFG_LIBDIR)
ifdef CFG_UNIXY
CFG_INFO := $(info cfg: unix-y environment)
#[cfg(target_os = "linux")]
#[cfg(target_os = "macos")]
#[cfg(target_os = "freebsd")]
-#[cfg(test)]
mod test {
#[test]
fn test_rpaths_to_flags() {
export search;
export relative_target_lib_path;
export get_cargo_root;
+export libdir;
type pick<T> = block(path: fs::path) -> option::t<T>;
}
fn relative_target_lib_path(target_triple: str) -> [fs::path] {
- ["lib", "rustc", target_triple, "lib"]
+ [libdir(), "rustc", target_triple, libdir()]
}
fn make_target_lib_path(sysroot: fs::path,
fn get_cargo_lib_path() -> result::t<fs::path, str> {
result::chain(get_cargo_root()) { |p|
- result::ok(fs::connect(p, "lib"))
+ result::ok(fs::connect(p, libdir()))
}
-}
\ No newline at end of file
+}
+
+// The name of the directory rustc expects libraries to be located.
+// On Unix should be "lib", on windows "bin"
+fn libdir() -> str {
+ let libdir = #env("CFG_LIBDIR");
+ if str::is_empty(libdir) {
+ fail "rustc compiled without CFG_LIBDIR environment variable";
+ }
+ libdir
+}
"lib/librustrt.dylib",
"lib/librustllvm.dylib"],
"winnt": ["bin/rustc.exe",
- "lib/core-*.dll",
- "lib/std-*.dll",
- "lib/rustc-*.dll",
- "lib/rustrt.dll",
- "lib/rustllvm.dll"],
+ "bin/core-*.dll",
+ "bin/std-*.dll",
+ "bin/rustc-*.dll",
+ "bin/rustrt.dll",
+ "bin/rustllvm.dll"],
"freebsd": ["bin/rustc",
"lib/libcore-*.so",
"lib/libstd-*.so",