summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--example/libfib/Makefile12
-rw-r--r--example/libfib/fib.c11
-rw-r--r--example/libfib/fib.h9
-rw-r--r--example/libfib/fib.obin0 -> 640 bytes
-rw-r--r--example/libfib/libfib.abin0 -> 824 bytes
-rwxr-xr-xexample/libfib/libfib.so.1.1bin0 -> 16784 bytes
-rw-r--r--example/test/Makefile13
-rw-r--r--example/test/main.c8
l---------example/tools1
-rw-r--r--mk/mcd.lib.mk34
-rw-r--r--mk/mcd.prog.mk27
11 files changed, 115 insertions, 0 deletions
diff --git a/example/libfib/Makefile b/example/libfib/Makefile
new file mode 100644
index 0000000..c610923
--- /dev/null
+++ b/example/libfib/Makefile
@@ -0,0 +1,12 @@
+LIB = fib
+SHLIB_MAJOR = 1
+SHLIB_MINOR = 1
+CFLAGS = -Wall \
+ -Werror \
+ -Wextra \
+ -Wpedantic \
+ -std=c17
+SRCS = fib.c
+
+include ../tools/mcd.lib.mk
+
diff --git a/example/libfib/fib.c b/example/libfib/fib.c
new file mode 100644
index 0000000..707215d
--- /dev/null
+++ b/example/libfib/fib.c
@@ -0,0 +1,11 @@
+#include "fib.h"
+
+uint64_t fib(const uint64_t n) {
+ if (n <= 0) {
+ return 0;
+ } else if (n == 1) {
+ return 1;
+ }
+ return (fib(n - 1) + fib(n - 2));
+}
+
diff --git a/example/libfib/fib.h b/example/libfib/fib.h
new file mode 100644
index 0000000..66615c5
--- /dev/null
+++ b/example/libfib/fib.h
@@ -0,0 +1,9 @@
+#ifndef FIB_H_
+#define FIB_H_
+
+#include <stdint.h>
+
+uint64_t fib(uint64_t);
+
+#endif // FIB_H_
+
diff --git a/example/libfib/fib.o b/example/libfib/fib.o
new file mode 100644
index 0000000..9380b6f
--- /dev/null
+++ b/example/libfib/fib.o
Binary files differ
diff --git a/example/libfib/libfib.a b/example/libfib/libfib.a
new file mode 100644
index 0000000..1fe78c4
--- /dev/null
+++ b/example/libfib/libfib.a
Binary files differ
diff --git a/example/libfib/libfib.so.1.1 b/example/libfib/libfib.so.1.1
new file mode 100755
index 0000000..2ed114c
--- /dev/null
+++ b/example/libfib/libfib.so.1.1
Binary files differ
diff --git a/example/test/Makefile b/example/test/Makefile
new file mode 100644
index 0000000..5b29575
--- /dev/null
+++ b/example/test/Makefile
@@ -0,0 +1,13 @@
+PROG = main
+SRCS = main.c
+CFLAGS = -Wall \
+ -Werror \
+ -Wextra \
+ -Wpedantic \
+ -I../libfib \
+ -std=c17
+LDFLAGS = -L../libfib \
+ -lfib
+
+include ../tools/mcd.prog.mk
+
diff --git a/example/test/main.c b/example/test/main.c
new file mode 100644
index 0000000..9580704
--- /dev/null
+++ b/example/test/main.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include "fib.h"
+
+int main(void) {
+ printf("fib(9) = %llu\n", fib(9));
+ return 0;
+}
+
diff --git a/example/tools b/example/tools
new file mode 120000
index 0000000..add5f73
--- /dev/null
+++ b/example/tools
@@ -0,0 +1 @@
+../mk \ No newline at end of file
diff --git a/mk/mcd.lib.mk b/mk/mcd.lib.mk
new file mode 100644
index 0000000..433e501
--- /dev/null
+++ b/mk/mcd.lib.mk
@@ -0,0 +1,34 @@
+OBJS = $(patsubst %.cxx, %.o, \
+ $(patsubst %.cpp, %.o, \
+ $(patsubst %.cc, %.o, \
+ $(patsubst %.c, %.o, $(SRCS)))))
+
+all: lib$(LIB).a lib$(LIB).so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
+
+lib$(LIB).a: $(OBJS)
+ $(AR) rcs $@ $^
+
+ifneq ($(SHLIB_MAJOR)$(SHLIB_MINOR),)
+SHLIB_CMD = $(CC) $(LDFLAGS) -shared -fPIC -o $@ $^
+endif
+
+lib$(LIB).so.$(SHLIB_MAJOR).$(SHLIB_MINOR): $(OBJS)
+ $(SHLIB_CMD)
+
+clean:
+ rm -rf $(OBJS) lib$(LIB).a lib$(LIB).so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c $< -o $@
+
+%.o: %.cxx
+ $(CXX) $(CXXFLAGS) -c $< -o $@
+
+%.o: %.cpp
+ $(CXX) $(CXXFLAGS) -c $< -o $@
+
+%.o: %.cc
+ $(CXX) $(CXXFLAGS) -c $< -o $@
+
+.PHONY: all clean
+
diff --git a/mk/mcd.prog.mk b/mk/mcd.prog.mk
new file mode 100644
index 0000000..5ce212a
--- /dev/null
+++ b/mk/mcd.prog.mk
@@ -0,0 +1,27 @@
+OBJS = $(patsubst %.cxx, %.o, \
+ $(patsubst %.cpp, %.o, \
+ $(patsubst %.cc, %.o, \
+ $(patsubst %.c, %.o, $(SRCS)))))
+
+all: $(PROG)
+
+$(PROG): $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $^
+
+clean:
+ rm -rf $(PROG) $(OBJS)
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c $^ -o $@
+
+%.o: %.cxx
+ $(CXX) $(CXXFLAGS) -c $^ -o $@
+
+%.o: %.cpp
+ $(CXX) $(CXXFLAGS) -c $^ -o $@
+
+%.o: %.cc
+ $(CXX) $(CXXFLAGS) -c $^ -o $@
+
+.PHONY: all clean
+