blob: 57373afaf6c77f40d2188dc855c5bc2bd5a02657 [file] [log] [blame]
CFLAGS := -g -Os
prefix := /usr
etcprefix :=
MANDIR := ${prefix}/share/man
# Define appropiately for your distribution
# DOCDIR := /usr/share/doc/packages/mcelog
# Note when changing prefix: some of the non-critical files like
# the manpage or the init script have hardcoded prefixes
# Warning flags added implicitely to CFLAGS in the default rule
# this is done so that even when CFLAGS are overriden we still get
# the additional warnings
# Some warnings require the global optimizer and are only output with
# -O2/-Os, so that should be tested occasionally
WARNINGS := -Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter \
-Wstrict-prototypes -Wformat-security -Wmissing-declarations \
-Wdeclaration-after-statement
TRIGGERS=cache-error-trigger dimm-error-trigger page-error-trigger \
socket-memory-error-trigger \
bus-error-trigger \
iomca-error-trigger \
unknown-error-trigger
all: mcelog
.PHONY: install clean depend FORCE
OBJ := p4.o k8.o mcelog.o dmi.o tsc.o core2.o bitfield.o intel.o \
nehalem.o dunnington.o tulsa.o config.o memutil.o msg.o \
eventloop.o leaky-bucket.o memdb.o server.o trigger.o \
client.o cache.o sysfs.o yellow.o page.o rbtree.o \
sandy-bridge.o ivy-bridge.o haswell.o \
broadwell_de.o broadwell_epex.o skylake_xeon.o \
denverton.o \
msr.o bus.o unknown.o
CLEAN := mcelog dmi tsc dbquery .depend .depend.X dbquery.o \
version.o version.c version.tmp
DOC := mce.pdf
ADD_DEFINES :=
SRC := $(OBJ:.o=.c)
mcelog: ${OBJ} version.o
# dbquery intentionally not installed by default
install: mcelog mcelog.conf mcelog.conf.5 mcelog.triggers.5
mkdir -p $(DESTDIR)${etcprefix}/etc/mcelog $(DESTDIR)${prefix}/sbin $(DESTDIR)$(MANDIR)/man5 $(DESTDIR)$(MANDIR)/man8
install -m 755 -p mcelog $(DESTDIR)${prefix}/sbin/mcelog
install -m 644 -p mcelog.8 $(DESTDIR)$(MANDIR)/man8
install -m 644 -p mcelog.conf.5 $(DESTDIR)$(MANDIR)/man5
install -m 644 -p mcelog.triggers.5 $(DESTDIR)$(MANDIR)/man5
install -m 644 -p -b mcelog.conf $(DESTDIR)${etcprefix}/etc/mcelog/mcelog.conf
for i in ${TRIGGERS} ; do \
install -m 755 -p -b triggers/$$i $(DESTDIR)${etcprefix}/etc/mcelog ; \
done
ifdef DOCDIR
install -d 755 $(DESTDIR)${DOCDIR}
install -m 644 -p ${DOC} $(DESTDIR)${DOCDIR}
else
echo
echo "Consider defining DOCDIR to install additional documentation"
endif
mcelog.conf.5: mcelog.conf config-intro.man
./genconfig.py mcelog.conf config-intro.man > mcelog.conf.5
clean: test-clean
rm -f ${CLEAN} ${OBJ}
tsc: tsc.c
$(CC) -o tsc ${CFLAGS} -DSTANDALONE tsc.c ${LDFLAGS}
dbquery: db.o dbquery.o memutil.o
depend: .depend
%.o: %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $(WARNINGS) $(ADD_DEFINES) -o $@ $<
version.tmp: FORCE
( printf "char version[] = \"" ; \
if test -e .os_version; then \
cat .os_version | tr -d '\n' ; \
elif command -v git >/dev/null; then \
if [ -d .git ] ; then \
git describe --tags HEAD | tr -d '\n'; \
else \
printf "unknown" ; \
fi ; \
else \
printf "unknown" ; \
fi ; \
printf '";\n' \
) > version.tmp
version.c: version.tmp
cmp version.tmp version.c || mv version.tmp version.c
.depend: ${SRC}
${CC} -MM -I. ${SRC} > .depend.X && mv .depend.X .depend
include .depend
Makefile: .depend
.PHONY: iccverify src test
# run the icc static verifier over sources. you need the intel compiler installed for this
DISABLED_DIAGS := -diag-disable 188,271,869,2259,981,12072,181,12331,1572
iccverify:
icc -Wall -diag-enable sv3 $(DISABLED_DIAGS) $(ADD_DEFINES) $(SRC)
clangverify:
clang --analyze $(ADD_DEFINES) $(SRC)
src:
echo $(SRC)
config-test: config.c
$(CC) -DTEST=1 config.c -o config-test
test:
$(MAKE) -C tests test DEBUG=""
VALGRIND=valgrind --leak-check=full
valgrind-test:
$(MAKE) -C tests test DEBUG="${VALGRIND}"
test-clean:
$(MAKE) -C tests clean