1# 2# Copyright (c) 2009-2020 Intel Corporation 3# written by Roman Dementiev and Jim Harris 4# 5 6EXE = pcm.x pcm-numa.x pcm-latency.x pcm-power.x pcm-sensor.x pcm-msr.x pcm-memory.x pcm-tsx.x pcm-pcie.x pcm-core.x pcm-iio.x pcm-lspci.x pcm-pcicfg.x 7 8EXE += pcm-mmio.x 9 10EXE += c_example.x 11EXE += c_example_shlib.x 12 13EXE += pcm-raw.x 14 15UNAME:=$(shell uname) 16 17ifeq ($(UNAME), Linux) 18EXE += daemon-binaries 19endif 20 21COMMON_FLAGS = -Wall -g -O3 -Wno-unknown-pragmas -fPIC 22CFLAGS += $(COMMON_FLAGS) 23CXXFLAGS += $(COMMON_FLAGS) -std=c++11 24 25# uncomment if your Linux kernel supports access to /dev/mem from user space 26# CXXFLAGS += -DPCM_USE_PCI_MM_LINUX 27 28# rely on Linux perf support (user needs CAP_SYS_ADMIN privileges), comment out to disable 29ifneq ($(wildcard /usr/include/linux/perf_event.h),) 30CXXFLAGS += -DPCM_USE_PERF 31endif 32 33ifeq ($(UNAME), Linux) 34CFLAGS += -pthread 35LIB= -lpthread -lrt 36EXE += pcm-sensor-server.x 37CXXFLAGS += -Wextra -pthread 38OPENSSL_LIB= 39# Disabling until we can properly check for dependencies, enable 40# yourself if you have the required headers and library installed 41#CXXFLAGS += -DUSE_SSL 42#OPENSSL_LIB=-lssl -lcrypto -lz -ldl 43endif 44ifeq ($(UNAME), DragonFly) 45LIB= -pthread -lrt 46endif 47ifeq ($(UNAME), Darwin) 48LIB= -lpthread MacMSRDriver/build/Release/libPcmMsr.dylib 49CXXFLAGS += -I/usr/include -IMacMSRDriver 50endif 51ifeq ($(UNAME), FreeBSD) 52CXX=c++ 53LIB= -lpthread -lc++ 54endif 55 56COMMON_OBJS = msr.o cpucounters.o pci.o mmio.o bw.o utils.o topology.o dashboard.o debug.o threadpool.o resctrl.o simdjson_wrapper.o 57# export some variables 58export CFLAGS CXXFLAGS LDFLAGS 59 60EXE_OBJS = $(EXE:.x=.o) 61OBJS = $(COMMON_OBJS) $(EXE_OBJS) 62 63# ensure 'make' does not delete the intermediate .o files 64.PRECIOUS: $(OBJS) 65 66all: $(EXE) lib 67 68lib: libPCM.a 69 70daemon-binaries: 71 $(MAKE) -C daemon/daemon/Debug 72 $(MAKE) -C daemon/client/Debug 73 74klocwork: $(EXE) 75 76ifneq ($(MAKECMDGOALS),clean) 77-include $(OBJS:.o=.d) 78endif 79libPCM.a: $(COMMON_OBJS) 80 ar -rcs $@ $^ 81 82%.x: %.o $(COMMON_OBJS) 83 $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIB) 84 85pcm-sensor-server.o: pcm-sensor-server.cpp favicon.ico.h 86 87pcm-sensor-server.x: pcm-sensor-server.o $(COMMON_OBJS) 88 $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIB) $(OPENSSL_LIB) 89 90libpcm.so: $(COMMON_OBJS) pcm-core.o 91 $(CXX) $(CXXFLAGS) $(LDFLAGS) -DPCM_SILENT -shared $^ $(LIB) -o $@ 92 93c_example.x: c_example.c libpcm.so 94 $(CC) $(CFLAGS) $(LDFLAGS) -DPCM_DYNAMIC_LIB $< -ldl -Wl,-rpath,$(shell pwd) -o $@ 95 96c_example_shlib.x: c_example.c libpcm.so 97 $(CC) $(CFLAGS) $(LDFLAGS) $< -L./ -Wl,-rpath,$(shell pwd) -lpcm -o $@ 98 99%.o: %.cpp 100 $(CXX) $(CXXFLAGS) -c $*.cpp -o $*.o 101 @# the following lines generate dependency files for the 102 @# target object 103 @# from http://scottmcpeak.com/autodepend/autodepend.html 104 $(CXX) -MM $(CXXFLAGS) $*.cpp > $*.d 105 @# these sed/fmt commands modify the .d file to add a target 106 @# rule for each .h and .cpp file with no dependencies; 107 @# this will force 'make' to rebuild any objects that 108 @# depend on a file that has been renamed rather than 109 @# exiting with an error 110 @mv -f $*.d $*.d.tmp 111 @sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d 112 @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \ 113 sed -e 's/^ *//' -e 's/$$/:/' >> $*.d 114 @rm -f $*.d.tmp 115 116memoptest.x: memoptest.cpp 117 $(CXX) -Wall -g -O0 -std=c++11 memoptest.cpp -o memoptest.x 118 119dashboardtest.x: dashboardtest.cpp $(COMMON_OBJS) 120 $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIB) 121 122prefix=/usr 123 124ifneq ($(DESTDIR),) 125 prefix=${DESTDIR}/usr 126endif 127 128install: all 129 mkdir -p ${prefix}/sbin/ 130 install -m 755 pcm-core.x ${prefix}/sbin/pcm-core 131 install -m 755 pcm-iio.x ${prefix}/sbin/pcm-iio 132 install -m 755 pcm-latency.x ${prefix}/sbin/pcm-latency 133 install -m 755 pcm-lspci.x ${prefix}/sbin/pcm-lspci 134 install -m 755 pcm-memory.x ${prefix}/sbin/pcm-memory 135 install -m 755 pcm-msr.x ${prefix}/sbin/pcm-msr 136 install -m 755 pcm-mmio.x ${prefix}/sbin/pcm-mmio 137 install -m 755 pcm-numa.x ${prefix}/sbin/pcm-numa 138 install -m 755 pcm-pcicfg.x ${prefix}/sbin/pcm-pcicfg 139 install -m 755 pcm-pcie.x ${prefix}/sbin/pcm-pcie 140 install -m 755 pcm-power.x ${prefix}/sbin/pcm-power 141 install -m 755 pcm-sensor.x ${prefix}/sbin/pcm-sensor 142 install -m 755 pcm-tsx.x ${prefix}/sbin/pcm-tsx 143 install -m 755 pcm-raw.x ${prefix}/sbin/pcm-raw 144 install -m 755 pcm.x ${prefix}/sbin/pcm 145ifeq ($(UNAME), Linux) 146 mkdir -p ${prefix}/bin/ 147 install -m 755 daemon/client/Debug/client ${prefix}/bin/pcm-client 148 install -m 755 daemon/daemon/Debug/daemon ${prefix}/sbin/pcm-daemon 149 install -m 755 pcm-sensor-server.x ${prefix}/sbin/pcm-sensor-server 150endif 151 install -m 755 pcm-bw-histogram.sh ${prefix}/sbin/pcm-bw-histogram 152 mkdir -p ${prefix}/share/pcm/ 153 install -m 644 opCode*.txt ${prefix}/share/pcm/ 154 155clean: 156 rm -rf *.x *.o *~ *.d *.a *.so 157ifeq ($(UNAME), Linux) 158 $(MAKE) -C daemon/daemon/Debug clean 159 $(MAKE) -C daemon/client/Debug clean 160endif 161