You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

240 lines
6.8 KiB

  1. # Copyright (c) 2014 Cryptography Research, Inc.
  2. # Released under the MIT License. See LICENSE.txt for license information.
  3. UNAME := $(shell uname)
  4. MACHINE := $(shell uname -m)
  5. ifeq ($(UNAME),Darwin)
  6. CC = clang
  7. CXX = clang++
  8. else
  9. CC = gcc
  10. CXX = g++
  11. endif
  12. LD = $(CC)
  13. LDXX = $(CXX)
  14. ASM ?= $(CC)
  15. DECAF ?= decaf
  16. ifneq (,$(findstring x86_64,$(MACHINE)))
  17. ARCH ?= arch_x86_64
  18. else
  19. # no i386 port yet
  20. ARCH ?= arch_arm_32
  21. endif
  22. FIELD ?= p448
  23. WARNFLAGS = -pedantic -Wall -Wextra -Werror -Wunreachable-code \
  24. -Wmissing-declarations -Wunused-function -Wno-overlength-strings $(EXWARN)
  25. INCFLAGS = -Isrc/include -Iinclude -Isrc/$(FIELD) -Isrc/$(FIELD)/$(ARCH)
  26. LANGFLAGS = -std=c99 -fno-strict-aliasing
  27. LANGXXFLAGS = -fno-strict-aliasing
  28. GENFLAGS = -ffunction-sections -fdata-sections -fvisibility=hidden -fomit-frame-pointer -fPIC
  29. OFLAGS = -O3
  30. TODAY = $(shell date "+%Y-%m-%d")
  31. ifneq (,$(findstring arm,$(MACHINE)))
  32. ifneq (,$(findstring neon,$(ARCH)))
  33. ARCHFLAGS += -mfpu=neon
  34. else
  35. ARCHFLAGS += -mfpu=vfpv3-d16
  36. endif
  37. ARCHFLAGS += -mcpu=cortex-a8 # FIXME
  38. GENFLAGS += -DN_TESTS_BASE=1000 # sooooo sloooooow
  39. else
  40. ARCHFLAGS += -maes -mavx2 -mbmi2 #TODO
  41. endif
  42. ifeq ($(CC),clang)
  43. WARNFLAGS += -Wgcc-compat
  44. endif
  45. ifeq (,$(findstring 64,$(ARCH))$(findstring gcc,$(CC)))
  46. # ARCHFLAGS += -m32
  47. XCFLAGS += -DGOLDI_FORCE_32_BIT=1
  48. endif
  49. ARCHFLAGS += $(XARCHFLAGS)
  50. CFLAGS = $(LANGFLAGS) $(WARNFLAGS) $(INCFLAGS) $(OFLAGS) $(ARCHFLAGS) $(GENFLAGS) $(XCFLAGS)
  51. CXXFLAGS = $(LANGXXFLAGS) $(WARNFLAGS) $(INCFLAGS) $(OFLAGS) $(ARCHFLAGS) $(GENFLAGS) $(XCXXFLAGS)
  52. LDFLAGS = $(ARCHFLAGS) $(XLDFLAGS)
  53. ASFLAGS = $(ARCHFLAGS) $(XASFLAGS)
  54. .PHONY: clean all test bench test_decaf bench_decaf todo doc lib bat
  55. .PRECIOUS: build/%.s
  56. HEADERS= Makefile $(shell find . -name "*.h") $(shell find . -name "*.hxx") build/timestamp
  57. LIBCOMPONENTS= build/goldilocks.o build/barrett_field.o build/crandom.o \
  58. build/$(FIELD).o build/ec_point.o build/scalarmul.o build/sha512.o build/magic.o \
  59. build/f_arithmetic.o build/arithmetic.o
  60. DECAFCOMPONENTS= build/$(DECAF).o build/shake.o build/decaf_crypto.o \
  61. build/$(FIELD).o build/f_arithmetic.o # TODO
  62. ifeq ($(DECAF),decaf_fast)
  63. DECAFCOMPONENTS += build/decaf_tables.o
  64. endif
  65. TESTCOMPONENTS=build/test.o build/test_scalarmul.o build/test_sha512.o \
  66. build/test_pointops.o build/test_arithmetic.o build/test_goldilocks.o build/magic.o \
  67. build/shake.o
  68. TESTDECAFCOMPONENTS=build/test_decaf.o
  69. BENCHDECAFCOMPONENTS=build/bench_decaf.o
  70. BENCHCOMPONENTS = build/bench.o build/shake.o
  71. BATBASE=ed448goldilocks-bats-$(TODAY)
  72. BATNAME=build/$(BATBASE)
  73. all: lib decaf_lib build/test build/bench build/shakesum
  74. scan: clean
  75. scan-build --use-analyzer=`which clang` \
  76. -enable-checker deadcode -enable-checker llvm \
  77. -enable-checker osx -enable-checker security -enable-checker unix \
  78. make build/bench build/test all
  79. build/bench: $(LIBCOMPONENTS) $(BENCHCOMPONENTS) $(DECAFCOMPONENTS)
  80. $(LD) $(LDFLAGS) -o $@ $^
  81. build/test: $(LIBCOMPONENTS) $(TESTCOMPONENTS) $(DECAFCOMPONENTS)
  82. $(LD) $(LDFLAGS) -o $@ $^ -lgmp
  83. build/test_decaf: $(TESTDECAFCOMPONENTS) decaf_lib
  84. $(LDXX) $(LDFLAGS) -o $@ $< -Lbuild -Wl,-rpath=`pwd`/build -ldecaf
  85. build/bench_decaf: $(BENCHDECAFCOMPONENTS) decaf_lib
  86. $(LDXX) $(LDFLAGS) -o $@ $< -Lbuild -Wl,-rpath=`pwd`/build -ldecaf
  87. build/shakesum: build/shakesum.o build/shake.o
  88. $(LD) $(LDFLAGS) -o $@ $^
  89. lib: build/libgoldilocks.so
  90. decaf_lib: build/libdecaf.so
  91. build/libgoldilocks.so: $(LIBCOMPONENTS)
  92. rm -f $@
  93. ifeq ($(UNAME),Darwin)
  94. libtool -macosx_version_min 10.6 -dynamic -dead_strip -lc -x -o $@ \
  95. $(LIBCOMPONENTS)
  96. else
  97. $(LD) $(L