From 6d6c4c2a7699778cb641cf96f4b08f7fc4402840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20=C3=81vila=20de=20Esp=C3=ADndola?= Date: Thu, 7 Jul 2011 14:42:18 -0400 Subject: [PATCH] Command line changes for adding support for static libraries. --- mk/stage1.mk | 2 +- mk/stage2.mk | 2 +- mk/stage3.mk | 2 +- src/comp/back/link.rs | 2 +- src/comp/driver/rustc.rs | 24 +++++++++++++----------- src/comp/driver/session.rs | 2 +- src/comp/middle/trans.rs | 8 ++++---- 7 files changed, 22 insertions(+), 20 deletions(-) diff --git a/mk/stage1.mk b/mk/stage1.mk index 883c5e07f54..0bf21d854de 100644 --- a/mk/stage1.mk +++ b/mk/stage1.mk @@ -2,7 +2,7 @@ stage1/lib/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \ stage1/rustc$(X) stage0/lib/$(CFG_STDLIB) stage1/intrinsics.bc \ stage1/glue.o $(LREQ) $(MKFILES) @$(call E, compile_and_link: $@) - $(STAGE1) --shared -o $@ $< + $(STAGE1) --lib -o $@ $< stage1/lib/glue.o: stage1/rustc$(X) stage0/lib/$(CFG_STDLIB) \ stage1/intrinsics.bc $(LREQ) $(MKFILES) diff --git a/mk/stage2.mk b/mk/stage2.mk index 12d1cad400f..159933032f9 100644 --- a/mk/stage2.mk +++ b/mk/stage2.mk @@ -2,7 +2,7 @@ stage2/lib/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \ stage2/rustc$(X) stage1/lib/$(CFG_STDLIB) stage2/intrinsics.bc \ stage2/glue.o $(LREQ) $(MKFILES) @$(call E, compile_and_link: $@) - $(STAGE2) --shared -o $@ $< + $(STAGE2) --lib -o $@ $< stage2/lib/glue.o: stage2/rustc$(X) stage1/lib/$(CFG_STDLIB) \ stage2/intrinsics.bc rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME) diff --git a/mk/stage3.mk b/mk/stage3.mk index dfc7eff2190..45843993887 100644 --- a/mk/stage3.mk +++ b/mk/stage3.mk @@ -2,7 +2,7 @@ stage3/lib/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \ stage3/rustc$(X) stage2/lib/$(CFG_STDLIB) stage3/intrinsics.bc \ stage3/glue.o $(LREQ) $(MKFILES) @$(call E, compile_and_link: $@) - $(STAGE3) --shared -o $@ $< + $(STAGE3) --lib -o $@ $< stage3/lib/glue.o: stage3/rustc$(X) stage2/lib/$(CFG_STDLIB) \ stage3/intrinsics.bc rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME) diff --git a/src/comp/back/link.rs b/src/comp/back/link.rs index 5c9c10ec3bf..b58a0884bf6 100644 --- a/src/comp/back/link.rs +++ b/src/comp/back/link.rs @@ -348,7 +348,7 @@ fn build_link_meta(&session::session sess, &ast::crate c, } fn warn_missing(&session::session sess, str name, str default) { - if (!sess.get_opts().shared) { ret; } + if (!sess.get_opts().library) { ret; } sess.warn(#fmt("missing crate link meta '%s', using '%s' as default", name, default)); } diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs index 992d052839f..15add626a3b 100644 --- a/src/comp/driver/rustc.rs +++ b/src/comp/driver/rustc.rs @@ -213,7 +213,8 @@ options: -o write output to --glue generate glue.bc file - --shared compile a shared-library crate + --lib compile a library crate + --static use or produce static libraries --pretty [type] pretty-print the input instead of compiling --ls list the symbols defined by a crate file -L add a directory to the library search path @@ -281,7 +282,7 @@ fn build_target_config() -> @session::config { fn build_session_options(str binary, getopts::match match, str binary_dir) -> @session::options { - auto shared = opt_present(match, "shared"); + auto library = opt_present(match, "lib"); auto library_search_paths = [binary_dir + "/lib"]; library_search_paths += getopts::opt_strs(match, "L"); auto output_type = @@ -330,7 +331,7 @@ fn build_session_options(str binary, getopts::match match, str binary_dir) -> auto cfg = parse_cfgspecs(getopts::opt_strs(match, "cfg")); auto test = opt_present(match, "test"); let @session::options sopts = - @rec(shared=shared, + @rec(library=library, optimize=opt_level, debuginfo=debuginfo, verify=verify, @@ -369,11 +370,12 @@ fn main(vec[str] args) { [optflag("h"), optflag("help"), optflag("v"), optflag("version"), optflag("glue"), optflag("emit-llvm"), optflagopt("pretty"), optflag("ls"), optflag("parse-only"), optflag("O"), - optopt("OptLevel"), optflag("shared"), optmulti("L"), optflag("S"), + optopt("OptLevel"), optmulti("L"), optflag("S"), optflag("c"), optopt("o"), optflag("g"), optflag("save-temps"), optopt("sysroot"), optflag("stats"), optflag("time-passes"), optflag("time-llvm-passes"), optflag("no-typestate"), - optflag("noverify"), optmulti("cfg"), optflag("test")]; + optflag("noverify"), optmulti("cfg"), optflag("test"), + optflag("lib"), optflag("static")]; auto binary = vec::shift[str](args); auto binary_dir = fs::dirname(binary); auto match = @@ -455,7 +457,7 @@ fn main(vec[str] args) { auto temp_filename; alt (sopts.output_type) { case (link::output_type_exe) { - // FIXME: what about shared? + // FIXME: what about --lib? temp_filename = ofile + ".o"; } @@ -479,13 +481,13 @@ fn main(vec[str] args) { let vec[str] gcc_args = [stage, "-Lrt", "-lrustrt", glu, "-m32", "-o", saved_out_filename, saved_out_filename + ".o"]; - auto shared_cmd; + auto lib_cmd; auto os = sess.get_targ_cfg().os; if (os == session::os_macos) { - shared_cmd = "-dynamiclib"; + lib_cmd = "-dynamiclib"; } else { - shared_cmd = "-shared"; + lib_cmd = "-shared"; } // Converts a library file name into a gcc -l argument @@ -527,8 +529,8 @@ fn main(vec[str] args) { gcc_args += ["-l" + l]; } - if (sopts.shared) { - gcc_args += [shared_cmd]; + if (sopts.library) { + gcc_args += [lib_cmd]; } else { // FIXME: why do we hardcode -lm? gcc_args += ["-lm", main]; diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs index 7dce5b9b068..a891d2c4b61 100644 --- a/src/comp/driver/session.rs +++ b/src/comp/driver/session.rs @@ -23,7 +23,7 @@ type config = ty_mach float_type); type options = - rec(bool shared, + rec(bool library, uint optimize, bool debuginfo, bool verify, diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 487f79d661b..293db34e832 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -8701,7 +8701,7 @@ fn decl_fn_and_pair_full(&@crate_ctxt ccx, &span sp, &vec[str] path, str flav, } } let bool is_main = - str::eq(vec::top(path), "main") && !ccx.sess.get_opts().shared; + str::eq(vec::top(path), "main") && !ccx.sess.get_opts().library; // Declare the function itself. let str s = @@ -8745,7 +8745,7 @@ fn register_fn_pair(&@crate_ctxt cx, str ps, TypeRef llfnty, ValueRef llfn, // FIXME: We should also hide the unexported pairs in crates. auto gvar = - create_fn_pair(cx, ps, llfnty, llfn, cx.sess.get_opts().shared); + create_fn_pair(cx, ps, llfnty, llfn, cx.sess.get_opts().library); cx.item_ids.insert(id, llfn); cx.item_symbols.insert(id, ps); cx.fn_pairs.insert(id, gvar); @@ -9219,7 +9219,7 @@ fn create_crate_map(&@crate_ctxt ccx) -> ValueRef { } vec::push[ValueRef](subcrates, C_int(0)); auto mapname; - if (ccx.sess.get_opts().shared) { + if (ccx.sess.get_opts().library) { mapname = ccx.link_meta.name; } else { mapname = "toplevel"; } auto sym_name = "_rust_crate_map_" + mapname; @@ -9235,7 +9235,7 @@ fn create_crate_map(&@crate_ctxt ccx) -> ValueRef { } fn write_metadata(&@trans::crate_ctxt cx, &@ast::crate crate) { - if (!cx.sess.get_opts().shared) { ret; } + if (!cx.sess.get_opts().library) { ret; } auto llmeta = C_postr(metadata::encoder::encode_metadata(cx, crate)); auto llconst = trans::C_struct([llmeta]); auto llglobal =