diff --git a/macho/cmdline.cc b/macho/cmdline.cc index 3eda89fd..0ab5a5af 100644 --- a/macho/cmdline.cc +++ b/macho/cmdline.cc @@ -16,6 +16,7 @@ Options: -demangle Demangle C++ symbols in log messages (default) -dynamic Link against dylibs (default) -help Report usage information + -l Search for a given library -lto_library Ignored -o FILE Set output filename -platform_version @@ -61,7 +62,7 @@ static i64 parse_version(Context &ctx, std::string_view arg) { } void parse_nonpositional_args(Context &ctx, - std::vector &remaining) { + std::vector &remaining) { std::span 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); } } diff --git a/macho/main.cc b/macho/main.cc index 93fd440b..f8428d34 100644 --- a/macho/main.cc +++ b/macho/main.cc @@ -153,7 +153,7 @@ int main(int argc, char **argv) { } ctx.cmdline_args = expand_response_files(ctx, argv); - std::vector file_args; + std::vector file_args; parse_nonpositional_args(ctx, file_args); for (std::string_view arg : file_args) diff --git a/macho/mold.h b/macho/mold.h index a9006f51..f8c71296 100644 --- a/macho/mold.h +++ b/macho/mold.h @@ -470,7 +470,7 @@ std::vector parse_tbd(Context &ctx, MappedFile *mf); // void parse_nonpositional_args(Context &ctx, - std::vector &remaining); + std::vector &remaining); // // main.cc