Commit 962e719ffd9c667daab038d7002b9f145d7e04b9

Thomas de Grivel 2023-02-04T04:05:28

linkage

diff --git a/c3s/configure b/c3s/configure
index a342d20..10b066c 100755
--- a/c3s/configure
+++ b/c3s/configure
@@ -58,28 +58,28 @@ config_lib libmd -lmd
 # Asan config
 CFLAGS_ASAN="$CFLAGS -fsanitize=address -O1 -fno-omit-frame-pointer -g"
 LDFLAGS_ASAN="$LDFLAGS"
-LIBC3_ASAN=../libc3/libc3_asan.a
-LIBS_ASAN="$LIBC3_ASAN $LIBS"
+LIBC3_ASAN=../libc3/libc3_asan.la
+LIBS_ASAN="$LIBC3_ASAN $LIBS ../libtommath/libtommath_asan.la"
 
 # Coverage config
 CFLAGS_COV="$CFLAGS -ftest-coverage -fprofile-arcs"
 LDFLAGS_COV="$LDFLAGS"
-LIBC3_COV=../libc3/libc3_cov.a
-LIBS_COV="$LIBC3_COV $LIBS"
+LIBC3_COV=../libc3/libc3_cov.la
+LIBS_COV="$LIBC3_COV $LIBS ../libtommath/libtommath_cov.la"
 
 # Debug config
 CFLAGS_DEBUG="$CFLAGS -DDEBUG -O0 -ggdb"
 LDFLAGS_DEBUG="$LDFLAGS"
-LIBC3_DEBUG=../libc3/libc3_debug.a
-LIBS_DEBUG="$LIBC3_DEBUG $LIBS"
+LIBC3_DEBUG=../libc3/libc3_debug.la
+LIBS_DEBUG="$LIBC3_DEBUG $LIBS ../libtommath/libtommath_debug.la"
 
 # Main config
 if [ "x$ENV_CFLAGS" = "x" ]; then
     CFLAGS="$CFLAGS $DEFAULT_CFLAGS"
 fi
 CFLAGS="$CFLAGS -DNDEBUG"
-LIBC3=../libc3/libc3.a
-LIBS="$LIBC3 $LIBS"
+LIBC3=../libc3/libc3.la
+LIBS="$LIBC3 $LIBS ../libtommath/libtommath.la"
 
 echo "HAVE_ASAN = $HAVE_ASAN" >> ${CONFIG_MK}
 echo "CPPFLAGS = $CPPFLAGS" >> ${CONFIG_MK}
diff --git a/ic3/configure b/ic3/configure
index 80ca284..1a76591 100755
--- a/ic3/configure
+++ b/ic3/configure
@@ -58,28 +58,28 @@ config_lib libmd -lmd
 # Asan config
 CFLAGS_ASAN="$CFLAGS -fsanitize=address -O1 -fno-omit-frame-pointer -g"
 LDFLAGS_ASAN="$LDFLAGS"
-LIBC3_ASAN=../libc3/libc3_asan.a
-LIBS_ASAN="$LIBC3_ASAN $LIBS"
+LIBC3_ASAN=../libc3/libc3_asan.la
+LIBS_ASAN="$LIBC3_ASAN $LIBS ../libtommath/libtommath_asan.la"
 
 # Coverage config
 CFLAGS_COV="$CFLAGS -ftest-coverage -fprofile-arcs"
 LDFLAGS_COV="$LDFLAGS"
-LIBC3_COV=../libc3/libc3_cov.a
-LIBS_COV="$LIBC3_COV $LIBS"
+LIBC3_COV=../libc3/libc3_cov.la
+LIBS_COV="$LIBC3_COV $LIBS ../libtommath/libtommath_cov.la"
 
 # Debug config
 CFLAGS_DEBUG="$CFLAGS -DDEBUG -O0 -ggdb"
 LDFLAGS_DEBUG="$LDFLAGS"
-LIBC3_DEBUG=../libc3/libc3_debug.a
-LIBS_DEBUG="$LIBC3_DEBUG $LIBS"
+LIBC3_DEBUG=../libc3/libc3_debug.la
+LIBS_DEBUG="$LIBC3_DEBUG $LIBS ../libtommath/libtommath_debug.la"
 
 # Main config
 if [ "x$ENV_CFLAGS" = "x" ]; then
     CFLAGS="$CFLAGS $DEFAULT_CFLAGS"
 fi
 CFLAGS="$CFLAGS -DNDEBUG"
-LIBC3=../libc3/libc3.a
-LIBS="$LIBC3 $LIBS"
+LIBC3=../libc3/libc3.la
+LIBS="$LIBC3 $LIBS ../libtommath/libtommath.la"
 
 echo "HAVE_ASAN = $HAVE_ASAN" >> ${CONFIG_MK}
 echo "CPPFLAGS = $CPPFLAGS" >> ${CONFIG_MK}
