Move portability macros to `lib/common/portability_macros.h`. This file only contains platform/feature detection (e.g. 0/1 macros). This file is shared between C and ASM code, so it cannot include any C code. Rename `HUF_` ASM macros to be `ZSTD_` prefixed, and move to the new header. Restrict `ZSTD_ASM_SUPPORTED` to `__GNUC__`, because we need the GAS assembler. Finally, only include the ASM code if we are actually going to use it. This disables it on all Windows platforms, which should resolve the problem brought up in Issue #2789.
186 lines
6.2 KiB
Makefile
186 lines
6.2 KiB
Makefile
# ################################################################
|
|
# Copyright (c) Yann Collet, Facebook, Inc.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under both the BSD-style license (found in the
|
|
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
|
# in the COPYING file in the root directory of this source tree).
|
|
# You may select, at your option, one of the above-listed licenses.
|
|
# ################################################################
|
|
|
|
##################################################################
|
|
# Input Variables
|
|
##################################################################
|
|
|
|
# Zstd lib directory
|
|
LIBZSTD ?= ./
|
|
|
|
# Legacy support
|
|
ZSTD_LEGACY_SUPPORT ?= 5
|
|
ZSTD_LEGACY_MULTITHREADED_API ?= 0
|
|
|
|
# Build size optimizations
|
|
HUF_FORCE_DECOMPRESS_X1 ?= 0
|
|
HUF_FORCE_DECOMPRESS_X2 ?= 0
|
|
ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT ?= 0
|
|
ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG ?= 0
|
|
ZSTD_NO_INLINE ?= 0
|
|
ZSTD_STRIP_ERROR_STRINGS ?= 0
|
|
|
|
# Assembly support
|
|
ZSTD_NO_ASM ?= 0
|
|
|
|
##################################################################
|
|
# libzstd helpers
|
|
##################################################################
|
|
|
|
# Make 4.3 doesn't support '\#' anymore (https://lwn.net/Articles/810071/)
|
|
NUM_SYMBOL := \#
|
|
|
|
# define silent mode as default (verbose mode with V=1 or VERBOSE=1)
|
|
$(V)$(VERBOSE).SILENT:
|
|
|
|
# When cross-compiling from linux to windows,
|
|
# one might need to specify TARGET_SYSTEM as "Windows."
|
|
# Building from Fedora fails without it.
|
|
# (but Ubuntu and Debian don't need to set anything)
|
|
TARGET_SYSTEM ?= $(OS)
|
|
|
|
# Version numbers
|
|
LIBVER_SRC := $(LIBZSTD)/zstd.h
|
|
LIBVER_MAJOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
|
|
LIBVER_MINOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
|
|
LIBVER_PATCH_SCRIPT:=`sed -n '/define ZSTD_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < $(LIBVER_SRC)`
|
|
LIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT)
|
|
LIBVER_MAJOR := $(shell echo $(LIBVER_MAJOR_SCRIPT))
|
|
LIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT))
|
|
LIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT))
|
|
LIBVER := $(shell echo $(LIBVER_SCRIPT))
|
|
CCVER := $(shell $(CC) --version)
|
|
ZSTD_VERSION?= $(LIBVER)
|
|
|
|
# ZSTD_LIB_MINIFY is a helper variable that
|
|
# configures a bunch of other variables to space-optimized defaults.
|
|
ZSTD_LIB_MINIFY ?= 0
|
|
ifneq ($(ZSTD_LIB_MINIFY), 0)
|
|
HAVE_CC_OZ ?= $(shell echo "" | $(CC) -Oz -x c -c - -o /dev/null 2> /dev/null && echo 1 || echo 0)
|
|
ZSTD_LEGACY_SUPPORT ?= 0
|
|
ZSTD_LIB_DEPRECATED ?= 0
|
|
HUF_FORCE_DECOMPRESS_X1 ?= 1
|
|
ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT ?= 1
|
|
ZSTD_NO_INLINE ?= 1
|
|
ZSTD_STRIP_ERROR_STRINGS ?= 1
|
|
ifneq ($(HAVE_CC_OZ), 0)
|
|
# Some compilers (clang) support an even more space-optimized setting.
|
|
CFLAGS += -Oz
|
|
else
|
|
CFLAGS += -Os
|
|
endif
|
|
CFLAGS += -fno-stack-protector -fomit-frame-pointer -fno-ident \
|
|
-DDYNAMIC_BMI2=0 -DNDEBUG
|
|
else
|
|
CFLAGS += -O3
|
|
endif
|
|
|
|
DEBUGLEVEL ?= 0
|
|
CPPFLAGS += -DXXH_NAMESPACE=ZSTD_ -DDEBUGLEVEL=$(DEBUGLEVEL)
|
|
ifeq ($(TARGET_SYSTEM),Windows_NT) # MinGW assumed
|
|
CPPFLAGS += -D__USE_MINGW_ANSI_STDIO # compatibility with %zu formatting
|
|
endif
|
|
DEBUGFLAGS= -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
|
|
-Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
|
|
-Wstrict-prototypes -Wundef -Wpointer-arith \
|
|
-Wvla -Wformat=2 -Winit-self -Wfloat-equal -Wwrite-strings \
|
|
-Wredundant-decls -Wmissing-prototypes -Wc++-compat
|
|
CFLAGS += $(DEBUGFLAGS) $(MOREFLAGS)
|
|
LDFLAGS += $(MOREFLAGS)
|
|
FLAGS = $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
|
|
|
|
HAVE_COLORNEVER = $(shell echo a | grep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
|
|
GREP_OPTIONS ?=
|
|
ifeq ($HAVE_COLORNEVER, 1)
|
|
GREP_OPTIONS += --color=never
|
|
endif
|
|
GREP = grep $(GREP_OPTIONS)
|
|
SED_ERE_OPT ?= -E
|
|
|
|
ZSTD_COMMON_FILES := $(sort $(wildcard $(LIBZSTD)/common/*.c))
|
|
ZSTD_COMPRESS_FILES := $(sort $(wildcard $(LIBZSTD)/compress/*.c))
|
|
ZSTD_DECOMPRESS_FILES := $(sort $(wildcard $(LIBZSTD)/decompress/*.c))
|
|
ZSTD_DICTBUILDER_FILES := $(sort $(wildcard $(LIBZSTD)/dictBuilder/*.c))
|
|
ZSTD_DEPRECATED_FILES := $(sort $(wildcard $(LIBZSTD)/deprecated/*.c))
|
|
ZSTD_LEGACY_FILES :=
|
|
|
|
ZSTD_DECOMPRESS_AMD64_ASM_FILES := $(sort $(wildcard $(LIBZSTD)/decompress/*_amd64.S))
|
|
|
|
ifneq ($(ZSTD_NO_ASM), 0)
|
|
CPPFLAGS += -DZSTD_DISABLE_ASM
|
|
else
|
|
# Unconditionally add the ASM files they are disabled by
|
|
# macros in the .S file.
|
|
ZSTD_DECOMPRESS_FILES += $(ZSTD_DECOMPRESS_AMD64_ASM_FILES)
|
|
endif
|
|
|
|
ifneq ($(HUF_FORCE_DECOMPRESS_X1), 0)
|
|
CFLAGS += -DHUF_FORCE_DECOMPRESS_X1
|
|
endif
|
|
|
|
ifneq ($(HUF_FORCE_DECOMPRESS_X2), 0)
|
|
CFLAGS += -DHUF_FORCE_DECOMPRESS_X2
|
|
endif
|
|
|
|
ifneq ($(ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT), 0)
|
|
CFLAGS += -DZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT
|
|
endif
|
|
|
|
ifneq ($(ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG), 0)
|
|
CFLAGS += -DZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG
|
|
endif
|
|
|
|
ifneq ($(ZSTD_NO_INLINE), 0)
|
|
CFLAGS += -DZSTD_NO_INLINE
|
|
endif
|
|
|
|
ifneq ($(ZSTD_STRIP_ERROR_STRINGS), 0)
|
|
CFLAGS += -DZSTD_STRIP_ERROR_STRINGS
|
|
endif
|
|
|
|
ifneq ($(ZSTD_LEGACY_MULTITHREADED_API), 0)
|
|
CFLAGS += -DZSTD_LEGACY_MULTITHREADED_API
|
|
endif
|
|
|
|
ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
|
|
ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
|
|
ZSTD_LEGACY_FILES += $(shell ls $(LIBZSTD)/legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
|
|
endif
|
|
endif
|
|
CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
|
|
|
|
UNAME := $(shell uname)
|
|
|
|
ifndef BUILD_DIR
|
|
ifeq ($(UNAME), Darwin)
|
|
ifeq ($(shell md5 < /dev/null > /dev/null; echo $$?), 0)
|
|
HASH ?= md5
|
|
endif
|
|
else ifeq ($(UNAME), FreeBSD)
|
|
HASH ?= gmd5sum
|
|
else ifeq ($(UNAME), NetBSD)
|
|
HASH ?= md5 -n
|
|
else ifeq ($(UNAME), OpenBSD)
|
|
HASH ?= md5
|
|
endif
|
|
HASH ?= md5sum
|
|
|
|
HASH_DIR = conf_$(shell echo $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(ZSTD_FILES) | $(HASH) | cut -f 1 -d " " )
|
|
HAVE_HASH :=$(shell echo 1 | $(HASH) > /dev/null && echo 1 || echo 0)
|
|
ifeq ($(HAVE_HASH),0)
|
|
$(info warning : could not find HASH ($(HASH)), needed to differentiate builds using different flags)
|
|
BUILD_DIR := obj/generic_noconf
|
|
endif
|
|
endif # BUILD_DIR
|
|
|
|
ZSTD_SUBDIR := $(LIBZSTD)/common $(LIBZSTD)/compress $(LIBZSTD)/decompress $(LIBZSTD)/dictBuilder $(LIBZSTD)/legacy $(LIBZSTD)/deprecated
|
|
vpath %.c $(ZSTD_SUBDIR)
|
|
vpath %.S $(ZSTD_SUBDIR)
|