UNAME_M := $(shell uname -m) ifeq ($(UNAME_M),x86_64) ARCH := ARCHITECTURE_X64 else ifneq ($(filter $(UNAME_M),i686,i386),) ARCH := ARCHITECTURE_X86 else ifneq ($(filter $(UNAME_M),aarch64 arm64),) ARCH := ARCHITECTURE_ARM64 else ifneq ($(filter $(UNAME_M),armv7l armv6l),) ARCH := ARCHITECTURE_ARM32 endif UNAME_E := $(shell [ $$(printf '\01\00' | od -An -tu2) -eq 1 ] && \ echo "little" || echo "big") ifeq ($(UNAME_E),little) ENDIANESS := LITTLE_ENDIAN else ifeq ($(UNAME_E),little) ENDIANESS := BIG_ENDIAN endif UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) OS := OS_MACOS else ifeq ($(UNAME_S),Linux) OS := OS_LINUX endif CC = gcc ifeq ($(CC),clang) COMP := COMPILER_CLANG else ifeq ($(CC),gcc) COMP := COMPILER_GCC endif # -ansi -pedantic -pedantic-errors CFLAGS = -Wno-long-long -Wall -Wextra \ -Wincompatible-pointer-types \ -Wint-conversion -Wformat \ -Wno-strict-prototypes -Wno-missing-field-initializers \ -Wno-unused-function -Wno-unused-parameter -Wno-unused-variable \ -Wno-unused-but-set-variable \ -fno-show-column ifeq ($(COMP),COMPILER_CLANG) CFLAGS += -fno-caret-diagnostics else ifeq ($(COMP),COMPILER_GCC) CFLAGS += -fno-diagnostics-show-caret endif ifeq ($(OS),OS_MACOS) FLAGS = -glldb INCLUDE = LIBS = FRAMEWORKS = else ifeq ($(OS),OS_LINUX) FLAGS = -O3 # -ggdb -DDEBUG=1 -DINTERNAL=1 INCLUDE = -I/usr/include -I/usr/X11R6/include LIBS = -lc -lcrypt -lX11 -lXext -lXrandr FRAMEWORKS = endif EXE = slock VERSION = "\"1.7\"" default: $(EXE) $(EXE): $(EXE).c explicit_bzero.c $(CC) $(CFLAGS) $(FLAGS) \ -D$(ARCH)=1 -D$(ENDIANESS)=1 -D$(OS)=1 -D$(COMP)=1 \ -DVERSION=$(VERSION) -D_DEFAULT_SOURCE -DHAVE_SHADOW_H \ $(INCLUDE) $^ $(LIBS) \ $(FRAMEWORKS) -o $@ $(ifneq $(filter $(OS), OS_MACOS OS_LINUX), \ /link /FORCE:MULTIPLE) watch: @ while true; do \ inotifywait -q -q -e 'modify' . && clear && make -B; \ done perf: perf record --call-graph dwarf ./$(EXE) run: @ clear; ./$(EXE) clean: @ rm -rf $(EXE) $(EXE).dSYM