1
1
mirror of https://github.com/rui314/mold.git synced 2024-09-20 09:27:45 +03:00

[Mach-O] wip

This commit is contained in:
Rui Ueyama 2021-10-22 15:38:00 +09:00
parent 3b357976df
commit 95ae34887c
3 changed files with 19 additions and 8 deletions

View File

@ -16,6 +16,7 @@ Options:
-demangle Demangle C++ symbols in log messages (default)
-dynamic Link against dylibs (default)
-help Report usage information
-l<LIB> Search for a given library
-lto_library <FILE> Ignored
-o FILE Set output filename
-platform_version <PLATFORM> <MIN_VERSION> <SDK_VERSION>
@ -61,7 +62,7 @@ static i64 parse_version(Context &ctx, std::string_view arg) {
}
void parse_nonpositional_args(Context &ctx,
std::vector<std::string_view> &remaining) {
std::vector<std::string> &remaining) {
std::span<std::string_view> args = ctx.cmdline_args;
args = args.subspan(1);
@ -96,6 +97,17 @@ void parse_nonpositional_args(Context &ctx,
return false;
};
auto read_joined = [&](std::string name) {
if (read_arg(name))
return true;
if (args[0].starts_with(name)) {
arg = args[0].substr(2);
args = args.subspan(1);
return true;
}
return false;
};
auto read_flag = [&](std::string name) {
if (args[0] == name) {
args = args.subspan(1);
@ -110,11 +122,8 @@ void parse_nonpositional_args(Context &ctx,
exit(0);
}
if (read_arg("-L")) {
if (read_joined("-L")) {
ctx.arg.library_paths.push_back(std::string(arg));
} else if (args[0].starts_with("-L")) {
ctx.arg.library_paths.push_back(std::string(args[0].substr(2)));
args = args.subspan(1);
} else if (read_arg("-arch")) {
if (arg != "x86_64")
Fatal(ctx) << "unknown -arch: " << arg;
@ -122,6 +131,8 @@ void parse_nonpositional_args(Context &ctx,
ctx.arg.demangle = true;
} else if (read_flag("-dynamic")) {
ctx.arg.dynamic = true;
} else if (read_joined("-l")) {
remaining.push_back("-l" + std::string(arg));
} else if (read_flag("-lto_library")) {
} else if (read_arg("-o")) {
ctx.arg.output = arg;
@ -136,7 +147,7 @@ void parse_nonpositional_args(Context &ctx,
} else {
if (args[0][0] == '-')
Fatal(ctx) << "unknown command line option: " << args[0];
remaining.push_back(args[0]);
remaining.push_back(std::string(args[0]));
args = args.subspan(1);
}
}

View File

@ -153,7 +153,7 @@ int main(int argc, char **argv) {
}
ctx.cmdline_args = expand_response_files(ctx, argv);
std::vector<std::string_view> file_args;
std::vector<std::string> file_args;
parse_nonpositional_args(ctx, file_args);
for (std::string_view arg : file_args)

View File

@ -470,7 +470,7 @@ std::vector<TextDylib> parse_tbd(Context &ctx, MappedFile<Context> *mf);
//
void parse_nonpositional_args(Context &ctx,
std::vector<std::string_view> &remaining);
std::vector<std::string> &remaining);
//
// main.cc