# if there is Makefile.local file then include it ifneq (, $(wildcard Makefile.local)) include Makefile.local endif export CC = gcc export LD = g++ arch = $(shell uname -m) ifdef DEBUG CFLAGS_COMMON = -O1 -g else CFLAGS_COMMON = -O3 endif CFLAGS_COMMON += -fPIC -Wall -Wno-unused-parameter -W -Wshadow -Wpointer-arith -Wwrite-strings -Wuninitialized CFLAGS_COMMON += -DRIB_DIR='"$(PWD)"' CFLAGS = $(CFLAGS_COMMON) -I $(PWD) -I benchmarks/ export LDFLAGS = -lc -lm THIRDPARTYDIR = ../thirdparty OBJ_GZSTREAM = $(THIRDPARTYDIR)/gzstream.o # Optional FFTW support ifdef WITH_FFTW FFTWDIR = $(THIRDPARTYDIR)/fftw/dist CFLAGS += -I $(FFTWDIR)/include -DENABLE_FFTW LDFLAGS += $(FFTWDIR)/lib/libfftw3.a endif # Optional PAPI support ifdef WITH_PAPI PAPIDIR = $(THIRDPARTYDIR)/papi/dist LIBPAPI = $(PAPIDIR)/lib/libpapi.a CFLAGS += -I $(PAPIDIR)/include -DENABLE_PAPI LDFLAGS += $(LIBPAPI) endif # Optional nasm-generated NOPs for cache_artificial code access ifdef WITH_NASM NASMOBJ = ictrash.o CFLAGS += -DENABLE_NASM endif # Optional valgrind support ifdef VALGRIND_PATH CFLAGS += -DENABLE_VALGRIND -I$(VALGRIND_PATH)/include/ endif CXXFLAGS = $(CFLAGS) export CXXFLAGS_BENCHMARKS = $(CFLAGS_BENCHMARKS) SRC_COMPRESS = $(THIRDPARTYDIR)/compress/compress42.c OBJ_COMPRESS = $(THIRDPARTYDIR)/compress/compress42.o SRC_FFT = $(THIRDPARTYDIR)/fft/fft.c OBJ_FFT = $(THIRDPARTYDIR)/fft/fft.o SRC_SFMT = $(THIRDPARTYDIR)/SFMT/SFMT.c OBJ_SFMT = $(THIRDPARTYDIR)/SFMT/SFMT.o CFLAGS_SFMT = -msse2 -DHAVE_SSE2 -DMEXP=607 -O3 SRCS_BENCHMARKS = $(shell find benchmarks/ -name '*.cpp') OBJS_BENCHMARKS = $(SRCS_BENCHMARKS:.cpp=.o) SRCS = rib_core.cpp rib.cpp benchmark.cpp params.cpp config.cpp ribplot.cpp \ $(SRC_COMPRESS) $(SRC_SFMT) $(SRC_FFT) $(SRCS_BENCHMARKS) stack_profile.cpp va2pa.cpp OBJS_COMMON = rib_core.o benchmark.o params.o config.o \ $(OBJ_COMPRESS) $(OBJ_SFMT) stack_profile.o va2pa.o $(NASMOBJ) OBJS_STANDARD = $(OBJS_COMMON) $(OBJ_FFT) OBJS_TC = $(OBJS_COMMON) benchmarks/cache_tc.o OBJS_RIB = $(OBJS_STANDARD) rib.o OBJS_RIBPLOT = $(OBJS_STANDARD) ribplot.o OBJS = $(OBJS_STANDARD) $(OBJS_BENCHMARKS) rib.o ribplot.o BENCHLIB = benchmarks.a TARGETS = rib ribplot rib_tc.a dropcaches $(BENCHLIB) all: .depend $(TARGETS) Makefile $(BENCHLIB): $(OBJS_BENCHMARKS) ar rc $@ $(OBJS_BENCHMARKS) fftw: cd fftw-3.1.1 && ./build.sh papilib: echo "Please run ./build.sh inside papi/" rib: $(OBJS_RIB) $(BENCHLIB) $(LD) -o $@ $(OBJS_RIB) -Wl,--whole-archive $(BENCHLIB) -Wl,--no-whole-archive $(LDFLAGS) rib_tc.a: $(OBJS_TC) ar r $@ $(OBJS_TC) $(LIBPAPI) ribplot: $(OBJS_RIBPLOT) $(BENCHLIB) $(OBJ_GZSTREAM) $(LD) -o $@ $(OBJS_RIBPLOT) $(OBJ_GZSTREAM) -Wl,--whole-archive $(BENCHLIB) -Wl,--no-whole-archive $(LDFLAGS) -lz -Wl,--defsym,_tc_filter_bench=0 ictrash.o: ictrash.asm ifeq ($(arch),x86_64) nasm -f elf64 ictrash.asm else nasm -f elf ictrash.asm endif # development tools #papi: tools/papi.o # $(LD) ${CFLAGS} -o $@ tools/papi.o $(LDFLAGS) coltest: tools/coltest.c ${CC} ${CFLAGS} -o $@ tools/coltest.c $(LDFLAGS) coltest2: tools/coltest2.c ${CC} ${CFLAGS} -I ./papi/dist/include -o $@ tools/coltest2.c -L./papi/dist/lib -static -lpapi scaletest: tools/scaletest.o $(OBJ_FFT) $(LD) -o $@ tools/scaletest.o $(OBJ_FFT) dropcaches: tools/dropcaches.c ${CC} ${CFLAGS} -o $@ tools/dropcaches.c tools/va2patest.o: tools/va2patest.cpp ${CC} -c ${CFLAGS} -o $@ $< va2patest: tools/va2patest.o va2pa.o $(LD) -o $@ $< va2pa.o $(LDFLAGS) $(OBJ_SFMT): $(SRC_SFMT) ${CC} -c ${CFLAGS} ${CFLAGS_SFMT} -o $@ $< .depend: -makedepend -f - -- $(CFLAGS) -- $(SRCS) > .depend 2>/dev/null clean: rm -f *.o $(OBJ_GZSTREAM) $(OBJ_FFT) $(OBJ_COMPRESS) *.a benchmarks/*.o benchmarks/*.a distclean: clean rm -f .depend rm -f $(TARGETS) # DO NOT DELETE include .depend