# Copyright 1999-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 PYTHON_COMPAT=( python3_{12..14} ) CHECKREQS_MEMORY="4G" CHECKREQS_DISK_BUILD="20G" CHECKREQS_DISK_USR="12G" inherit check-reqs desktop python-any-r1 udev xdg DESCRIPTION="Intel(Altera) Quartus Prime Lite FPGA design software" HOMEPAGE="https://www.altera.com/products/development-tools/quartus" MAINVER="${PV%.*.*}" BUILDVER="${PV##*.}" LITEVER="${MAINVER}std.0.${BUILDVER}" INTELDIR="/opt/intelFPGA/${MAINVER}" SRC_URI="Quartus-lite-${LITEVER}-linux.tar" LICENSE="Intel-FPGA" SLOT="0" KEYWORDS="~amd64" IUSE="+X" REQUIRED_USE="X" RESTRICT="fetch strip" RDEPEND=" app-arch/bzip2 dev-libs/expat dev-libs/glib dev-libs/libxml2 dev-libs/openssl media-libs/alsa-lib media-libs/fontconfig media-libs/freetype media-libs/libpulse sys-apps/dbus sys-apps/util-linux sys-libs/libxcrypt[compat] sys-libs/ncurses-compat sys-libs/zlib x11-libs/libdrm x11-libs/libICE x11-libs/libSM x11-libs/libX11 x11-libs/libXau x11-libs/libXext x11-libs/libXi x11-libs/libXrender x11-libs/libXtst " DEPEND="${RDEPEND}" BDEPEND=" ${PYTHON_DEPS} app-arch/unzip dev-util/patchelf " S="${WORKDIR}" QA_PREBUILT="${INTELDIR#/}/*" QA_SONAME="${INTELDIR#/}/*" QA_FLAGS_IGNORED="${INTELDIR#/}/*" QA_TEXTRELS="${INTELDIR#/}/*" QA_EXECSTACK="${INTELDIR#/}/*" QA_WX_LOAD="${INTELDIR#/}/*" pkg_nofetch() { elog "This package requires manual download due to Intel SSO login." elog "" elog "1. Go to: https://www.altera.com/products/development-tools/quartus" elog "2. Select Quartus Prime Lite Edition ${MAINVER} - Complete Download" elog "3. Download: Quartus-lite-${LITEVER}-linux.tar (8.9 GB)" elog " SHA1: 833c96461eb55e0124f358c8ec9322ba1fbd5286" elog "4. Place in: ${DISTDIR}" } pkg_pretend() { check-reqs_pkg_pretend } pkg_setup() { check-reqs_pkg_setup python-any-r1_pkg_setup } src_unpack() { unpack "Quartus-lite-${LITEVER}-linux.tar" } src_install() { local extractor="${FILESDIR}/quartus_extractor.py" # Extract Quartus base from the .run installer (passive, no execution) "${PYTHON}" "${extractor}" \ "${WORKDIR}/components/QuartusLiteSetup-${LITEVER}-linux.run" \ --extract "${ED}${INTELDIR}" \ --component quartus_base || die "Quartus extraction failed" # Extract license component "${PYTHON}" "${extractor}" \ "${WORKDIR}/components/QuartusLiteSetup-${LITEVER}-linux.run" \ --extract "${ED}${INTELDIR}" \ --component license_component || die "License extraction failed" # Device support from .qdz files (plain zip archives) local qdz for qdz in "${WORKDIR}"/components/*.qdz; do [[ -f "${qdz}" ]] || continue einfo "Extracting device support: $(basename "${qdz}")" unzip -q -o "${qdz}" -d "${ED}${INTELDIR}" || die "Failed to extract $(basename "${qdz}")" done # Fix permissions - CookFS doesn't store Unix permissions chmod -R +x "${ED}${INTELDIR}/quartus/bin" 2>/dev/null chmod -R +x "${ED}${INTELDIR}/nios2eds/bin" 2>/dev/null chmod -R +x "${ED}${INTELDIR}/niosv/bin" 2>/dev/null # Create soname symlinks (official installer does ldconfig) ldconfig -n "${ED}${INTELDIR}/quartus/linux64" 2>/dev/null # Create unversioned lib symlinks missing from passive extraction patchelf --replace-needed liblzma.so.0 liblzma.so.5 \ "${ED}${INTELDIR}/quartus/linux64/libboost_iostreams-x64.so.1.70.0" for lib in "${ED}${INTELDIR}/quartus/linux64"/lib*.so.*; do [[ -f "${lib}" ]] || continue base="${lib%%\.so\.*}.so" [[ -e "${base}" ]] || ln -sf "$(basename "${lib}")" "${base}" done # Fix NULL DT_RPATH and insecure RUNPATH patchelf --remove-rpath "${ED}${INTELDIR}/quartus/linux64/libgcc_s.so.1" 2>/dev/null patchelf --remove-rpath "${ED}${INTELDIR}/quartus/linux64/libgomp.so.1" 2>/dev/null patchelf --remove-rpath "${ED}${INTELDIR}/quartus/linux64/libstdc++.so.6" 2>/dev/null find "${ED}${INTELDIR}/ip/altera/mentor_vip_ae" -name "*.so" \ -exec patchelf --remove-rpath {} \; 2>/dev/null # Remove Matlab MEX files (useless without Matlab) find "${ED}${INTELDIR}" \( -name "*.mexglx" -o -name "*.mexa64" \) -delete # Remove broken bundled Perl/Python modules with unresolvable deps rm -f "${ED}${INTELDIR}/quartus/linux64/perl/lib/site_perl"/*/x86_64-linux-thread-multi/auto/*/SSLeay/SSLeay.so rm -f "${ED}${INTELDIR}/quartus/linux64/perl/lib"/*/x86_64-linux-thread-multi/auto/DB_File/DB_File.so rm -f "${ED}${INTELDIR}/quartus/linux64/python/lib/readline"*_failed.so rm -f "${ED}${INTELDIR}/quartus/linux64/python/lib/_dbm"*.so # Cleanup rm -rf "${ED}${INTELDIR}"/{uninstall,logs} 2>/dev/null find "${ED}${INTELDIR}" -name unzip -delete 2>/dev/null find "${ED}${INTELDIR}" -type d -exec chmod a-s {} + 2>/dev/null find "${ED}${INTELDIR}" -perm -o+w -not -type l -exec chmod go-w {} + 2>/dev/null find "${ED}${INTELDIR}" -name "*.la" -delete 2>/dev/null # Remove unused Qt6 QML plugins with unresolvable deps rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtQuick/Timeline" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtQuick/VirtualKeyboard" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtTextToSpeech" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtSensors" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtScxml" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtRemoteObjects" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtOpcUa" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtMultimedia" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtCharts" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/QtQml/StateMachine" rm -rf "${ED}${INTELDIR}/quartus/linux64/qt6/qml/Qt/labs/lottieqt" # Fix embedded paths sed -i "s,${ED},,g" "${ED}${INTELDIR}/quartus/sopc_builder/.sopc_builder" 2>/dev/null # Environment setup cat > "${T}/quartus.sh" <<-EOF export QUARTUS_ROOTDIR="${INTELDIR}/quartus" export PATH="\${PATH}:${INTELDIR}/quartus/bin" EOF insinto /etc/profile.d doins "${T}/quartus.sh" # USB Blaster udev rules cat > "${T}/51-usbblaster.rules" <<-EOF SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", MODE="0666" EOF udev_newrules "${T}/51-usbblaster.rules" 51-usbblaster.rules # Desktop entry make_desktop_entry "env QT_QPA_PLATFORM=xcb ${INTELDIR}/quartus/bin/quartus" \ "Quartus Prime Lite" "${INTELDIR}/quartus/adm/quartusii.png" "Development" # License symlink dosym "${INTELDIR}/licenses/license.txt" "/usr/share/licenses/${PN}/LICENSE" } pkg_postinst() { udev_reload xdg_desktop_database_update xdg_icon_cache_update elog "Quartus installed to ${INTELDIR}" elog "Run 'source /etc/profile.d/quartus.sh' or re-login to update PATH" elog "USB Blaster udev rules installed - reload with: udevadm control --reload-rules" } pkg_postrm() { udev_reload xdg_desktop_database_update xdg_icon_cache_update }