-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 The attached patch allows the openvpn-build system to create and use cache tarballs for dependencies, preventing them from being built every time (even when they haven't changed.) My VM build time went from ~12 to under 2 minutes with this feature.
- -- Josh Cepek -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.20 (GNU/Linux) iQGcBAEBAgAGBQJSGQrIAAoJENcx2Xpgb9RjHOEL/jRDeXyguibzmFYP+n+oduA3 ICjpGrUwhnzTtwp/8i01vfo2YVVwgi1eC8qJmcCs4SOJXkq1ExB5KSPuwRrB0s3E w9Fv6yYcvXbNWKbhJtvqgLFxgHPYzYZ1TJLOGO9H37V4viTYxaqdQsb2e1ZFL53S fvWXqQThWRwzxRzAQGcCmtt2CyFNJRoI4+Tp3UWezyZxMQlJLqNNb7A7dIiZLXSh pg8USPoW5knBG0JomwjUKFPGV19OamBwgAA4s60RstK6v0JP+EnaqPh/KpCGMPeZ Hvz63wdtZoCLQRDD0tY/iYhlJESKf1PMDQwBKGZmM+K9gQCc2tUYONwy8PJeKzUY saMKsF8me2hEhORzV40i0DdIrLeKscJoP1smJsBS2NYeqkBUcTohTXefo9upei3u MuOkGK6NwMZPki+VT2O/NVMOwcgMzOuJeRPCsBFSs5zD1ZDzG31bou2YvD7QgBy4 Egw9M/Y+1xWoXtzLoOalfeKUpV0g+ki8wsvhCL6s3A== =ckGN -----END PGP SIGNATURE-----
>From 70aae9ead2c016da95977a744b0a246f7ee2f40e Mon Sep 17 00:00:00 2001 From: Josh Cepek <josh.ce...@usa.net> List-Post: openvpn-devel@lists.sourceforge.net Date: Sat, 24 Aug 2013 11:34:48 -0500 Subject: [PATCH] Support a dep cache when using the generic/build script This feature takes the openssl, lzo, and pkcs11-helper dependency builds and creates a "depcache" tarball for each dep. To generate the depcache, set SAVE_DEP_CACHE to a non-empty string. To use the depcache, set USE_DEP_CACHE the same way instead. Without either, the current build-all-deps behavior is maintained. Signed-off-by: Josh Cepek <josh.ce...@usa.net> --- generic/build | 111 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 84 insertions(+), 27 deletions(-) diff --git a/generic/build b/generic/build index 4bc6bb1..cf55cbf 100755 --- a/generic/build +++ b/generic/build @@ -115,6 +115,10 @@ create_layout() { fi mkdir -p "${IMAGEROOT}" || die "Cannot create '${IMAGEROOT}'" mkdir -p "${BUILDROOT}" || die "Cannot create '${BUILDROOT}'" + mkdir -p "${OPENVPN_ROOT}" || die "Cannot create '${OPENVPN_ROOT}'" + if [ -n "${USE_DEP_CACHE}${SAVE_DEP_CACHE}" ]; then + mkdir -p "${DEPCACHEDIR}" || die "Cannot create '${DEPCACHEDIR}'" + fi BUILDROOT="$(get_full_path "${BUILDROOT}")" SOURCESROOT="$(get_full_path "${SOURCESROOT}")" @@ -165,38 +169,82 @@ extract() { done } +# Takes a short product name (eg: 'openssl') and extracts the depcache. +depcache_extract() { + local src="${DEPCACHEDIR}/${1}.tar.gz" + [ -f "${src}" ] \ + || die "Depcache for '${1}' not found at: '${src}'" + tar -xzf "${src}" -C "${OPENVPN_ROOT}" \ + || die "Cannot extract depcache '${1}'" + [ -z "${2}" ] && echo "Using a depcache tarball for '${1}" +} + +# Takes a short product name (eg: 'openssl') and creates a depcache tarball. +depcache_save() { + local dst="${DEPCACHEDIR}/${1}.tar.gz" + (cd "${INSTALL_ROOT}" && tar -czf "${dst}" .) \ + || die "Cannot save depcache for '${1}' to: '${dst}'" + rm -fr "${INSTALL_ROOT}" \ + || die "Cleanup failed for: '${INSTALL_ROOT}'" + depcache_extract "${1}" noecho +} + build_dep() { - echo "Build openssl" - cd "${BUILDROOT}/openssl"* || die "cd openssl" - - ./Configure --prefix="/${TARGET_ROOT}" --cross-compile-prefix=${CHOST:+${CHOST}-} \ - $(empty_ifelse "${DO_STATIC}" shared no-dso) \ - $(CHOST="${VIRTUAL_CHOST}" "${SCRIPTROOT}/gentoo.config-0.9.8") \ - ${CFLAGS} ${LDFLAGS} \ - no-multilib \ - no-capieng \ - --openssldir=/etc/ssl \ - --libdir=/lib \ - ${EXTRA_OPENSSL_CONFIG} \ - || die "Configure openssl" - [ -n "${BUILD_FOR_WINDOWS}" ] && perl util/mkdef.pl crypto ssl NT update - [ -z "${OPENSSL_SKIP_DEPEND}" ] && ${MAKE} depend - ${MAKE} install INSTALL_PREFIX="${OPENVPN_ROOT}" INSTALLTOP="/" MANDIR="/tmp" \ - || die "make openssl" - rm -fr "${OPENVPN_ROOT}/tmp" + if [ -z "${SAVE_DEP_CACHE}" ]; then + INSTALL_ROOT="${OPENVPN_ROOT}" + else + INSTALL_ROOT="${DEPCACHEDIR}/fakeroot" + mkdir -p "${INSTALL_ROOT}" \ + || die "Cannot create depcache install root at: ${INSTALL_ROOT}'" + fi - fixup_la + if [ -n "${USE_DEP_CACHE}" ]; then + depcache_extract openssl + else + echo "Build openssl" + cd "${BUILDROOT}/openssl"* || die "cd openssl" + + ./Configure --prefix="/${TARGET_ROOT}" --cross-compile-prefix=${CHOST:+${CHOST}-} \ + $(empty_ifelse "${DO_STATIC}" shared no-dso) \ + $(CHOST="${VIRTUAL_CHOST}" "${SCRIPTROOT}/gentoo.config-0.9.8") \ + ${CFLAGS} ${LDFLAGS} \ + no-multilib \ + no-capieng \ + --openssldir=/etc/ssl \ + --libdir=/lib \ + ${EXTRA_OPENSSL_CONFIG} \ + || die "Configure openssl" + [ -n "${BUILD_FOR_WINDOWS}" ] && perl util/mkdef.pl crypto ssl NT update + [ -z "${OPENSSL_SKIP_DEPEND}" ] && ${MAKE} depend + ${MAKE} install INSTALL_PREFIX="${INSTALL_ROOT}" INSTALLTOP="/" MANDIR="/tmp" \ + || die "make openssl" + rm -fr "${INSTALL_ROOT}/tmp" + fixup_la + + [ -n "${SAVE_DEP_CACHE}" ] && depcache_save openssl + fi - echo "Build lzo" - cd "${BUILDROOT}/lzo"* || die "cd lzo" - ./configure ${CONFIGOPTS} ${EXTRA_LZO_CONFIG} \ - $(empty_ifelse "${DO_STATIC}" --enable-shared --disable-shared) \ - || die "Configure lzo" - ${MAKE} ${MAKEOPTS} ${MAKE_AUTOCONF_INSTALL_TARGET} DESTDIR="${OPENVPN_ROOT}" || die "make lzo" - fixup_la + if [ -n "${USE_DEP_CACHE}" ]; then + depcache_extract lzo + else + echo "Build lzo" + cd "${BUILDROOT}/lzo"* || die "cd lzo" + ./configure ${CONFIGOPTS} ${EXTRA_LZO_CONFIG} \ + $(empty_ifelse "${DO_STATIC}" --enable-shared --disable-shared) \ + || die "Configure lzo" + ${MAKE} ${MAKEOPTS} ${MAKE_AUTOCONF_INSTALL_TARGET} DESTDIR="${INSTALL_ROOT}" \ + || die "make lzo" + + fixup_la + + [ -n "${SAVE_DEP_CACHE}" ] && depcache_save lzo + fi if [ -z "${DO_STATIC}" ]; then + if [ -n "${USE_DEP_CACHE}" ]; then + depcache_extract pkcs11-helper + else echo "Build pkcs11-helper" cd "${BUILDROOT}/pkcs11-helper"* || die "cd pkcs11-helper" ./configure ${CONFIGOPTS} ${EXTRA_PKCS11_HELPER_CONFIG} \ @@ -205,7 +253,11 @@ build_dep() { OPENSSL_CFLAGS="${OPENSSL_CRYPTO_CFLAGS}" \ OPENSSL_LIBS="${OPENSSL_CRYPTO_LIBS}" \ || die "Configure pkcs11-helper" - ${MAKE} ${MAKEOPTS} ${MAKE_AUTOCONF_INSTALL_TARGET} DESTDIR="${OPENVPN_ROOT}" || die "make pkcs11-helper" + ${MAKE} ${MAKEOPTS} ${MAKE_AUTOCONF_INSTALL_TARGET} DESTDIR="${INSTALL_ROOT}" \ + || die "make pkcs11-helper" + + [ -n "${SAVE_DEP_CACHE}" ] && depcache_save pkcs11-helper + fi fi echo "tap-windows" @@ -332,6 +384,11 @@ IMAGEROOT="${IMAGEROOT:-${SCRIPTROOT}/image}" BUILDROOT="${BUILDROOT:-${SCRIPTROOT}/tmp}" SOURCESROOT="${SOURCESROOT:-${SCRIPTROOT}/sources}" PATCHDIR="${SCRIPTROOT}/patches" +DEPCACHEDIR="${SCRIPTROOT}/depcache" + +# Cannot both use a depcache and save one: +[ -n "${USE_DEP_CACHE}" ] && [ -n "${SAVE_DEP_CACHE}" ] \ + && die "You cannot both use and save a depcache in the same run" . "${SCRIPTROOT}/build.vars" || die "Cannot source build.vars" -- 1.8.1.2
dep-cache-build.patch.sig
Description: PGP signature