From 78868b3cb583aba6e87eaf94e0d56e4f62a89eed Mon Sep 17 00:00:00 2001 From: Nicolas Chauvet Date: Nov 05 2018 19:07:35 +0000 Subject: Add patches --- diff --git a/0001-Use-PREFIX-and-LIBDIR-build-variable-instead-of-cust.patch b/0001-Use-PREFIX-and-LIBDIR-build-variable-instead-of-cust.patch new file mode 100644 index 0000000..2fef1ba --- /dev/null +++ b/0001-Use-PREFIX-and-LIBDIR-build-variable-instead-of-cust.patch @@ -0,0 +1,65 @@ +From 14f859ed0ee63774c3aa86cb31ae0d2b8f4941fd Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 12:32:54 +0200 +Subject: [PATCH 01/11] Use PREFIX and LIBDIR build variable instead of custom + ones + +--- + wrapper/Makefile | 29 +++++++++++++++-------------- + 1 file changed, 15 insertions(+), 14 deletions(-) + +diff --git a/wrapper/Makefile b/wrapper/Makefile +index 8658e83..6b02083 100644 +--- a/wrapper/Makefile ++++ b/wrapper/Makefile +@@ -8,7 +8,8 @@ SRCDIR = $(TOP)/src + OBJDIR = $(TOP)/obj + FEATURESRCDIR = $(TOP)/../feature/src + PTOOLSDIR = $(TOP)/../ptools +-INSTALL_PREFIX = /usr/local ++PREFIX ?= /usr/local ++LIBDIR ?= $(PREFIX)/lib + + OBJS = \ + $(OBJDIR)/alloc.o \ +@@ -170,24 +171,24 @@ vmafossexec: $(OBJDIR)/main.o $(LIBVMAF) + + .PHONY: install + install: +- mkdir -p $(DESTDIR)$(INSTALL_PREFIX)/lib +- mkdir -p $(DESTDIR)$(INSTALL_PREFIX)/include +- mkdir -p $(DESTDIR)$(INSTALL_PREFIX)/share +- mkdir -p $(DESTDIR)$(INSTALL_PREFIX)/lib/pkgconfig +- cp $(LIBVMAF) $(DESTDIR)$(INSTALL_PREFIX)/lib/$(LIBVMAF) +- cp src/libvmaf.h $(DESTDIR)$(INSTALL_PREFIX)/include/ +- cp -r ../model $(DESTDIR)$(INSTALL_PREFIX)/share/ +- cp libvmaf.pc $(DESTDIR)$(INSTALL_PREFIX)/lib/pkgconfig/ ++ mkdir -p $(DESTDIR)$(LIBDIR) ++ mkdir -p $(DESTDIR)$(PREFIX)/include ++ mkdir -p $(DESTDIR)$(PREFIX)/share ++ mkdir -p $(DESTDIR)$(LIBDIR)/pkgconfig ++ cp $(LIBVMAF) $(DESTDIR)$(LIBDIR)/$(LIBVMAF) ++ cp src/libvmaf.h $(DESTDIR)$(PREFIX)/include/ ++ cp -r ../model $(DESTDIR)$(PREFIX)/share/ ++ cp libvmaf.pc $(DESTDIR)$(LIBDIR)/pkgconfig/ + + .PHONY: uninstall + uninstall: +- rm -f $(DESTDIR)$(INSTALL_PREFIX)/lib/$(LIBVMAF) +- rm -f $(DESTDIR)$(INSTALL_PREFIX)/include/libvmaf.h +- rm -fr $(DESTDIR)$(INSTALL_PREFIX)/share/model +- rm -f $(DESTDIR)$(INSTALL_PREFIX)/lib/pkgconfig/libvmaf.pc ++ rm -f $(DESTDIR)$(LIBDIR)/$(LIBVMAF) ++ rm -f $(DESTDIR)$(PREFIX)/include/libvmaf.h ++ rm -fr $(DESTDIR)$(PREFIX)/share/model ++ rm -f $(DESTDIR)$(LIBDIR)/pkgconfig/libvmaf.pc + + testlib: $(SRCDIR)/main.cpp +- $(CXX) -s -o $@ $(CXXFLAGS) $^ -I $(FEATURESRCDIR) -I $(FEATURESRCDIR)/common -I $(DESTDIR)$(INSTALL_PREFIX)/include -L$(DESTDIR)$(INSTALL_PREFIX)/lib -lvmaf -pthread ++ $(CXX) -s -o $@ $(CXXFLAGS) $^ -I $(FEATURESRCDIR) -I $(FEATURESRCDIR)/common -I $(DESTDIR)$(PREFIX)/include -L$(DESTDIR)$(LIBDIR) -lvmaf -pthread + + .PHONY: clean + clean: +-- +2.17.1 + diff --git a/0002-Unbundle-pugixml.patch b/0002-Unbundle-pugixml.patch new file mode 100644 index 0000000..c4af166 --- /dev/null +++ b/0002-Unbundle-pugixml.patch @@ -0,0 +1,38 @@ +From 524c2dea1569cef1aaeb26c2afd9a64e11c06254 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 13:43:48 +0200 +Subject: [PATCH 02/11] Unbundle pugixml + +--- + wrapper/Makefile | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +diff --git a/wrapper/Makefile b/wrapper/Makefile +index 6b02083..985a30f 100644 +--- a/wrapper/Makefile ++++ b/wrapper/Makefile +@@ -42,9 +42,9 @@ OBJS = \ + $(OBJDIR)/vmaf.o \ + $(OBJDIR)/darray.o \ + $(OBJDIR)/libvmaf.o \ +- $(OBJDIR)/pugixml.o \ + $(OBJDIR)/blur_array.o \ +- $(OBJDIR)/cpu_info.o ++ $(OBJDIR)/cpu_info.o \ ++ $(NULL) + + AVX_OBJS := \ + $(OBJDIR)/convolution_avx.o \ +@@ -160,9 +160,6 @@ $(OBJDIR)/vmaf.o: $(SRCDIR)/vmaf.cpp + $(OBJDIR)/%.o: $(SRCDIR)/%.c + $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) -I $(FEATURESRCDIR) $< + +-$(OBJDIR)/%.o: $(SRCDIR)/pugixml/%.cpp +- $(CXX) -c -o $@ $(CXXFLAGS) $(CPPFLAGS) $< +- + $(LIBVMAF): $(OBJS) $(wildcard ../ptools/*.o) + ar rcs $@ $^ + +-- +2.17.1 + diff --git a/0003-Drop-AVX-when-not-relevant.patch b/0003-Drop-AVX-when-not-relevant.patch new file mode 100644 index 0000000..5d68f52 --- /dev/null +++ b/0003-Drop-AVX-when-not-relevant.patch @@ -0,0 +1,84 @@ +From bd90f8e5d7bb1d323ec35d8326915ded41cce587 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 13:44:42 +0200 +Subject: [PATCH 03/11] Drop AVX when not relevant + +--- + feature/Makefile | 9 +++++++++ + wrapper/Makefile | 17 ++++++++++++++--- + 2 files changed, 23 insertions(+), 3 deletions(-) + +diff --git a/feature/Makefile b/feature/Makefile +index 111d07c..c786a27 100644 +--- a/feature/Makefile ++++ b/feature/Makefile +@@ -10,13 +10,22 @@ LIBVMAF = $(TOP)/../wrapper/libvmaf.a + CFLAGS_COMMON = -g -O3 -fPIC -w -Wextra -pedantic + # CFLAGS_COMMON = -g -O0 -fPIC -Wall -Wextra -pedantic + ++UNAME := $(shell uname -m) + CFLAGS := -std=c99 $(CFLAGS_COMMON) $(CFLAGS) + CXXFLAGS := -std=c++11 $(CFLAGS_COMMON) $(CXXFLAGS) + CPPFLAGS := $(CPPFLAGS) + LIBS := $(LIBS) -lm + LDFLAGS := $(LDFLAGS) + ++ifeq ($(UNAME), x86_64) ++ USE_AVX = 1 ++endif ++ifeq ($(UNAME), i386) ++ USE_AVX = 1 ++endif ++ifeq ($(USE_AVX), 1) + $(AVX_OBJS): EXTRA_CFLAGS := -mavx ++endif + + $(OBJDIR)/vmaf_main.o: $(SRCDIR)/vmaf_main.c + $(CC) $(EXTRA_CFLAGS) -c -o $@ $(CFLAGS) $(CPPFLAGS) $< +diff --git a/wrapper/Makefile b/wrapper/Makefile +index 985a30f..62bde27 100644 +--- a/wrapper/Makefile ++++ b/wrapper/Makefile +@@ -3,6 +3,7 @@ LIBVMAF = libvmaf.a + .PHONY: all + all: $(LIBVMAF) vmafossexec + ++UNAME := $(shell uname -m) + TOP = $(shell pwd) + SRCDIR = $(TOP)/src + OBJDIR = $(TOP)/obj +@@ -11,6 +12,18 @@ PTOOLSDIR = $(TOP)/../ptools + PREFIX ?= /usr/local + LIBDIR ?= $(PREFIX)/lib + ++ifeq ($(UNAME), x86_64) ++ USE_AVX = 1 ++endif ++ifeq ($(UNAME), i386) ++ USE_AVX = 1 ++endif ++ifeq ($(USE_AVX), 1) ++AVX_OBJS := \ ++ $(OBJDIR)/convolution_avx.o \ ++ ++endif ++ + OBJS = \ + $(OBJDIR)/alloc.o \ + $(OBJDIR)/alignment.o \ +@@ -44,11 +57,9 @@ OBJS = \ + $(OBJDIR)/libvmaf.o \ + $(OBJDIR)/blur_array.o \ + $(OBJDIR)/cpu_info.o \ ++ $(AVX_OBJS) \ + $(NULL) + +-AVX_OBJS := \ +- $(OBJDIR)/convolution_avx.o \ +- + CFLAGS_COMMON = -g -O3 -fPIC -w -Wextra -pedantic -D MULTI_THREADING + # CFLAGS_COMMON = -g -O3 -fPIC -w -Wextra -pedantic -D MULTI_THREADING -D PRINT_PROGRESS + # CFLAGS_COMMON = -g -O3 -fPIC -w -Wextra -pedantic +-- +2.17.1 + diff --git a/0004-Use-better-FLAGS-for-ptools.patch b/0004-Use-better-FLAGS-for-ptools.patch new file mode 100644 index 0000000..3f45ac5 --- /dev/null +++ b/0004-Use-better-FLAGS-for-ptools.patch @@ -0,0 +1,35 @@ +From 1f85e97f791709405d5b38981d1786727c229bc0 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 13:54:40 +0200 +Subject: [PATCH 04/11] Use better FLAGS for ptools + +--- + ptools/Makefile.Linux | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/ptools/Makefile.Linux b/ptools/Makefile.Linux +index 73d8241..890141b 100644 +--- a/ptools/Makefile.Linux ++++ b/ptools/Makefile.Linux +@@ -10,7 +10,8 @@ CC = g++ + OC = ./opencontainers_1_8_4 + OCINC = $(OC)/include + +-CFLAGS = -Wall -Wextra -fpic -O -fno-strict-aliasing -DLINUX_ -DOC_NEW_STYLE_INCLUDES -Wno-deprecated -I$(OCINC) -pthread -D_REENTRANT ++CFLAGS_COMMON = -Wall -Wextra -fpic -O ++CFLAGS = $(CFLAGS_COMMON) -fno-strict-aliasing -DLINUX_ -DOC_NEW_STYLE_INCLUDES -Wno-deprecated -I$(OCINC) -pthread -D_REENTRANT + + ## How to build with OCString + ##CFLAGS = -Wall -O4 -DLINUX_ -DOC_USE_OC_STRING -DOC_USE_OC_EXCEPTIONS -DOC_ONLY_NEEDED_STL -DOC_NEW_STYLE_INCLUDES -Wno-deprecated -I$(OCINC) +@@ -30,7 +31,7 @@ all: midasyeller_ex midastalker_ex midastalker_ex2 httpclient_ex midasserver_ex + $(CC) $(CFLAGS) -c $< + + libptools.so : $(COM_OBJS) +- $(CC) $(CCFLAGS) $(COM_OBJS) -shared -o libptools.so ++ $(CC) $(CCFLAGS) $(COM_OBJS) $(LDFLAGS) -shared -Wl,-soname,libptools.so.0 -o libptools.so + + midasserver_ex : $(COM_OBJS) midasserver_ex.o + $(CC) $(CCFLAGS) $(COM_OBJS) midasserver_ex.o -pthread -o midasserver_ex +-- +2.17.1 + diff --git a/0005-Switch-pugixml-include.patch b/0005-Switch-pugixml-include.patch new file mode 100644 index 0000000..aae4b9d --- /dev/null +++ b/0005-Switch-pugixml-include.patch @@ -0,0 +1,26 @@ +From 6b8189523f590e0ec8bd67b15c58377d27fe63f7 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 13:57:00 +0200 +Subject: [PATCH 05/11] Switch pugixml include + +--- + wrapper/src/vmaf.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/wrapper/src/vmaf.cpp b/wrapper/src/vmaf.cpp +index bed3502..a776931 100644 +--- a/wrapper/src/vmaf.cpp ++++ b/wrapper/src/vmaf.cpp +@@ -28,7 +28,8 @@ + + #include "vmaf.h" + #include "combo.h" +-#include "pugixml/pugixml.hpp" ++#include "svm.h" ++#include + #include "timer.h" + #include "jsonprint.h" + #include "debug.h" +-- +2.17.1 + diff --git a/0006-Switch-to-shared-library-for-libvmaf.patch b/0006-Switch-to-shared-library-for-libvmaf.patch new file mode 100644 index 0000000..aee0af3 --- /dev/null +++ b/0006-Switch-to-shared-library-for-libvmaf.patch @@ -0,0 +1,58 @@ +From 26c58a87b63742412f8845318dbd27585a734ed1 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 14:33:30 +0200 +Subject: [PATCH 06/11] Switch to shared library for libvmaf + +--- + feature/Makefile | 2 +- + wrapper/.gitignore | 1 + + wrapper/Makefile | 4 ++-- + 3 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/feature/Makefile b/feature/Makefile +index c786a27..127faed 100644 +--- a/feature/Makefile ++++ b/feature/Makefile +@@ -5,7 +5,7 @@ TOP = $(shell pwd) + SRCDIR = $(TOP)/src + OBJDIR = $(TOP)/obj + TOOLDIR = $(TOP)/tool +-LIBVMAF = $(TOP)/../wrapper/libvmaf.a ++LIBVMAF = $(TOP)/../wrapper/libvmaf.so + + CFLAGS_COMMON = -g -O3 -fPIC -w -Wextra -pedantic + # CFLAGS_COMMON = -g -O0 -fPIC -Wall -Wextra -pedantic +diff --git a/wrapper/.gitignore b/wrapper/.gitignore +index b721ec4..16e4e57 100644 +--- a/wrapper/.gitignore ++++ b/wrapper/.gitignore +@@ -1,6 +1,7 @@ + *.o + vmafossexec + libvmaf.a ++libvmaf.so* + testlib + .cproject + .project +diff --git a/wrapper/Makefile b/wrapper/Makefile +index 62bde27..8644c49 100644 +--- a/wrapper/Makefile ++++ b/wrapper/Makefile +@@ -1,4 +1,4 @@ +-LIBVMAF = libvmaf.a ++LIBVMAF = libvmaf.so + + .PHONY: all + all: $(LIBVMAF) vmafossexec +@@ -172,7 +172,7 @@ $(OBJDIR)/%.o: $(SRCDIR)/%.c + $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) -I $(FEATURESRCDIR) $< + + $(LIBVMAF): $(OBJS) $(wildcard ../ptools/*.o) +- ar rcs $@ $^ ++ $(CC) $(LDFLAGS) $^ -shared -Wl,-soname,libvmaf.so.0 -o $@ + + vmafossexec: $(OBJDIR)/main.o $(LIBVMAF) + $(CXX) -s -o $@ $(LDFLAGS) $^ -pthread +-- +2.17.1 + diff --git a/0007-Unbundle-libsvm.patch b/0007-Unbundle-libsvm.patch new file mode 100644 index 0000000..c152918 --- /dev/null +++ b/0007-Unbundle-libsvm.patch @@ -0,0 +1,32 @@ +From ee9ed1dfd1a41a30bf9c6a5e11cf0ae4f70a37ed Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 14:35:50 +0200 +Subject: [PATCH 07/11] Unbundle libsvm + +--- + Makefile | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/Makefile b/Makefile +index 5a13baa..d2ba5cc 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,6 +1,5 @@ + TARGETS = \ + ptools \ +- libsvm \ + wrapper \ + feature + +@@ -9,8 +8,6 @@ all: + cd $${dir}; $(MAKE); cd ..; \ + done + +- cd libsvm; $(MAKE) lib; cd ..; +- + clean: + -for dir in $(TARGETS); do \ + cd $${dir}; $(MAKE) clean; cd ..; \ +-- +2.17.1 + diff --git a/0008-Add-pugixml-LIBS.patch b/0008-Add-pugixml-LIBS.patch new file mode 100644 index 0000000..07ecb1f --- /dev/null +++ b/0008-Add-pugixml-LIBS.patch @@ -0,0 +1,25 @@ +From d3d9937d72928f8c98feb196caeccdde9bafa63e Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 14:43:21 +0200 +Subject: [PATCH 08/11] Add pugixml LIBS + +--- + wrapper/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/wrapper/Makefile b/wrapper/Makefile +index 8644c49..ceba5dc 100644 +--- a/wrapper/Makefile ++++ b/wrapper/Makefile +@@ -172,7 +172,7 @@ $(OBJDIR)/%.o: $(SRCDIR)/%.c + $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) -I $(FEATURESRCDIR) $< + + $(LIBVMAF): $(OBJS) $(wildcard ../ptools/*.o) +- $(CC) $(LDFLAGS) $^ -shared -Wl,-soname,libvmaf.so.0 -o $@ ++ $(CC) $(LDFLAGS) $^ -shared -Wl,-soname,libvmaf.so.0 -lpugixml -pthread -o $@ + + vmafossexec: $(OBJDIR)/main.o $(LIBVMAF) + $(CXX) -s -o $@ $(LDFLAGS) $^ -pthread +-- +2.17.1 + diff --git a/0009-Avoid-x86cpudetection-code-when-not-relevant.patch b/0009-Avoid-x86cpudetection-code-when-not-relevant.patch new file mode 100644 index 0000000..0a85ec8 --- /dev/null +++ b/0009-Avoid-x86cpudetection-code-when-not-relevant.patch @@ -0,0 +1,39 @@ +From 48f15b192920c283285276c01cf71331314d66a2 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 18:00:25 +0200 +Subject: [PATCH 09/11] Avoid x86cpudetection code when not relevant + +--- + feature/src/common/cpu.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/feature/src/common/cpu.c b/feature/src/common/cpu.c +index 4befea2..165488a 100644 +--- a/feature/src/common/cpu.c ++++ b/feature/src/common/cpu.c +@@ -16,9 +16,10 @@ + * + */ + +-#include "cpudetect.h" + #include "cpu.h" + ++#if defined(__i386__) || defined(__x86_64) ++#include "cpudetect.h" + + enum vmaf_cpu cpu_autodetect() + { +@@ -31,3 +32,10 @@ enum vmaf_cpu cpu_autodetect() + else + return VMAF_CPU_NONE; + } ++ ++#else ++enum vmaf_cpu cpu_autodetect() ++{ ++ return VMAF_CPU_NONE; ++} ++#endif +-- +2.17.1 + diff --git a/0010-Fix-libvmaf.pc-to-use-Libs.private-for-pthread-m.patch b/0010-Fix-libvmaf.pc-to-use-Libs.private-for-pthread-m.patch new file mode 100644 index 0000000..dfa992c --- /dev/null +++ b/0010-Fix-libvmaf.pc-to-use-Libs.private-for-pthread-m.patch @@ -0,0 +1,30 @@ +From 0a484f7a0af68364ce98d6b9a7f1389c08163a35 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 19:16:00 +0200 +Subject: [PATCH 10/11] Fix libvmaf.pc to use Libs.private for pthread m + +This avoid to link to pthread and m when not needed +Also avoid to link to a specitic libstdc++ +(as reported in https://github.com/Netflix/vmaf/issues/122) + +Signed-off-by: Nicolas Chauvet +--- + wrapper/libvmaf.pc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/wrapper/libvmaf.pc b/wrapper/libvmaf.pc +index 5d524f4..d025135 100644 +--- a/wrapper/libvmaf.pc ++++ b/wrapper/libvmaf.pc +@@ -10,6 +10,6 @@ URL: https://github.com/Netflix/vmaf + Requires: + Requires.private: + Conflicts: +-Libs: -L${libdir} -lvmaf -lstdc++ -lpthread -lm +-Libs.private: ++Libs: -L${libdir} -lvmaf ++Libs.private: -lpthread -lm + Cflags: -I${includedir} +-- +2.17.1 + diff --git a/0011-Add-msse2-for-i686.patch b/0011-Add-msse2-for-i686.patch new file mode 100644 index 0000000..e34b259 --- /dev/null +++ b/0011-Add-msse2-for-i686.patch @@ -0,0 +1,41 @@ +From c4af3c8270c8f498601d7dd68426c4bd52583006 Mon Sep 17 00:00:00 2001 +From: Nicolas Chauvet +Date: Sat, 7 Apr 2018 19:30:49 +0200 +Subject: [PATCH 11/11] Add -msse2 for i686 + +With x86_64 -msse2 is implicit, but not i686 +Both asm option needs to be enabled there + +Signed-off-by: Nicolas Chauvet +--- + wrapper/Makefile | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/wrapper/Makefile b/wrapper/Makefile +index ceba5dc..a38d35b 100644 +--- a/wrapper/Makefile ++++ b/wrapper/Makefile +@@ -14,9 +14,11 @@ LIBDIR ?= $(PREFIX)/lib + + ifeq ($(UNAME), x86_64) + USE_AVX = 1 ++ ASM_CFLAGS = -mavx + endif + ifeq ($(UNAME), i386) + USE_AVX = 1 ++ ASM_CFLAGS = -msse -msse2 -mavx + endif + ifeq ($(USE_AVX), 1) + AVX_OBJS := \ +@@ -70,7 +72,7 @@ CXXFLAGS := -std=c++11 $(CFLAGS_COMMON) $(CXXFLAGS) + CPPFLAGS := $(CPPFLAGS) + LDFLAGS := $(LDFLAGS) + +-$(AVX_OBJS): EXTRA_CFLAGS := -mavx ++$(AVX_OBJS): EXTRA_CFLAGS := $(ASM_CFLAGS) + + $(OBJDIR)/alloc.o: $(FEATURESRCDIR)/common/alloc.c + $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) $< +-- +2.17.1 +