forked from ground/ground
Allow static linking to Ground
This commit is contained in:
9
Makefile
9
Makefile
@@ -1,4 +1,5 @@
|
||||
CC = gcc
|
||||
AR = ar
|
||||
CFLAGS += -Wall -Wextra -Isrc/include -Iinclude -ggdb
|
||||
LDFLAGS += -ldl -rdynamic
|
||||
|
||||
@@ -17,6 +18,7 @@ OBJ_DIR = $(BUILD_DIR)/obj
|
||||
# Output names
|
||||
EXECUTABLE = $(BIN_DIR)/ground
|
||||
SHARED_LIB = $(LIB_DIR)/libgroundvm.so
|
||||
STATIC_LIB = $(LIB_DIR)/libgroundvm.a
|
||||
HEADERS = $(INC_DIR)/groundvm.h $(INC_DIR)/groundext.h
|
||||
|
||||
# Source files
|
||||
@@ -41,7 +43,7 @@ executable: $(EXECUTABLE)
|
||||
|
||||
# Build shared library
|
||||
.PHONY: library
|
||||
library: $(SHARED_LIB) $(HEADERS)
|
||||
library: $(SHARED_LIB) $(STATIC_LIB) $(HEADERS)
|
||||
|
||||
# Build both
|
||||
.PHONY: both
|
||||
@@ -59,6 +61,10 @@ $(EXECUTABLE): $(EXE_OBJECTS) | $(BIN_DIR)
|
||||
$(SHARED_LIB): $(LIB_OBJECTS) | $(LIB_DIR)
|
||||
$(CC) -shared $(LIB_OBJECTS) -o $@ $(LDFLAGS)
|
||||
|
||||
# Build static library
|
||||
$(STATIC_LIB): $(LIB_OBJECTS) | $(LIB_DIR)
|
||||
$(AR) rcs $(STATIC_LIB) $(LIB_OBJECTS)
|
||||
|
||||
# Copy header for library distribution
|
||||
$(INC_DIR)/%.h: include/%.h | $(INC_DIR)
|
||||
cp $< $@
|
||||
@@ -88,6 +94,7 @@ install: both
|
||||
mkdir -p $(DESTDIR)$(PREFIX)/include
|
||||
cp $(EXECUTABLE) $(DESTDIR)$(PREFIX)/bin/
|
||||
cp $(SHARED_LIB) $(DESTDIR)$(PREFIX)/lib/
|
||||
cp $(STATIC_LIB) $(DESTDIR)$(PREFIX)/lib/
|
||||
cp $(HEADERS) $(DESTDIR)$(PREFIX)/include/
|
||||
echo "$(DESTDIR)$(PREFIX)/lib" | tee $(DESTDIR)/etc/ld.so.conf.d/cground.conf
|
||||
ldconfig
|
||||
|
||||
@@ -5,6 +5,42 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
char* getFileContents(const char* filename) {
|
||||
// https://stackoverflow.com/questions/3747086/reading-the-whole-text-file-into-a-char-array-in-c
|
||||
FILE* fp;
|
||||
long lSize;
|
||||
char* file;
|
||||
|
||||
fp = fopen(filename, "rb");
|
||||
if (!fp) {
|
||||
perror(filename);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fseek(fp, 0L, SEEK_END);
|
||||
lSize = ftell(fp);
|
||||
rewind(fp);
|
||||
|
||||
file = calloc(1, lSize + 1);
|
||||
if (!file) {
|
||||
fclose(fp);
|
||||
fputs("memory allocation fail when reading file", stderr);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (1!=fread(file, lSize, 1, fp)) {
|
||||
fclose(fp);
|
||||
free(file);
|
||||
fputs("couldn't read entire file", stderr);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// we done
|
||||
fclose(fp);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
GroundProgram groundCreateProgram() {
|
||||
return (GroundProgram) {
|
||||
|
||||
36
src/main.c
36
src/main.c
@@ -7,41 +7,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
char* getFileContents(const char* filename) {
|
||||
// https://stackoverflow.com/questions/3747086/reading-the-whole-text-file-into-a-char-array-in-c
|
||||
FILE* fp;
|
||||
long lSize;
|
||||
char* file;
|
||||
|
||||
fp = fopen(filename, "rb");
|
||||
if (!fp) {
|
||||
perror(filename);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fseek(fp, 0L, SEEK_END);
|
||||
lSize = ftell(fp);
|
||||
rewind(fp);
|
||||
|
||||
file = calloc(1, lSize + 1);
|
||||
if (!file) {
|
||||
fclose(fp);
|
||||
fputs("memory allocation fail when reading file", stderr);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (1!=fread(file, lSize, 1, fp)) {
|
||||
fclose(fp);
|
||||
free(file);
|
||||
fputs("couldn't read entire file", stderr);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// we done
|
||||
fclose(fp);
|
||||
|
||||
return file;
|
||||
}
|
||||
char* getFileContents(const char* filename);
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
if (argc == 1) {
|
||||
|
||||
Reference in New Issue
Block a user