gccrs: cli: Add frust-extern option

Add a new option to gather extern crates location.

gcc/rust/ChangeLog:

	* lang.opt: Add frust-extern option.
	* rust-session-manager.cc (Session::handle_extern_option): Add
	frust-extern option handler.
	* rust-session-manager.h (struct Session): Add an unordered map
	to store library name and locations.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This commit is contained in:
Pierre-Emmanuel Patry 2023-04-18 17:26:07 +02:00 committed by Arthur Cohen
parent 582accedb7
commit 1ca5d5f84c
3 changed files with 26 additions and 0 deletions

View file

@ -62,6 +62,10 @@ frust-crate=
Rust Joined RejectNegative
-frust-crate=<name> Set the crate name for the compilation
frust-extern=
Rust RejectNegative Joined
-frust-extern= Specify where an external library is located
frust-debug
Rust Var(flag_rust_debug)
Dump various Rust front end internals.

View file

@ -190,6 +190,11 @@ Session::handle_option (
}
break;
case OPT_frust_extern_: {
std::string input (arg);
ret = handle_extern_option (input);
}
break;
case OPT_frust_crate_:
// set the crate name
if (arg != nullptr)
@ -249,6 +254,20 @@ Session::handle_option (
return ret;
}
bool
Session::handle_extern_option (std::string &input)
{
auto pos = input.find ('=');
if (std::string::npos == pos)
return false;
std::string libname = input.substr (0, pos);
std::string path = input.substr (pos + 1);
extern_crates.insert ({libname, path});
return true;
}
bool
Session::handle_cfg_option (std::string &input)
{

View file

@ -288,6 +288,7 @@ struct Session
/* This should really be in a per-crate storage area but it is wiped with
* every file so eh. */
std::string injected_crate_name;
std::map<std::string, std::string> extern_crates;
/* extra files get included during late stages of compilation (e.g. macro
* expansion) */
@ -366,6 +367,8 @@ private:
// handle cfg_option
bool handle_cfg_option (std::string &data);
bool handle_extern_option (std::string &data);
};
} // namespace Rust