#include #include #include #include #include "link.h" void help(void) { printf("usage: mld [options] objfile...\n\n"); printf("options:\n"); printf("\t-h\t\tprints this help message\n"); printf("\t-o \tselect a output file destination\n"); printf("\t-f\t\tmake this binary freestanding (no runtime)\n"); } int main(int argc, char **argv) { struct linker_arguments args = { .in_files = NULL, .in_count = 0, .out_file = "a.out", .freestanding = false, }; int c; while ((c = getopt(argc, argv, "ho:f")) != 1) { switch(c) { case 'h': help(); return M_SUCCESS; case 'o': args.out_file = optarg; break; case 'f': args.freestanding = true; break; case '?': return M_ERROR; default: goto next; } } next: if (optind >= argc) { ERROR("no object files passed"); return M_ERROR; } args.in_files = &argv[optind]; args.in_count = argc - optind; return link_files(args); }