From 9786abc212002bbe81acfe542877541705db8607 Mon Sep 17 00:00:00 2001 From: servostar Date: Thu, 18 Jul 2024 23:00:38 +0200 Subject: [PATCH] added gcc driver --- src/link/gcc/driver.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/link/gcc/driver.h | 14 ++++++++++++++ src/link/lib.c | 6 +++++- src/link/lib.h | 2 +- 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 src/link/gcc/driver.c create mode 100644 src/link/gcc/driver.h diff --git a/src/link/gcc/driver.c b/src/link/gcc/driver.c new file mode 100644 index 0000000..854bf0c --- /dev/null +++ b/src/link/gcc/driver.c @@ -0,0 +1,42 @@ +// +// Created by servostar on 18.07.24. +// + +#include +#include +#include + +bool gcc_link(TargetLinkConfig* config) { + + GString* commandString = g_string_new(""); + + g_string_append(commandString, "gcc"); + + for (guint i = 0; i < config->object_file_names->len; i++) { + g_string_append(commandString, " "); + g_string_append(commandString, g_array_index(config->object_file_names, char*, i)); + } + + g_string_append(commandString, " -o "); + g_string_append(commandString, config->output_file); + + print_message(Info, "invoking binary link with: %s", commandString->str); + + if (system(commandString->str)) { + return false; + } + + g_string_free(commandString, true); + + return true; +} + +BinaryDriver* gcc_get_driver() { + + BinaryDriver* driver = mem_alloc(MemoryNamespaceLld, sizeof (BinaryDriver)); + + driver->name = "gcc"; + driver->link_func = &gcc_link; + + return driver; +} diff --git a/src/link/gcc/driver.h b/src/link/gcc/driver.h new file mode 100644 index 0000000..8227353 --- /dev/null +++ b/src/link/gcc/driver.h @@ -0,0 +1,14 @@ +// +// Created by servostar on 18.07.24. +// + +#ifndef GEMSTONE_GCC_DRIVER_H +#define GEMSTONE_GCC_DRIVER_H + +#include + +bool gcc_link(TargetLinkConfig* config); + +BinaryDriver* gcc_get_driver(); + +#endif // GEMSTONE_GCC_DRIVER_H diff --git a/src/link/lib.c b/src/link/lib.c index 15cd7fa..6e4aaf1 100644 --- a/src/link/lib.c +++ b/src/link/lib.c @@ -7,8 +7,12 @@ #include #include +#include +#include + static driver_init AVAILABLE_DRIVER[] = { - clang_get_driver + clang_get_driver, + gcc_get_driver }; static GHashTable* binary_driver = NULL; diff --git a/src/link/lib.h b/src/link/lib.h index cf592a1..74ac352 100644 --- a/src/link/lib.h +++ b/src/link/lib.h @@ -5,7 +5,7 @@ #ifndef GEMSTONE_LIB_H #define GEMSTONE_LIB_H -#include +#include typedef BinaryDriver* (*driver_init)();