freebsd-dev/secure/lib/libcrypto/Makefile
Kris Kennaway 0937df81ca Introduce support for using OpenSSL ASM optimizations. This is done
through the use of a new build directive, MACHINE_CPU, which contains a
list of the CPU generations/features for which optimizations are desired.
This feature will be extended to cover the ports tree in the future.

Currently OpenSSL provides optimizations for i386, i586 and i686-class
CPUs. Currently it has not been tested on an i386 or i486.

Teach make(1) to provide sensible defaults for MACHINE_CPU if it is not
defined (namely, the lowest common denominator CPU we support for each
architecture).  Currently this is i386 for the i386 architecture and ev4
for the alpha.  sys.mk also sets the variable as a last resort for
consistency with MACHINE_ARCH and bootstrapping from very old versions of
make.

Benchmarks show a significant speed increase even in the i386 case, with
additional improvements for i586 and i686 systems.  For maximum performance
define MACHINE_CPU=i686 i586 i386 in /etc/make.conf.

Based on a patch submitted by:  Mike Silbersack <silby@silby.com>
Reviewed by:    current
2001-02-19 03:59:05 +00:00

366 lines
12 KiB
Makefile

# $FreeBSD$
.include "Makefile.inc"
.PATH: ${LCRYPTO_SRC} ${LCRYPTO_SRC}/asn1 ${LCRYPTO_SRC}/bf \
${LCRYPTO_SRC}/bio ${LCRYPTO_SRC}/bn ${LCRYPTO_SRC}/buffer \
${LCRYPTO_SRC}/cast ${LCRYPTO_SRC}/comp ${LCRYPTO_SRC}/conf \
${LCRYPTO_SRC}/des ${LCRYPTO_SRC}/dh ${LCRYPTO_SRC}/dsa \
${LCRYPTO_SRC}/dso ${LCRYPTO_SRC}/err ${LCRYPTO_SRC}/evp \
${LCRYPTO_SRC}/hmac ${LCRYPTO_SRC}/lhash ${LCRYPTO_SRC}/md2 \
${LCRYPTO_SRC}/md4 ${LCRYPTO_SRC}/md5 ${LCRYPTO_SRC}/mdc2 \
${LCRYPTO_SRC}/objects ${LCRYPTO_SRC}/pem ${LCRYPTO_SRC}/pkcs7 \
${LCRYPTO_SRC}/pkcs12 ${LCRYPTO_SRC}/rand ${LCRYPTO_SRC}/rc2 \
${LCRYPTO_SRC}/rc4 ${LCRYPTO_SRC}/rc5 ${LCRYPTO_SRC}/ripemd \
${LCRYPTO_SRC}/rsa ${LCRYPTO_SRC}/../rsaref ${LCRYPTO_SRC}/sha \
${LCRYPTO_SRC}/stack ${LCRYPTO_SRC}/txt_db ${LCRYPTO_SRC}/x509 \
${LCRYPTO_SRC}/x509v3
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
.PATH: ${LCRYPTO_SRC}/rc4/asm ${LCRYPTO_SRC}/rc5/asm \
${LCRYPTO_SRC}/des/asm ${LCRYPTO_SRC}/cast/asm \
${LCRYPTO_SRC}/sha/asm ${LCRYPTO_SRC}/bn/asm \
${LCRYPTO_SRC}/bf/asm ${LCRYPTO_SRC}/md5/asm \
${LCRYPTO_SRC}/ripemd/asm
PERLPATH= ${LCRYPTO_SRC}/des/asm:${LCRYPTO_SRC}/perlasm
.endif
.if defined(MAKE_IDEA) && ${MAKE_IDEA} == YES
.PATH: ${LCRYPTO_SRC}/idea
.endif
LIB= crypto
SHLIB_MAJOR= 1
MAINTAINER= kris
# base sources
SRCS+= cpt_err.c cryptlib.c cversion.c ebcdic.c ex_data.c mem.c mem_dbg.c \
tmdiff.c
# asn1
SRCS+= a_bitstr.c a_bmp.c a_bool.c a_bytes.c a_d2i_fp.c a_digest.c \
a_dup.c a_enum.c a_gentm.c a_hdr.c a_i2d_fp.c a_int.c \
a_mbstr.c a_meth.c a_null.c a_object.c a_octet.c a_print.c \
a_set.c a_sign.c a_strex.c a_strnid.c a_time.c a_type.c \
a_utctm.c a_utf8.c a_verify.c a_vis.c asn1_err.c asn1_lib.c \
asn1_par.c asn_pack.c d2i_dhp.c d2i_dsap.c d2i_pr.c d2i_pu.c \
d2i_r_pr.c d2i_r_pu.c d2i_s_pr.c d2i_s_pu.c evp_asn1.c \
f_enum.c f_int.c f_string.c i2d_dhp.c i2d_dsap.c i2d_pr.c \
i2d_pu.c i2d_r_pr.c i2d_r_pu.c i2d_s_pr.c i2d_s_pu.c n_pkey.c \
nsseq.c p5_pbe.c p5_pbev2.c p7_dgst.c p7_enc.c p7_enc_c.c \
p7_evp.c p7_i_s.c p7_lib.c p7_recip.c p7_s_e.c p7_signd.c \
p7_signi.c p8_pkey.c t_bitst.c t_crl.c t_pkey.c t_req.c \
t_spki.c t_x509.c t_x509a.c x_algor.c x_attrib.c x_cinf.c \
x_crl.c x_exten.c x_info.c x_name.c x_pkey.c x_pubkey.c \
x_req.c x_sig.c x_spki.c x_val.c x_x509.c x_x509a.c
# blowfish
SRCS+= bf_cfb64.c bf_ecb.c bf_ofb64.c bf_skey.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
.if ${MACHINE_CPU:Mi686}
SRCS+= bf-686.pl
.else
SRCS+= bf-586.pl
.endif
.else
SRCS+= bf_enc.c
.endif
# bio
SRCS+= b_dump.c b_print.c b_sock.c bf_buff.c bf_nbio.c bf_null.c \
bio_cb.c bio_err.c bio_lib.c bss_acpt.c bss_bio.c bss_conn.c \
bss_fd.c bss_file.c bss_log.c bss_mem.c bss_null.c bss_sock.c
# bn
SRCS+= bn_add.c bn_blind.c bn_ctx.c bn_div.c bn_err.c \
bn_exp.c bn_exp2.c bn_gcd.c bn_lib.c bn_mont.c bn_mpi.c \
bn_mul.c bn_prime.c bn_print.c bn_rand.c bn_recp.c bn_shift.c \
bn_sqr.c bn_word.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
SRCS+= bn-586.pl co-586.pl
.elif ${MACHINE_ARCH} == "alpha"
SRCS+= bn-alpha.pl co-alpha.pl
.else
SRCS+= bn_asm.c
.endif
# buffer
SRCS+= buf_err.c buffer.c
# cast
SRCS+= c_cfb64.c c_ecb.c c_ofb64.c c_skey.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
SRCS+= cast-586.pl
.else
SRCS+= c_enc.c
.endif
# comp
SRCS+= c_rle.c c_zlib.c comp_lib.c
# conf
SRCS+= conf_api.c conf_def.c conf_err.c conf_lib.c
# des
SRCS+= cbc_cksm.c cbc_enc.c cfb64ede.c cfb64enc.c cfb_enc.c \
ecb3_enc.c ecb_enc.c ede_cbcm_enc.c enc_read.c enc_writ.c \
fcrypt.c ofb64ede.c ofb64enc.c ofb_enc.c pcbc_enc.c \
qud_cksm.c rand_key.c read2pwd.c read_pwd.c rpc_enc.c \
set_key.c str2key.c xcbc_enc.c rnd_keys.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
SRCS+= des-586.pl crypt586.pl
.else
SRCS+= des_enc.c
.endif
# dh
SRCS+= dh_check.c dh_err.c dh_gen.c dh_key.c dh_lib.c
# dsa
SRCS+= dsa_asn1.c dsa_err.c dsa_gen.c dsa_key.c dsa_lib.c dsa_ossl.c \
dsa_sign.c dsa_vrf.c
# dso
SRCS+= dso_dl.c dso_dlfcn.c dso_err.c dso_lib.c dso_null.c \
dso_openssl.c
# err
SRCS+= err.c err_all.c err_prn.c
# evp
SRCS+= bio_b64.c bio_enc.c bio_md.c bio_ok.c c_all.c c_allc.c c_alld.c \
digest.c e_bf.c e_cast.c e_des.c e_des3.c e_idea.c e_null.c \
e_rc2.c e_rc4.c e_rc5.c e_xcbc_d.c encode.c evp_enc.c \
evp_err.c evp_key.c evp_lib.c evp_pbe.c evp_pkey.c m_dss.c \
m_dss1.c m_md2.c m_md4.c m_md5.c m_mdc2.c m_null.c m_ripemd.c \
m_sha.c m_sha1.c names.c p5_crpt.c p5_crpt2.c p_dec.c p_enc.c \
p_lib.c p_open.c p_seal.c p_sign.c p_verify.c
# hmac
SRCS+= hmac.c
# idea
.if defined(MAKE_IDEA) && ${MAKE_IDEA} == YES
SRCS+= i_ecb.c i_cbc.c i_cfb64.c i_ofb64.c i_skey.c
.endif
# lhash
SRCS+= lh_stats.c lhash.c
# md2
SRCS+= md2_dgst.c md2_one.c
# md4
SRCS+= md4_dgst.c md4_one.c
# md5
SRCS+= md5_dgst.c md5_one.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
SRCS+= md5-586.pl
.endif
# mdc2
SRCS+= mdc2dgst.c mdc2_one.c
# objects
SRCS+= o_names.c obj_dat.c obj_err.c obj_lib.c
# pem
SRCS+= pem_all.c pem_err.c pem_info.c pem_lib.c pem_seal.c pem_sign.c
# pkcs7
SRCS+= pk7_attr.c pk7_doit.c pk7_lib.c pk7_mime.c pk7_smime.c pkcs7err.c
# pkcs12
SRCS+= p12_add.c p12_attr.c p12_bags.c p12_crpt.c p12_crt.c p12_decr.c \
p12_init.c p12_key.c p12_kiss.c p12_lib.c p12_mac.c p12_mutl.c \
p12_npas.c p12_sbag.c p12_utl.c pk12err.c
# rand
SRCS+= md_rand.c rand_egd.c rand_err.c rand_lib.c rand_win.c randfile.c
# rc2
SRCS+= rc2_cbc.c rc2cfb64.c rc2_ecb.c rc2ofb64.c rc2_skey.c
# rc4
SRCS+= rc4_skey.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
SRCS+= rc4-586.pl
.else
SRCS+= rc4_enc.c
.endif
# rc5
SRCS+= rc5cfb64.c rc5_ecb.c rc5ofb64.c rc5_skey.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
SRCS+= rc5-586.pl
.else
SRCS+= rc5_enc.c
.endif
# ripemd
SRCS+= rmd_dgst.c rmd_one.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
SRCS+= rmd-586.pl
.endif
# rsa
.if defined(WITH_RSA) && ${WITH_RSA} == YES
SRCS+= rsa_chk.c rsa_eay.c rsa_err.c rsa_gen.c rsa_lib.c rsa_none.c \
rsa_null.c rsa_oaep.c rsa_pk1.c rsa_saos.c rsa_sign.c rsa_ssl.c
.endif
# sha
SRCS+= sha_dgst.c sha_one.c sha1_one.c sha1dgst.c
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
SRCS+= sha1-586.pl
.endif
# stack
SRCS+= stack.c
# txt_db
SRCS+= txt_db.c
# x509
SRCS+= by_dir.c by_file.c x509_att.c x509_cmp.c x509_d2.c x509_def.c \
x509_err.c x509_ext.c x509_lu.c x509_obj.c x509_r2x.c \
x509_req.c x509_set.c x509_trs.c x509_txt.c x509_v3.c \
x509_vfy.c x509name.c x509rset.c x509spki.c x509type.c x_all.c
# x509v3
SRCS+= v3_akey.c v3_alt.c v3_bcons.c v3_bitst.c v3_conf.c v3_cpols.c \
v3_crld.c v3_enum.c v3_extku.c v3_genn.c v3_ia5.c v3_info.c \
v3_int.c v3_lib.c v3_pku.c v3_prn.c v3_purp.c v3_skey.c \
v3_sxnet.c v3_utl.c v3err.c
POD1+= apps/CA.pl.pod apps/asn1parse.pod apps/ca.pod apps/ciphers.pod \
apps/config.pod apps/crl.pod apps/crl2pkcs7.pod apps/dgst.pod \
apps/dhparam.pod apps/dsa.pod apps/dsaparam.pod apps/enc.pod \
apps/gendsa.pod apps/genrsa.pod apps/nseq.pod apps/openssl.pod \
apps/passwd.pod apps/pkcs12.pod apps/pkcs7.pod apps/pkcs8.pod \
apps/req.pod apps/rsa.pod apps/s_client.pod apps/s_server.pod \
apps/sess_id.pod apps/smime.pod apps/speed.pod apps/spkac.pod \
apps/verify.pod apps/version.pod apps/x509.pod
POD3+= crypto/BN_CTX_new.pod crypto/BN_CTX_start.pod crypto/BN_add.pod \
crypto/BN_add_word.pod crypto/BN_bn2bin.pod crypto/BN_cmp.pod \
crypto/BN_copy.pod crypto/BN_generate_prime.pod \
crypto/BN_mod_inverse.pod crypto/BN_mod_mul_montgomery.pod \
crypto/BN_mod_mul_reciprocal.pod crypto/BN_new.pod \
crypto/BN_num_bytes.pod crypto/BN_rand.pod crypto/BN_set_bit.pod \
crypto/BN_zero.pod crypto/CRYPTO_set_ex_data.pod \
crypto/DH_generate_key.pod crypto/DH_generate_parameters.pod \
crypto/DH_get_ex_new_index.pod crypto/DH_new.pod \
crypto/DH_set_method.pod crypto/DH_size.pod crypto/DSA_SIG_new.pod \
crypto/DSA_do_sign.pod crypto/DSA_dup_DH.pod \
crypto/DSA_generate_key.pod crypto/DSA_generate_parameters.pod \
crypto/DSA_get_ex_new_index.pod crypto/DSA_new.pod \
crypto/DSA_set_method.pod crypto/DSA_sign.pod crypto/DSA_size.pod \
crypto/ERR_GET_LIB.pod crypto/ERR_clear_error.pod \
crypto/ERR_error_string.pod crypto/ERR_get_error.pod \
crypto/ERR_load_crypto_strings.pod crypto/ERR_load_strings.pod \
crypto/ERR_print_errors.pod crypto/ERR_put_error.pod \
crypto/ERR_remove_state.pod crypto/EVP_DigestInit.pod \
crypto/EVP_EncryptInit.pod crypto/OPENSSL_VERSION_NUMBER.pod \
crypto/OpenSSL_add_all_algorithms.pod crypto/RAND_add.pod \
crypto/RAND_bytes.pod crypto/RAND_cleanup.pod crypto/RAND_egd.pod \
crypto/RAND_load_file.pod crypto/RAND_set_rand_method.pod \
crypto/RSA_blinding_on.pod crypto/RSA_check_key.pod \
crypto/RSA_generate_key.pod crypto/RSA_get_ex_new_index.pod \
crypto/RSA_new.pod crypto/RSA_padding_add_PKCS1_type_1.pod \
crypto/RSA_print.pod crypto/RSA_private_encrypt.pod \
crypto/RSA_public_encrypt.pod crypto/RSA_set_method.pod \
crypto/RSA_sign.pod crypto/RSA_sign_ASN1_OCTET_STRING.pod \
crypto/RSA_size.pod crypto/blowfish.pod crypto/bn.pod \
crypto/bn_internal.pod crypto/buffer.pod crypto/crypto.pod \
crypto/d2i_DHparams.pod crypto/d2i_RSAPublicKey.pod \
crypto/des_modes.pod crypto/dh.pod crypto/dsa.pod crypto/err.pod \
crypto/hmac.pod crypto/lh_stats.pod crypto/lhash.pod crypto/md5.pod \
crypto/mdc2.pod crypto/rand.pod crypto/rc4.pod crypto/ripemd.pod \
crypto/rsa.pod crypto/sha.pod crypto/threads.pod
POD3+= ssl/SSL_get_error.pod ssl/ssl.pod
#.for section in 1 3
#.for pod in ${POD${section}}
#.for target in ${pod:T:S/.pod/.${section}/g}
#MAN${section}+= ${target}
#CLEANFILES+= ${target}
#all-man: ${target}
#${target}: ${LCRYPTO_SRC}/../doc/${pod}
# pod2man ${LCRYPTO_SRC}/../doc/${pod} > ${target}
#.endfor
#.endfor
#.endfor
MAN3= des_crypt.3
MLINKS= des_crypt.3 des_read_password.3 \
des_crypt.3 des_read_2password.3 des_crypt.3 des_string_to_key.3 \
des_crypt.3 des_string_to_2key.3 des_crypt.3 des_read_pw_string.3 \
des_crypt.3 des_random_key.3 des_crypt.3 des_set_key.3 \
des_crypt.3 des_key_sched.3 des_crypt.3 des_ecb_encrypt.3 \
des_crypt.3 des_3ecb_encrypt.3 des_crypt.3 des_cbc_encrypt.3 \
des_crypt.3 des_3cbc_encrypt.3 des_crypt.3 des_pcbc_encrypt.3 \
des_crypt.3 des_cfb_encrypt.3 des_crypt.3 des_ofb_encrypt.3 \
des_crypt.3 des_cbc_cksum.3 des_crypt.3 des_quad_cksum.3 \
des_crypt.3 des_enc_read.3 des_crypt.3 des_enc_write.3 \
des_crypt.3 des_set_odd_parity.3 des_crypt.3 des_is_weak_key.3
beforeinstall: openssl/opensslconf.h openssl/evp.h
${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP} -m 444 \
${CRYPTO_HDRS} openssl/evp.h openssl/opensslconf.h \
${DESTDIR}/usr/include/openssl
.include <bsd.lib.mk>
# If we don't want 686/586 asm, use the "386" modifier to the perl scripts to give
# compatible output
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
.if ${MACHINE_CPU:Mi686} || ${MACHINE_CPU:Mi586}
CPUTYPE=
.elif ${MACHINE_CPU:Mi386}
CPUTYPE= 386
.endif
.endif
.if !defined(NOPERL) && ${MACHINE_ARCH} == "i386"
.SUFFIXES: .o .pl
.SUFFIXES: .po .pl
.SUFFIXES: .So .pl
.pl.o:
perl -I${PERLPATH} $(.ALLSRC) elf ${CPUTYPE} > $(.PREFIX).pl.s ; ${AS} ${AFLAGS} $(.PREFIX).pl.s -o $(.TARGET)
.pl.po:
perl -I${PERLPATH} $(.ALLSRC) elf ${CPUTYPE} > $(.PREFIX).pl.s ; ${AS} ${AFLAGS} $(.PREFIX).pl.s -o $(.TARGET)
.pl.So:
perl -I${PERLPATH} $(.ALLSRC) elf ${CPUTYPE} > $(.PREFIX).pl.s ; ${AS} ${AFLAGS} $(.PREFIX).pl.s -o $(.TARGET)
.endif
afterinstall:
.if !defined(NOPIC)
@cd ${DESTDIR}${SHLIBDIR}; \
rm -f libdes.so.3; \
ln -sf lib${LIB}.so.${SHLIB_MAJOR} libdes.so.3;
.endif
.if !defined(NOPIC) && ${OBJFORMAT} == elf
@cd ${DESTDIR}${SHLIBDIR}; \
rm -f libdes.so; \
ln -sf lib${LIB}.so libdes.so
.endif
@cd ${DESTDIR}${LIBDIR}; \
rm -f libdes.a; \
ln -sf lib${LIB}.a libdes.a
@cd ${DESTDIR}${INCDIR}; \
rm -f des.h; \
ln -sf openssl/des.h
.if !defined(NOPROFILE)
@cd ${DESTDIR}${LIBDIR}; \
rm -f libdes_p.a; \
ln -sf lib${LIB}_p.a libdes_p.a
.endif