-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile.macOS_x86
142 lines (110 loc) · 7.13 KB
/
Makefile.macOS_x86
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# define our object and binary directories
TOP_DIR=$(PWD)
OBJ_DIR=obj
BIN_DIR=bin
PGO_DIR=$(TOP_DIR)/pgo
# define our directories
BENCHMARK_DIR=RunBenchmark
BGZF_DIR=bgzf
UTILITIES_DIR=utilities
LIBDEFLATE_DIR=libdeflate
ZLIB-NG_DIR=zlib-ng
ZSTD_DIR=zstd
# define our object directories
ZLIB-NG_OBJ_DIR=$(OBJ_DIR)/zlib-ng
LIBDEFLATE_OBJ_DIR=$(OBJ_DIR)/libdeflate
ZSTD_OBJ_DIR=$(OBJ_DIR)/zstd
# define our include directories
BENCHMARK_INCLUDE=-I $(TOP_DIR)/$(BENCHMARK_DIR)
BGZF_INCLUDE=-I $(TOP_DIR)/$(ZLIB-NG_DIR) -I $(TOP_DIR)/$(LIBDEFLATE_DIR)
LIBDEFLATE_INCLUDE=-I $(TOP_DIR)/$(LIBDEFLATE_DIR)
ZLIB-NG_INCLUDE=-I $(TOP_DIR)/$(ZLIB-NG_DIR)
BENCHMARK_INCLUDE=-I $(TOP_DIR)/$(BENCHMARK_DIR) -I $(TOP_DIR)/$(BGZF_DIR) -I $(TOP_DIR)/$(ZSTD_DIR)/lib
# defines
ZLIB-NG_DEFINES=-DHAVE_VISIBILITY_HIDDEN -DHAVE_VISIBILITY_INTERNAL -DHAVE_BUILTIN_CTZ -DHAVE_BUILTIN_CTZLL -DUNALIGNED_OK -DUNALIGNED64_OK -DX86_FEATURES -DX86_SSE2 -DX86_SSE2_CHUNKSET -DX86_SSSE3 -DX86_SSSE3_ADLER32
ZSTD_DEFINES=-DHAVE_LZ4=0 -DHAVE_LZMA=0 -DHAVE_THREAD=1 -DHAVE_ZLIB=0 -DZSTD_LEGACY_SUPPORT=0 -DZSTD_NOBENCH -DDISABLE_GZIP -DDISABLE_ZLIB
# define our output library
SHAREDLIB=libBlockCompression.dylib
SHAREDLIB_PATH=$(BIN_DIR)/$(SHAREDLIB)
# define our output program
RUNBENCHMARK_PATH=$(BIN_DIR)/RunBenchmark
LIBS=-L $(TOP_DIR)/$(BIN_DIR) -Wl,-rpath,$(TOP_DIR)/$(BIN_DIR) -lBlockCompression
# define some default flags
CC=gcc
CPP=g++
CFLAGS=-O3 -fPIC -flto=full
# For profile-guided optimization:
# -fprofile-instr-generate=$(PGO_DIR)/BlockCompression.profraw
# /Library/Developer/CommandLineTools/usr/bin/llvm-profdata merge -output=BlockCompression.profdata BlockCompression.profraw
# -fprofile-instr-use=$(PGO_DIR)/BlockCompression.profdata
CPPFLAGS=-std=c++11
# Ideally this should be -march=native, but too many of our users didn't have modern AVX support - so I left it at ivybridge.
# For true non-AVX support, you could use westmere
MARCH=-march=native -mtune=native
LDFLAGS=
LDSHARED=@$(CC) -dynamiclib -install_name $(TOP_DIR)/$(BIN_DIR)/$(SHAREDLIB)
# define our source files
BGZF_SOURCES=$(BGZF_DIR)/bgzf.c
BGZF_OBJS=$(addprefix $(OBJ_DIR)/,$(notdir $(BGZF_SOURCES:.c=.o)))
UTILITIES_SOURCES=$(UTILITIES_DIR)/get_library_id.c
UTILITIES_OBJS=$(addprefix $(OBJ_DIR)/,$(notdir $(UTILITIES_SOURCES:.c=.o)))
LIBDEFLATE_SOURCES=$(LIBDEFLATE_DIR)/lib/crc32.c $(LIBDEFLATE_DIR)/lib/deflate_compress.c $(LIBDEFLATE_DIR)/lib/deflate_decompress.c $(LIBDEFLATE_DIR)/lib/utils.c $(LIBDEFLATE_DIR)/lib/x86/cpu_features.c
LIBDEFLATE_OBJS=$(addprefix $(LIBDEFLATE_OBJ_DIR)/,$(notdir $(LIBDEFLATE_SOURCES:.c=.o)))
ZLIB-NG_SOURCES=$(ZLIB-NG_DIR)/adler32.c $(ZLIB-NG_DIR)/arch/x86/adler32_ssse3.c $(ZLIB-NG_DIR)/arch/x86/chunkset_sse.c $(ZLIB-NG_DIR)/arch/x86/compare258_sse.c $(ZLIB-NG_DIR)/arch/x86/crc_folding.c $(ZLIB-NG_DIR)/arch/x86/insert_string_sse.c $(ZLIB-NG_DIR)/arch/x86/slide_sse.c $(ZLIB-NG_DIR)/arch/x86/x86.c $(ZLIB-NG_DIR)/chunkset.c $(ZLIB-NG_DIR)/compare258.c $(ZLIB-NG_DIR)/compress.c $(ZLIB-NG_DIR)/crc32.c $(ZLIB-NG_DIR)/deflate.c $(ZLIB-NG_DIR)/deflate_quick.c $(ZLIB-NG_DIR)/deflate_fast.c $(ZLIB-NG_DIR)/deflate_medium.c $(ZLIB-NG_DIR)/deflate_slow.c $(ZLIB-NG_DIR)/functable.c $(ZLIB-NG_DIR)/insert_string.c $(ZLIB-NG_DIR)/trees.c $(ZLIB-NG_DIR)/zutil.c
ZLIB-NG_OBJS=$(addprefix $(ZLIB-NG_OBJ_DIR)/,$(notdir $(ZLIB-NG_SOURCES:.c=.o)))
ZCONF-NG_H=$(ZLIB-NG_DIR)/zconf-ng.h
ZSTD_SOURCES=$(ZSTD_DIR)/lib/common/entropy_common.c $(ZSTD_DIR)/lib/common/error_private.c $(ZSTD_DIR)/lib/common/fse_decompress.c $(ZSTD_DIR)/lib/common/zstd_common.c $(ZSTD_DIR)/lib/common/xxhash.c $(ZSTD_DIR)/lib/compress/fse_compress.c $(ZSTD_DIR)/lib/compress/hist.c $(ZSTD_DIR)/lib/compress/huf_compress.c $(ZSTD_DIR)/lib/compress/zstd_compress.c $(ZSTD_DIR)/lib/compress/zstd_compress_literals.c $(ZSTD_DIR)/lib/compress/zstd_compress_sequences.c $(ZSTD_DIR)/lib/compress/zstd_compress_superblock.c $(ZSTD_DIR)/lib/compress/zstd_double_fast.c $(ZSTD_DIR)/lib/compress/zstd_fast.c $(ZSTD_DIR)/lib/compress/zstd_lazy.c $(ZSTD_DIR)/lib/compress/zstd_ldm.c $(ZSTD_DIR)/lib/compress/zstd_opt.c $(ZSTD_DIR)/lib/decompress/huf_decompress.c $(ZSTD_DIR)/lib/decompress/zstd_ddict.c $(ZSTD_DIR)/lib/decompress/zstd_decompress.c $(ZSTD_DIR)/lib/decompress/zstd_decompress_block.c
ZSTD_OBJS=$(addprefix $(ZSTD_OBJ_DIR)/,$(notdir $(ZSTD_SOURCES:.c=.o)))
BENCHMARK_SOURCES=$(BENCHMARK_DIR)/Benchmark.cpp $(BENCHMARK_DIR)/BenchmarkStatistics.cpp $(BENCHMARK_DIR)/CompressionData.cpp $(BENCHMARK_DIR)/MemoryUtilities.cpp $(BENCHMARK_DIR)/RunBenchmark.cpp $(BENCHMARK_DIR)/Runner.cpp $(BENCHMARK_DIR)/ZlibNextGen.cpp $(BENCHMARK_DIR)/Zstandard.cpp $(BENCHMARK_DIR)/ZstandardDict.cpp
BENCHMARK_OBJS=$(addprefix $(OBJ_DIR)/,$(notdir $(BENCHMARK_SOURCES:.cpp=.o)))
all: $(ZCONF-NG_H) $(OBJ_DIR) $(BIN_DIR) $(PGO_DIR) $(SHAREDLIB_PATH) $(RUNBENCHMARK_PATH)
clean:
@echo "- cleaning the output directory"
@-rm -rf $(OBJ_DIR) $(BIN_DIR)
realclean: clean
@-rm -rf $(PGO_DIR)
$(OBJ_DIR):
@mkdir -p $(LIBDEFLATE_OBJ_DIR) $(ZLIB-NG_OBJ_DIR) $(ZSTD_OBJ_DIR)
$(BIN_DIR):
@mkdir -p $(BIN_DIR)
$(PGO_DIR):
@mkdir -p $(PGO_DIR)
$(SHAREDLIB_PATH): $(BGZF_OBJS) $(UTILITIES_OBJS) $(LIBDEFLATE_OBJS) $(ZLIB-NG_OBJS) $(ZSTD_OBJS)
@echo "- creating the shared library: $(SHAREDLIB_PATH)"
@$(LDSHARED) $(CFLAGS) $(DEFINES) -o $(SHAREDLIB_PATH) $(BGZF_OBJS) $(UTILITIES_OBJS) $(LIBDEFLATE_OBJS) $(ZLIB-NG_OBJS) $(ZSTD_OBJS) $(LDFLAGS)
$(RUNBENCHMARK_PATH): $(SHAREDLIB_PATH) $(BENCHMARK_OBJS)
@echo "- creating RunBenchmark: $(RUNBENCHMARK_PATH)"
@@$(CPP) $(CFLAGS) $(CPPFLAGS) $(MARCH) $(BENCHMARK_INCLUDE) -o $(RUNBENCHMARK_PATH) $(BENCHMARK_OBJS) $(LIBS)
$(ZCONF-NG_H) :
@echo "- creating $(ZCONF-NG_H)"
@cp zconf-ng.h $(ZCONF-NG_H)
$(OBJ_DIR)/%.o : $(BGZF_DIR)/%.c
@echo "- compiling $(*F).c (bgzf)"
@$(CC) $(CFLAGS) $(MARCH) $(BGZF_INCLUDE) -c $< -o $@
$(OBJ_DIR)/%.o : $(UTILITIES_DIR)/%.c
@echo "- compiling $(*F).c (utilities)"
@$(CC) $(CFLAGS) $(MARCH) $(UTILITIES_INCLUDE) -c $< -o $@
$(LIBDEFLATE_OBJ_DIR)/%.o : $(LIBDEFLATE_DIR)/lib/%.c
@echo "- compiling $(*F).c (libdeflate)"
@$(CC) $(CFLAGS) $(MARCH) $(LIBDEFLATE_INCLUDE) -c $< -o $@
$(LIBDEFLATE_OBJ_DIR)/%.o : $(LIBDEFLATE_DIR)/lib/x86/%.c
@echo "- compiling $(*F).c (libdeflate)"
@$(CC) $(CFLAGS) $(MARCH) $(LIBDEFLATE_INCLUDE) -c $< -o $@
$(ZSTD_OBJ_DIR)/%.o : $(ZSTD_DIR)/lib/common/%.c
@echo "- compiling $(*F).c (zstd)"
@$(CC) $(CFLAGS) $(MARCH) $(ZSTD_INCLUDE) $(ZSTD_DEFINES) -c $< -o $@
$(ZSTD_OBJ_DIR)/%.o : $(ZSTD_DIR)/lib/compress/%.c
@echo "- compiling $(*F).c (zstd)"
@$(CC) $(CFLAGS) $(MARCH) $(ZSTD_INCLUDE) $(ZSTD_DEFINES) -c $< -o $@
$(ZSTD_OBJ_DIR)/%.o : $(ZSTD_DIR)/lib/decompress/%.c
@echo "- compiling $(*F).c (zstd)"
@@$(CC) $(CFLAGS) $(MARCH) $(ZSTD_INCLUDE) $(ZSTD_DEFINES) -c $< -o $@
$(ZLIB-NG_OBJ_DIR)/%.o : $(ZLIB-NG_DIR)/%.c
@echo "- compiling $(*F).c (zlib-ng)"
@$(CC) $(CFLAGS) -Wno-attributes $(MARCH) $(ZLIB-NG_INCLUDE) $(ZLIB-NG_DEFINES) -c $< -o $@
$(ZLIB-NG_OBJ_DIR)/%.o : $(ZLIB-NG_DIR)/arch/x86/%.c
@echo "- compiling $(*F).c (zlib-ng)"
@$(CC) $(CFLAGS) -Wno-attributes $(MARCH) $(ZLIB-NG_INCLUDE) $(ZLIB-NG_DEFINES) -c $< -o $@
$(OBJ_DIR)/%.o : $(BENCHMARK_DIR)/%.cpp
@echo "- compiling $(*F).cpp (RunBenchmark)"
@$(CPP) $(CFLAGS) $(CPPFLAGS) $(MARCH) $(BENCHMARK_INCLUDE) -c $< -o $@