diff --git a/libc3/configure b/libc3/configure
index deb5309..27db14e 100755
--- a/libc3/configure
+++ b/libc3/configure
@@ -53,24 +53,24 @@ update_config_h
 # Address Sanitizer config
 CFLAGS_ASAN="$CFLAGS -fsanitize=address -O1 -fno-omit-frame-pointer -g"
 LDFLAGS_ASAN="$LDFLAGS"
-LIBS_ASAN="$LIBS"
+LIBS_ASAN="$LIBS ../libtommath/libtommath_asan.la"
 
 # Coverage config
 CFLAGS_COV="$CFLAGS -ftest-coverage -fprofile-arcs"
 LDFLAGS_COV="$LDFLAGS"
-LIBS_COV="$LIBS"
+LIBS_COV="$LIBS ../libtommath/libtommath_cov.la"
 
 # Debug config
 CFLAGS_DEBUG="$CFLAGS -DDEBUG -O0 -ggdb"
 LDFLAGS_DEBUG="$LDFLAGS"
-LIBS_DEBUG="$LIBS"
+LIBS_DEBUG="$LIBS ../libtommath/libtommath_debug.la"
 
 # Main config
 if [ "x$ENV_CFLAGS" = "x" ]; then
     CFLAGS="$CFLAGS $DEFAULT_CFLAGS"
 fi
 CFLAGS="$CFLAGS -DNDEBUG"
-LIBS="$LIBS"
+LIBS="$LIBS ../libtommath/libtommath.la"
 
 make -f gen.mk
 
diff --git a/libc3/sources.mk b/libc3/sources.mk
index f105fd3..f6c11b1 100644
--- a/libc3/sources.mk
+++ b/libc3/sources.mk
@@ -149,159 +149,4 @@ LO_SOURCES = \
 	tag.c \
 	tuple.c \
 	ucd.c \
