Makefile (1619B)
1 # User-defined variables 2 3 PREFIX ?= /usr/local 4 BINDIR ?= $(PREFIX)/bin 5 INCDIR ?= $(PREFIX)/include 6 BINMODE ?= 755 7 LIBMODE ?= 644 8 DOCMODE ?= 644 9 10 BINSUFFIX ?= 11 12 # Programs used 13 14 PKG_CONFIG := pkg-config 15 RM := rm -rf 16 MKDIR := mkdir 17 INSTALL := install 18 19 # Other variables 20 21 SRCDIR = src 22 OBJDIR = build 23 HDIR = include 24 25 SRC_FILES = $(shell find $(SRCDIR) -name '*.c' -printf "%P ") 26 27 LIBS = "OpenCL >= 3.0 libpng >= 1.6.44" 28 OBJS = $(addprefix $(OBJDIR)/,$(SRC_FILES:c=o)) 29 30 # CFLAGS 31 32 debug: CFLAGS = -g -O0 33 debug: WFLAGS = -Werror 34 release: CFLAGS = -O2 35 release: WFLAGS = -Wall -Wextra -Werror -Wpedantic 36 37 RCFLAGS = -c $(CFLAGS) $(WFLAGS) -std=c99 $(shell pkg-config --cflags $(LIBS)) -I$(HDIR) 38 RLDFLAGS = $(LDFLAGS) $(shell pkg-config --libs $(LIBS)) 39 40 # Build Info 41 42 PROG_NAME = runcl 43 VERSION = $(shell git describe --tags --always 2>/dev/null) 44 45 BUILD_TYPE = Release 46 debug: BUILD_TYPE = Debug 47 48 # Preprocessor Flags 49 50 CPPFLAGS = -DPROG_NAME=$(PROG_NAME) -DVERSION=$(VERSION) -DBUILD_TYPE=$(BUILD_TYPE) -DCFLAGS="$(RCFLAGS)" -DLDFLAGS="$(RLDFLAGS)" 51 52 # Build Targets 53 54 all: release 55 release: runcl 56 debug: runcl 57 58 runcl: $(OBJS) 59 @printf "LD $@\n" 60 @$(CC) $(RLDFLAGS) -o runcl $(OBJS) 61 62 $(OBJDIR)/%.o: $(SRCDIR)/%.c 63 @$(MKDIR) -p $(@D) 64 @printf "CC $@\n" 65 @$(CC) $(RCFLAGS) $(CPPFLAGS) -o $@ $^ 66 67 68 clean: 69 @printf "RM $(OBJDIR)\n" 70 @$(RM) $(OBJDIR) 71 @printf "RM runcl\n" 72 @$(RM) runcl 73 74 install: 75 @$(INSTALL) -d $(DESTDIR)$(BINDIR)/ 76 @printf "INSTALL runcl -> $(DESTDIR)$(BINDIR)/runcl$(BINSUFFIX)\n" 77 @$(INSTALL) -s -m $(BINMODE) runcl $(DESTDIR)$(BINDIR)/runcl$(BINSUFFIX)