# compiler executables -------------------------------------------------------- CC = gcc CXX = g++ FC = gfortran # language standard ----------------------------------------------------------- # CSTD = -std=c89 CSTD = -std=c99 CXXSTD = -std=c++98 # CXXSTD = -std=c++11 FSTD = -std=f2018 -ffree-form -Wno-c-binding-type # common compiler options ----------------------------------------------------- OPTFLAGS = -O3 FLAGS = $(OPTFLAGS) -fPIC -pedantic -Wall -Wextra LDFLAGS = SOFLAGS = # OpenMP compiler options ----------------------------------------------------- # do not comment out; use "make ZFP_WITH_OPENMP=0" to disable OpenMP OMPFLAGS = -fopenmp # Apple clang OpenMP options # OMPFLAGS = -Xclang -fopenmp # optional compiler macros ---------------------------------------------------- # use smaller bit stream word type for finer rate granularity; # can bet set on command line, e.g., "make BIT_STREAM_WORD_TYPE=uint8" # DEFS += -DBIT_STREAM_WORD_TYPE=uint8 # DEFS += -DBIT_STREAM_WORD_TYPE=uint16 # DEFS += -DBIT_STREAM_WORD_TYPE=uint32 # DEFS += -DBIT_STREAM_WORD_TYPE=uint64 # reduce bias and slack in errors; can be set on command line, e.g., # "make ZFP_ROUNDING_MODE=ZFP_ROUND_FIRST" # DEFS += -DZFP_ROUNDING_MODE=ZFP_ROUND_NEVER # DEFS += -DZFP_ROUNDING_MODE=ZFP_ROUND_FIRST # DEFS += -DZFP_ROUNDING_MODE=ZFP_ROUND_LAST # DEFS += -DZFP_WITH_TIGHT_ERROR # treat subnormals as zero to avoid overflow; can be set on command line, e.g., # "make ZFP_WITH_DAZ=1" # DEFS += -DZFP_WITH_DAZ # use long long for 64-bit types # DEFS += -DZFP_INT64='long long' -DZFP_INT64_SUFFIX='ll' # DEFS += -DZFP_UINT64='unsigned long long' -DZFP_UINT64_SUFFIX='ull' # cache alignment # DEFS += -DZFP_CACHE_LINE_SIZE=256 # enable strided access for progressive zfp streams # DEFS += -DBIT_STREAM_STRIDED # use aligned memory allocation # DEFS += -DZFP_WITH_ALIGNED_ALLOC # use two-way skew-associative cache # DEFS += -DZFP_WITH_CACHE_TWOWAY # use faster but more collision prone hash function # DEFS += -DZFP_WITH_CACHE_FAST_HASH # count cache misses # DEFS += -DZFP_WITH_CACHE_PROFILE # build targets --------------------------------------------------------------- # default targets BUILD_CFP = 0 BUILD_ZFORP = 0 BUILD_UTILITIES = 1 BUILD_EXAMPLES = 0 BUILD_TESTING = 1 BUILD_SHARED_LIBS = 0 # build all targets? ifdef BUILD_ALL ifneq ($(BUILD_ALL),0) BUILD_CFP = 1 BUILD_ZFORP = 1 BUILD_UTILITIES = 1 BUILD_EXAMPLES = 1 BUILD_TESTING = 1 endif endif # build shared libraries? ifneq ($(BUILD_SHARED_LIBS),0) LIBRARY = shared LIBZFP = libzfp.so LIBCFP = libcfp.so else LIBRARY = static LIBZFP = libzfp.a LIBCFP = libcfp.a endif # operating system and compiler dependent flags ------------------------------- # macOS configuration; compile with "make OS=mac" ifeq ($(OS),mac) SOFLAGS += -undefined dynamic_lookup endif # suppress unused function warnings when compiling C89 ifeq ($(CSTD),-std=c89) FLAGS += -Wno-unused-function endif # process macros set on the command line -------------------------------------- # bit stream word type ifdef BIT_STREAM_WORD_TYPE DEFS += -DBIT_STREAM_WORD_TYPE=$(BIT_STREAM_WORD_TYPE) endif # enable OpenMP? ifdef ZFP_WITH_OPENMP ifneq ($(ZFP_WITH_OPENMP),0) ifneq ($(ZFP_WITH_OPENMP),OFF) FLAGS += $(OMPFLAGS) endif endif endif # treat subnormals as zero to avoid overflow ifdef ZFP_WITH_DAZ ifneq ($(ZFP_WITH_DAZ),0) FLAGS += -DZFP_WITH_DAZ endif endif # rounding mode and slack in error ifdef ZFP_ROUNDING_MODE FLAGS += -DZFP_ROUNDING_MODE=$(ZFP_ROUNDING_MODE) ifneq ($(ZFP_ROUNDING_MODE),0) # tight error bound requires round-first or round-last mode ifdef ZFP_WITH_TIGHT_ERROR ifneq ($(ZFP_WITH_TIGHT_ERROR),0) FLAGS += -DZFP_WITH_TIGHT_ERROR endif endif endif endif # chroma mode for ppm example ifdef PPM_CHROMA PPM_FLAGS += -DPPM_CHROMA=$(PPM_CHROMA) endif # compiler options ------------------------------------------------------------ CFLAGS = $(CSTD) $(FLAGS) $(DEFS) CXXFLAGS = $(CXXSTD) $(FLAGS) $(DEFS) FFLAGS = $(FSTD) $(FLAGS) $(DEFS)