From 5b2c84c0b6880c66657e6fdd0f802a2187c25d05 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Sun, 15 Sep 2024 14:49:26 -0500 Subject: build: break the engine into its subsystems Break the source code into various subsystem directories. This allows certain subsystems to be disabled at compile time, if needed. Move the build system from raw Makefiles to a CMake generator. This drastically simplifies the build and requires only editing a single file, rather than the several make.config files in subsystem directories. Signed-off-by: Danny Holman --- CMakeLists.txt | 16 +++++++ Makefile | 76 -------------------------------- core/abort.c | 24 ++++++++++ core/alloc.c | 105 ++++++++++++++++++++++++++++++++++++++++++++ include/rune/core/abort.h | 29 ++++++++++++ include/rune/core/alloc.h | 41 +++++++++++++++++ include/rune/core/logging.h | 37 ++++++++++++++++ include/rune/list.h | 53 ---------------------- include/rune/logging.h | 37 ---------------- include/rune/types.h | 40 ----------------- include/rune/util.h | 54 ----------------------- include/rune/util/list.h | 53 ++++++++++++++++++++++ include/rune/util/types.h | 40 +++++++++++++++++ include/rune/util/util.h | 54 +++++++++++++++++++++++ network/make.config | 7 --- 15 files changed, 399 insertions(+), 267 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 Makefile create mode 100644 core/abort.c create mode 100644 core/alloc.c create mode 100644 include/rune/core/abort.h create mode 100644 include/rune/core/alloc.h create mode 100644 include/rune/core/logging.h delete mode 100644 include/rune/list.h delete mode 100644 include/rune/logging.h delete mode 100644 include/rune/types.h delete mode 100644 include/rune/util.h create mode 100644 include/rune/util/list.h create mode 100644 include/rune/util/types.h create mode 100644 include/rune/util/util.h delete mode 100644 network/make.config diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..551cf1f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.20) + +set(CMAKE_C_STANDARD 23) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_C_EXTENSIONS ON) + +project(rune-engine VERSION 0.60.0 DESCRIPTION "High performance game engine designed for Quake-style shooters") + +list(APPEND SOURCE_FILES core/abort.c core/alloc.c core/callbacks.c core/init.c core/logging.c core/network.c) + +add_compile_definitions(VERSION="${PROJECT_VERSION}") + +add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES}) +set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) +set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR}) +target_include_directories(${PROJECT_NAME} PRIVATE include) diff --git a/Makefile b/Makefile deleted file mode 100644 index b8f8a08..0000000 --- a/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -CC?=gcc -LD?=ld -INCLUDE?=-Iinclude -CFLAGS?=-O0 -LDFLAGS?= -LIBS?= -PREFIX?=/usr/local/ - -HEADLESS?=0 -RENDER_API?=vulkan -NETWORK?=1 - -# -- Do not edit below this line -- - -MAJOR:=0 -MINOR:=55 -REV:= -VERSION:="$(MAJOR).$(MINOR)$(REV)" - -LIBRARY:=librune.so.$(MAJOR).$(MINOR) -SONAME:=librune.so.$(MAJOR) -SYMFILE:=librune.sym - -LIBDIR:=$(DESTDIR)$(PREFIX)lib/ -BINDIR:=$(DESTDIR)$(PREFIX)bin/ -INCLUDEDIR:=$(DESTDIR)$(PREFIX)include/rune/ - -CC:=$(CC) -INCLUDE:=$(INCLUDE) -CFLAGS:=$(CFLAGS) $(INCLUDE) -Wall -Wextra -DVERSION=\"$(VERSION)\" -ggdb -fstack-protector-all -fPIC -LDFLAGS:=$(LDFLAGS) -shared - -.PHONY: all check clean install -.SUFFIXES: .o .c - -OBJS:=core/callbacks.o \ - core/init.o \ - core/logging.o \ - --include graphics/make.config --include sound/make.config --include network/make.config - -all: $(LIBRARY) - -$(LIBRARY): $(OBJS) - @$(LD) -soname $(SONAME) -o $@ $(LIBS) $(LDFLAGS) $? - @echo [LD] $@ - @objcopy --only-keep-debug $(LIBRARY) $(SYMFILE) - @objcopy --add-gnu-debuglink=$(SYMFILE) $(LIBRARY) - @strip -s $(LIBRARY) - @echo [strip] $(LIBRARY) - -.c.o: - @$(CC) -MD -c $< -o $@ $(CFLAGS) $(INCLUDE) - @echo [CC] $@ - -check: - -clean: - $(RM) $(OBJS) $(OBJS:.o=.d) $(LIBRARY) $(SYMFILE) tags TAGS - -install: - install -d $(LIBDIR) - install -d $(BINDIR) - install -d $(INCLUDEDIR) - install -d $(INCLUDEDIR)$(RENDER_API) - install -p -m 644 include/rune/*.h $(INCLUDEDIR) - install -p -m 644 include/rune/$(RENDER_API)/*.h $(INCLUDEDIR)$(RENDER_API) - install -p -m 755 $(LIBRARY) $(LIBDIR) - ln -s $(LIBDIR)$(LIBRARY) $(LIBDIR)$(SONAME) - -tags: - ctags -R --kinds-c=+pLl --fields=+S include/ core/ render-vulkan/ - --include $(OBJS:.o=.d) diff --git a/core/abort.c b/core/abort.c new file mode 100644 index 0000000..3b8e536 --- /dev/null +++ b/core/abort.c @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include + +#define MAX_TRACE_ITEMS 30 + +void _stack_trace(void) { + void* buffer[MAX_TRACE_ITEMS]; + int num_links = backtrace(buffer, MAX_TRACE_ITEMS); + char** symbuf = backtrace_symbols(buffer, num_links); + + for (int i = 0; i < num_links; i++) + log_output(LOG_INFO, "#%d: %s", i, symbuf[i]); + + free(symbuf); +} + +void rune_abort(void) { + log_output(LOG_INFO, "Abort called, printing stack trace"); + _stack_trace(); + rune_exit(); +} diff --git a/core/alloc.c b/core/alloc.c new file mode 100644 index 0000000..88ebb8f --- /dev/null +++ b/core/alloc.c @@ -0,0 +1,105 @@ +#include +#include +#include + +// TODO: implement block coalescing so we can reuse freed blocks + +#define DEADBLOCK ((void*)0xDEADBEEF) + +static struct mem_block first_block; + +static struct mem_block* _find_free_block(size_t sz) { + struct list_head *temp = &first_block.list; + struct mem_block *block; + while (temp != NULL) { + block = (struct mem_block*)((void*)temp - offsetof(struct mem_block, list)); + if (block->sz == sz && block->free == 1) + return block; + temp = temp->next; + } + return NULL; +} + +static struct mem_block* _find_block(void *ptr) { + struct list_head *temp = &first_block.list; + struct mem_block *block; + while (temp != NULL) { + block = (struct mem_block*)((void*)temp - offsetof(struct mem_block, list)); + if (block->ptr == ptr) + return block; + temp = temp->next; + } + return NULL; +} + +void* rune_alloc(size_t sz) { + if (sz == 0) + return NULL; + + if (first_block.ptr == NULL) { + first_block.ptr = DEADBLOCK; + first_block.sz = 0; + } + + struct mem_block *block = _find_free_block(sz); + if (block != NULL) { + block->free = 0; + return block->ptr; + } + + block = malloc(sizeof(struct mem_block)); + if (block == NULL) { + log_output(LOG_ERROR, "Cannot allocate block of size %d", sz); + return NULL; + } + block->ptr = malloc(sz); + block->sz = sz; + block->free = 0; + list_add(&block->list, &first_block.list); + log_output(LOG_DEBUG, "Alloc'd block of size %d", sz); + return block->ptr; +} + +void* rune_calloc(size_t nmemb, size_t sz) { + void *ret = rune_alloc(sz); + for (size_t *i = (size_t*)ret; i < (size_t*)ret+sz; i++) + *i = nmemb; + return ret; +} + +void* rune_realloc(void *ptr, size_t sz) { + if (ptr == NULL || sz == 0) + return NULL; + + struct mem_block *block = _find_block(ptr); + if (block == NULL) + return rune_alloc(sz); + return block->ptr; +} + +void rune_free(void *ptr) { + if (ptr == NULL) + return; + + struct mem_block *block = _find_block(ptr); + if (block->free == 1) + return; + block->free = 1; + log_output(LOG_DEBUG, "Freed block of size %d", block->sz); +} + +void rune_free_all(void) { + struct list_head *temp = &first_block.list; + struct mem_block *block; + while (temp != NULL) { + block = (struct mem_block*)((void*)temp - offsetof(struct mem_block, list)); + if (block->ptr == DEADBLOCK) { + temp = temp->next; + continue; + } + + if (block->ptr != NULL) + free(block->ptr); + temp = temp->next; + } +} diff --git a/include/rune/core/abort.h b/include/rune/core/abort.h new file mode 100644 index 0000000..60f368e --- /dev/null +++ b/include/rune/core/abort.h @@ -0,0 +1,29 @@ +/* + * Rune Game Engine + * Copyright 2024 Danny Holman + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef RUNE_ABORT_H +#define RUNE_ABORT_H + +#include + +RAPI void rune_abort(void); + +#endif diff --git a/include/rune/core/alloc.h b/include/rune/core/alloc.h new file mode 100644 index 0000000..35170d8 --- /dev/null +++ b/include/rune/core/alloc.h @@ -0,0 +1,41 @@ +/* + * Rune Game Engine + * Copyright 2024 Danny Holman + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef RUNE_ALLOC_H +#define RUNE_ALLOC_H + +#include +#include + +struct mem_block { + void *ptr; + size_t sz; + int free; + struct list_head list; +}; + +RAPI void* rune_alloc(size_t sz); +RAPI void* rune_calloc(size_t nmemb, size_t sz); +RAPI void* rune_realloc(void *ptr, size_t sz); +RAPI void rune_free(void *ptr); +RAPI void rune_free_all(void); + +#endif diff --git a/include/rune/core/logging.h b/include/rune/core/logging.h new file mode 100644 index 0000000..6bb6470 --- /dev/null +++ b/include/rune/core/logging.h @@ -0,0 +1,37 @@ +/* + * Rune Game Engine + * Copyright 2024 Danny Holman + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef RUNE_CORE_LOGGING_H +#define RUNE_CORE_LOGGING_H + +#include + +enum log_level { + LOG_FATAL, + LOG_ERROR, + LOG_WARN, + LOG_INFO, + LOG_DEBUG +}; + +RAPI void log_output(int level, const char *fmt, ...); + +#endif diff --git a/include/rune/list.h b/include/rune/list.h deleted file mode 100644 index 1107491..0000000 --- a/include/rune/list.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Rune Game Engine - * Copyright 2024 Danny Holman - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - -#ifndef RUNE_LIST_H -#define RUNE_LIST_H - -#include - -struct list_head { - struct list_head *next; - struct list_head *prev; -}; - -static inline void list_add(struct list_head *new, struct list_head *head) { - struct list_head *temp = head; - while (temp->next != NULL) - temp = temp->next; - - temp->next = new; - new->prev = temp; - new->next = NULL; -} - -static inline void list_del(struct list_head *item) { - struct list_head *next = item->next; - struct list_head *prev = item->prev; - if (next != NULL) - next->prev = prev; - if (prev != NULL) - prev->next = next; - item->next = NULL; - item->prev = NULL; -} - -#endif diff --git a/include/rune/logging.h b/include/rune/logging.h deleted file mode 100644 index 5b9aabf..0000000 --- a/include/rune/logging.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Rune Game Engine - * Copyright 2024 Danny Holman - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - -#ifndef RUNE_LOGGING_H -#define RUNE_LOGGING_H - -#include - -enum log_level { - LOG_FATAL, - LOG_ERROR, - LOG_WARN, - LOG_INFO, - LOG_DEBUG -}; - -RAPI void log_output(int level, const char *fmt, ...); - -#endif diff --git a/include/rune/types.h b/include/rune/types.h deleted file mode 100644 index 03e3edb..0000000 --- a/include/rune/types.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Rune Game Engine - * Copyright 2024 Danny Holman - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - -#ifndef RUNE_TYPES_H -#define RUNE_TYPES_H - -#include - -STATIC_ASSERT(sizeof(uint8_t) == 1, "Expected uint8_t to be 1 byte"); -STATIC_ASSERT(sizeof(uint16_t) == 2, "Expected uint16_t to be 2 bytes"); -STATIC_ASSERT(sizeof(uint32_t) == 4, "Expected uint32_t to be 4 bytes"); -STATIC_ASSERT(sizeof(uint64_t) == 8, "Expected uint64_t to be 8 bytes"); - -STATIC_ASSERT(sizeof(int8_t) == 1, "Expected int8_t to be 1 byte"); -STATIC_ASSERT(sizeof(int16_t) == 2, "Expected int16_t to be 2 bytes"); -STATIC_ASSERT(sizeof(int32_t) == 4, "Expected int32_t to be 4 bytes"); -STATIC_ASSERT(sizeof(int64_t) == 8, "Expected int64_t to be 8 bytes"); - -STATIC_ASSERT(sizeof(float) == 4, "Expected float to be 4 bytes"); -STATIC_ASSERT(sizeof(double) == 8, "Expected double to be 8 bytes"); - -#endif diff --git a/include/rune/util.h b/include/rune/util.h deleted file mode 100644 index 04429c4..0000000 --- a/include/rune/util.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Rune Game Engine - * Copyright 2024 Danny Holman - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - -#ifndef RUNE_UTIL_H -#define RUNE_UTIL_H - -#include -#include - -#if defined(__clang__) || defined(__gcc__) - #define STATIC_ASSERT _Static_assert -#else - #define STATIC_ASSERT static_assert -#endif - - -#ifdef REXPORT - #ifdef _MSC_VER - #define RAPI __declspec(dllexport) - #else - #define RAPI __attribute__((visibility("default"))) - #endif -#else - #ifdef _MSC_VER - #define RAPI __declspec(dllexport) - #else - #define RAPI - #endif -#endif - -static inline uint32_t clamp(uint32_t value, float min, float max) { - const uint32_t ret = value < min ? min : value; - return ret > max ? max : ret; -} - -#endif diff --git a/include/rune/util/list.h b/include/rune/util/list.h new file mode 100644 index 0000000..ed6db5e --- /dev/null +++ b/include/rune/util/list.h @@ -0,0 +1,53 @@ +/* + * Rune Game Engine + * Copyright 2024 Danny Holman + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef RUNE_UTIL_LIST_H +#define RUNE_UTIL_LIST_H + +#include + +RAPI struct list_head { + struct list_head *next; + struct list_head *prev; +}; + +RAPI static inline void list_add(struct list_head *new, struct list_head *head) { + struct list_head *temp = head; + while (temp->next != NULL) + temp = temp->next; + + temp->next = new; + new->prev = temp; + new->next = NULL; +} + +RAPI static inline void list_del(struct list_head *item) { + struct list_head *next = item->next; + struct list_head *prev = item->prev; + if (next != NULL) + next->prev = prev; + if (prev != NULL) + prev->next = next; + item->next = NULL; + item->prev = NULL; +} + +#endif diff --git a/include/rune/util/types.h b/include/rune/util/types.h new file mode 100644 index 0000000..ac92ecb --- /dev/null +++ b/include/rune/util/types.h @@ -0,0 +1,40 @@ +/* + * Rune Game Engine + * Copyright 2024 Danny Holman + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef RUNE_UTIL_TYPES_H +#define RUNE_UTIL_TYPES_H + +#include + +STATIC_ASSERT(sizeof(uint8_t) == 1, "Expected uint8_t to be 1 byte"); +STATIC_ASSERT(sizeof(uint16_t) == 2, "Expected uint16_t to be 2 bytes"); +STATIC_ASSERT(sizeof(uint32_t) == 4, "Expected uint32_t to be 4 bytes"); +STATIC_ASSERT(sizeof(uint64_t) == 8, "Expected uint64_t to be 8 bytes"); + +STATIC_ASSERT(sizeof(int8_t) == 1, "Expected int8_t to be 1 byte"); +STATIC_ASSERT(sizeof(int16_t) == 2, "Expected int16_t to be 2 bytes"); +STATIC_ASSERT(sizeof(int32_t) == 4, "Expected int32_t to be 4 bytes"); +STATIC_ASSERT(sizeof(int64_t) == 8, "Expected int64_t to be 8 bytes"); + +STATIC_ASSERT(sizeof(float) == 4, "Expected float to be 4 bytes"); +STATIC_ASSERT(sizeof(double) == 8, "Expected double to be 8 bytes"); + +#endif diff --git a/include/rune/util/util.h b/include/rune/util/util.h new file mode 100644 index 0000000..dcf45e4 --- /dev/null +++ b/include/rune/util/util.h @@ -0,0 +1,54 @@ +/* + * Rune Game Engine + * Copyright 2024 Danny Holman + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef RUNE_UTIL_UTIL_H +#define RUNE_UTIL_UTIL_H + +#include +#include + +#if defined(__clang__) || defined(__gcc__) + #define STATIC_ASSERT _Static_assert +#else + #define STATIC_ASSERT static_assert +#endif + + +#ifdef REXPORT + #ifdef _MSC_VER + #define RAPI __declspec(dllexport) + #else + #define RAPI __attribute__((visibility("default"))) + #endif +#else + #ifdef _MSC_VER + #define RAPI __declspec(dllexport) + #else + #define RAPI + #endif +#endif + +static inline uint32_t clamp(uint32_t value, float min, float max) { + const uint32_t ret = value < min ? min : value; + return ret > max ? max : ret; +} + +#endif diff --git a/network/make.config b/network/make.config deleted file mode 100644 index 9abce28..0000000 --- a/network/make.config +++ /dev/null @@ -1,7 +0,0 @@ -ifeq ("$(NETWORK)", 1) - -LIBS += - -OBJS += - -endif -- cgit v1.2.3