Merge pull request #26 from aewag/develop
[tomsfastmath.git] / makefile
blob189b7a40d30af6b04df88c7d24c63c0ba8261178
1 # makefile for TomsFastMath, a fast ISO C bignum library. -- Tom St Denis
2 # SPDX-License-Identifier: Unlicense
4 ifndef LIBNAME
5 LIBNAME=libtfm.a
6 endif
8 INSTALL_CMD = install
9 UNINSTALL_CMD = rm
12 include makefile_include.mk
14 ifeq ($V,1)
15 silent=
16 else
17 silent=@
18 endif
20 ifeq ($(COVERAGE),1)
21 CFLAGS += -fprofile-arcs -ftest-coverage
22 LDFLAGS += -lgcov
23 LIB_PRE = -Wl,--whole-archive
24 LIB_POST = -Wl,--no-whole-archive
25 endif
27 %.o: %.c
28 ifneq ($V,1)
29 @echo " * ${CC} $@"
30 endif
31 ${silent} ${CC} ${CFLAGS} -c $< -o $@
33 #START_INS
34 OBJECTS=src/addsub/fp_add.o src/addsub/fp_add_d.o src/addsub/fp_addmod.o src/addsub/fp_cmp.o \
35 src/addsub/fp_cmp_d.o src/addsub/fp_cmp_mag.o src/addsub/fp_sub.o src/addsub/fp_sub_d.o \
36 src/addsub/fp_submod.o src/addsub/s_fp_add.o src/addsub/s_fp_sub.o src/bin/fp_radix_size.o \
37 src/bin/fp_read_radix.o src/bin/fp_read_signed_bin.o src/bin/fp_read_unsigned_bin.o \
38 src/bin/fp_reverse.o src/bin/fp_signed_bin_size.o src/bin/fp_s_rmap.o src/bin/fp_toradix.o \
39 src/bin/fp_toradix_n.o src/bin/fp_to_signed_bin.o src/bin/fp_to_unsigned_bin.o \
40 src/bin/fp_unsigned_bin_size.o src/bit/fp_cnt_lsb.o src/bit/fp_count_bits.o src/bit/fp_div_2.o \
41 src/bit/fp_div_2d.o src/bit/fp_lshd.o src/bit/fp_mod_2d.o src/bit/fp_rshd.o src/divide/fp_div.o \
42 src/divide/fp_div_d.o src/divide/fp_mod.o src/divide/fp_mod_d.o src/exptmod/fp_2expt.o \
43 src/exptmod/fp_exptmod.o src/misc/fp_ident.o src/misc/fp_rand.o src/misc/fp_set.o \
44 src/mont/fp_montgomery_calc_normalization.o src/mont/fp_montgomery_reduce.o \
45 src/mont/fp_montgomery_setup.o src/mul/fp_mul_2.o src/mul/fp_mul_2d.o src/mul/fp_mul.o \
46 src/mul/fp_mul_comba_12.o src/mul/fp_mul_comba_17.o src/mul/fp_mul_comba_20.o src/mul/fp_mul_comba_24.o \
47 src/mul/fp_mul_comba_28.o src/mul/fp_mul_comba_32.o src/mul/fp_mul_comba_3.o src/mul/fp_mul_comba_48.o \
48 src/mul/fp_mul_comba_4.o src/mul/fp_mul_comba_64.o src/mul/fp_mul_comba_6.o src/mul/fp_mul_comba_7.o \
49 src/mul/fp_mul_comba_8.o src/mul/fp_mul_comba_9.o src/mul/fp_mul_comba.o \
50 src/mul/fp_mul_comba_small_set.o src/mul/fp_mul_d.o src/mul/fp_mulmod.o src/numtheory/fp_gcd.o \
51 src/numtheory/fp_invmod.o src/numtheory/fp_isprime.o src/numtheory/fp_isprime_ex.o \
52 src/numtheory/fp_lcm.o src/numtheory/fp_prime_miller_rabin.o src/numtheory/fp_prime_random_ex.o \
53 src/sqr/fp_sqr.o src/sqr/fp_sqr_comba_12.o src/sqr/fp_sqr_comba_17.o src/sqr/fp_sqr_comba_20.o \
54 src/sqr/fp_sqr_comba_24.o src/sqr/fp_sqr_comba_28.o src/sqr/fp_sqr_comba_32.o src/sqr/fp_sqr_comba_3.o \
55 src/sqr/fp_sqr_comba_48.o src/sqr/fp_sqr_comba_4.o src/sqr/fp_sqr_comba_64.o src/sqr/fp_sqr_comba_6.o \
56 src/sqr/fp_sqr_comba_7.o src/sqr/fp_sqr_comba_8.o src/sqr/fp_sqr_comba_9.o src/sqr/fp_sqr_comba.o \
57 src/sqr/fp_sqr_comba_generic.o src/sqr/fp_sqr_comba_small_set.o src/sqr/fp_sqrmod.o
59 HEADERS_PUB:=src/headers/tfm.h
60 HEADERS=src/headers/tfm_private.h $(HEADERS_PUB)
62 #END_INS
64 $(OBJECTS): $(HEADERS)
66 $(LIBNAME): $(OBJECTS)
67 $(AR) $(ARFLAGS) $@ $(OBJECTS)
68 $(RANLIB) $@
70 install: .common_install
72 uninstall: .common_uninstall
74 .PHONY: test
75 test: $(LIBNAME) demo/test.o
76 $(CC) $(CFLAGS) demo/test.o $(LIB_PRE) $(LIBNAME) $(LIB_POST) $(PROF) -o test
78 test_standalone: CFLAGS+=-DTFM_DEMO_TEST_VS_MTEST=0
80 .PHONY: test_standalone
81 test_standalone: $(LIBNAME) demo/test.o
82 $(CC) $(CFLAGS) demo/test.o $(LIB_PRE) $(LIBNAME) $(LIB_POST) $(PROF) -o test
84 testme: test mtest
85 ./mtest/mtest -15 | ./test
87 timing: $(LIBNAME) demo/timing.o
88 $(CC) $(CFLAGS) demo/timing.o $(LIBNAME) $(PROF) -o timing
90 profiled:
91 CC="$(CC)" CROSS_COMPILE="${CROSS_COMPILE} CFLAGS="${CFLAGS} -fprofile-generate" MAKE=${MAKE} ${MAKE} timing
92 ./test
93 rm -f `find . -type f -name "*.o" | xargs`
94 rm -f `find . -type f -name "*.a" | xargs`
95 rm -f test
96 CC=$(CC) CROSS_COMPILE="${CROSS_COMPILE} CFLAGS="${CFLAGS} -fprofile-use" MAKE=${MAKE} ${MAKE} timing
98 # target that pre-processes all coverage data
99 lcov-single-create:
100 lcov --capture --no-external --directory src -q --output-file coverage_std.info
102 # target that removes all coverage output
103 cleancov-clean:
104 rm -f `find . -type f -name "*.info" | xargs`
105 rm -rf coverage/
107 # generates html output from all coverage_*.info files
108 lcov:
109 lcov `find -name 'coverage_*.info' -exec echo -n " -a {}" \;` -o coverage.info -q 2>/dev/null
110 genhtml coverage.info --output-directory coverage -q
112 # combines all necessary steps to create the coverage from a single testrun with e.g.
113 lcov-single:
114 $(MAKE) cleancov-clean
115 $(MAKE) lcov-single-create
116 $(MAKE) lcov
119 #make the code coverage of the library
120 coverage: CFLAGS += -fprofile-arcs -ftest-coverage
121 coverage: LDFLAGS += -lgcov
122 coverage: LIB_PRE = -Wl,--whole-archive
123 coverage: LIB_POST = -Wl,--no-whole-archive
125 coverage: testme
126 $(MAKE) lcov-single
128 stest: $(LIBNAME) demo/stest.o
129 $(CC) $(CFLAGS) demo/stest.o $(LIBNAME) -o stest
131 rsatest: $(LIBNAME) demo/rsa.o
132 $(CC) $(CFLAGS) demo/rsa.o $(LIBNAME) -o rsatest