| ## |
| ## Name: Makefile |
| ## Purpose: Makefile for imath library and associated tools |
| ## Author: M. J. Fromberger |
| ## |
| ## Copyright (C) 2002-2008 Michael J. Fromberger, All Rights Reserved. |
| ## |
| ## Permission is hereby granted, free of charge, to any person obtaining a copy |
| ## of this software and associated documentation files (the "Software"), to |
| ## deal in the Software without restriction, including without limitation the |
| ## rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| ## sell copies of the Software, and to permit persons to whom the Software is |
| ## furnished to do so, subject to the following conditions: |
| ## |
| ## The above copyright notice and this permission notice shall be included in |
| ## all copies or substantial portions of the Software. |
| ## |
| ## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| ## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| ## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| ## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| ## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| ## FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
| ## IN THE SOFTWARE. |
| ## |
| |
| # --- begin configuration section --- |
| |
| ## Generic settings for systems with GCC (default) |
| ## To build with debugging, add DEBUG=Y on the "make" command line. |
| ifeq ($(origin CC),default) |
| CC=gcc |
| endif |
| CFLAGS+=-pedantic -Wall -Werror -Wextra -Wno-unused-parameter \ |
| -I. -std=c99 $(DFLAGS$(DEBUG)) |
| CSFLAGS=$(CFLAGS) -fPIC |
| #LIBS= |
| |
| # These are needed to build the GMP compatibility tests. |
| export CC CFLAGS |
| |
| DFLAGS=-O3 -funroll-loops -finline-functions |
| DFLAGSN=$(DFLAGS) |
| DFLAGSY=-g -DDEBUG=1 |
| |
| # --- end of configuration section --- |
| |
| TARGETS=bintest bug-swap imtest imtimer rtest |
| HDRS=imath.h imrat.h iprime.h imdrover.h rsamath.h gmp_compat.h |
| SRCS=$(HDRS:.h=.c) $(TARGETS:=.c) |
| OBJS=$(SRCS:.c=.o) |
| OTHER=LICENSE ChangeLog Makefile doc.md doc.md.in \ |
| tools/findthreshold.py tools/mkdoc.py .dockerignore |
| VPATH += examples tests |
| EXAMPLES=basecvt findprime imcalc input pi randprime rounding rsakey |
| |
| .PHONY: all test clean distclean |
| .SUFFIXES: .so .md |
| |
| .c.o: |
| $(CC) $(CFLAGS) -c $< |
| |
| .c.so: |
| $(CC) $(CSFLAGS) -o $@ -c $< |
| |
| all: objs examples test |
| |
| objs: $(OBJS) |
| |
| check: test gmp-compat-test |
| @ echo "Completed running imath and gmp-compat unit tests" |
| |
| test: imtest pi bug-swap doc.md |
| @ echo "" |
| @ echo "Running tests, you should not see any 'FAILED' lines here." |
| @ echo "If you do, please see doc.txt for how to report a bug." |
| @ echo "" |
| (cd tests && ./test.sh) |
| |
| gmp-compat-test: libimath.so |
| @ echo "Running gmp-compat unit tests" |
| @ echo "Printing progress after every 100,000 tests" |
| make -C tests/gmp-compat-test TESTS="-p 100000 random.tests" |
| |
| docker-test: |
| if which docker ; \ |
| then \ |
| docker run --rm -it \ |
| "$(shell docker build -f tests/linux/Dockerfile -q .)" ; \ |
| fi |
| |
| $(EXAMPLES):%: imath.o imrat.o iprime.o %.o |
| $(CC) $(CFLAGS) -o $@ $^ $(LIBS) |
| |
| $(TARGETS):%: imath.o %.o |
| $(CC) $(CFLAGS) -o $@ $^ $(LIBS) |
| |
| examples: $(EXAMPLES) |
| |
| libimath.so: imath.so imrat.so gmp_compat.so |
| $(CC) $(CFLAGS) -shared -o $@ $^ |
| |
| imtest: imtest.o imath.o imrat.o imdrover.o iprime.o |
| |
| rtest: rtest.o imath.o rsamath.o |
| |
| # Requires clang-format: https://clang.llvm.org/docs/ClangFormat.html |
| format-c: |
| @ echo "Formatting C source files and headers ..." |
| find . -type f -name '*.h' -o -name '*.c' -print0 | \ |
| xargs -0 clang-format --style=Google -i |
| |
| # Requires yapf: pip install yapf |
| format-py: |
| @ echo "Formatting Python source files ..." |
| find . -type f -name '*.py' -print0 | \ |
| xargs -0 yapf --style=pep8 -i |
| |
| # Format source files. |
| format: format-c format-py |
| |
| # Generate documentation from header comments. |
| # This rule depends on the header files to ensure the docs get updated when the |
| # headers change. |
| doc.md: doc.md.in imath.h imrat.h tools/mkdoc.py |
| tools/mkdoc.py $< $@ |
| |
| clean distclean: |
| rm -f *.o *.so *.pyc *~ core gmon.out tests/*~ tests/gmon.out examples/*~ |
| make -C tests/gmp-compat-test clean |
| rm -f $(TARGETS) $(EXAMPLES) |