aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLode Vandevenne <lvandeve@users.noreply.github.com>2019-07-25 20:05:35 +0200
committerGitHub <noreply@github.com>2019-07-25 20:05:35 +0200
commit4a35d304787ffc02551b9bda7213a6a3d50ff87e (patch)
tree9243814fd989c639356e85e96fe9f4831242451d
parentef109ddf164911cf1e5612e90b4a619839a1e3ca (diff)
downloadzopfli-4a35d304787ffc02551b9bda7213a6a3d50ff87e.tar.gz
Makefile improvements
Add static library targets, support parallel build, overridable flags
-rw-r--r--Makefile59
1 files changed, 41 insertions, 18 deletions
diff --git a/Makefile b/Makefile
index 30b931e..20b9e78 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
-CC = gcc
-CXX = g++
+CC ?= gcc
+CXX ?= g++
-CFLAGS = -W -Wall -Wextra -ansi -pedantic -lm -O2 -Wno-unused-function
-CXXFLAGS = -W -Wall -Wextra -ansi -pedantic -O2
+override CFLAGS := -W -Wall -Wextra -ansi -pedantic -lm -O2 -Wno-unused-function -fPIC $(CFLAGS)
+override CXXFLAGS := -W -Wall -Wextra -ansi -pedantic -O2 -fPIC $(CXXFLAGS)
ZOPFLILIB_SRC = src/zopfli/blocksplitter.c src/zopfli/cache.c\
src/zopfli/deflate.c src/zopfli/gzip_container.c\
@@ -10,33 +10,56 @@ ZOPFLILIB_SRC = src/zopfli/blocksplitter.c src/zopfli/cache.c\
src/zopfli/lz77.c src/zopfli/squeeze.c\
src/zopfli/tree.c src/zopfli/util.c\
src/zopfli/zlib_container.c src/zopfli/zopfli_lib.c
-ZOPFLILIB_OBJ := $(patsubst src/zopfli/%.c,%.o,$(ZOPFLILIB_SRC))
+ZOPFLILIB_OBJ := $(patsubst %.c,obj/%.o,$(ZOPFLILIB_SRC))
ZOPFLIBIN_SRC := src/zopfli/zopfli_bin.c
+ZOPFLIBIN_OBJ := $(patsubst %.c,obj/%.o,$(ZOPFLIBIN_SRC))
LODEPNG_SRC := src/zopflipng/lodepng/lodepng.cpp src/zopflipng/lodepng/lodepng_util.cpp
+LODEPNG_OBJ := $(patsubst %.cpp,obj/%.o,$(LODEPNG_SRC))
ZOPFLIPNGLIB_SRC := src/zopflipng/zopflipng_lib.cc
+ZOPFLIPNGLIB_OBJ := $(patsubst %.cc,obj/%.o,$(ZOPFLIPNGLIB_SRC))
ZOPFLIPNGBIN_SRC := src/zopflipng/zopflipng_bin.cc
+ZOPFLIPNGBIN_OBJ := $(patsubst %.cc,obj/%.o,$(ZOPFLIPNGBIN_SRC))
-.PHONY: zopfli zopflipng
+.PHONY: all libzopfli libzopflipng
+
+all: zopfli libzopfli libzopfli.a zopflipng libzopflipng libzopflipng.a
+
+obj/%.o: %.c
+ @mkdir -p `dirname $@`
+ $(CC) $(CFLAGS) -c $< -o $@
+
+obj/%.o: %.cc
+ @mkdir -p `dirname $@`
+ $(CXX) $(CXXFLAGS) -c $< -o $@
+
+obj/%.o: %.cpp
+ @mkdir -p `dirname $@`
+ $(CXX) $(CXXFLAGS) -c $< -o $@
# Zopfli binary
-zopfli:
- $(CC) $(ZOPFLILIB_SRC) $(ZOPFLIBIN_SRC) $(CFLAGS) -o zopfli
+zopfli: $(ZOPFLILIB_OBJ) $(ZOPFLIBIN_OBJ)
+ $(CC) $^ $(CFLAGS) -o $@ $(LDFLAGS)
# Zopfli shared library
-libzopfli:
- $(CC) $(ZOPFLILIB_SRC) $(CFLAGS) -fPIC -c
- $(CC) $(ZOPFLILIB_OBJ) $(CFLAGS) -shared -Wl,-soname,libzopfli.so.1 -o libzopfli.so.1.0.2
+libzopfli: $(ZOPFLILIB_OBJ)
+ $(CC) $^ $(CFLAGS) -shared -Wl,-soname,libzopfli.so.1 -o libzopfli.so.1.0.2 $(LDFLAGS)
+
+# Zopfli static library
+libzopfli.a: $(ZOPFLILIB_OBJ)
+ ar rcs $@ $^
# ZopfliPNG binary
-zopflipng:
- $(CC) $(ZOPFLILIB_SRC) $(CFLAGS) -c
- $(CXX) $(ZOPFLILIB_OBJ) $(LODEPNG_SRC) $(ZOPFLIPNGLIB_SRC) $(ZOPFLIPNGBIN_SRC) $(CFLAGS) -o zopflipng
+zopflipng: $(ZOPFLILIB_OBJ) $(LODEPNG_OBJ) $(ZOPFLIPNGLIB_OBJ) $(ZOPFLIPNGBIN_OBJ)
+ $(CXX) $^ $(CFLAGS) -o $@ $(LDFLAGS)
# ZopfliPNG shared library
-libzopflipng:
- $(CC) $(ZOPFLILIB_SRC) $(CFLAGS) -fPIC -c
- $(CXX) $(ZOPFLILIB_OBJ) $(LODEPNG_SRC) $(ZOPFLIPNGLIB_SRC) $(CFLAGS) -fPIC --shared -Wl,-soname,libzopflipng.so.1 -o libzopflipng.so.1.0.2
+libzopflipng: $(ZOPFLILIB_OBJ) $(LODEPNG_OBJ) $(ZOPFLIPNGLIB_OBJ)
+ $(CXX) $^ $(CFLAGS) --shared -Wl,-soname,libzopflipng.so.1 -o libzopflipng.so.1.0.2 $(LDFLAGS)
+
+# ZopfliPNG static library
+libzopflipng.a: $(LODEPNG_OBJ) $(ZOPFLIPNGLIB_OBJ)
+ ar rcs $@ $^
# Remove all libraries and binaries
clean:
- rm -f zopflipng zopfli $(ZOPFLILIB_OBJ) libzopfli*
+ rm -f zopflipng zopfli $(ZOPFLILIB_OBJ) $(ZOPFLIBIN_OBJ) $(LODEPNG_OBJ) $(ZOPFLIPNGLIB_OBJ) $(ZOPFLIPNGBIN_OBJ) libzopfli*