summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 1d5052e57d9fb76b775438c46082c7e2ad7abab0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# Maintainer: leuko <aydos.de>
# Maintainer: VitalyR <vr@vitalyr.com>
# Maintainer: phanium <$(echo bnhoc2R1QHFxLmNvbQo= | base64 -d)>
# Former Maintainer: xiretza <aur@xiretza.xyz>
# Contributor: Darren Wu <$(base64 --decode <<<'ZGFycmVuMTk5NzA4MTBAZ21haWwuY29tCg==')>

# This PKGBUILD can also be used to install *Vitis Unified Software Platform*.
# See `package()` for details.

# BUILD INSTRUCTIONS:
#
# 1. Go to https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools.html
# 2. Download "AMD Unified Installer for FPGAs & Adaptive SoCs SFD" - WARNING:
#   (1) This file is >100GB in size  (2) You need an account for US export
# controls. 3. Place the .tar.gz in the same directory as the PKGBUILD
# 4. Build!
#
# No refunds for broken AUR helpers, just use make(chroot)pkg.
#
# SOME MORE NOTES:
#
# This package is huge. The download alone is a barely-compressed >100GB
# .tar.gz (extracts to ~100GB) and the final zstd-compressed package is another
# 20GB. Reserve at least 200GB in total for building.
#
# It can also take up to two hours to build, being mostly limited by I/O and
# single-thread performance. `namcap` takes another 30 minutes, make sure
# you're not running that automatically.
#
# It *also* requires a reasonably ugly hack to build: since package() is run
# under fakeroot, and the installer tries to access the home directory no
# matter what `--location` is set to, it fails during "Running post-install
# tasks" because it tries to access `/root`. To fix this, a tiny shared library
# (see spoof_homedir.c) is LD_PRELOADed. Its only job is to wrap the
# `getpwuid()` function and modify the original return value for uid==0.

pkgname=vivado
_srcname=FPGAs_AdaptiveSoCs_Unified
pkgver=2023.2
_more_ver=1013_2256
pkgrel=1
pkgdesc="FPGA/CPLD design suite for Xilinx devices"
url="https://www.xilinx.com/products/design-tools/vivado.html"
arch=('x86_64')
license=('custom')
depends=('ncurses5-compat-libs'
    'libxcrypt-compat'
    'libpng12'
    'lib32-libpng12'
    'gtk3'
    'inetutils'
    'xorg-xlsclients'
    'cpio'
)
optdepends=('fxload'
    'digilent.adept.runtime'
    'digilent.adept.utilities'
    'matlab: Model Composer'
    'qt4: Model Composer'
)

source=("file:///${_srcname}_${pkgver}_${_more_ver}.tar.gz"
    'spoof_homedir.c')

# checksum from https://www.xilinx.com/support/download.html
md5sums=('64d64e9b937b6fd5e98b41811c74aab2'
    '69d14ad64f6ec44e041eaa8ffcb6f87c')

# takes forever for probably minimal gain
options=('!strip')

prepare() {
    mkdir -p "$srcdir/installer_temp"
}

build() {
    # build our getpwuid() wrapper library
    gcc -shared -fPIC -D "FAKE_HOME=\"$srcdir/installer_temp\"" spoof_homedir.c -o spoof_homedir.so -ldl
}

package() {
    cd "${_srcname}_${pkgver}_${_more_ver}"

    # LD_PRELOAD already contains libfakeroot.so, add our own library before that
    LD_PRELOAD="$srcdir/spoof_homedir.so:$LD_PRELOAD" ./xsetup \
        --batch Install \
        --agree XilinxEULA,3rdPartyEULA \
        --product Vivado \
        --edition 'Vivado ML Standard' \
        --location "$pkgdir/opt/Xilinx"

    # For *Vitis Unified Software Platform*, use:
    # ```
    #    --product Vitis \
    #    --edition 'Vitis Unified Software Platform' \
    # ```
    # The unified installer that you downloaded includes all Vivado and Vitis
    # editions.

    # install udev rules
    install -Dm644 "$pkgdir/opt/Xilinx/Vivado/${pkgver}/data/xicom/cable_drivers/lin64/install_script/install_drivers/52-xilinx-digilent-usb.rules" -t "$pkgdir/usr/lib/udev/rules.d/"
    install -Dm644 "$pkgdir/opt/Xilinx/Vivado/${pkgver}/data/xicom/cable_drivers/lin64/install_script/install_drivers/52-xilinx-ftdi-usb.rules" -t "$pkgdir/usr/lib/udev/rules.d/"
    install -Dm644 "$pkgdir/opt/Xilinx/Vivado/${pkgver}/data/xicom/cable_drivers/lin64/install_script/install_drivers/52-xilinx-pcusb.rules" -t "$pkgdir/usr/lib/udev/rules.d/"

    # install desktop files
    for deskfile in "$srcdir"/installer_temp/Desktop/*.desktop; do
        sed -i -e "s|$pkgdir||g" "$deskfile"
        install -Dm644 -t "$pkgdir/usr/share/applications/" "$deskfile"
    done

    # clean up artefacts, remove leading $pkgdir from paths
    rm -rf "$pkgdir/opt/Xilinx/.xinstall/"
    find "$pkgdir/opt/Xilinx/" -name '*settings64*' -exec sed -i -e "s|$pkgdir||g" '{}' \+

    # Save space for subsequent packaging, checking etc
    cd ..
    rm -rf "${_srcname}_${pkgver}_${_more_ver}"
}