-	../libtommath/bn_cutoffs.c \
-	../libtommath/bn_deprecated.c \
-	../libtommath/bn_mp_2expt.c \
-	../libtommath/bn_mp_abs.c \
-	../libtommath/bn_mp_add.c \
-	../libtommath/bn_mp_add_d.c \
-	../libtommath/bn_mp_addmod.c \
-	../libtommath/bn_mp_and.c \
-	../libtommath/bn_mp_clamp.c \
-	../libtommath/bn_mp_clear.c \
-	../libtommath/bn_mp_clear_multi.c \
-	../libtommath/bn_mp_cmp.c \
-	../libtommath/bn_mp_cmp_d.c \
-	../libtommath/bn_mp_cmp_mag.c \
-	../libtommath/bn_mp_cnt_lsb.c \
-	../libtommath/bn_mp_complement.c \
-	../libtommath/bn_mp_copy.c \
-	../libtommath/bn_mp_count_bits.c \
-	../libtommath/bn_mp_decr.c \
-	../libtommath/bn_mp_div.c \
-	../libtommath/bn_mp_div_2.c \
-	../libtommath/bn_mp_div_2d.c \
-	../libtommath/bn_mp_div_3.c \
-	../libtommath/bn_mp_div_d.c \
-	../libtommath/bn_mp_dr_is_modulus.c \
-	../libtommath/bn_mp_dr_reduce.c \
-	../libtommath/bn_mp_dr_setup.c \
-	../libtommath/bn_mp_error_to_string.c \
-	../libtommath/bn_mp_exch.c \
-	../libtommath/bn_mp_expt_u32.c \
-	../libtommath/bn_mp_exptmod.c \
-	../libtommath/bn_mp_exteuclid.c \
-	../libtommath/bn_mp_fread.c \
-	../libtommath/bn_mp_from_sbin.c \
-	../libtommath/bn_mp_from_ubin.c \
-	../libtommath/bn_mp_fwrite.c \
-	../libtommath/bn_mp_gcd.c \
-	../libtommath/bn_mp_get_double.c \
-	../libtommath/bn_mp_get_i32.c \
-	../libtommath/bn_mp_get_i64.c \
-	../libtommath/bn_mp_get_l.c \
-	../libtommath/bn_mp_get_ll.c \
-	../libtommath/bn_mp_get_mag_u32.c \
-	../libtommath/bn_mp_get_mag_u64.c \
-	../libtommath/bn_mp_get_mag_ul.c \
-	../libtommath/bn_mp_get_mag_ull.c \
-	../libtommath/bn_mp_grow.c \
-	../libtommath/bn_mp_incr.c \
-	../libtommath/bn_mp_init.c \
-	../libtommath/bn_mp_init_copy.c \
-	../libtommath/bn_mp_init_i32.c \
-	../libtommath/bn_mp_init_i64.c \
-	../libtommath/bn_mp_init_l.c \
-	../libtommath/bn_mp_init_ll.c \
-	../libtommath/bn_mp_init_multi.c \
-	../libtommath/bn_mp_init_set.c \
-	../libtommath/bn_mp_init_size.c \
-	../libtommath/bn_mp_init_u32.c \
-	../libtommath/bn_mp_init_u64.c \
-	../libtommath/bn_mp_init_ul.c \
-	../libtommath/bn_mp_init_ull.c \
-	../libtommath/bn_mp_invmod.c \
-	../libtommath/bn_mp_is_square.c \
-	../libtommath/bn_mp_iseven.c \
-	../libtommath/bn_mp_isodd.c \
-	../libtommath/bn_mp_kronecker.c \
-	../libtommath/bn_mp_lcm.c \
-	../libtommath/bn_mp_log_u32.c \
-	../libtommath/bn_mp_lshd.c \
-	../libtommath/bn_mp_mod.c \
-	../libtommath/bn_mp_mod_2d.c \
-	../libtommath/bn_mp_mod_d.c \
-	../libtommath/bn_mp_montgomery_calc_normalization.c \
-	../libtommath/bn_mp_montgomery_reduce.c \
-	../libtommath/bn_mp_montgomery_setup.c \
-	../libtommath/bn_mp_mul.c \
-	../libtommath/bn_mp_mul_2.c \
-	../libtommath/bn_mp_mul_2d.c \
-	../libtommath/bn_mp_mul_d.c \
-	../libtommath/bn_mp_mulmod.c \
-	../libtommath/bn_mp_neg.c \
-	../libtommath/bn_mp_or.c \
-	../libtommath/bn_mp_pack.c \
-	../libtommath/bn_mp_pack_count.c \
-	../libtommath/bn_mp_prime_fermat.c \
-	../libtommath/bn_mp_prime_frobenius_underwood.c \
-	../libtommath/bn_mp_prime_is_prime.c \
-	../libtommath/bn_mp_prime_miller_rabin.c \
-	../libtommath/bn_mp_prime_next_prime.c \
-	../libtommath/bn_mp_prime_rabin_miller_trials.c \
-	../libtommath/bn_mp_prime_rand.c \
-	../libtommath/bn_mp_prime_strong_lucas_selfridge.c \
-	../libtommath/bn_mp_radix_size.c \
-	../libtommath/bn_mp_radix_smap.c \
-	../libtommath/bn_mp_rand.c \
-	../libtommath/bn_mp_read_radix.c \
-	../libtommath/bn_mp_reduce.c \
-	../libtommath/bn_mp_reduce_2k.c \
-	../libtommath/bn_mp_reduce_2k_l.c \
-	../libtommath/bn_mp_reduce_2k_setup.c \
-	../libtommath/bn_mp_reduce_2k_setup_l.c \
-	../libtommath/bn_mp_reduce_is_2k.c \
-	../libtommath/bn_mp_reduce_is_2k_l.c \
-	../libtommath/bn_mp_reduce_setup.c \
-	../libtommath/bn_mp_root_u32.c \
-	../libtommath/bn_mp_rshd.c \
-	../libtommath/bn_mp_sbin_size.c \
-	../libtommath/bn_mp_set.c \
-	../libtommath/bn_mp_set_i32.c \
-	../libtommath/bn_mp_set_i64.c \
-	../libtommath/bn_mp_set_l.c \
-	../libtommath/bn_mp_set_ll.c \
-	../libtommath/bn_mp_set_u32.c \
-	../libtommath/bn_mp_set_u64.c \
-	../libtommath/bn_mp_set_ul.c \
-	../libtommath/bn_mp_set_ull.c \
-	../libtommath/bn_mp_shrink.c \
-	../libtommath/bn_mp_signed_rsh.c \
-	../libtommath/bn_mp_sqr.c \
-	../libtommath/bn_mp_sqrmod.c \
-	../libtommath/bn_mp_sqrt.c \
-	../libtommath/bn_mp_sqrtmod_prime.c \
-	../libtommath/bn_mp_sub.c \
-	../libtommath/bn_mp_sub_d.c \
-	../libtommath/bn_mp_submod.c \
-	../libtommath/bn_mp_to_radix.c \
-	../libtommath/bn_mp_to_sbin.c \
-	../libtommath/bn_mp_to_ubin.c \
-	../libtommath/bn_mp_ubin_size.c \
-	../libtommath/bn_mp_unpack.c \
-	../libtommath/bn_mp_xor.c \
-	../libtommath/bn_mp_zero.c \
-	../libtommath/bn_prime_tab.c \
-	../libtommath/bn_s_mp_add.c \
-	../libtommath/bn_s_mp_balance_mul.c \
-	../libtommath/bn_s_mp_exptmod.c \
-	../libtommath/bn_s_mp_exptmod_fast.c \
-	../libtommath/bn_s_mp_get_bit.c \
-	../libtommath/bn_s_mp_invmod_fast.c \
-	../libtommath/bn_s_mp_invmod_slow.c \
-	../libtommath/bn_s_mp_karatsuba_mul.c \
-	../libtommath/bn_s_mp_karatsuba_sqr.c \
-	../libtommath/bn_s_mp_montgomery_reduce_fast.c \
-	../libtommath/bn_s_mp_mul_digs.c \
-	../libtommath/bn_s_mp_mul_digs_fast.c \
-	../libtommath/bn_s_mp_mul_high_digs.c \
-	../libtommath/bn_s_mp_mul_high_digs_fast.c \
-	../libtommath/bn_s_mp_prime_is_divisible.c \
-	../libtommath/bn_s_mp_rand_jenkins.c \
-	../libtommath/bn_s_mp_reverse.c \
-	../libtommath/bn_s_mp_sqr.c \
-	../libtommath/bn_s_mp_sqr_fast.c \
-	../libtommath/bn_s_mp_sub.c \
-	../libtommath/bn_s_mp_toom_mul.c \
-	../libtommath/bn_s_mp_toom_sqr.c \
 
