summaryrefslogtreecommitdiff
path: root/mld/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'mld/main.c')
-rw-r--r--mld/main.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/mld/main.c b/mld/main.c
new file mode 100644
index 0000000..3dd5b5c
--- /dev/null
+++ b/mld/main.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <merror.h>
+#include <string.h>
+
+#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 <output>\tselect a output file destination\n");
+}
+
+int main(int argc, char **argv) {
+
+ struct linker_arguments args = {
+ .in_files = NULL,
+ .in_count = 0,
+ .out_file = "a.out",
+ };
+
+ int c;
+
+ while ((c = getopt(argc, argv, "ho:")) != 1) {
+ switch(c) {
+ case 'h':
+ help();
+ return M_SUCCESS;
+ case 'o':
+ args.out_file = optarg;
+ 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);
+}