mirror of
https://github.com/facebook/zstd.git
synced 2025-03-07 01:10:04 +02:00
* Extract out common portion of `lib/Makefile` into `lib/libzstd.mk`. Most relevantly, the way we find library files. * Use `lib/libzstd.mk` in the other Makefiles instead of repeating the same code. * Add a test `tests/test-variants.sh` that checks that the builds of `make -C programs allVariants` are correct, and run it in Actions. * Adds support for ASM files in the CMake build. The Meson build is not updated because it lists every file in zstd, and supports ASM off the bat, so the Huffman ASM commit will just add the ASM file to the list. The Visual Studios build is not updated because I'm not adding ASM support to Visual Studios yet.
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 += -DHUF_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)
|