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)();