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.
 
 
 
 
 

103 lines
2.8 KiB

  1. # Copyright (c) 2014 Cryptography Research, Inc.
  2. # Released under the MIT License. See LICENSE.txt for license information.
  3. CC = clang
  4. LD = clang
  5. ARCH = arch_x86_64
  6. WARNFLAGS = -pedantic -Wall -Wextra -Werror -Wunreachable-code \
  7. -Wgcc-compat -Wmissing-declarations
  8. INCFLAGS = -Isrc/include -Iinclude -Isrc/$(ARCH)
  9. LANGFLAGS = -std=c99
  10. GENFLAGS = -ffunction-sections -fdata-sections -fomit-frame-pointer -fPIC
  11. OFLAGS = -O3
  12. #XFLAGS = -DN_TESTS_BASE=1000
  13. ARCHFLAGS = -mssse3 -maes -mavx2 -DMUST_HAVE_AVX2 -mbmi2
  14. #ARCHFLAGS = -m32 -mcpu=cortex-a9 -mfpu=vfpv3-d16
  15. CFLAGS = $(LANGFLAGS) $(WARNFLAGS) $(INCFLAGS) $(OFLAGS) $(ARCHFLAGS) $(GENFLAGS) $(XFLAGS)
  16. LDFLAGS = $(ARCHFLAGS)
  17. ASFLAGS = $(ARCHFLAGS)
  18. .PHONY: clean all test bench todo doc lib
  19. .PRECIOUS: build/%.s
  20. HEADERS= Makefile $(shell find . -name "*.h") build/timestamp
  21. LIBCOMPONENTS= build/goldilocks.o build/barrett_field.o build/crandom.o \
  22. build/p448.o build/ec_point.o build/scalarmul.o build/sha512.o
  23. TESTCOMPONENTS=build/test.o build/test_scalarmul.o build/test_sha512.o \
  24. build/test_pointops.o
  25. BENCHCOMPONENTS=build/bench.o
  26. all: lib build/test build/bench
  27. scan: clean
  28. scan-build --use-analyzer=`which clang` \
  29. -enable-checker deadcode -enable-checker llvm \
  30. -enable-checker osx -enable-checker security -enable-checker unix \
  31. make build/bench build/test build/goldilocks.so
  32. build/bench: $(LIBCOMPONENTS) $(BENCHCOMPONENTS)
  33. $(LD) $(LDFLAGS) -o $@ $^
  34. build/test: $(LIBCOMPONENTS) $(TESTCOMPONENTS)
  35. $(LD) $(LDFLAGS) -o $@ $^
  36. lib: build/goldilocks.so
  37. build/goldilocks.so: $(LIBCOMPONENTS)
  38. rm -f $@
  39. libtool -macosx_version_min 10.6 -dynamic -dead_strip -lc -x -o $@ \
  40. -exported_symbols_list src/exported.sym \
  41. $(LIBCOMPONENTS)
  42. build/timestamp:
  43. mkdir -p build
  44. touch $@
  45. build/%.o: build/%.s
  46. $(CC) $(ASFLAGS) -c -o $@ $<
  47. build/%.s: src/%.c $(HEADERS)
  48. $(CC) $(CFLAGS) -S -c -o $@ $<
  49. build/%.s: test/%.c $(HEADERS)
  50. $(CC) $(CFLAGS) -S -c -o $@ $<
  51. build/%.s: src/$(ARCH)/%.c $(HEADERS)
  52. $(CC) $(CFLAGS) -S -c -o $@ $<
  53. doc/timestamp:
  54. mkdir -p doc
  55. touch $@
  56. doc: Doxyfile doc/timestamp src/*.c src/include/*.h src/$(ARCH)/*.c src/$(ARCH)/*.h
  57. doxygen
  58. todo::
  59. @(find * -name '*.h'; find * -name '*.c') | xargs egrep --color=auto -w \
  60. 'HACK|TODO|FIXME|BUG|XXX|PERF|FUTURE|REMOVE'
  61. @echo '============================='
  62. @(for i in FIXME BUG XXX TODO HACK PERF FUTURE REMOVE; do \
  63. (find * -name '*.h'; find * -name '*.c') | xargs egrep -w $$i > /dev/null || continue; \
  64. /bin/echo -n $$i' ' | head -c 10; \
  65. (find * -name '*.h'; find * -name '*.c') | xargs egrep -w $$i| wc -l; \
  66. done)
  67. @echo '============================='
  68. @echo -n 'Total '
  69. @(find * -name '*.h'; find * -name '*.c') | xargs egrep -w \
  70. 'HACK|TODO|FIXME|BUG|XXX|PERF|FUTURE|REMOVE' | wc -l
  71. bench: build/bench
  72. ./$<
  73. test: build/test
  74. ./$<
  75. clean:
  76. rm -fr build doc