# -------------------------------------------------------------------- # This source distribution is placed in the public domain by its author, # Jason Papadopoulos. You may use it for any purpose, free of charge, # without having to notify anyone. I disclaim any responsibility for any # errors. # # Optionally, please be nice and tell me if you find this source to be # useful. Again optionally, if you add to the functionality present here # please consider making those additions public too, so that others may # benefit from your work. # --jasonp@boo.net 6/3/07 # -------------------------------------------------------------------- # xlc on AIX; note that apparently a 64-bit binary crashes # CC = xlc # OPT_FLAGS = -O2 # MACHINE_FLAGS = -DRS6K -qmaxmem=8192 -q32 # gcc on Apple G5; for 64-bit mode, add '-m64' # CC = gcc # OPT_FLAGS = -O3 -mcpu=970 -mtune=970 -fomit-frame-pointer # OPT_FLAGS = -O3 -mcpu=7450 -mtune=7450 -fomit-frame-pointer # WARN_FLAGS = -Wall -W -Wconversion # gcc with basic optimization (-march flag could # get overridden by architecture-specific builds) #CC = gcc WARN_FLAGS = -Wall -W -Wconversion #OPT_FLAGS = -O3 -fomit-frame-pointer -DNDEBUG -march=athlon # OPT_FLAGS = -O3 -fomit-frame-pointer -DNDEBUG -march=k8 # note that if GSL was built as a shared library you may need # to append -lgslcblas to LIB_GSL, or even build a static version # Note to MinGW users: comment out LIB_THREAD, you don't need it LIB_THREAD = $(PTHREAD_LIBS) LIB_GSL = -lgsl -lgslcblas CFLAGS += $(WARN_FLAGS) -Iinclude $(CPPFLAGS) #---------------------------------- Generic file lists ------------------- COMMON_HDR = \ common/lanczos/lanczos.h \ include/ap.h \ include/common.h \ include/dd.h \ include/fastmult.h \ include/msieve.h \ include/mp.h \ include/mp_int.h \ include/util.h COMMON_SRCS = \ common/lanczos/lanczos.c \ common/lanczos/lanczos_matmul.c \ common/lanczos/lanczos_pre.c \ common/ap.c \ common/driver.c \ common/expr_eval.c \ common/fastmult.c \ common/mp.c \ common/prime_sieve.c \ common/rho.c \ common/squfof.c \ common/tinyqs.c \ common/util.c COMMON_OBJS = $(COMMON_SRCS:.c=.ro) COMMON_OBJS_NO_NFS = $(COMMON_SRCS:.c=.o) #---------------------------------- QS file lists ------------------------- QS_HDR = mpqs/mpqs.h QS_SRCS = \ mpqs/gf2.c \ mpqs/mpqs.c \ mpqs/poly.c \ mpqs/relation.c \ mpqs/sieve.c \ mpqs/sieve_core.c \ mpqs/sqrt.c QS_OBJS = \ mpqs/gf2.qo \ mpqs/mpqs.qo \ mpqs/poly.qo \ mpqs/relation.qo \ mpqs/sieve.qo \ mpqs/sqrt.qo QS_CORE_OBJS = \ mpqs/sieve_core_generic_32k.qo \ mpqs/sieve_core_generic_64k.qo QS_CORE_OBJS_X86 = \ mpqs/sieve_core_p2_64k.qo \ mpqs/sieve_core_p3_64k.qo \ mpqs/sieve_core_p4_64k.qo \ mpqs/sieve_core_pm_32k.qo \ mpqs/sieve_core_core_32k.qo \ mpqs/sieve_core_k7_64k.qo \ mpqs/sieve_core_k7xp_64k.qo \ mpqs/sieve_core_k8_64k.qo QS_CORE_OBJS_X86_64 = \ mpqs/sieve_core_p4_64_64k.qo \ mpqs/sieve_core_core_64_32k.qo \ mpqs/sieve_core_k8_64_64k.qo #---------------------------------- NFS file lists ------------------------- NFS_HDR = \ gnfs/sqrt/sqrt.h \ gnfs/poly/poly.h \ gnfs/filter/filter.h \ gnfs/filter/merge_util.h \ gnfs/gnfs.h NFS_SRCS = \ gnfs/poly/poly.c \ gnfs/poly/polyutil.c \ gnfs/poly/poly_noskew.c \ gnfs/poly/poly_skew.c \ gnfs/filter/clique.c \ gnfs/filter/duplicate.c \ gnfs/filter/filter.c \ gnfs/filter/merge.c \ gnfs/filter/merge_post.c \ gnfs/filter/merge_pre.c \ gnfs/filter/merge_util.c \ gnfs/filter/singleton.c \ gnfs/sqrt/sqrt.c \ gnfs/sqrt/sqrt_a.c \ gnfs/fb.c \ gnfs/ffpoly.c \ gnfs/gf2.c \ gnfs/gnfs.c \ gnfs/relation.c \ gnfs/sieve.c NFS_OBJS = $(NFS_SRCS:.c=.no) #---------------------------------- make targets ------------------------- all: @echo "pick a target:" @echo "x86 32-bit Intel/AMD systems" @echo "x86_64 64-bit Intel/AMD systems" @echo "generic portable code" @echo "x86_nfs 32-bit Intel/AMD systems (plus number field sieve)" @echo "x86_64_nfs 64-bit Intel/AMD systems (plus number field sieve)" @echo "generic_nfs portable code (plus number field sieve)" x86: $(COMMON_OBJS_NO_NFS) $(QS_OBJS) \ $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86) rm -f libmsieve.a ar r libmsieve.a $(COMMON_OBJS_NO_NFS) $(QS_OBJS) \ $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86) ranlib libmsieve.a $(CC) $(CFLAGS) $(LDFLAGS) demo.c -o msieve -lm libmsieve.a $(LIB_THREAD) x86_64: $(COMMON_OBJS_NO_NFS) $(QS_OBJS) \ $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86_64) rm -f libmsieve.a ar r libmsieve.a $(COMMON_OBJS_NO_NFS) $(QS_OBJS) \ $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86_64) ranlib libmsieve.a $(CC) $(CFLAGS) $(LDFLAGS) demo.c -o msieve -lm libmsieve.a $(LIB_THREAD) generic: $(COMMON_OBJS_NO_NFS) $(QS_OBJS) $(QS_CORE_OBJS) rm -f libmsieve.a ar r libmsieve.a $(COMMON_OBJS_NO_NFS) $(QS_OBJS) $(QS_CORE_OBJS) ranlib libmsieve.a $(CC) $(CFLAGS) $(LDFLAGS) demo.c -o msieve -lm libmsieve.a $(LIB_THREAD) x86_nfs: $(COMMON_OBJS) $(QS_OBJS) $(NFS_OBJS) \ $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86) rm -f libmsieve.a ar r libmsieve.a $(COMMON_OBJS) $(QS_OBJS) $(NFS_OBJS) \ $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86) ranlib libmsieve.a $(CC) $(CFLAGS) $(LDFLAGS) demo.c -o msieve -lm libmsieve.a \ $(LIB_THREAD) $(LIB_GSL) x86_64_nfs: $(COMMON_OBJS) $(QS_OBJS) $(NFS_OBJS) \ $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86_64) rm -f libmsieve.a ar r libmsieve.a $(COMMON_OBJS) $(QS_OBJS) $(NFS_OBJS) \ $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86_64) ranlib libmsieve.a $(CC) $(CFLAGS) $(LDFLAGS) demo.c -o msieve -lm libmsieve.a \ $(LIB_THREAD) $(LIB_GSL) generic_nfs: $(COMMON_OBJS) $(QS_OBJS) $(QS_CORE_OBJS) $(NFS_OBJS) rm -f libmsieve.a ar r libmsieve.a $(COMMON_OBJS) $(QS_OBJS) $(NFS_OBJS) $(QS_CORE_OBJS) ranlib libmsieve.a $(CC) $(CFLAGS) $(LDFLAGS) demo.c -o msieve -lm libmsieve.a \ $(LIB_THREAD) $(LIB_GSL) clean: rm -f msieve msieve.exe libmsieve.a $(COMMON_OBJS) \ $(COMMON_OBJS_NO_NFS) $(NFS_OBJS) \ $(QS_OBJS) $(QS_CORE_OBJS) $(QS_CORE_OBJS_X86) \ $(QS_CORE_OBJS_X86_64) #----------------------------------------- build rules ---------------------- # common files (no NFS included) %.o: %.c $(COMMON_HDR) $(CC) $(CFLAGS) -DNO_NFS -c -o $@ $< # common files (NFS included) %.ro: %.c $(COMMON_HDR) $(CC) $(CFLAGS) -c -o $@ $< # QS build rules mpqs/sieve_core_generic_32k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -DBLOCK_KB=32 -DCPU_GENERIC \ -DROUTINE_NAME=qs_core_sieve_generic_32k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_generic_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -DBLOCK_KB=64 -DCPU_GENERIC \ -DROUTINE_NAME=qs_core_sieve_generic_64k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_p2_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=pentium2 -DBLOCK_KB=64 -DCPU_PENTIUM2 \ -DROUTINE_NAME=qs_core_sieve_p2_64k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_p3_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=pentium3 -DBLOCK_KB=64 -DCPU_PENTIUM3 \ -DROUTINE_NAME=qs_core_sieve_p3_64k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_p4_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=pentium4 -DBLOCK_KB=64 -DCPU_PENTIUM4 \ -DROUTINE_NAME=qs_core_sieve_p4_64k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_pm_32k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=pentium-m -DBLOCK_KB=32 -DCPU_PENTIUM_M \ -DROUTINE_NAME=qs_core_sieve_pm_32k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_core_32k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=prescott -DBLOCK_KB=32 -DCPU_CORE \ -DROUTINE_NAME=qs_core_sieve_core_32k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_k7_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=athlon -DBLOCK_KB=64 -DCPU_ATHLON \ -DROUTINE_NAME=qs_core_sieve_k7_64k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_k7xp_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=athlon-xp -DBLOCK_KB=64 -DCPU_ATHLON_XP \ -DROUTINE_NAME=qs_core_sieve_k7xp_64k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_k8_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=k8 -DBLOCK_KB=64 -DCPU_OPTERON \ -DROUTINE_NAME=qs_core_sieve_k8_64k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_p4_64_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=nocona -DBLOCK_KB=64 -DCPU_PENTIUM4 \ -DROUTINE_NAME=qs_core_sieve_p4_64k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_core_64_32k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=nocona -DBLOCK_KB=32 -DCPU_CORE \ -DROUTINE_NAME=qs_core_sieve_core_32k \ -c -o $@ mpqs/sieve_core.c mpqs/sieve_core_k8_64_64k.qo: mpqs/sieve_core.c $(QS_HDR) $(CC) $(CFLAGS) -march=k8 -DBLOCK_KB=64 -DCPU_OPTERON \ -DROUTINE_NAME=qs_core_sieve_k8_64k \ -c -o $@ mpqs/sieve_core.c %.qo: %.c $(COMMON_HDR) $(QS_HDR) $(CC) $(CFLAGS) -c -o $@ $< # NFS build rules %.no: %.c $(COMMON_HDR) $(NFS_HDR) $(CC) $(CFLAGS) -Ignfs -c -o $@ $<