diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d163863 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..776fa50 --- /dev/null +++ b/Makefile @@ -0,0 +1,92 @@ +# You may have to run this command or something similar +# while in the base directory to please the dynamic linker +# +# $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD/build/dynamic" + +CC = gcc +SHELL := /bin/bash + +INCLUDE := include +CFLAGS = -Wall -I$(INCLUDE) + +BUILD_DIR := build + +STATIC_BUILD_DIR := $(BUILD_DIR)/static +DYNAMIC_BUILD_DIR := $(BUILD_DIR)/dynamic +TEST_BUILD_DIR := $(BUILD_DIR)/test +INCLUDE_INSTALL_PATH := /usr/local/include/lsort +LIB_INSTALL_PATH := /usr/local/lib + +STATIC_BUILD_FILES := $(STATIC_BUILD_DIR)/lsort.o \ + +DYNAMIC_BUILD_FILES := $(DYNAMIC_BUILD_DIR)/lsort.o \ + +TEST_BUILD_FILES := $(TEST_BUILD_DIR)/test.o \ + + + +all: dynamic static + +debug: CFLAGS += -g +debug: server + +dynamic: $(DYNAMIC_BUILD_FILES) + $(CC) -shared -o $(DYNAMIC_BUILD_DIR)/liblsort.so $(DYNAMIC_BUILD_FILES) + +$(DYNAMIC_BUILD_DIR)/%.o: %.c | $(DYNAMIC_BUILD_DIR) + $(CC) $(CFLAGS) -c -fPIC $< -o $@ + + +static: $(STATIC_BUILD_FILES) + ar rcs $(STATIC_BUILD_DIR)/liblsort.a $(STATIC_BUILD_FILES) + +$(STATIC_BUILD_DIR)/%.o: %.c | $(STATIC_BUILD_DIR) + $(CC) $(CFLAGS) -c $< -o $@ + +test: dynamic static $(TEST_BUILD_FILES) + $(CC) $(CFLAGS) -L$(CURDIR)/$(DYNAMIC_BUILD_DIR) -llsort -o $(TEST_BUILD_DIR)/test_dynamic $(TEST_BUILD_FILES) + $(CC) $(CFLAGS) -o $(TEST_BUILD_DIR)/test_static $(TEST_BUILD_FILES) $(STATIC_BUILD_DIR)/liblsort.a + + + @echo "" + @echo "Running dynamic test..." + @echo "" + + LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/build/dynamic ./$(TEST_BUILD_DIR)/test_dynamic + + @echo "" + @echo "Running static test..." + @echo "" + + ./$(TEST_BUILD_DIR)/test_static + +$(TEST_BUILD_DIR)/%.o: test/%.c | $(TEST_BUILD_DIR) + $(CC) $(CFLAGS) -c $< -o $@ + + +$(DYNAMIC_BUILD_DIR): + mkdir -p $(DYNAMIC_BUILD_DIR) + +$(STATIC_BUILD_DIR): + mkdir -p $(STATIC_BUILD_DIR) + +$(TEST_BUILD_DIR): + mkdir -p $(TEST_BUILD_DIR) + +$(INCLUDE_INSTALL_PATH): + mkdir -p $(INCLUDE_INSTALL_PATH) + +$(LIB_INSTALL_PATH): + mkdir -p $(LIB_INSTALL_PATH) + +CLEANUP_BUILD_DIR: + rm -rf $(BUILD_DIR)/*/*.o $(BUILD_DIR)/test + +install: $(INCLUDE_INSTALL_PATH) $(LIB_INSTALL_PATH) CLEANUP_BUILD_DIR + cp $(INCLUDE)/* $(INCLUDE_INSTALL_PATH) + cp $(STATIC_BUILD_DIR)/* $(LIB_INSTALL_PATH) + cp $(DYNAMIC_BUILD_DIR)/* $(LIB_INSTALL_PATH) + ldconfig + +clean: + rm -rf $(BUILD_DIR) diff --git a/include/lsort.h b/include/lsort.h new file mode 100644 index 0000000..0943fc8 --- /dev/null +++ b/include/lsort.h @@ -0,0 +1,6 @@ +#ifndef LSORT_H +#define LSORT_H + +int add(int x, int y); + +#endif \ No newline at end of file diff --git a/lsort.c b/lsort.c new file mode 100644 index 0000000..ec6fdf4 --- /dev/null +++ b/lsort.c @@ -0,0 +1,5 @@ +#include "./include/lsort.h" + +int add(int x, int y) { + return x + y; +} \ No newline at end of file diff --git a/test/test.c b/test/test.c new file mode 100644 index 0000000..a0c0483 --- /dev/null +++ b/test/test.c @@ -0,0 +1,11 @@ +#include "../include/lsort.h" +#include "stdio.h" + +int main(void) { + int x = 5; + int y = 2; + + printf("%d + %d = %d\n", x, y, add(x, y)); + + return 0; +}