1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
|
# SPDX-License-Identifier: GPL-2.0-or-later
include feature/test-feature.mak
VERSION = 2.8
CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)ar
OBJDIR = bld
sources = cyclictest.c \
hackbench.c \
pip_stress.c \
pi_stress.c \
pmqtest.c \
ptsematest.c \
rt-migrate-test.c \
signaltest.c \
sigwaittest.c \
svsematest.c \
cyclicdeadline.c \
deadline_test.c \
queuelat.c \
ssdd.c \
oslat.c
TARGETS = $(sources:.c=)
LIBS = -lrt -lpthread
RTTESTLIB = -lrttest -L$(OBJDIR)
EXTRA_LIBS ?= -ldl # for get_cpu
RTTESTNUMA = -lrttestnuma -lnuma
DESTDIR ?=
prefix ?= /usr/local
sbindir ?= $(prefix)/sbin
bindir ?= $(prefix)/bin
mandir ?= $(prefix)/share/man
CFLAGS ?= -Wall -Werror -Wno-nonnull -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-error=format-truncation= -Wno-error=unused-result
CPPFLAGS += -D_GNU_SOURCE -Isrc/include
LDFLAGS ?=
# Check for optional libcpupower dependency
ifneq ($(no_libcpupower), 1)
ifeq ($(call test-feature,libcpupower), 0)
CPPFLAGS += -DHAVE_LIBCPUPOWER_SUPPORT
LIBCPUPOWER += -lcpupower
else
$(warning libcpupower is missing, building without --deepest-idle-state support.)
$(warning Please install libcpupower-dev/kernel-tools-libs-devel)
endif
else
$(warning libcpupower disabled, building without --deepest-idle-state support.)
endif
MANPAGES = src/cyclictest/cyclictest.8 \
src/pi_tests/pi_stress.8 \
src/ptsematest/ptsematest.8 \
src/rt-migrate-test/rt-migrate-test.8 \
src/sigwaittest/sigwaittest.8 \
src/svsematest/svsematest.8 \
src/pmqtest/pmqtest.8 \
src/hackbench/hackbench.8 \
src/signaltest/signaltest.8 \
src/pi_tests/pip_stress.8 \
src/queuelat/queuelat.8 \
src/queuelat/determine_maximum_mpps.8 \
src/sched_deadline/deadline_test.8 \
src/ssdd/ssdd.8 \
src/sched_deadline/cyclicdeadline.8 \
src/oslat/oslat.8 \
src/cyclictest/get_cyclictest_snapshot.8 \
src/hwlatdetect/hwlatdetect.8
ifeq ($(MAN_COMPRESSION),gzip)
MANPAGES := $(MANPAGES:.8=.8.gz)
else ifeq ($(MAN_COMPRESSION),bzip2)
MANPAGES := $(MANPAGES:.8=.8.bz2)
endif
ifndef DEBUG
CFLAGS += -O2 -g
else
CFLAGS += -O0 -g
endif
# We make some gueses on how to compile rt-tests based on the machine type
# and the ostype. These can often be overridden.
dumpmachine := $(shell $(CC) -dumpmachine)
# The ostype is typically something like linux or android
ostype := $(lastword $(subst -, ,$(dumpmachine)))
machinetype := $(shell echo $(dumpmachine)| \
sed -e 's/-.*//' -e 's/i.86/i386/' -e 's/mips.*/mips/' -e 's/ppc.*/powerpc/')
include src/arch/android/Makefile
VPATH = src/cyclictest:
VPATH += src/signaltest:
VPATH += src/pi_tests:
VPATH += src/rt-migrate-test:
VPATH += src/ptsematest:
VPATH += src/sigwaittest:
VPATH += src/svsematest:
VPATH += src/pmqtest:
VPATH += src/lib:
VPATH += src/hackbench:
VPATH += src/sched_deadline:
VPATH += src/queuelat:
VPATH += src/ssdd:
VPATH += src/oslat:
$(OBJDIR)/%.o: %.c | $(OBJDIR)
$(CC) -D VERSION=$(VERSION) -c $< $(CFLAGS) $(CPPFLAGS) -o $@
# Pattern rule to generate dependency files from .c files
$(OBJDIR)/%.d: %.c | $(OBJDIR)
@$(CC) -MM $(CFLAGS) $(CPPFLAGS) $< | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ || rm -f $@
.PHONY: all
all: $(TARGETS) hwlatdetect get_cyclictest_snapshot | $(OBJDIR)
$(OBJDIR):
mkdir $(OBJDIR)
# Include dependency files, automatically generate them if needed.
-include $(addprefix $(OBJDIR)/,$(sources:.c=.d))
cyclictest: $(OBJDIR)/cyclictest.o $(OBJDIR)/librttest.a $(OBJDIR)/librttestnuma.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(RTTESTNUMA) $(LIBCPUPOWER)
cyclicdeadline: $(OBJDIR)/cyclicdeadline.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB)
deadline_test: $(OBJDIR)/deadline_test.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB)
signaltest: $(OBJDIR)/signaltest.o $(OBJDIR)/librttest.a $(OBJDIR)/librttestnuma.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(RTTESTNUMA)
pi_stress: $(OBJDIR)/pi_stress.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB)
hwlatdetect: src/hwlatdetect/hwlatdetect.py
chmod +x src/hwlatdetect/hwlatdetect.py
ln -s src/hwlatdetect/hwlatdetect.py hwlatdetect
get_cyclictest_snapshot: src/cyclictest/get_cyclictest_snapshot.py
chmod +x src/cyclictest/get_cyclictest_snapshot.py
ln -s src/cyclictest/get_cyclictest_snapshot.py get_cyclictest_snapshot
rt-migrate-test: $(OBJDIR)/rt-migrate-test.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB)
ptsematest: $(OBJDIR)/ptsematest.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(EXTRA_LIBS)
sigwaittest: $(OBJDIR)/sigwaittest.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(EXTRA_LIBS)
svsematest: $(OBJDIR)/svsematest.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(EXTRA_LIBS)
pmqtest: $(OBJDIR)/pmqtest.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(EXTRA_LIBS)
pip_stress: $(OBJDIR)/pip_stress.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB)
hackbench: $(OBJDIR)/hackbench.o
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS)
queuelat: $(OBJDIR)/queuelat.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB)
ssdd: $(OBJDIR)/ssdd.o $(OBJDIR)/librttest.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB)
oslat: $(OBJDIR)/oslat.o $(OBJDIR)/librttest.a $(OBJDIR)/librttestnuma.a
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(RTTESTNUMA)
%.8.gz: %.8
gzip -nc $< > $@
%.8.bz2: %.8
bzip2 -c $< > $@
LIBOBJS =$(addprefix $(OBJDIR)/,rt-error.o rt-get_cpu.o rt-sched.o rt-utils.o \
histogram.o)
$(OBJDIR)/librttest.a: $(LIBOBJS)
$(AR) rcs $@ $^
LIBNUMAOBJS =$(addprefix $(OBJDIR)/,rt-numa.o)
$(OBJDIR)/librttestnuma.a: $(LIBNUMAOBJS)
$(AR) rcs $@ $^
CLEANUP = $(TARGETS) *.o .depend *.*~ *.orig *.rej *.d *.a *.8.gz *.8.bz2
CLEANUP += $(if $(wildcard .git), ChangeLog)
.PHONY: clean
clean:
for F in $(CLEANUP); do find -type f -name $$F | xargs rm -f; done
rm -f rt-tests-*.tar
rm -f hwlatdetect
rm -f get_cyclictest_snapshot
rm -f tags
RPMDIRS = BUILD BUILDROOT RPMS SRPMS SPECS
.PHONY: distclean
distclean: clean
rm -rf $(RPMDIRS) releases *.tar.gz *.tar.asc tmp
.PHONY: rebuild
rebuild:
$(MAKE) clean
$(MAKE) all
.PHONY: install
install: all install_manpages install_hwlatdetect install_get_cyclictest_snapshot
mkdir -p "$(DESTDIR)$(bindir)"
cp $(TARGETS) "$(DESTDIR)$(bindir)"
install src/queuelat/determine_maximum_mpps.sh "${DESTDIR}${bindir}/determine_maximum_mpps"
.PHONY: install_hwlatdetect
install_hwlatdetect: hwlatdetect
mkdir -p "$(DESTDIR)$(sbindir)"
install -D -m 755 src/hwlatdetect/hwlatdetect.py $(DESTDIR)$(sbindir)/hwlatdetect
.PHONY: install_get_cyclictest_snapshot
install_get_cyclictest_snapshot: get_cyclictest_snapshot
mkdir -p "${DESTDIR}${sbindir}"
install -D -m 755 src/cyclictest/get_cyclictest_snapshot.py $(DESTDIR)$(sbindir)/get_cyclictest_snapshot
.PHONY: install_manpages
install_manpages: $(MANPAGES)
mkdir -p "$(DESTDIR)$(mandir)/man8"
cp $(MANPAGES) "$(DESTDIR)$(mandir)/man8"
.PHONY: tarball
tarball:
git archive --worktree-attributes --prefix=rt-tests-${VERSION}/ -o rt-tests-${VERSION}.tar v${VERSION}
.PHONY: help
help:
@echo ""
@echo " rt-tests useful Makefile targets:"
@echo ""
@echo " all : build all tests (default"
@echo " install : install tests to local filesystem"
@echo " clean : remove object files"
@echo " distclean : remove all generated files"
@echo " tarball : make a rt-tests tarball suitable for release"
@echo " help : print this message"
# Universal Ctags warns about the backward compatible option '--extra' and
# wants it to be called '--extras'.
CTAGS_BIN = ctags
CTAGS_EXTRA := $(shell $(CTAGS_BIN) --version 2>&1 | grep -iq universal && echo extras || echo extra)
.PHONY: tags
tags:
$(CTAGS_BIN) -R --$(CTAGS_EXTRA)=+f --c-kinds=+p --exclude=tmp --exclude=BUILD *
|