From de3254326939b5e1891a949276bca19c8d97c04b Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Mon, 27 Jan 2020 11:19:15 -0500 Subject: [PATCH] Build system improvements: * Release target for mingw builds (binaries only) * Include Jenkins BUILD_NUMBER in the release package name * lib6145 is now built/installed/cleaned at the top level * lib70x is now built/installed/cleaned at the top level --- Makefile | 85 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 8b38ca0..af112bb 100644 --- a/Makefile +++ b/Makefile @@ -5,26 +5,37 @@ # Windows stuff needs to end in .exe ifneq (,$(findstring mingw,$(CC))) -EXEC_SUFFIX = .exe +EXEC_SUFFIX=.exe +LIB_SUFFIX=dll +else +EXEC_SUFFIX= +LIB_SUFFIX=so endif -# Basic stuff +# Set to disable looking for gutenprint for the backend name.. +#NO_GUTENPRINT = 1 + +# Base executable name EXEC_NAME ?= dyesub_backend$(EXEC_SUFFIX) +# More stuff.. CPUS ?= $(shell nproc) -#NO_GUTENPRINT = 1 -REVISION ?= -g$(shell if [ -d .git ] ; then git rev-parse --short HEAD; else echo "NONE" ; fi) +REVISION ?= -$(shell if [ -n "${BUILD_NUMBER}" ] ; then echo -n "b${BUILD_NUMBER}"- ; fi ; if [ -d .git ] ; then echo -n "g" ; git rev-parse --short HEAD; else echo -n "NONE" ; fi) -# Destination directories (rely on CUPS to tell us where) +# Destination directories (rely on CUPS & Gutenprint to tell us where) GP_PREFIX ?= $(shell pkg-config --variable=prefix gutenprint) PREFIX ?= CUPS_BACKEND_DIR ?= $(PREFIX)$(shell cups-config --serverbin)/backend CUPS_DATA_DIR ?= $(PREFIX)$(shell cups-config --datadir) +LIB_DIR ?= $(PREFIX)/usr/local/lib/ ifeq ($(GP_PREFIX),) GP_PREFIX=/usr/local endif -BACKEND_DATA_DIR ?= $(GP_PREFIX)/share/gutenprint/backend_data + +ifneq (,$(findstring mingw,$(CC))) +BACKEND_DATA_DIR ?= backend_data +endif # Figure out what the backend name needs to be ifeq ($(NO_GUTENPRINT),) @@ -42,9 +53,17 @@ endif # Fallthrough BACKEND_NAME ?= gutenprint5X+usb +# Libraries: +LIBS6145_NAME = lib6145/libS6145ImageReProcess.$(LIB_SUFFIX) +LIBS6145_SOURCES = lib6145/libS6145ImageReProcess.c +LIB70X_NAME ?= lib70x/libMitsuD70ImageReProcess.$(LIB_SUFFIX) +LIB70X_SOURCES = lib70x/libMitsuD70ImageReProcess.c + +LIBRARIES = $(LIBS6145_NAME) $(LIB70X_NAME) + # Tools CC ?= $(CROSS_COMPILE)gcc -LD ?= $(CROSS_COMPILE)gcc +LD ?= $(CROSS_COMPILE)ld CPPCHECK ?= cppcheck MKDIR ?= mkdir INSTALL ?= install @@ -52,16 +71,12 @@ LN ?= ln RM ?= rm # Flags -CFLAGS += -Wall -Wextra -Wformat-security -g -Og -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -std=c99 # -Wconversion +CFLAGS += -Wall -Wextra -Wformat-security -funit-at-a-time -g -Og -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -std=c99 # -Wconversion LDFLAGS += $(shell pkg-config --libs libusb-1.0) CPPFLAGS += $(shell pkg-config --cflags libusb-1.0) # CPPFLAGS += -DLIBUSB_PRE_1_0_10 CPPFLAGS += -DURI_PREFIX=\"$(BACKEND_NAME)\" $(OLD_URI) - -# If you want to use LTO.. -#CFLAGS += -flto -# If not... -CFLAGS += -funit-at-a-time +LIBLDFLAGS = -g -shared # List of backends BACKENDS = canonselphy canonselphyneo dnpds40 hiti kodak605 kodak1400 kodak6800 magicard mitsu70x mitsu9550 mitsud90 mitsup95d shinkos1245 shinkos2145 shinkos6145 shinkos6245 sonyupd sonyupdneo @@ -75,6 +90,9 @@ CPPFLAGS += -DUSE_DLOPEN LDFLAGS += -ldl endif +# Linking.. +LDFLAGS += $(CFLAGS) $(CPPFLAGS) + # Build stuff DEPS += backend_common.h SOURCES = backend_common.c backend_sinfonia.c $(addsuffix .c,$(addprefix backend_,$(BACKENDS))) @@ -86,13 +104,16 @@ SINFONIA_BACKENDS_O = $(addsuffix .o,$(addprefix backend_,$(SINFONIA_BACKENDS))) # And now the rules! .PHONY: clean all install cppcheck -all: $(EXEC_NAME) $(BACKENDS) +all: $(EXEC_NAME) $(BACKENDS) libraries + +libraries: $(LIBRARIES) +# $(MAKE) -C lib70x $@ %.o: %.c $(DEPS) $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< $(EXEC_NAME): $(SOURCES:.c=.o) $(DEPS) - $(CC) -o $@ $(SOURCES:.c=.o) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) + $(CC) -o $@ $(SOURCES:.c=.o) $(LDFLAGS) $(BACKENDS): $(EXEC_NAME) $(LN) -sf $(EXEC_NAME) $@ @@ -113,24 +134,39 @@ testgp_%: dyesub_backend STP_PARALLEL=$(CPUS) ./regression-gp.pl regression-gp.csv $(subst testgp_,,$@) cppcheck: - $(CPPCHECK) -q -v --std=c99 --enable=all --suppress=variableScope --suppress=selfAssignment --suppress=unusedStructMember -I. -I/usr/include -DCORRTABLE_PATH=\"$(BACKEND_DATA_DIR)\" --include=lib70x/libMitsuD70ImageReProcess.h $(CPPFLAGS) $(SOURCES) + $(CPPCHECK) -q -v --std=c99 --enable=all --suppress=variableScope --suppress=selfAssignment --suppress=unusedStructMember -I. -I/usr/include -DCORRTABLE_PATH=\"$(BACKEND_DATA_DIR)\" --include=lib70x/libMitsuD70ImageReProcess.h $(CPPFLAGS) $(SOURCES) $(LIB70X_SOURCES) $(LIBS6145_SOURCES) install: $(MKDIR) -p $(CUPS_BACKEND_DIR) $(INSTALL) -o root -m 700 $(EXEC_NAME) $(CUPS_BACKEND_DIR)/$(BACKEND_NAME) + $(INSTALL) -o root -m 755 $(LIBRARIES) $(LIB_DIR) $(MKDIR) -p $(CUPS_DATA_DIR)/usb $(INSTALL) -o root -m 644 blacklist $(CUPS_DATA_DIR)/usb/net.sf.gimp-print.usb-quirks $(MKDIR) -p $(BACKEND_DATA_DIR) $(INSTALL) -o root -m 644 hiti_data/*bin $(BACKEND_DATA_DIR) + $(INSTALL) -o root -m 644 lib70x/data/*raw $(BACKEND_DATA_DIR) + $(INSTALL) -o root -m 644 lib70x/data/*lut $(BACKEND_DATA_DIR) + $(INSTALL) -o root -m 644 lib70x/data/*cpc $(BACKEND_DATA_DIR) + $(INSTALL) -o root -m 644 lib70x/data/*dat $(BACKEND_DATA_DIR) clean: - $(RM) $(EXEC_NAME) $(BACKENDS) $(SOURCES:.c=.o) lib70x/*o lib6145/*o + $(RM) $(EXEC_NAME) $(BACKENDS) $(LIBRARIES) $(SOURCES:.c=.o) $(LIBS6145_SOURCES:.c=.o) $(LIB70X_SOURCES:.c=.o) -release: clean +release: $(RM) -Rf selphy_print$(REVISION) $(MKDIR) -p selphy_print$(REVISION) - cp -a *.c *.h Makefile blacklist COPYING README lib6145 lib70x hiti_data selphy_print$(REVISION) - tar -czvf selphy_print$(REVISION).tar.gz selphy_print$(REVISION) + cp -a COPYING README selphy_print$(REVISION) +ifeq (,$(findstring mingw,$(CC))) + cp -a *.c *.h Makefile blacklist lib6145 lib70x hiti_data selphy_print$(REVISION) + tar -czvf selphy_print-src$(REVISION).tar.gz selphy_print$(REVISION) +else + cp -a $(EXEC_NAME) $(LIBRARIES) selphy_print$(REVISION) + $(MKDIR) -p selphy_print$(REVISION)/$(BACKEND_DATA_DIR) + cp -a hiti_data lib70x/data/* selphy_print$(REVISION)/$(BACKEND_DATA_DIR) + cp -a lib70x/README selphy_print$(REVISION)/$(BACKEND_DATA_DIR)/README-lib70x + cp -a lib6145/README selphy_print$(REVISION)/$(BACKEND_DATA_DIR)/README-lib6145 + zip -r selphy_print-mingw$(REVISION).zip selphy_print$(REVISION) +endif $(RM) -Rf selphy_print$(REVISION) # Backend-specific joy: @@ -138,3 +174,12 @@ $(SINFONIA_BACKENDS_O): backend_sinfonia.h backend_mitsu70x.o: CPPFLAGS += -DCORRTABLE_PATH=\"$(BACKEND_DATA_DIR)\" -include lib70x/libMitsuD70ImageReProcess.h backend_mitsu9550.o: CPPFLAGS += -DCORRTABLE_PATH=\"$(BACKEND_DATA_DIR)\" -include lib70x/libMitsuD70ImageReProcess.h backend_hiti.o: CPPFLAGS += -DCORRTABLE_PATH=\"$(BACKEND_DATA_DIR)\" + +# Library joy: +%.$(LIB_SUFFIX): CFLAGS += -fPIC --no-strict-overflow + +$(LIB70X_NAME): $(LIB70X_SOURCES:.c=.o) + $(CC) $(LIBLDFLAGS) -o $@ $^ + +$(LIBS6145_NAME): $(LIBS6145_SOURCES:.c=.o) + $(CC) $(LIBLDFLAGS) -o $@ $^