From a30ac19bcbe5d4893d1e04b451ca4b2a2bd31553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Veyret?= Date: Sat, 9 Jul 2016 09:27:47 +0200 Subject: [PATCH] sys-boot/udk: add TianoCore UEFI development kit, bug #588440 --- sys-boot/udk/Manifest | 3 + sys-boot/udk/metadata.xml | 22 ++++ sys-boot/udk/udk-2015.ebuild | 262 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 287 insertions(+) create mode 100644 sys-boot/udk/Manifest create mode 100644 sys-boot/udk/metadata.xml create mode 100644 sys-boot/udk/udk-2015.ebuild diff --git a/sys-boot/udk/Manifest b/sys-boot/udk/Manifest new file mode 100644 index 0000000..9e93ea0 --- /dev/null +++ b/sys-boot/udk/Manifest @@ -0,0 +1,3 @@ +DIST UDK2015.Complete.MyWorkSpace.zip 121736982 SHA256 ff11e68feafae13510ad5ee951bf7b219b3483ab335c1d0c85f45a5b7ba48b5e SHA512 7856a8f29296f817e8fd09d8eaf7207f4e25a13faa10936d1ceb10cb6a900be265379722c0ade0ef93b1c640fef8693667d2567962e3288b20ae77f607f03d39 WHIRLPOOL 8b1e283e0ae3ec422eea609a418784260119410a87c5397803730f1c73be0b113eec41ed4cd1920d32735a23377acd80bedf1867518733be6d698c3891775276 +EBUILD udk-2015.ebuild 8244 SHA256 eeab4f546903d392592556b65f369ac8e8d4205069b26cece459d2526a6daac6 SHA512 c410f8d0b9eb8c942b5fbf7a2a9406864ffdcba0b839d47111ee7b06e56cd185648484c572529ad67d05ba9289d74c11fbbe7092fd9777784f943a1ac807a61b WHIRLPOOL 2ddebaedd3559a87cf045fbbe9ca249ed71bfd39494d28d5d9c76cd1df34baf8d1e2c9cf47f413aa8303bd615cd3feb1c28d57c20f5353e519352f1f0554b019 +MISC metadata.xml 920 SHA256 3ddbcd56238b81a1c29f4e3dca296f8ef7168204af6c5e2443654dec2b0efd3e SHA512 565903822b180365e596dc8778061cf5a61a83a2b19b812be999a2147ec5d7d69398fdcfde334799c5ff33d01ce10719ad6d91fd9702ca3ee271069dfade40c3 WHIRLPOOL cc531ccfe01b7a49092ec71f7602180d5999d5fa1a3fd127ef61b22c6cbc2cad763ae9884f4a4737ad02e33ec1a63ace0558e74fdb761176562bbe87a11d4311 diff --git a/sys-boot/udk/metadata.xml b/sys-boot/udk/metadata.xml new file mode 100644 index 0000000..4ccedc7 --- /dev/null +++ b/sys-boot/udk/metadata.xml @@ -0,0 +1,22 @@ + + + + + Tianocore UEFI development kit, installed as classical Linux libraries and + header files. + + + Kit de développement UEFI Tianocore, installé comme des bibliothèques et + des fichiers d'en-tête Linux classiques. + + + Compile libraries with debug information. + Install EDK2 documentation. + Install usage examples. + + + Compile les bibliothèques avec les information de déboggage. + Installe la documentation EDK2. + Installe les exemples d'utilisation. + + diff --git a/sys-boot/udk/udk-2015.ebuild b/sys-boot/udk/udk-2015.ebuild new file mode 100644 index 0000000..f0fdcb2 --- /dev/null +++ b/sys-boot/udk/udk-2015.ebuild @@ -0,0 +1,262 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=6 + +PYTHON_COMPAT=( python2_7 ) +PYTHON_REQ_USE="sqlite" + +inherit multiprocessing python-single-r1 versionator + +DESCRIPTION="Tianocore UEFI Development kit" +HOMEPAGE="http://www.tianocore.org/edk2/" +MY_V="${PN^^}$(get_version_component_range 1)" +SRC_URI="https://github.com/tianocore/${PN}/releases/download/${MY_V}/${MY_V}.Complete.MyWorkSpace.zip" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="-debug doc examples" + +DEPEND="app-arch/unzip dev-lang/nasm ${PYTHON_DEPS}" +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +S="${WORKDIR}/MyWorkSpace" + +pkg_setup() { + UNAME_ARCH=$(uname -m | perl -pe 's@i[3456789]86@IA32@' ) + if [[ ${UNAME_ARCH} == "x86_64" ]] || [[ ${UNAME_ARCH} == "amd64" ]] ; then + export ARCH=X64 + else + export ARCH=${UNAME_ARCH} + fi + use debug && export COMPILE_MODE="DEBUG" || export COMPILE_MODE="RELEASE" + GCC_VERS=$(gcc --version | head -1 | sed "s/.*)//") + GCC_VERS=$(get_version_component_range 1-2 ${GCC_VERS}) + GCC_VERS=$(delete_all_version_separators ${GCC_VERS}) + if [[ ${GCC_VERS} -lt 44 ]] || [[ ${GCC_VERS} -gt 49 ]]; then + export TOOLCHAIN_TAG="ELFGCC" + else + export TOOLCHAIN_TAG="GCC${GCC_VERS}" + fi +} + +src_unpack() { + unpack ${A} + unpack "${WORKDIR}/${MY_V}.MyWorkSpace.zip" + pushd "${S}" + unpack "${WORKDIR}/BaseTools(Unix).tar" + if use doc; then + mkdir -p "${S}/doc" + cd "${S}/doc" + for f in "${WORKDIR}/Documents/"*" Document.zip"; do + DOC_NAME=$(echo ${f} | perl -pe 's@^.*/([^/]*) Document.zip$@\1@') + unpack "${WORKDIR}/Documents/${DOC_NAME} Document.zip" + mv "${S}/doc/html" "${S}/doc/${DOC_NAME}" + done + fi + popd +} + +src_prepare() { + eapply_user + python_setup 'python2.7' + # Base tools does not like parallel make + emake -j1 -C BaseTools + . edksetup.sh BaseTools +} + +src_configure() { + perl -i -pe 's@^(ACTIVE_PLATFORM\s*=).*$@\1 MdeModulePkg/MdeModulePkg.dsc@; \ + s/^(TARGET\s*=).*$/\1 '${COMPILE_MODE}'/; \ + s/^(TARGET_ARCH\s*=).*$/\1 '${ARCH}'/; \ + s/^(TOOL_CHAIN_TAG\s*=).*$/\1 '${TOOLCHAIN_TAG}'/; \ + s/^(MAX_CONCURRENT_THREAD_NUMBER\s*=).*$/\1 '$(makeopts_jobs)'/' \ + "${S}/Conf/target.txt" || die "Failed to configure target file" +} + +src_compile() { + if use examples; then + BUILD_TARGET=all + else + BUILD_TARGET=libraries + fi + build ${BUILD_TARGET} || die "Failed to compile environment" + # TODO Sometimes a package will not use the user's ${CFLAGS} or ${LDFLAGS}. + # TODO This must be worked around. + # TODO See https://devmanual.gentoo.org/ebuild-writing/functions/src_compile/building/index.html +} + +src_install() { + BUILD_DIR="${S}/Build/MdeModule/${COMPILE_MODE}_${TOOLCHAIN_TAG}/${ARCH}" + + for f in "${BUILD_DIR}"/*/Library/*/*/OUTPUT/*.lib; do + newlib.a "${f}" lib$(basename "${f}" .lib).a + done + dolib "${S}/BaseTools/Scripts/GccBase.lds" + + INCLUDE_DEST="/usr/include/${PN}" + for f in "" /Guid /IndustryStandard /Library /Pi /Ppi /Protocol /Uefi; do + insinto "${INCLUDE_DEST}${f}" + doins "${S}/MdePkg/Include${f}"/*.h + done + insinto "${INCLUDE_DEST}" + doins "${S}/MdePkg/Include/${ARCH}"/*.h + find "${S}" -name 'BaseTools' -prune -o -name 'MdePkg' -prune -o \ + -name 'CryptoPkg' -prune -o -type d -name Include \ + -exec find {} -maxdepth 0 \; \ + | while read hfile; do + doins -r "${hfile}"/* + done + + dobin "${S}/BaseTools/Source/C/bin/GenFw" + + if use doc; then + docinto "html" + # Document installation may be very long, so split it and display message + for f in "${S}"/doc/*; do + ebegin "Installing documentation for $(basename ${f}), please wait" + dodoc -r "${f}" + eend $? + done + fi + + if use examples; then + EX_REBUILD_DIR="${S}/${P}-exemples" + for f in "${S}/MdeModulePkg/Application"/*; do + EX_NAME=$(basename "${f}") + ebegin "Preparing ${EX_NAME} example" + mkdir -p "${EX_REBUILD_DIR}/${EX_NAME}" + EX_BUILD_DIR="${BUILD_DIR}/MdeModulePkg/Application" + EX_BUILD_DIR="${EX_BUILD_DIR}/${EX_NAME}/${EX_NAME}" + copySourceFiles "${f}" "${EX_REBUILD_DIR}/${EX_NAME}" + copySourceFiles "${EX_BUILD_DIR}/DEBUG" "${EX_REBUILD_DIR}/${EX_NAME}" + createMakefile "${EX_REBUILD_DIR}/${EX_NAME}/Makefile" \ + "${EX_NAME}" "${EX_BUILD_DIR}/GNUmakefile" + tar -C "${EX_REBUILD_DIR}" -cf "${EX_REBUILD_DIR}/${EX_NAME}.tar" \ + "${EX_NAME}" + eend $? "Failed to create example file" + done + docinto "examples" + dodoc "${EX_REBUILD_DIR}"/*.tar + fi + +# TODO * QA Notice: The following files contain writable and executable sections +# TODO * !WX --- --- usr/lib64/libBaseLib.a:Thunk16.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:SwitchStack.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:SetJump.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:LongJump.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:EnableDisableInterrupts.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:DisablePaging64.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:CpuId.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:CpuIdEx.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:EnableCache.obj +# TODO * !WX --- --- usr/lib64/libBaseLib.a:DisableCache.obj +# TODO * QA Notice: Package triggers severe warnings which indicate that it +# TODO * may exhibit random runtime failures. +# TODO * /usr/include/bits/string3.h:90:70: warning: call to void* __builtin___memset_chk(void*, int, long unsigned int, long unsigned int) will always overflow destination buffer +} + +pkg_postinst() { + elog "Installation done for ${ARCH}" + use doc && \ + elog "You can find documentation in /usr/share/doc/${PF}/html" + use examples && \ + elog "You can find examples in /usr/share/doc/${PF}/examples" +} + +## +# Parameters : +# 1 - Path where to search for source files. +# 2 - Path where source files must be copied. +copySourceFiles() { + while read -d '' -r filename; do + DEST_FILE="${2}${filename#${1}}" + mkdir -p $(dirname "${DEST_FILE}") + mv "${filename}" "${DEST_FILE}" + done < <(find "${1}" -name '*.h' -print0 -o -name '*.c' -print0) +} + +## +# Parameters : +# 1 - Path of the file to create. +# 2 - Name of the module. +# 3 - Path of the generated Makefile. +createMakefile() { + cat >${1} <>${1} <${3} + + cat >>${1} <>${1} <