# Makefile.in COPYRIGHT FUJITSU LIMITED 2015-2016 CC=@CC@ MCC=mpicc BINDIR=@BINDIR@ SBINDIR=@SBINDIR@ prefix=@prefix@ exec_prefix=@exec_prefix@ LIBDIR=@libdir@ MANDIR=@MANDIR@ MCKERNEL_INCDIR=@MCKERNEL_INCDIR@ MCKERNEL_LIBDIR=@MCKERNEL_LIBDIR@ KDIR ?= @KDIR@ ARCH=@ARCH@ CFLAGS=-Wall -O -I. -I$(VPATH)/arch/${ARCH} -I${IHKDIR} -I@abs_builddir@/../../../ihk/linux/include LDFLAGS=@LDFLAGS@ CPPFLAGS_SYSCALL_INTERCEPT=@CPPFLAGS_SYSCALL_INTERCEPT@ LDFLAGS_SYSCALL_INTERCEPT=@LDFLAGS_SYSCALL_INTERCEPT@ RPATH=$(shell echo $(LDFLAGS)|awk '{for(i=1;i<=NF;i++){if($$i~/^-L/){w=$$i;sub(/^-L/,"-Wl,-rpath,",w);print w}}}') VPATH=@abs_srcdir@ TARGET=mcexec libsched_yield ldump2mcdump.so @uncomment_if_ENABLE_MEMDUMP@TARGET+=eclair LIBS=@LIBS@ IHKDIR ?= $(VPATH)/../../../ihk/linux/include/ MCEXEC_LIBS=-lmcexec -lrt -lnuma -pthread -L@abs_builddir@/../../../ihk/linux/user -lihk -Wl,-rpath,$(MCKERNEL_LIBDIR) ENABLE_QLMPI=@ENABLE_QLMPI@ WITH_SYSCALL_INTERCEPT=@WITH_SYSCALL_INTERCEPT@ ifeq ($(ENABLE_QLMPI),yes) MCEXEC_LIBS += -lmpi TARGET+= libqlmpi.so ql_server ql_mpiexec_start ql_mpiexec_finalize ql_talker libqlfort.so endif ifeq ($(WITH_SYSCALL_INTERCEPT),yes) TARGET += syscall_intercept.so endif ifeq ($(ARCH), arm64) CFLAGS += $(foreach i, $(shell seq 1 100), $(addprefix -DPOSTK_DEBUG_ARCH_DEP_, $(i))) CFLAGS += $(foreach i, $(shell seq 1 100), $(addprefix -DPOSTK_DEBUG_TEMP_FIX_, $(i))) endif all: $(TARGET) mcexec: mcexec.c libmcexec.a $(CC) -I${KDIR} $(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) -DLIBDIR=\"$(LIBDIR)\" -fPIE -pie -L. $(MCEXEC_LIBS) -o $@ $^ $(EXTRA_OBJS) $(RPATH) # POSTK_DEBUG_ARCH_DEP_34, eclair arch depend separate. ifeq ($(ARCH), arm64) eclair: eclair.c arch/$(ARCH)/arch-eclair.c $(CC) -I.. -I. -I./arch/$(ARCH)/include -I$(VPATH)/.. -I$(VPATH) -I$(VPATH)/arch/$(ARCH)/include $(CFLAGS) -o $@ $^ $(LIBS) -ldl -lz else eclair: eclair.c arch/$(ARCH)/arch-eclair.c $(CC) -I.. -I$(VPATH) -I$(VPATH)/arch/$(ARCH)/include $(CFLAGS) -o $@ $^ $(LIBS) endif ldump2mcdump.so: ldump2mcdump.c $(CC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $< libsched_yield: libsched_yield.c $(CC) -shared -fPIC -Wl,-soname,sched_yield.so.1 -o libsched_yield.so.1.0.0 $^ -lc -ldl syscall_intercept.so: syscall_intercept.c libsyscall_intercept_arch.a $(CC) $(CPPFLAGS_SYSCALL_INTERCEPT) -g -O2 $(LDFLAGS_SYSCALL_INTERCEPT) -lsyscall_intercept -fpic -shared -L. -lsyscall_intercept_arch $^ -o $@ libsyscall_intercept_arch.a:: +(cd arch/${ARCH}; $(MAKE)) libmcexec.a:: +(cd arch/${ARCH}; $(MAKE)) libqlmpi.so: qlmpilib.c $(MCC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $< libqlfort.so: libqlfort.c $(MCC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $< -ldl ql_server: ql_server.c $(CC) $(CFLAGS) -o $@ $^ ql_mpiexec_start: ql_mpiexec_start.o md5.o $(CC) $^ $(CFLAGS) -pthread -o $@ ql_mpiexec_finalize.o: ql_mpiexec_start.c $(CC) $(CFLAGS) -DQL_MPIEXEC_FINALIZE -c -o $@ $< ql_mpiexec_finalize: ql_mpiexec_finalize.o md5.o $(CC) $^ $(CFLAGS) -pthread -o $@ ql_talker: ql_talker.o $(CC) $^ $(CFLAGS) -o $@ clean:: (cd arch/${ARCH}; $(MAKE) clean) $(RM) $(TARGET) *.o .PHONY: all clean install install:: (cd arch/${ARCH}; $(MAKE) install) mkdir -p -m 755 $(BINDIR) install -m 755 mcexec $(BINDIR) mkdir -p -m 755 $(MCKERNEL_LIBDIR) install -m 755 ldump2mcdump.so $(MCKERNEL_LIBDIR) install -m 755 libsched_yield.so.1.0.0 $(MCKERNEL_LIBDIR) mkdir -p -m 755 $(MANDIR)/man1 install -m 644 mcexec.1 $(MANDIR)/man1/mcexec.1 ifeq ($(ENABLE_QLMPI),yes) install -m 644 ../include/qlmpilib.h $(MCKERNEL_INCDIR) install -m 755 libqlmpi.so $(MCKERNEL_LIBDIR) install -m 755 libqlfort.so $(MCKERNEL_LIBDIR) install -m 755 ql_server $(SBINDIR) install -m 755 ql_mpiexec_start $(BINDIR) install -m 755 ql_mpiexec_finalize $(BINDIR) install -m 755 ql_talker $(SBINDIR) endif ifeq ($(WITH_SYSCALL_INTERCEPT),yes) install -m 755 syscall_intercept.so $(MCKERNEL_LIBDIR) endif @uncomment_if_ENABLE_MEMDUMP@install -m 755 eclair $(BINDIR) @uncomment_if_ENABLE_MEMDUMP@install -m 755 vmcore2mckdump $(BINDIR)