aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile72
1 files changed, 72 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..1991773
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,72 @@
+MAKEFLAGS += --no-builtin-rules
+
+include config.mak
+
+TARGET = libmg2d.so
+
+TESTPROGS = $(addsuffix _test, \
+ relax \
+ relax_mpi \
+ mg2d \
+ mg2d_mpi \
+)
+
+VPATH = $(SOURCE_DIR)
+
+CFLAGS += -std=c11 -fPIC
+CFLAGS += -g -O3
+CFLAGS += -D_XOPEN_SOURCE=700 # POSIX
+CFLAGS += -D_DEFAULT_SOURCE=1 # for random_r
+CFLAGS += -I. -I$(SOURCE_DIR)
+CFLAGS += $(CFLAGS_DEP)
+
+LDFLAGS_COMMON = $(LDFLAGS_DEP)
+LDFLAGS_COMMON += -lm -llapacke -lblas -lthreadpool -lndarray
+LDFLAGS_TARGET = -shared -Wl,--version-script=$(SOURCE_DIR)/libmg2d.v
+
+OBJS = \
+ bicgstab.c.o \
+ boundary.c.o \
+ components.c.o \
+ cpu.c.o \
+ ell_grid_solve.c.o \
+ log.c.o \
+ mg2d.c.o \
+ residual_calc.c.o \
+ timer.c.o \
+ transfer.c.o
+
+OBJS-$(HAVE_NASM) = \
+ cpuid.asm.o \
+ ndarray.asm.o \
+ residual_calc.asm.o \
+ transfer_interp.asm.o \
+
+OBJS += $(OBJS-yes)
+
+all: $(TARGET)
+
+testprogs: $(TESTPROGS)
+
+$(TARGET) $(TESTPROGS): $(OBJS)
+ $(CC) -o $@ $(OBJS) $(TESTOBJ) $(LDFLAGS_COMMON) $(LDFLAGS)
+
+$(TARGET): LDFLAGS = $(LDFLAGS_TARGET)
+
+$(TESTPROGS): %: %.c.o
+$(TESTPROGS): $(TARGET)
+$(foreach testprog, $(TESTPROGS), $(eval $(testprog): TESTOBJ = $(testprog).c.o))
+
+%.c.o: %.c
+ $(CC) $(CFLAGS) -MMD -MF $(@:.o=.d) -MT $@ -c -o $@ $<
+
+%.asm.o: %.asm
+ nasm -i $(SOURCE_DIR)/ -f elf64 -MD $(@:.o=.d) -MT $@ $<
+ nasm -i $(SOURCE_DIR)/ -f elf64 -o $@ $<
+
+clean:
+ -rm -f *.o *.d *.pyc $(TARGET)
+
+-include $(OBJS:.o=.d)
+
+.PHONY: all testprogs clean