pqc/Makefile

156 lines
4.5 KiB
Makefile
Raw Normal View History

# This -Wall was supported by the European Commission through the ERC Starting Grant 805031 (EPOQUE)
CFLAGS=-Wall -Wextra -Wpedantic -Werror -std=c99 -g $(EXTRAFLAGS)
2019-01-15 15:09:32 +00:00
ALL_SCHEMES=$(filter-out crypto_%.c, $(wildcard crypto_*/*))
COMMON_FILES = common/fips202.c common/sha2.c
RANDOM_IMPL = common/randombytes.c
2019-01-16 12:52:53 +00:00
default: help
.PHONY: require_scheme
require_scheme:
2019-01-17 16:44:55 +00:00
# assumes a SCHEME variable; e.g. make functest SCHEME=crypto_kem/kyber768
2019-01-16 12:52:53 +00:00
ifndef SCHEME
$(error The SCHEME variable is not set. Example: SCHEME=crypto_kem/kyber768)
endif
2019-01-17 16:44:55 +00:00
bin/functest_$(subst /,_,$(SCHEME)): test/$(dir $(SCHEME))functest.c $(wildcard $(SCHEME)/clean/*.c) $(wildcard $(SCHEME)/clean/*.h) | require_scheme
mkdir -p bin
$(CC) $(CFLAGS) \
-DPQCLEAN_NAMESPACE=$(shell echo PQCLEAN_$(subst -,,$(notdir $(SCHEME)))_CLEAN | tr a-z A-Z) \
-iquote "./common/" \
-iquote "$(SCHEME)/clean/" \
-o bin/functest_$(subst /,_,$(SCHEME)) \
$(SCHEME)/clean/*.c \
$(COMMON_FILES) \
$(RANDOM_IMPL) \
$<
2019-01-16 12:02:35 +00:00
.PHONY: functest
functest: bin/functest_$(subst /,_,$(SCHEME))
.PHONY: run-functest
run-functest: bin/functest_$(subst /,_,$(SCHEME))
./$<
2019-01-22 15:56:22 +00:00
.PHONY: run-valgrind
run-valgrind: bin/functest_$(subst /,_,$(SCHEME))
ifeq ($(shell uname -s),Linux)
2019-01-22 15:56:22 +00:00
valgrind --leak-check=full --error-exitcode=1 $<
else
2019-01-23 11:36:23 +00:00
@echo "Valgrind not supported on this platform."
endif
2019-01-22 15:56:22 +00:00
2019-01-22 16:22:18 +00:00
bin/sanitizer_$(subst /,_,$(SCHEME)): test/$(dir $(SCHEME))functest.c $(wildcard $(SCHEME)/clean/*.c) $(wildcard $(SCHEME)/clean/*.h) | require_scheme
mkdir -p bin
2019-02-09 00:59:13 +00:00
$(CC) $(CFLAGS) -fsanitize=address,undefined \
-DPQCLEAN_NAMESPACE=$(shell echo PQCLEAN_$(subst -,,$(notdir $(SCHEME)))_CLEAN | tr a-z A-Z) \
2019-01-22 16:22:18 +00:00
-iquote "./common/" \
-iquote "$(SCHEME)/clean/" \
-o bin/sanitizer_$(subst /,_,$(SCHEME)) \
$(COMMON_FILES) \
$(RANDOM_IMPL) \
2019-01-22 16:22:18 +00:00
$(SCHEME)/clean/*.c \
$<
.PHONY: sanitizer
sanitizer: bin/sanitizer_$(subst /,_,$(SCHEME))
2019-01-22 15:56:22 +00:00
bin/shared_$(subst /,_,$(SCHEME))_clean.so: $(wildcard $(SCHEME)/clean/*.c) | require_scheme
mkdir -p bin
2019-01-23 11:36:23 +00:00
$(CC) $(CFLAGS) \
-DPQCLEAN_NAMESPACE=$(shell echo PQCLEAN_$(subst -,,$(notdir $(SCHEME)))_CLEAN | tr a-z A-Z) \
-nostdlib \
-shared \
-fPIC \
-iquote "./common/" \
-iquote "$(SCHEME)/clean/" \
-o $@ \
$^
.PHONY: clean
clean:
rm -rf bin
.PHONY: tidy
2019-01-16 12:52:53 +00:00
tidy:
$(MAKE) do-tidy
do-tidy: require_scheme
clang-tidy \
2019-01-16 12:52:53 +00:00
-quiet $(.TIDY_FIX) \
$(SCHEME)/clean/*.c \
common/*.c \
-- -iquote "common/" -iquote "$(SCHEME)/clean"
2019-01-16 12:52:53 +00:00
.PHONY: apply-tidy
apply-tidy:
$(MAKE) do-tidy .TIDY_FIX=-fix
2019-01-16 12:52:53 +00:00
# The below should be outlined with ts=8
.PHONY: help
help:
@echo "make test-all Run all tests"
2019-01-16 12:52:53 +00:00
@echo "make functest SCHEME=scheme Build functional tests for SCHEME"
@echo "make functest-all Build functional tests for all schemes"
2019-01-16 12:52:53 +00:00
@echo "make run-functest SCHEME=scheme Run functional tests for SCHEME"
@echo "make run-functest-all Run all functests"
2019-01-22 16:22:18 +00:00
@echo "make run-sanitizer-all Run address sanitizer for all schemes"
2019-01-22 15:56:22 +00:00
@echo "make run-valgrind SCHEME=scheme Run valgrind checks for SCHEME"
@echo "make run-valgrind-all Run valgrind checks all schemes"
2019-01-16 12:52:53 +00:00
@echo "make clean Clean up the bin/ folder"
@echo "make tidy SCHEME=scheme Runs the clang-tidy linter against SCHEME"
@echo "make apply-tidy SCHEME=scheme Tries to automatically fix the issues found by clang-tidy in SCHEME"
@echo "make tidy-all Runs the clang-tidy linter against all schemes"
@echo "make apply-tidy-all Tidy up all schemes"
@echo "make help Displays this message"
2019-01-16 12:02:35 +00:00
2019-01-16 12:52:53 +00:00
.PHONY: functest-all
functest-all:
@for scheme in $(ALL_SCHEMES); do \
$(MAKE) functest SCHEME=$$scheme || exit 1; \
done
2019-01-16 12:02:35 +00:00
2019-01-22 16:22:18 +00:00
.PHONY: sanitizer-all
sanitizer-all:
@for scheme in $(ALL_SCHEMES); do \
$(MAKE) sanitizer SCHEME=$$scheme || exit 1; \
done
2019-01-22 15:56:22 +00:00
.PHONY: run-valgrind-all
run-valgrind-all:
@for scheme in $(ALL_SCHEMES); do \
$(MAKE) run-valgrind SCHEME=$$scheme || exit 1; \
done
2019-01-16 12:52:53 +00:00
.PHONY: run-functest-all
run-functest-all: functest-all
@for functest in $$(find bin/ -maxdepth 1 -name 'functest_*' -not -type d) ; do \
2019-01-16 12:52:53 +00:00
echo ./$$functest ; \
./$$functest || exit 1 ;\
2019-01-16 12:52:53 +00:00
done
@echo Tests completed
2019-01-16 12:02:35 +00:00
2019-01-22 16:22:18 +00:00
.PHONY: run-sanitizer-all
run-sanitizer-all: sanitizer-all
@for sanitizer in $$(find bin/ -maxdepth 1 -name 'sanitizer_*' -not -type d) ; do \
2019-01-22 16:22:18 +00:00
echo ./$$sanitizer ; \
./$$sanitizer || exit 1 ;\
done
@echo Tests completed
2019-01-16 12:02:35 +00:00
.PHONY: test-all
test-all: run-functest-all run-valgrind-all run-sanitizer-all
2019-01-16 12:02:35 +00:00
.PHONY: tidy-all
tidy-all:
2019-01-16 12:52:53 +00:00
@for scheme in $(ALL_SCHEMES); do \
$(MAKE) tidy SCHEME=$$scheme || exit 1 ; \
2019-01-16 12:52:53 +00:00
done
2019-01-16 12:02:35 +00:00
2019-01-16 12:52:53 +00:00
.PHONY: apply-tidy-all
2019-01-16 12:02:35 +00:00
apply-tidy-all:
2019-01-16 12:52:53 +00:00
@for scheme in $(ALL_SCHEMES); do \
$(MAKE) apply-tidy SCHEME=$$scheme; \
done