2009-06-10 09:58:50 +02:00
|
|
|
# Directories
|
2009-06-19 20:53:34 +02:00
|
|
|
OBJDIR:=obj
|
|
|
|
BINDIR:=bin
|
|
|
|
SRCDIR:=src
|
|
|
|
INCDIR:=include
|
|
|
|
LIBDIR:=lib
|
|
|
|
LOGDIR:=logs
|
|
|
|
LOCALDIR:=$(HOME)/local
|
2009-06-25 16:44:46 +02:00
|
|
|
|
|
|
|
# PHL stands for PAPI High Level
|
|
|
|
PHL_LIB_INSTALLDIR:=lib
|
|
|
|
PHL_INC_INSTALLDIR:=lib
|
|
|
|
PHL_LIBDIR:=lib
|
|
|
|
PHL_INCDIR:=include
|
|
|
|
PHLDIR:=../papihighlevel
|
|
|
|
PAPI_LIB_INSTALLDIR:=lib
|
|
|
|
PAPIDIR:=$(PHLDIR)/papi
|
|
|
|
PAPI_LIBDIR:=src
|
|
|
|
PAPI_PFMDIR:=$(PAPI_LIBDIR)/libpfm-3.y/lib
|
2009-06-19 20:53:34 +02:00
|
|
|
CALCDIR:=calculation
|
2009-06-23 12:25:36 +02:00
|
|
|
COMMDIR:=communication
|
2009-06-10 09:58:50 +02:00
|
|
|
|
|
|
|
# Compilation flags
|
|
|
|
# I know -finline-functions and -finline-functions-called-once are enabled by
|
|
|
|
# -O3 but I did this in case gcc behaviour change one day
|
2009-06-24 00:53:31 +02:00
|
|
|
CFLAGS:=-c -O3 -finline-functions -finline-functions-called-once -Wall -Werror
|
2009-06-25 16:44:46 +02:00
|
|
|
LDFLAGS:=-L$(LIBDIR) -L$(LOCALDIR)/$(PHL_LIB_INSTALLDIR) -L$(PHLDIR)/$(PHL_LIBDIR)
|
|
|
|
LDFLAGS:=$(LDFLAGS) -Wl,-rpath-link,$(LOCALDIR)/$(PAPI_LIB_INSTALLDIR):$(PAPIDIR)/$(PAPI_LIBDIR):$(PAPIDIR)/$(PAPI_PFMDIR)
|
|
|
|
LDFLAGS:=$(LDFLAGS) -lpthread -lpapihighlevel -ldl
|
2009-06-10 09:58:50 +02:00
|
|
|
|
|
|
|
# Executables
|
|
|
|
CC=gcc
|
|
|
|
|
|
|
|
# Files
|
2009-06-19 20:53:34 +02:00
|
|
|
BINNAMES:=asm_cache_comm c_cache_comm pipe_comm shared_mem_comm shared_mem_opt_comm jikes_barrier_comm fake_comm
|
2009-06-30 22:37:55 +02:00
|
|
|
CALCLIBSNAMES:=calc_mat calc_useless_loop
|
2009-06-19 20:53:34 +02:00
|
|
|
BINS:=$(patsubst %,$(BINDIR)/%,$(BINNAMES))
|
2009-06-23 12:25:36 +02:00
|
|
|
CALCLIBS:=$(patsubst %,$(LIBDIR)/$(CALCDIR)/lib%.so.1,$(CALCLIBSNAMES))
|
|
|
|
MAIN_OBJS:=main.o
|
2009-06-19 20:53:34 +02:00
|
|
|
COMMON_LIB_OBJS:=common.o
|
|
|
|
|
|
|
|
.PHONY: all tidy clean distclean
|
2009-06-10 09:58:50 +02:00
|
|
|
.SECONDARY:
|
|
|
|
.SUFFIXES: .c .o
|
|
|
|
|
2009-06-19 20:53:34 +02:00
|
|
|
default: $(BINS) $(CALCLIBS)
|
2009-06-10 09:58:50 +02:00
|
|
|
|
|
|
|
# Compilation of binary
|
2009-06-23 12:25:36 +02:00
|
|
|
$(BINDIR)/%_comm: $(patsubst %,$(OBJDIR)/\%/%,$(MAIN_OBJS)) $(LIBDIR)/$(COMMDIR)/lib%.a
|
2009-06-10 09:58:50 +02:00
|
|
|
if [ ! -d $(BINDIR) ] ; then mkdir $(BINDIR) ; fi
|
|
|
|
$(CC) -o $@ $^ $(LDFLAGS)
|
|
|
|
|
2009-06-19 20:53:34 +02:00
|
|
|
# Creation of comm library
|
2009-06-23 12:25:36 +02:00
|
|
|
$(LIBDIR)/$(COMMDIR)/lib%.a: $(OBJDIR)/$(COMMDIR)/%.o $(patsubst %,$(OBJDIR)/$(COMMDIR)/\%/%,$(COMMON_LIB_OBJS))
|
2009-06-10 09:58:50 +02:00
|
|
|
if [ ! -d $(LIBDIR) ] ; then mkdir $(LIBDIR) ; fi
|
2009-06-23 12:25:36 +02:00
|
|
|
if [ ! -d $(LIBDIR)/$(COMMDIR) ] ; then mkdir $(LIBDIR)/$(COMMDIR) ; fi
|
2009-06-10 09:58:50 +02:00
|
|
|
$(AR) -rcus $@ $^
|
|
|
|
|
2009-06-19 20:53:34 +02:00
|
|
|
# Creation of calc library
|
2009-06-23 12:25:36 +02:00
|
|
|
$(LIBDIR)/$(CALCDIR)/libcalc_%.so.1: $(OBJDIR)/$(CALCDIR)/calc_%.o
|
2009-06-19 20:53:34 +02:00
|
|
|
if [ ! -d $(LIBDIR) ] ; then mkdir $(LIBDIR) ; fi
|
2009-06-23 12:25:36 +02:00
|
|
|
if [ ! -d $(LIBDIR)/$(CALCDIR) ] ; then mkdir $(LIBDIR)/$(CALCDIR) ; fi
|
2009-06-25 16:44:46 +02:00
|
|
|
$(CC) -shared -Wl,-soname,libcalc_$*.so.1 -o $@ $<
|
2009-06-23 12:25:36 +02:00
|
|
|
cd $(@D) ; ln -sf libcalc_$*.so.1 libcalc_$*.so
|
2009-06-10 09:58:50 +02:00
|
|
|
|
2009-06-19 20:53:34 +02:00
|
|
|
# Compile lib specific source files
|
2009-06-23 12:25:36 +02:00
|
|
|
$(OBJDIR)/$(COMMDIR)/%.o: $(SRCDIR)/$(COMMDIR)/%.c $(INCDIR)/%_comm.h $(INCDIR)/commtech.h
|
2009-06-10 09:58:50 +02:00
|
|
|
if [ ! -d $(OBJDIR) ] ; then mkdir $(OBJDIR) ; fi
|
2009-06-23 12:25:36 +02:00
|
|
|
if [ ! -d $(OBJDIR)/$(COMMDIR) ] ; then mkdir $(OBJDIR)/$(COMMDIR) ; fi
|
2009-06-19 20:53:34 +02:00
|
|
|
cd $(INCDIR) ; ln -sfT $*_comm.h specific_comm.h
|
2009-06-24 00:53:31 +02:00
|
|
|
$(CC) $(CFLAGS) -I$(INCDIR) $< -o $@
|
2009-06-10 09:58:50 +02:00
|
|
|
|
2009-06-19 20:53:34 +02:00
|
|
|
# Rule for compiling common source files using libcomm is at the end of
|
|
|
|
# this file, after the .SECONDEXPANSION target
|
|
|
|
|
|
|
|
# Compile source files not using libcomm
|
|
|
|
$(OBJDIR)/$(CALCDIR)/%.o: $(SRCDIR)/$(CALCDIR)/%.c
|
|
|
|
if [ ! -d $(OBJDIR) ] ; then mkdir $(OBJDIR) ; fi
|
|
|
|
if [ ! -d $(OBJDIR)/$(CALCDIR) ] ; then mkdir $(OBJDIR)/$(CALCDIR) ; fi
|
2009-06-24 00:53:31 +02:00
|
|
|
$(CC) $(CFLAGS) -I$(INCDIR) $< -o $@
|
2009-06-10 09:58:50 +02:00
|
|
|
|
|
|
|
#.%.d: %.c
|
|
|
|
# gcc $(CFLAGS) -MM $^ | sed -e 's/\([^:]*\):\(.*\)/\1 $@: \2 Makefile/' > $@
|
|
|
|
|
|
|
|
tidy:
|
|
|
|
rm -f $(SRCDIR)/*~ \#*
|
|
|
|
|
|
|
|
clean:
|
|
|
|
rm -f $(INCDIR)/specific_comm.h
|
|
|
|
rm -rf $(OBJDIR)
|
|
|
|
|
2009-06-18 22:16:29 +02:00
|
|
|
logclean:
|
|
|
|
rm -rf $(LOGDIR)
|
|
|
|
|
2009-06-10 09:58:50 +02:00
|
|
|
distclean: clean
|
|
|
|
rm -rf $(BINDIR) $(LIBDIR)
|
|
|
|
|
|
|
|
#ifneq ($(MAKECMDGOALS),tidy)
|
|
|
|
#ifneq ($(MAKECMDGOALS),clean)
|
|
|
|
#ifneq ($(MAKECMDGOALS),distclean)
|
|
|
|
# If the rules called is not a phony rules, then include the %.d makefile
|
|
|
|
# corresponding to all objects
|
|
|
|
#include $(patsubst %.o, .%.d, $(OBJ))
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
2009-06-19 20:53:34 +02:00
|
|
|
|
|
|
|
.SECONDEXPANSION:
|
|
|
|
|
|
|
|
# Compile common source files using libcomm
|
2009-06-23 12:25:36 +02:00
|
|
|
$(OBJDIR)/$(COMMDIR)/%.o: $(SRCDIR)/$(COMMDIR)/$$(*F).c $(INCDIR)/$$(*D)_comm.h $(INCDIR)/commtech.h
|
|
|
|
if [ ! -d $(OBJDIR) ] ; then mkdir $(OBJDIR) ; fi
|
|
|
|
if [ ! -d $(OBJDIR)/$(COMMDIR) ] ; then mkdir $(OBJDIR)/$(COMMDIR) ; fi
|
|
|
|
if [ ! -d $(OBJDIR)/$(COMMDIR)/$(*D) ] ; then mkdir $(OBJDIR)/$(COMMDIR)/$(*D) ; fi
|
|
|
|
cd $(INCDIR) ; ln -sfT $(*D)_comm.h specific_comm.h
|
2009-06-25 16:44:46 +02:00
|
|
|
$(CC) $(CFLAGS) -I$(INCDIR) $< -o $@
|
2009-06-23 12:25:36 +02:00
|
|
|
|
2009-06-19 20:53:34 +02:00
|
|
|
$(OBJDIR)/%.o: $(SRCDIR)/$$(*F).c $(INCDIR)/$$(*D)_comm.h $(INCDIR)/commtech.h
|
|
|
|
if [ ! -d $(OBJDIR) ] ; then mkdir $(OBJDIR) ; fi
|
|
|
|
if [ ! -d $(OBJDIR)/$(*D) ] ; then mkdir $(OBJDIR)/$(*D) ; fi
|
|
|
|
cd $(INCDIR) ; ln -sfT $(*D)_comm.h specific_comm.h
|
2009-06-25 16:44:46 +02:00
|
|
|
$(CC) $(CFLAGS) -I$(INCDIR) -I$(LOCALDIR)/$(PHL_INCDIR) -I../$(PHLDIR)/$(PHL_INCDIR) $< -o $@
|