diff --git a/libc3/sources.sh b/libc3/sources.sh
index 90d3a37..e8fb567 100644
--- a/libc3/sources.sh
+++ b/libc3/sources.sh
@@ -1,4 +1,4 @@
 # sources.sh generated by update_sources
 HEADERS='arg.h binding.h bool.h buf.h buf_file.h buf_inspect.h buf_parse.h buf_parse_c.h buf_save.h c3.h c_types.h call.h character.h compare.h config.h debug.h env.h error.h error_handler.h eval.h fact.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h fn.h frame.h hash.h ident.h integer.h list.h log.h module.h quote.h set__fact.h set__tag.h set_cursor__fact.h set_cursor__tag.h set_item__fact.h set_item__tag.h sha1.h skiplist__fact.h skiplist_node__fact.h str.h sym.h tag.h tuple.h types.h ucd.h '
 SOURCES='arg.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_parse.c buf_parse_c.c buf_save.c c3.c call.c character.c compare.c debug.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c frame.c hash.c ident.c integer.c list.c log.c module.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c ucd.c '
-LO_SOURCES='arg.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_parse.c buf_parse_c.c buf_save.c c3.c call.c character.c compare.c debug.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c frame.c hash.c ident.c integer.c list.c log.c module.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c ucd.c ../libtommath/bn_cutoffs.c ../libtommath/bn_deprecated.c ../libtommath/bn_mp_2expt.c ../libtommath/bn_mp_abs.c ../libtommath/bn_mp_add.c ../libtommath/bn_mp_add_d.c ../libtommath/bn_mp_addmod.c ../libtommath/bn_mp_and.c ../libtommath/bn_mp_clamp.c ../libtommath/bn_mp_clear.c ../libtommath/bn_mp_clear_multi.c ../libtommath/bn_mp_cmp.c ../libtommath/bn_mp_cmp_d.c ../libtommath/bn_mp_cmp_mag.c ../libtommath/bn_mp_cnt_lsb.c ../libtommath/bn_mp_complement.c ../libtommath/bn_mp_copy.c ../libtommath/bn_mp_count_bits.c ../libtommath/bn_mp_decr.c ../libtommath/bn_mp_div.c ../libtommath/bn_mp_div_2.c ../libtommath/bn_mp_div_2d.c ../libtommath/bn_mp_div_3.c ../libtommath/bn_mp_div_d.c ../libtommath/bn_mp_dr_is_modulus.c ../libtommath/bn_mp_dr_reduce.c ../libtommath/bn_mp_dr_setup.c ../libtommath/bn_mp_error_to_string.c ../libtommath/bn_mp_exch.c ../libtommath/bn_mp_expt_u32.c ../libtommath/bn_mp_exptmod.c ../libtommath/bn_mp_exteuclid.c ../libtommath/bn_mp_fread.c ../libtommath/bn_mp_from_sbin.c ../libtommath/bn_mp_from_ubin.c ../libtommath/bn_mp_fwrite.c ../libtommath/bn_mp_gcd.c ../libtommath/bn_mp_get_double.c ../libtommath/bn_mp_get_i32.c ../libtommath/bn_mp_get_i64.c ../libtommath/bn_mp_get_l.c ../libtommath/bn_mp_get_ll.c ../libtommath/bn_mp_get_mag_u32.c ../libtommath/bn_mp_get_mag_u64.c ../libtommath/bn_mp_get_mag_ul.c ../libtommath/bn_mp_get_mag_ull.c ../libtommath/bn_mp_grow.c ../libtommath/bn_mp_incr.c ../libtommath/bn_mp_init.c ../libtommath/bn_mp_init_copy.c ../libtommath/bn_mp_init_i32.c ../libtommath/bn_mp_init_i64.c ../libtommath/bn_mp_init_l.c ../libtommath/bn_mp_init_ll.c ../libtommath/bn_mp_init_multi.c ../libtommath/bn_mp_init_set.c ../libtommath/bn_mp_init_size.c ../libtommath/bn_mp_init_u32.c ../libtommath/bn_mp_init_u64.c ../libtommath/bn_mp_init_ul.c ../libtommath/bn_mp_init_ull.c ../libtommath/bn_mp_invmod.c ../libtommath/bn_mp_is_square.c ../libtommath/bn_mp_iseven.c ../libtommath/bn_mp_isodd.c ../libtommath/bn_mp_kronecker.c ../libtommath/bn_mp_lcm.c ../libtommath/bn_mp_log_u32.c ../libtommath/bn_mp_lshd.c ../libtommath/bn_mp_mod.c ../libtommath/bn_mp_mod_2d.c ../libtommath/bn_mp_mod_d.c ../libtommath/bn_mp_montgomery_calc_normalization.c ../libtommath/bn_mp_montgomery_reduce.c ../libtommath/bn_mp_montgomery_setup.c ../libtommath/bn_mp_mul.c ../libtommath/bn_mp_mul_2.c ../libtommath/bn_mp_mul_2d.c ../libtommath/bn_mp_mul_d.c ../libtommath/bn_mp_mulmod.c ../libtommath/bn_mp_neg.c ../libtommath/bn_mp_or.c ../libtommath/bn_mp_pack.c ../libtommath/bn_mp_pack_count.c ../libtommath/bn_mp_prime_fermat.c ../libtommath/bn_mp_prime_frobenius_underwood.c ../libtommath/bn_mp_prime_is_prime.c ../libtommath/bn_mp_prime_miller_rabin.c ../libtommath/bn_mp_prime_next_prime.c ../libtommath/bn_mp_prime_rabin_miller_trials.c ../libtommath/bn_mp_prime_rand.c ../libtommath/bn_mp_prime_strong_lucas_selfridge.c ../libtommath/bn_mp_radix_size.c ../libtommath/bn_mp_radix_smap.c ../libtommath/bn_mp_rand.c ../libtommath/bn_mp_read_radix.c ../libtommath/bn_mp_reduce.c ../libtommath/bn_mp_reduce_2k.c ../libtommath/bn_mp_reduce_2k_l.c ../libtommath/bn_mp_reduce_2k_setup.c ../libtommath/bn_mp_reduce_2k_setup_l.c ../libtommath/bn_mp_reduce_is_2k.c ../libtommath/bn_mp_reduce_is_2k_l.c ../libtommath/bn_mp_reduce_setup.c ../libtommath/bn_mp_root_u32.c ../libtommath/bn_mp_rshd.c ../libtommath/bn_mp_sbin_size.c ../libtommath/bn_mp_set.c ../libtommath/bn_mp_set_i32.c ../libtommath/bn_mp_set_i64.c ../libtommath/bn_mp_set_l.c ../libtommath/bn_mp_set_ll.c ../libtommath/bn_mp_set_u32.c ../libtommath/bn_mp_set_u64.c ../libtommath/bn_mp_set_ul.c ../libtommath/bn_mp_set_ull.c ../libtommath/bn_mp_shrink.c ../libtommath/bn_mp_signed_rsh.c ../libtommath/bn_mp_sqr.c ../libtommath/bn_mp_sqrmod.c ../libtommath/bn_mp_sqrt.c ../libtommath/bn_mp_sqrtmod_prime.c ../libtommath/bn_mp_sub.c ../libtommath/bn_mp_sub_d.c ../libtommath/bn_mp_submod.c ../libtommath/bn_mp_to_radix.c ../libtommath/bn_mp_to_sbin.c ../libtommath/bn_mp_to_ubin.c ../libtommath/bn_mp_ubin_size.c ../libtommath/bn_mp_unpack.c ../libtommath/bn_mp_xor.c ../libtommath/bn_mp_zero.c ../libtommath/bn_prime_tab.c ../libtommath/bn_s_mp_add.c ../libtommath/bn_s_mp_balance_mul.c ../libtommath/bn_s_mp_exptmod.c ../libtommath/bn_s_mp_exptmod_fast.c ../libtommath/bn_s_mp_get_bit.c ../libtommath/bn_s_mp_invmod_fast.c ../libtommath/bn_s_mp_invmod_slow.c ../libtommath/bn_s_mp_karatsuba_mul.c ../libtommath/bn_s_mp_karatsuba_sqr.c ../libtommath/bn_s_mp_montgomery_reduce_fast.c ../libtommath/bn_s_mp_mul_digs.c ../libtommath/bn_s_mp_mul_digs_fast.c ../libtommath/bn_s_mp_mul_high_digs.c ../libtommath/bn_s_mp_mul_high_digs_fast.c ../libtommath/bn_s_mp_prime_is_divisible.c ../libtommath/bn_s_mp_rand_jenkins.c ../libtommath/bn_s_mp_reverse.c ../libtommath/bn_s_mp_sqr.c ../libtommath/bn_s_mp_sqr_fast.c ../libtommath/bn_s_mp_sub.c ../libtommath/bn_s_mp_toom_mul.c ../libtommath/bn_s_mp_toom_sqr.c '
+LO_SOURCES='arg.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_parse.c buf_parse_c.c buf_save.c c3.c call.c character.c compare.c debug.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c fn.c frame.c hash.c ident.c integer.c list.c log.c module.c quote.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c skiplist__fact.c skiplist_node__fact.c str.c sym.c tag.c tuple.c ucd.c '
diff --git a/libc3/update_sources b/libc3/update_sources
index 120b8b2..155f211 100755
--- a/libc3/update_sources
+++ b/libc3/update_sources
@@ -23,8 +23,7 @@ sources HEADERS "$HEADERS"
 SOURCES="$(ls *.c)"
 sources SOURCES "$SOURCES"
 
