diff options
Diffstat (limited to 'src/Makefile')
-rw-r--r-- | src/Makefile | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..4f67ca3 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,128 @@ +# +# Notes: +# +# * Compilation Defines: +# +# FAKE_STAT +# - Enables time faking also for files' timestamps. +# +# NO_ATFILE +# - Disables support for the fstatat() group of functions +# +# PTHREAD_SINGLETHREADED_TIME +# - Define this if you want to single-thread time() ... there ARE +# possible caching side-effects in a multithreaded environment +# without this, but the performance impact may require you to +# try it unsynchronized. +# +# FAKE_INTERNAL_CALLS +# - Also intercept libc internal __functions, e.g. not just time(), +# but also __time(). Enhances compatibility with applications +# that make use of low-level system calls, such as Java Virtual +# Machines. +# +# FAKE_SLEEP +# - Also intercept sleep(), nanosleep(), usleep(), alarm(), [p]poll() +# +# FAKE_TIMERS +# - Also intercept timer_settime() and timer_gettime() +# +# FAKE_PTHREAD +# - Intercept pthread_cond_timedwait +# +# FAKE_SETTIME +# - Intercept clock_settime(), settimeofday(), and adjtime() +# +# FORCE_MONOTONIC_FIX +# - If the test program hangs forever on +# " pthread_cond_timedwait: CLOCK_MONOTONIC test +# (Intentionally sleeping 1 second...) " +# then add -DFORCE_MONOTONIC_FIX to CFLAGS and recompile. +# (This is a platform-specific issue we cannot handle at run-time.) +# +# MULTI_ARCH +# - If MULTI_ARCH is set, the faketime wrapper program will put a literal +# $LIB into the LD_PRELOAD environment variable it creates, which makes +# ld automatically choose the correct library version to use for the +# target binary. Use for Linux platforms with Multi-Arch support only! +# +# * Compilation addition: second libMT target added for building the pthread- +# enabled library as a separate library +# +# * Compilation switch change: previous versions compiled using '-nostartfiles' +# This is no longer the case since there is a 'startup' constructor for the library +# which is used to activate the start-at times when specified. This also initializes +# the dynamic disabling of the FAKE_STAT calls. +# +# By default, libfaketime will be compiled for your system's default architecture. +# To build 32-bit libraries and binaries, add -m32 to CFLAGS and LDFLAGS. +# +# Change PREFIX to where you want libfaketime (libraries and wrapper binary) installed. +# LIBDIRNAME is relative to PREFIX. The default is to install into $PREFIX/lib/faketime, +# but you can set LIBDIRNAME to, e.g., /lib64 if you want to install it elsewhere. +# LIBDIRNAME has been introduced to support MultiLib systems. Please do not change the +# default value on MultiArch systems. +# +# For testing in the current directory without installation, try make PREFIX= LIBDIRNAME='.' + +CC ?= gcc +INSTALL ?= install + +PREFIX ?= /usr/local +LIBDIRNAME ?= /lib/faketime +PLATFORM ?=$(shell uname) + +CFLAGS += -std=gnu99 -Wall -Wextra -Werror -Wno-nonnull-compare -DFAKE_PTHREAD -DFAKE_STAT -DFAKE_SLEEP -DFAKE_TIMERS -DFAKE_INTERNAL_CALLS -fPIC -DPREFIX='"'$(PREFIX)'"' -DLIBDIRNAME='"'$(LIBDIRNAME)'"' $(FAKETIME_COMPILE_CFLAGS) +ifeq ($(PLATFORM),SunOS) +CFLAGS += -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 +endif + +LIB_LDFLAGS += -shared + +LDFLAGS += -lpthread +ifneq ($(PLATFORM),SunOS) +LDFLAGS += -Wl,--version-script=libfaketime.map +endif + +LDADD += -ldl -lm -lrt +BIN_LDFLAGS += -lrt + +SRC = libfaketime.c +LIBS_OBJ = libfaketime.o libfaketimeMT.o +BINS = faketime + +SONAME = 1 +LIBS = libfaketime.so.${SONAME} libfaketimeMT.so.${SONAME} + +all: ${LIBS} ${BINS} + +libfaketimeMT.o: EXTRA_FLAGS := -DPTHREAD_SINGLETHREADED_TIME + +${LIBS_OBJ}: libfaketime.c + ${CC} -o $@ -c ${CFLAGS} ${CPPFLAGS} ${EXTRA_FLAGS} $< + +%.so.${SONAME}: %.o libfaketime.map + ${CC} -o $@ -Wl,-soname,$@ ${LDFLAGS} ${LIB_LDFLAGS} $< ${LDADD} + +${BINS}: faketime.c + ${CC} -o $@ ${CFLAGS} ${CPPFLAGS} ${EXTRA_FLAGS} $< ${LDFLAGS} ${BIN_LDFLAGS} + +clean: + @rm -f ${LIBS_OBJ} ${LIBS} ${BINS} + +distclean: clean + @echo + +install: ${LIBS} ${BINS} + @echo + @echo "Copying the faketime libraries to ${DESTDIR}${PREFIX}${LIBDIRNAME} and the faketime wrapper script to ${DESTDIR}${PREFIX}/bin ..." + $(INSTALL) -dm0755 "${DESTDIR}${PREFIX}${LIBDIRNAME}/" + $(INSTALL) -m0644 ${LIBS} "${DESTDIR}${PREFIX}${LIBDIRNAME}/" + $(INSTALL) -Dm0755 faketime "${DESTDIR}${PREFIX}/bin/faketime" + +uninstall: + for f in ${LIBS}; do rm -f "${DESTDIR}${PREFIX}${LIBDIRNAME}/$$f"; done + rmdir "${DESTDIR}${PREFIX}${LIBDIRNAME}" + rm -f "${DESTDIR}${PREFIX}/bin/faketime" + +.PHONY: all clean distclean install uninstall |