asn1: Build both backends

The codegen backend is faster than the template backend, even for
modules that don't use IOS.  On x64 we see the template backend being
4% slower for TGS requests using the kdc-tester program.

So let's build both, libasn1 (codegen) and libasn1template when
configured with --disable-asn1-templating, but make sure that the
asn1_print utility is linked with libasn1template.

Eventually we'll want to either optimize the template backend better,
or add IOS and JSON printing support to the codegen backend.
This commit is contained in:
Nicolas Williams
2021-04-23 22:12:26 -05:00
parent 32b314b174
commit 5c93af553b

View File

@@ -8,13 +8,15 @@ AM_CPPFLAGS += $(ROKEN_RENAME)
man_MANS = asn1_print.1 asn1_compile.1
lib_LTLIBRARIES = libasn1.la
lib_LTLIBRARIES = libasn1.la libasn1template.la
libasn1_la_LDFLAGS = -version-info 8:0:0
libasn1template_la_LDFLAGS = -version-info 8:0:0
noinst_LTLIBRARIES = libasn1base.la
if versionscript
libasn1_la_LDFLAGS += $(LDFLAGS_VERSION_SCRIPT)$(srcdir)/version-script.map
libasn1template_la_LDFLAGS += $(LDFLAGS_VERSION_SCRIPT)$(srcdir)/version-script.map
endif
@@ -23,6 +25,11 @@ libasn1_la_LIBADD = \
@LIB_com_err@ \
$(LIBADD_roken)
libasn1template_la_LIBADD = \
libasn1base.la \
@LIB_com_err@ \
$(LIBADD_roken)
BUILT_SOURCES = \
$(gen_files_rfc2459:.x=.c) \
$(gen_files_rfc4108:.x=.c) \
@@ -37,21 +44,48 @@ BUILT_SOURCES = \
$(gen_files_digest:.x=.c) \
$(gen_files_kx509:.x=.c)
BUILT_TEMPLATE_SOURCES = \
$(gen_files_rfc2459_template:.x=.c) \
$(gen_files_rfc4108_template:.x=.c) \
$(gen_files_cms_template:.x=.c) \
$(gen_files_krb5_template:.x=.c) \
$(gen_files_ocsp_template:.x=.c) \
$(gen_files_pkinit_template:.x=.c) \
$(gen_files_pkcs8_template:.x=.c) \
$(gen_files_pkcs9_template:.x=.c) \
$(gen_files_pkcs10_template:.x=.c) \
$(gen_files_pkcs12_template:.x=.c) \
$(gen_files_digest_template:.x=.c) \
$(gen_files_kx509_template:.x=.c)
gen_files_krb5 = asn1_krb5_asn1.x
gen_files_krb5_template = asn1_krb5_template_asn1.x
gen_files_cms = asn1_cms_asn1.x
gen_files_cms_template = asn1_cms_template_asn1.x
gen_files_crmf = asn1_crmf_asn1.x
gen_files_crmf_template = asn1_crmf_template_asn1.x
gen_files_rfc2459 = asn1_rfc2459_asn1.x
gen_files_rfc2459_template = asn1_rfc2459_template_asn1.x
gen_files_rfc4108 = asn1_rfc4108_asn1.x
gen_files_rfc4108_template = asn1_rfc4108_template_asn1.x
gen_files_ocsp = asn1_ocsp_asn1.x
gen_files_ocsp_template = asn1_ocsp_template_asn1.x
gen_files_pkinit = asn1_pkinit_asn1.x
gen_files_pkinit_template = asn1_pkinit_template_asn1.x
gen_files_pkcs10 = asn1_pkcs10_asn1.x
gen_files_pkcs10_template = asn1_pkcs10_template_asn1.x
gen_files_pkcs12 = asn1_pkcs12_asn1.x
gen_files_pkcs12_template = asn1_pkcs12_template_asn1.x
gen_files_pkcs8 = asn1_pkcs8_asn1.x
gen_files_pkcs8_template = asn1_pkcs8_template_asn1.x
gen_files_pkcs9 = asn1_pkcs9_asn1.x
gen_files_test_template = asn1_test_template_asn1.x
gen_files_pkcs9_template = asn1_pkcs9_template_asn1.x
gen_files_test = asn1_test_asn1.x
gen_files_test_template = asn1_test_template_asn1.x
gen_files_digest = asn1_digest_asn1.x
gen_files_digest_template = asn1_digest_template_asn1.x
gen_files_kx509 = asn1_kx509_asn1.x
gen_files_kx509_template = asn1_kx509_template_asn1.x
gen_files_x690sample = asn1_x690sample_asn1.x
gen_files_x690sample_template = asn1_x690sample_template_asn1.x
@@ -59,27 +93,21 @@ oid_resolution.lo: $(BUILT_SOURCES)
noinst_PROGRAMS = asn1_gen
libexec_heimdal_PROGRAMS = asn1_compile asn1_print
bin_PROGRAMS = asn1_compile asn1_print
TESTS = check-der check-gen check-gen-template check-timegm check-ber check-template
check_PROGRAMS = $(TESTS)
asn1_gen_SOURCES = asn1_gen.c
asn1_print_SOURCES = asn1_print.c
if ASN1_TEMPLATING
asn1_print_SOURCES += $(gen_files_x690sample_template:.x=.c)
asn1_print_CPPFLAGS = -DASN1_PRINT_SUPPORTED
else
asn1_print_SOURCES += $(gen_files_x690sample:.x=.c)
endif
check_der_SOURCES = check-der.c check-common.c check-common.h
check_template_SOURCES = check-template.c check-common.c check-common.h
nodist_check_template_SOURCES = $(gen_files_test_template:.x=.c)
if ASN1_TEMPLATING
check_gen_template_CPPFLAGS = -DASN1_IOS_SUPPORTED
endif
dist_check_gen_template_SOURCES = check-gen.c check-common.c check-common.h
nodist_check_gen_template_SOURCES = $(gen_files_test_template:.x=.c) \
$(gen_files_x690sample_template:.x=.c)
@@ -132,6 +160,7 @@ dist_libasn1base_la_SOURCES = \
timegm.c
dist_libasn1_la_SOURCES = oid_resolution.c
dist_libasn1template_la_SOURCES = oid_resolution.c
nodist_libasn1base_la_SOURCES = \
asn1_err.h \
@@ -139,6 +168,12 @@ nodist_libasn1base_la_SOURCES = \
nodist_libasn1_la_SOURCES = $(BUILT_SOURCES)
if !ASN1_TEMPLATING
nodist_libasn1template_la_SOURCES = $(BUILT_TEMPLATE_SOURCES)
else
nodist_libasn1template_la_SOURCES = $(BUILT_SOURCES)
endif
asn1_compile_LDADD = \
$(LIB_roken) $(LEXLIB)
@@ -147,16 +182,16 @@ check_der_LDADD = \
$(LIB_roken)
check_template_LDADD = $(check_der_LDADD)
asn1_print_LDADD = libasn1.la $(LIB_roken) $(LIB_com_err)
asn1_print_LDADD = libasn1template.la $(LIB_roken) $(LIB_com_err)
asn1_gen_LDADD = $(check_der_LDADD)
check_timegm_LDADD = $(check_der_LDADD)
check_gen_template_LDADD = \
libasn1.la \
libasn1template.la \
$(LIB_roken)
check_gen_LDADD = \
libasn1.la \
libasn1template.la \
$(LIB_roken)
check_ber_LDADD = $(check_gen_LDADD)
@@ -164,17 +199,29 @@ check_ber_LDADD = $(check_gen_LDADD)
CLEANFILES = \
$(BUILT_SOURCES) \
$(gen_files_rfc2459) \
$(gen_files_rfc2459_template) \
$(gen_files_rfc4108) \
$(gen_files_rfc4108_template) \
$(gen_files_cms) \
$(gen_files_cms_template) \
$(gen_files_krb5) \
$(gen_files_krb5_template) \
$(gen_files_ocsp) \
$(gen_files_ocsp_template) \
$(gen_files_pkinit) \
$(gen_files_pkinit_template) \
$(gen_files_pkcs8) \
$(gen_files_pkcs8_template) \
$(gen_files_pkcs9) \
$(gen_files_pkcs9_template) \
$(gen_files_pkcs10) \
$(gen_files_pkcs10_template) \
$(gen_files_pkcs12) \
$(gen_files_pkcs12_template) \
$(gen_files_digest) \
$(gen_files_digest_template) \
$(gen_files_kx509) \
$(gen_files_kx509_template) \
$(gen_files_x690sample) \
$(gen_files_x690sample_template) \
$(gen_files_test) \
@@ -183,22 +230,35 @@ CLEANFILES = \
asn1parse.c asn1parse.h lex.c \
asn1_err.c asn1_err.h \
rfc2459_asn1_files rfc2459_asn1*.h* rfc2459_asn1*.x \
rfc2459_template_asn1_files rfc2459_template_asn1*.h* rfc2459_template_asn1*.x \
rfc4108_asn1_files rfc4108_asn1*.h* rfc4108_asn1*.x \
rfc4108_template_asn1_files rfc4108_template_asn1*.h* rfc4108_template_asn1*.x \
cms_asn1_files cms_asn1*.h* cms_asn1*.x \
cms_template_asn1_files cms_template_asn1*.h* cms_template_asn1*.x \
crmf_asn1_files crmf_asn1*.h* crmf_asn1*.x \
crmf_template_asn1_files crmf_template_asn1*.h* crmf_template_asn1*.x \
krb5_asn1_files krb5_asn1*.h* krb5_asn1*.x \
krb5_template_asn1_files krb5_template_asn1*.h* krb5_template_asn1*.x \
ocsp_asn1_files ocsp_asn1*.h* ocsp_asn1*.x \
ocsp_template_asn1_files ocsp_template_asn1*.h* ocsp_template_asn1*.x \
pkinit_asn1_files pkinit_asn1*.h* pkinit_asn1*.x \
pkinit_template_asn1_files pkinit_template_asn1*.h* pkinit_template_asn1*.x \
pkcs8_asn1_files pkcs8_asn1*.h* pkcs8_asn1*.x* \
pkcs8_template_asn1_files pkcs8_template_asn1*.h* pkcs8_template_asn1*.x* \
pkcs9_asn1_files pkcs9_asn1*.h* pkcs9_asn1*.x \
pkcs9_template_asn1_files pkcs9_template_asn1*.h* pkcs9_template_asn1*.x \
pkcs10_asn1_files pkcs10_asn1*.h* pkcs10_asn1*.x \
pkcs10_template_asn1_files pkcs10_template_asn1*.h* pkcs10_template_asn1*.x \
pkcs12_asn1_files pkcs12_asn1*.h* pkcs12_asn1*.x \
pkcs12_template_asn1_files pkcs12_template_asn1*.h* pkcs12_template_asn1*.x \
digest_asn1_files digest_asn1*.h* digest_asn1*.x \
digest_template_asn1_files digest_template_asn1*.h* digest_template_asn1*.x \
kx509_asn1_files kx509_asn1*.h* kx509_asn1*.x \
kx509_template_asn1_files kx509_template_asn1*.h* kx509_template_asn1*.x \
x690sample_asn1_files x690sample_asn1*.h* x690sample_asn1*.x \
x690sample_template_asn1_files x690sample_template_asn1*.h* x690sample_template_asn1*.x \
test_asn1_files test_asn1*.h* test_asn1*.x \
test_template_asn1* \
test_template_asn1_files test_template_asn1*.h* test_template_asn1*.x \
asn1_*.tmp.c asn1_*.x
dist_include_HEADERS = der.h heim_asn1.h
@@ -207,43 +267,70 @@ dist_include_HEADERS += asn1-common.h
nodist_include_HEADERS = asn1_err.h
nodist_include_HEADERS += krb5_asn1.h
nodist_include_HEADERS += krb5_template_asn1.h
nodist_include_HEADERS += pkinit_asn1.h
nodist_include_HEADERS += pkinit_template_asn1.h
nodist_include_HEADERS += cms_asn1.h
nodist_include_HEADERS += cms_template_asn1.h
nodist_include_HEADERS += crmf_asn1.h
nodist_include_HEADERS += crmf_template_asn1.h
nodist_include_HEADERS += rfc2459_asn1.h
nodist_include_HEADERS += rfc2459_template_asn1.h
nodist_include_HEADERS += rfc4108_asn1.h
nodist_include_HEADERS += rfc4108_template_asn1.h
nodist_include_HEADERS += ocsp_asn1.h
nodist_include_HEADERS += ocsp_template_asn1.h
nodist_include_HEADERS += pkcs8_asn1.h
nodist_include_HEADERS += pkcs8_template_asn1.h
nodist_include_HEADERS += pkcs9_asn1.h
nodist_include_HEADERS += pkcs9_template_asn1.h
nodist_include_HEADERS += pkcs10_asn1.h
nodist_include_HEADERS += pkcs10_template_asn1.h
nodist_include_HEADERS += pkcs12_asn1.h
nodist_include_HEADERS += pkcs12_template_asn1.h
nodist_include_HEADERS += digest_asn1.h
nodist_include_HEADERS += digest_template_asn1.h
nodist_include_HEADERS += kx509_asn1.h
nodist_include_HEADERS += kx509_template_asn1.h
nodist_include_HEADERS += x690sample_asn1.h
nodist_include_HEADERS += x690sample_template_asn1.h
priv_headers = krb5_asn1-priv.h
priv_headers += krb5_template_asn1-priv.h
priv_headers += pkinit_asn1-priv.h
priv_headers += pkinit_template_asn1-priv.h
priv_headers += cms_asn1-priv.h
priv_headers += cms_template_asn1-priv.h
priv_headers += crmf_asn1-priv.h
priv_headers += crmf_template_asn1-priv.h
priv_headers += rfc2459_asn1-priv.h
priv_headers += rfc2459_template_asn1-priv.h
priv_headers += rfc4108_asn1-priv.h
priv_headers += rfc4108_template_asn1-priv.h
priv_headers += ocsp_asn1-priv.h
priv_headers += ocsp_template_asn1-priv.h
priv_headers += pkcs8_asn1-priv.h
priv_headers += pkcs8_template_asn1-priv.h
priv_headers += pkcs9_asn1-priv.h
priv_headers += pkcs9_template_asn1-priv.h
priv_headers += pkcs10_asn1-priv.h
priv_headers += pkcs10_template_asn1-priv.h
priv_headers += pkcs12_asn1-priv.h
priv_headers += pkcs12_template_asn1-priv.h
priv_headers += digest_asn1-priv.h
priv_headers += digest_template_asn1-priv.h
priv_headers += kx509_asn1-priv.h
priv_headers += kx509_template_asn1-priv.h
priv_headers += x690sample_asn1-priv.h
priv_headers += x690sample_template_asn1-priv.h
priv_headers += test_template_asn1.h test_template_asn1-priv.h
priv_headers += test_asn1.h test_asn1-priv.h
priv_headers += test_template_asn1.h test_template_asn1-priv.h
$(asn1_compile_OBJECTS): asn1parse.h asn1parse.c $(srcdir)/der-protos.h $(srcdir)/der-private.h
$(libasn1_la_OBJECTS): $(nodist_include_HEADERS) $(priv_headers) asn1_err.h $(srcdir)/der-protos.h $(srcdir)/der-private.h
$(libasn1template_la_OBJECTS): $(nodist_include_HEADERS) $(priv_headers) asn1_err.h $(srcdir)/der-protos.h $(srcdir)/der-private.h
$(libasn1base_la_OBJECTS): asn1_err.h $(srcdir)/der-protos.h $(srcdir)/der-private.h
$(check_gen_OBJECTS): test_asn1.h
$(check_template_OBJECTS): test_asn1_files
@@ -252,18 +339,31 @@ $(asn1_print_OBJECTS): $(nodist_include_HEADERS) $(priv_headers)
asn1parse.h: asn1parse.c
$(gen_files_krb5) krb5_asn1.hx krb5_asn1-priv.hx: krb5_asn1_files
$(gen_files_krb5_template) krb5_template_asn1.hx krb5_template_asn1-priv.hx: krb5_template_asn1_files
$(gen_files_ocsp) ocsp_asn1.hx ocsp_asn1-priv.hx: ocsp_asn1_files
$(gen_files_ocsp_template) ocsp_template_asn1.hx ocsp_template_asn1-priv.hx: ocsp_template_asn1_files
$(gen_files_pkinit) pkinit_asn1.hx pkinit_asn1-priv.hx: pkinit_asn1_files
$(gen_files_pkinit_template) pkinit_template_asn1.hx pkinit_template_asn1-priv.hx: pkinit_template_asn1_files
$(gen_files_pkcs8) pkcs8_asn1.hx pkcs8_asn1-priv.hx: pkcs8_asn1_files
$(gen_files_pkcs8_template) pkcs8_template_asn1.hx pkcs8_template_asn1-priv.hx: pkcs8_template_asn1_files
$(gen_files_pkcs9) pkcs9_asn1.hx pkcs9_asn1-priv.hx: pkcs9_asn1_files
$(gen_files_pkcs9_template) pkcs9_template_asn1.hx pkcs9_template_asn1-priv.hx: pkcs9_template_asn1_files
$(gen_files_pkcs10) pkcs10_asn1.hx pkcs10_asn1-priv.hx: pkcs10_asn1_files
$(gen_files_pkcs10_template) pkcs10_template_asn1.hx pkcs10_template_asn1-priv.hx: pkcs10_template_asn1_files
$(gen_files_pkcs12) pkcs12_asn1.hx pkcs12_asn1-priv.hx: pkcs12_asn1_files
$(gen_files_pkcs12_template) pkcs12_template_asn1.hx pkcs12_template_asn1-priv.hx: pkcs12_template_asn1_files
$(gen_files_digest) digest_asn1.hx digest_asn1-priv.hx: digest_asn1_files
$(gen_files_digest_template) digest_template_asn1.hx digest_template_asn1-priv.hx: digest_template_asn1_files
$(gen_files_kx509) kx509_asn1.hx kx509_asn1-priv.hx: kx509_asn1_files
$(gen_files_kx509_template) kx509_template_asn1.hx kx509_template_asn1-priv.hx: kx509_template_asn1_files
$(gen_files_rfc2459) rfc2459_asn1.hx rfc2459_asn1-priv.hx: rfc2459_asn1_files
$(gen_files_rfc2459_template) rfc2459_template_asn1.hx rfc2459_template_asn1-priv.hx: rfc2459_template_asn1_files
$(gen_files_rfc4108) rfc4108_asn1.hx rfc4108_asn1-priv.hx: rfc4108_asn1_files
$(gen_files_rfc4108_template) rfc4108_template_asn1.hx rfc4108_template_asn1-priv.hx: rfc4108_template_asn1_files
$(gen_files_cms) cms_asn1.hx cms_asn1-priv.hx: cms_asn1_files
$(gen_files_cms_template) cms_template_asn1.hx cms_template_asn1-priv.hx: cms_template_asn1_files
$(gen_files_crmf) crmf_asn1.hx crmf_asn1-priv.hx: crmf_asn1_files
$(gen_files_crmf_template) crmf_template_asn1.hx crmf_template_asn1-priv.hx: crmf_template_asn1_files
$(gen_files_x690sample) x690sample_asn1.hx x690sample_asn1-priv.hx: x690sample_asn1_files
$(gen_files_x690sample_template) x690sample_template_asn1.hx x690sample_template_asn1-priv.hx: x690sample_template_asn1_files
$(gen_files_test) test_asn1.hx test_asn1-priv.hx: test_asn1_files
@@ -275,6 +375,47 @@ else
TEMPLATE_OPTION=
endif
# If the default is not templating, then we build a variant of libasn1 that is
# templated anyways.
rfc2459_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/rfc2459.asn1
$(ASN1_COMPILE) --one-code-file --template --option-file=$(srcdir)/rfc2459.opt $(srcdir)/rfc2459.asn1 rfc2459_template_asn1 || (rm -f rfc2459_template_asn1_files ; exit 1)
rfc4108_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/rfc4108.asn1
$(ASN1_COMPILE) --one-code-file --template $(srcdir)/rfc4108.asn1 rfc4108_template_asn1 || (rm -f rfc4108_template_asn1_files ; exit 1)
cms_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/cms.asn1 $(srcdir)/cms.opt
$(ASN1_COMPILE) --one-code-file --template --option-file=$(srcdir)/cms.opt $(srcdir)/cms.asn1 cms_template_asn1 || (rm -f cms_template_asn1_files ; exit 1)
crmf_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/crmf.asn1 $(srcdir)/crmf.opt
$(ASN1_COMPILE) --one-code-file --template --option-file=$(srcdir)/crmf.opt $(srcdir)/crmf.asn1 crmf_template_asn1 || (rm -f crmf_template_asn1_files ; exit 1)
krb5_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/krb5.asn1 $(srcdir)/krb5.opt
$(ASN1_COMPILE) --one-code-file --template --option-file=$(srcdir)/krb5.opt $(srcdir)/krb5.asn1 krb5_template_asn1 || (rm -f krb5_template_asn1_files ; exit 1)
ocsp_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/ocsp.asn1
$(ASN1_COMPILE) --one-code-file --template --option-file=$(srcdir)/ocsp.opt $(srcdir)/ocsp.asn1 ocsp_template_asn1 || (rm -f ocsp_template_asn1_files ; exit 1)
pkinit_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/pkinit.asn1
$(ASN1_COMPILE) --one-code-file --template $(srcdir)/pkinit.asn1 pkinit_template_asn1 || (rm -f pkinit_template_asn1_files ; exit 1)
pkcs8_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/pkcs8.asn1
$(ASN1_COMPILE) --one-code-file --template $(srcdir)/pkcs8.asn1 pkcs8_template_asn1 || (rm -f pkcs8_template_asn1_files ; exit 1)
pkcs9_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/pkcs9.asn1
$(ASN1_COMPILE) --one-code-file --template $(srcdir)/pkcs9.asn1 pkcs9_template_asn1 || (rm -f pkcs9_template_asn1_files ; exit 1)
pkcs10_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/pkcs10.asn1
$(ASN1_COMPILE) --one-code-file --template --option-file=$(srcdir)/pkcs10.opt $(srcdir)/pkcs10.asn1 pkcs10_template_asn1 || (rm -f pkcs10_template_asn1_files ; exit 1)
pkcs12_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/pkcs12.asn1
$(ASN1_COMPILE) --one-code-file --template $(srcdir)/pkcs12.asn1 pkcs12_template_asn1 || (rm -f pkcs12_template_asn1_files ; exit 1)
digest_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/digest.asn1
$(ASN1_COMPILE) --one-code-file --template $(srcdir)/digest.asn1 digest_template_asn1 || (rm -f digest_template_asn1_files ; exit 1)
kx509_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/kx509.asn1
$(ASN1_COMPILE) --one-code-file --template $(srcdir)/kx509.asn1 kx509_template_asn1 || (rm -f kx509_template_asn1_files ; exit 1)
rfc2459_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/rfc2459.asn1
$(ASN1_COMPILE) --one-code-file $(TEMPLATE_OPTION) --option-file=$(srcdir)/rfc2459.opt $(srcdir)/rfc2459.asn1 rfc2459_asn1 || (rm -f rfc2459_asn1_files ; exit 1)
@@ -360,6 +501,7 @@ EXTRA_DIST = \
DER_PROTOS = $(srcdir)/der-protos.h $(srcdir)/der-private.h
ALL_OBJECTS = $(libasn1_la_OBJECTS)
ALL_OBJECTS += $(libasn1template_la_OBJECTS)
ALL_OBJECTS += $(libasn1base_la_OBJECTS)
ALL_OBJECTS += $(asn1_print_OBJECTS)
ALL_OBJECTS += $(asn1_compile_OBJECTS)