-LO_SOURCES="$SOURCES
-$(ls ../libtommath/*.c | grep -v -e bn_mp_set_double.c -e bn_s_mp_rand_platform.c)"
+LO_SOURCES="$SOURCES"
 sources LO_SOURCES "$LO_SOURCES"
 
 update_sources_mk
diff --git a/libtommath b/libtommath
index c190d09..af774dd 160000
--- a/libtommath
+++ b/libtommath
@@ -1 +1 @@
-Subproject commit c190d091c3e12634ca853d6e2d23d3e487da7c0d
+Subproject commit af774dd891ee44a2439a5e0cbe64b4cb246e1ba9
diff --git a/sources.mk b/sources.mk
index 831d324..303d5f2 100644
--- a/sources.mk
+++ b/sources.mk
@@ -1,4 +1,4 @@
 # sources.mk generated by update_sources
 C3_CONFIGURES = c3c/configure c3s/configure c3s/update_sources ic3/configure ic3/update_sources libc3/configure libc3/update_sources test/configure test/update_sources ucd2c/configure  libtommath/configure
 C3_MAKEFILES = c3c/Makefile c3s/Makefile ic3/Makefile libc3/Makefile libc3/gen.mk test/Makefile ucd2c/Makefile  libtommath/Makefile
-C3_C_SOURCES = c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/ic3.c ic3/linenoise.c libc3/arg.c libc3/arg.h libc3/binding.c libc3/binding.h libc3/bool.c libc3/bool.h libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/buf.c libc3/buf.h libc3/buf_file.c libc3/buf_file.h libc3/buf_inspect.c libc3/buf_inspect.h libc3/buf_parse.c libc3/buf_parse.h libc3/buf_parse_c.c libc3/buf_parse_c.h libc3/buf_save.c libc3/log.h libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/compare.c libc3/compare.h libc3/buf_save.h libc3/c3.c libc3/c3.h libc3/c_types.h libc3/call.c libc3/call.h libc3/character.c libc3/debug.c libc3/debug.h libc3/env.c libc3/env.h libc3/log.c libc3/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/fact.h libc3/facts.c libc3/facts.h libc3/facts_cursor.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/facts_spec_cursor.h libc3/character.h libc3/set_item__tag.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/facts_with_cursor.h libc3/fn.c libc3/fn.h libc3/frame.c libc3/frame.h libc3/hash.c libc3/hash.h libc3/ident.c libc3/ident.h libc3/integer.c libc3/integer.h libc3/list.c libc3/list.h libc3/module.h libc3/quote.c libc3/quote.h libc3/types.h libc3/set.c.in libc3/set.h.in libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/str.c libc3/set_item.c.in libc3/set_item.h.in libc3/fact.c libc3/skiplist.c.in libc3/skiplist.h.in libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/sym.c libc3/sym.h libc3/tag.c libc3/tuple.c libc3/tuple.h libc3/ucd.c libc3/ucd.h libc3/tag.h test/bool_test.c test/buf_file_test.c test/buf_inspect_test.c test/buf_parse_test.c test/buf_test.c test/call_test.c test/character_test.c test/hash_test.c test/fact_test.c test/fact_test.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/ident_test.c test/libc3_test.c test/tuple_test.c test/list_test.c test/set__fact_test.c test/set__tag_test.c test/compare_test.h test/skiplist__fact_test.c test/str_test.c test/sym_test.c test/tag_test.c test/tag_test.h test/test.c test/test.h test/types_test.c test/compare_test.c  ucd2c/ucd.h ucd2c/ucd2c.c
+C3_C_SOURCES = c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/ic3.c ic3/linenoise.c libc3/arg.c libc3/arg.h libc3/binding.c libc3/binding.h libc3/bool.c libc3/bool.h libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/buf.c libc3/buf.h libc3/buf_file.c libc3/buf_file.h libc3/buf_inspect.c libc3/buf_inspect.h libc3/buf_parse.c libc3/buf_parse.h libc3/buf_parse_c.c libc3/buf_parse_c.h libc3/buf_save.c libc3/log.h libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/compare.c libc3/compare.h libc3/buf_save.h libc3/env.c libc3/env.h libc3/c_types.h libc3/call.c libc3/call.h libc3/character.c libc3/debug.c libc3/debug.h libc3/log.c libc3/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/fact.h libc3/facts.c libc3/facts.h libc3/facts_cursor.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/facts_spec_cursor.h libc3/character.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/c3.c libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/facts_with_cursor.h libc3/fn.c libc3/fn.h libc3/frame.c libc3/frame.h libc3/hash.c libc3/hash.h libc3/ident.c libc3/ident.h libc3/integer.c libc3/integer.h libc3/list.c libc3/list.h libc3/module.h libc3/quote.c libc3/quote.h libc3/types.h libc3/c3.h libc3/set.c.in libc3/set.h.in libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/str.c libc3/set_item.c.in libc3/set_item.h.in libc3/fact.c libc3/skiplist.c.in libc3/skiplist.h.in libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/sym.c libc3/sym.h libc3/tag.c libc3/tuple.c libc3/tuple.h libc3/ucd.c libc3/ucd.h libc3/tag.h libc3/module.c libc3/sha1.h test/bool_test.c test/buf_file_test.c test/buf_inspect_test.c test/buf_parse_test.c test/buf_test.c test/call_test.c test/character_test.c test/hash_test.c test/fact_test.c test/fact_test.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/ident_test.c test/libc3_test.c test/tuple_test.c test/list_test.c test/set__fact_test.c test/set__tag_test.c test/compare_test.h test/skiplist__fact_test.c test/str_test.c test/test.c test/test.h test/sym_test.c test/tag_test.c test/tag_test.h test/types_test.c test/compare_test.c  ucd2c/ucd.h ucd2c/ucd2c.c
diff --git a/sources.sh b/sources.sh
index 9c2bf3a..f6933db 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,4 +1,4 @@
 # sources.sh generated by update_sources
 C3_CONFIGURES='c3c/configure c3s/configure c3s/update_sources ic3/configure ic3/update_sources libc3/configure libc3/update_sources test/configure test/update_sources ucd2c/configure  libtommath/configure'
 C3_MAKEFILES='c3c/Makefile c3s/Makefile ic3/Makefile libc3/Makefile libc3/gen.mk test/Makefile ucd2c/Makefile  libtommath/Makefile'
-C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/ic3.c ic3/linenoise.c libc3/arg.c libc3/arg.h libc3/binding.c libc3/binding.h libc3/bool.c libc3/bool.h libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/buf.c libc3/buf.h libc3/buf_file.c libc3/buf_file.h libc3/buf_inspect.c libc3/buf_inspect.h libc3/buf_parse.c libc3/buf_parse.h libc3/buf_parse_c.c libc3/buf_parse_c.h libc3/buf_save.c libc3/log.h libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/compare.c libc3/compare.h libc3/buf_save.h libc3/c3.c libc3/c3.h libc3/c_types.h libc3/call.c libc3/call.h libc3/character.c libc3/debug.c libc3/debug.h libc3/env.c libc3/env.h libc3/log.c libc3/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/fact.h libc3/facts.c libc3/facts.h libc3/facts_cursor.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/facts_spec_cursor.h libc3/character.h libc3/set_item__tag.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/facts_with_cursor.h libc3/fn.c libc3/fn.h libc3/frame.c libc3/frame.h libc3/hash.c libc3/hash.h libc3/ident.c libc3/ident.h libc3/integer.c libc3/integer.h libc3/list.c libc3/list.h libc3/module.h libc3/quote.c libc3/quote.h libc3/types.h libc3/set.c.in libc3/set.h.in libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/str.c libc3/set_item.c.in libc3/set_item.h.in libc3/fact.c libc3/skiplist.c.in libc3/skiplist.h.in libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/sym.c libc3/sym.h libc3/tag.c libc3/tuple.c libc3/tuple.h libc3/ucd.c libc3/ucd.h libc3/tag.h test/bool_test.c test/buf_file_test.c test/buf_inspect_test.c test/buf_parse_test.c test/buf_test.c test/call_test.c test/character_test.c test/hash_test.c test/fact_test.c test/fact_test.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/ident_test.c test/libc3_test.c test/tuple_test.c test/list_test.c test/set__fact_test.c test/set__tag_test.c test/compare_test.h test/skiplist__fact_test.c test/str_test.c test/sym_test.c test/tag_test.c test/tag_test.h test/test.c test/test.h test/types_test.c test/compare_test.c  ucd2c/ucd.h ucd2c/ucd2c.c'
+C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/ic3.c ic3/linenoise.c libc3/arg.c libc3/arg.h libc3/binding.c libc3/binding.h libc3/bool.c libc3/bool.h libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/buf.c libc3/buf.h libc3/buf_file.c libc3/buf_file.h libc3/buf_inspect.c libc3/buf_inspect.h libc3/buf_parse.c libc3/buf_parse.h libc3/buf_parse_c.c libc3/buf_parse_c.h libc3/buf_save.c libc3/log.h libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/compare.c libc3/compare.h libc3/buf_save.h libc3/env.c libc3/env.h libc3/c_types.h libc3/call.c libc3/call.h libc3/character.c libc3/debug.c libc3/debug.h libc3/log.c libc3/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/fact.h libc3/facts.c libc3/facts.h libc3/facts_cursor.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/facts_spec_cursor.h libc3/character.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/c3.c libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/facts_with_cursor.h libc3/fn.c libc3/fn.h libc3/frame.c libc3/frame.h libc3/hash.c libc3/hash.h libc3/ident.c libc3/ident.h libc3/integer.c libc3/integer.h libc3/list.c libc3/list.h libc3/module.h libc3/quote.c libc3/quote.h libc3/types.h libc3/c3.h libc3/set.c.in libc3/set.h.in libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/str.c libc3/set_item.c.in libc3/set_item.h.in libc3/fact.c libc3/skiplist.c.in libc3/skiplist.h.in libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/sym.c libc3/sym.h libc3/tag.c libc3/tuple.c libc3/tuple.h libc3/ucd.c libc3/ucd.h libc3/tag.h libc3/module.c libc3/sha1.h test/bool_test.c test/buf_file_test.c test/buf_inspect_test.c test/buf_parse_test.c test/buf_test.c test/call_test.c test/character_test.c test/hash_test.c test/fact_test.c test/fact_test.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/ident_test.c test/libc3_test.c test/tuple_test.c test/list_test.c test/set__fact_test.c test/set__tag_test.c test/compare_test.h test/skiplist__fact_test.c test/str_test.c test/test.c test/test.h test/sym_test.c test/tag_test.c test/tag_test.h test/types_test.c test/compare_test.c  ucd2c/ucd.h ucd2c/ucd2c.c'
diff --git a/test/configure b/test/configure
index 5461637..ba5d4cf 100755
--- a/test/configure
+++ b/test/configure
@@ -58,28 +58,28 @@ config_lib libmd -lmd
 # Asan config
 CFLAGS_ASAN="$CFLAGS -fsanitize=address -O1 -fno-omit-frame-pointer -g"
 LDFLAGS_ASAN="$LDFLAGS"
-LIBC3_ASAN=../libc3/libc3_asan.a
-LIBS_ASAN="$LIBC3_ASAN $LIBS"
+LIBC3_ASAN=../libc3/libc3_asan.la
+LIBS_ASAN="$LIBC3_ASAN $LIBS ../libtommath/libtommath_asan.la"
 
 # Coverage config
 CFLAGS_COV="$CFLAGS -ftest-coverage -fprofile-arcs"
 LDFLAGS_COV="$LDFLAGS"
-LIBC3_COV=../libc3/libc3_cov.a
-LIBS_COV="$LIBC3_COV $LIBS"
+LIBC3_COV=../libc3/libc3_cov.la
+LIBS_COV="$LIBC3_COV $LIBS ../libtommath/libtommath_cov.la"
 
 # Debug config
 CFLAGS_DEBUG="$CFLAGS -DDEBUG -O0 -ggdb"
 LDFLAGS_DEBUG="$LDFLAGS"
-LIBC3_DEBUG=../libc3/libc3_debug.a
-LIBS_DEBUG="$LIBC3_DEBUG $LIBS"
+LIBC3_DEBUG=../libc3/libc3_debug.la
+LIBS_DEBUG="$LIBC3_DEBUG $LIBS ../libtommath/libtommath_debug.la"
 
 # Main config
 if [ "x$ENV_CFLAGS" = "x" ]; then
     CFLAGS="$CFLAGS $DEFAULT_CFLAGS"
 fi
 CFLAGS="$CFLAGS -DNDEBUG"
-LIBC3=../libc3/libc3.a
-LIBS="$LIBC3 $LIBS"
+LIBC3=../libc3/libc3.la
+LIBS="$LIBC3 $LIBS ../libtommath/libtommath.la"
 
 echo "HAVE_ASAN = $HAVE_ASAN" >> ${CONFIG_MK}
 echo "CPPFLAGS = $CPPFLAGS" >> ${CONFIG_MK}