summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: b839a9a922aedfd820de0c3a5b6c9f7126d3cfd5 (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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# Maintainer: nardholio <nardholio@gmail.com>
# Maintainer: aarto <aarto@aur.archlinux.org>
# Contributor: Xeonacid <h.dwwwwww@gmail.com>
# Contributor: Ivan Marquesi Lerner <ivanmlerner@protonmail.com>
# Contributor: BlackCatDevel0per

pkgbase=solana
pkgname=(solana-cli agave-validator solana-dev solana)
epoch=1
pkgver=4.0.2
# https://github.com/anza-xyz/agave/blob/v$pkgver/scripts/spl-token-cli-version.sh
_splTokenCliVersion=5.5.0
pkgrel=1
url="https://github.com/anza-xyz/agave"
arch=(x86_64)
license=(Apache-2.0)
makedepends=(git protobuf clang curl cargo systemd-libs)
source=(git+https://github.com/anza-xyz/agave.git#tag=v$pkgver
        git+https://github.com/solana-program/token-2022.git#tag=cli@v$_splTokenCliVersion
        $pkgbase.sysusers
        $pkgbase.tmpfiles
        $pkgbase-sbf_sdk-path.patch)
sha256sums=('bb2d61322ad92abe033c79021c1d7f8a26b55b44662036f552e934acf4f348a6'
            'a9a0f6e495f68a77e61ce44a39bed42608bd3afd6aa5ddf09e124b50e17d41a6'
            'bf7e015436e3d15e70fc67f323bbd04163f79a4de7d06a254a5409bd031227b0'
            'a0f9ee2a24ab97da977eed1dd68a92165c2f2e6d5467462fe83c762031f4e02b'
            'a39c403d4b25062e3d887afe16d9d643f058f34b107d6b7b7041c5167a9f12e3')
options=(!lto)

# Build lists
# https://github.com/anza-xyz/agave/blob/v$pkgver/scripts/agave-build-lists.sh
# Core binaries (non-DCOU)
_MAIN_BINS=(
  solana-test-validator
  solana
  solana-keygen
  agave-validator
  agave-watchtower
  solana-gossip
  solana-genesis
  solana-faucet
  solana-stake-accounts
  solana-tokens
  solana-bench-streamer
  solana-poh-bench
  rbpf-cli
)

# Platform bins https://github.com/anza-xyz/agave/blob/v$pkgver/platform-tools-sdk/cargo-build-sbf/Cargo.toml
_PLATFORMBINS=(
  cargo-build-sbf
  cargo-test-sbf
)

# Root-workspace DCOU/tainted binaries
_ROOT_DCOU_BINS=(
  agave-store-histogram
  solana-accounts-cluster-bench
)

# Devbins https://github.com/anza-xyz/agave/blob/v$pkgver/dev-bins/Cargo.toml
_DEVBINS=(
  agave-ledger-tool
  agave-store-tool
  solana-bench-tps
)

# Tainted packages to exclude from main workspace build
_dcou_tainted_packages=(
  agave-ledger-tool
  agave-store-histogram
  agave-store-tool
  solana-accounts-cluster-bench
  solana-bench-tps
  solana-local-cluster
)

# Packaging lists
_solana_bins=(solana solana-keygen solana-gossip solana-faucet solana-stake-accounts solana-tokens)
_validator_bins=(agave-validator agave-watchtower solana-genesis "${_ROOT_DCOU_BINS[@]}" solana-bench-tps)
_dev_bins=(cargo-build-sbf cargo-test-sbf solana-test-validator agave-ledger-tool agave-store-tool solana-bench-streamer solana-poh-bench rbpf-cli)

prepare() {
  export RUSTUP_TOOLCHAIN=stable
  cd "$srcdir/agave"

  patch -Np1 -i "../$pkgbase-sbf_sdk-path.patch"

  cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"

  cd "$srcdir/agave/platform-tools-sdk"
  cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"

  cd "$srcdir/agave/dev-bins"
  cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"

  cd "$srcdir/token-2022"
  cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
}

build() {
  export RUSTUP_TOOLCHAIN=stable
  export CARGO_TARGET_DIR=target
  cd "$srcdir/agave"

  # Fix lints
  sed -i '/^\[workspace\.lints\.rust\]$/,+1d' Cargo.toml
  # Fix rocksdb
  export CXXFLAGS="$CXXFLAGS -include cstdint"

  # Main build: exclude tainted packages to prevent DCOU feature leakage
  local main_binargs=()
  for bin in "${_MAIN_BINS[@]}"; do
    main_binargs+=(--bin "$bin")
  done
  local excludeArgs=()
  for package in "${_dcou_tainted_packages[@]}"; do
    excludeArgs+=(--exclude "$package")
  done
  cargo build --frozen --release --workspace "${main_binargs[@]}" "${excludeArgs[@]}"

  # Build platform tools
  local platform_binargs=()
  for bin in "${_PLATFORMBINS[@]}"; do
    platform_binargs+=(--bin "$bin")
  done
  cargo build --frozen --release --manifest-path platform-tools-sdk/Cargo.toml "${platform_binargs[@]}"

  # Root-workspace DCOU bins
  local root_dcou_binargs=()
  for bin in "${_ROOT_DCOU_BINS[@]}"; do
    root_dcou_binargs+=(--bin "$bin")
  done
  cargo build --frozen --release "${root_dcou_binargs[@]}"

  # Build devbins
  local dev_binargs=()
  for bin in "${_DEVBINS[@]}"; do
    dev_binargs+=(--bin "$bin")
  done
  cargo build --frozen --release --manifest-path dev-bins/Cargo.toml --features=dev-context-only-utils "${dev_binargs[@]}"

  # Additional build tools
  cargo build --frozen --release --manifest-path syscalls/gen-syscall-list/Cargo.toml
  cargo run --frozen --release --bin gen-headers

  # Fetch perf-libs
  ./fetch-perf-libs.sh

  # Build spl-token-cli
  cd "$srcdir/token-2022"
  cargo build --frozen --release --bin spl-token
}

package_solana-cli() {
  pkgdesc="Solana CLI tools"
  depends=(glibc libgcc systemd-libs)
  provides=(spl-token)
  conflicts=(spl-token)

  cd "$srcdir/agave"
  for bin in "${_solana_bins[@]}"; do
    install -Dm755 "target/release/$bin" -t "$pkgdir/usr/bin"
  done

  # Install spl-token
  cd "$srcdir/token-2022"
  install -Dm755 "target/release/spl-token" -t "$pkgdir/usr/bin"

  # Install systemd integration
  install -Dm644 "$srcdir/$pkgbase.sysusers" "$pkgdir/usr/lib/sysusers.d/$pkgbase.conf"
  install -Dm644 "$srcdir/$pkgbase.tmpfiles" "$pkgdir/usr/lib/tmpfiles.d/$pkgbase.conf"
}

package_agave-validator() {
  pkgdesc="Agave validator and node operator tools for Solana"
  install=$pkgname.install
  depends=(bzip2 glibc libgcc libstdc++ libcap)
  optdepends=(
    'ocl-icd: OpenCL GPU signature verification via perf-libs (requires compatible GPU; opt-in via SOLANA_PERF_LIBS)'
    'intel-sgx-psw: SGX-backed signing enclave via perf-libs (requires SGX-capable CPU; opt-in via SOLANA_PERF_LIBS)'
  )

  cd "$srcdir/agave"
  for bin in "${_validator_bins[@]}"; do
    install -Dm755 "target/release/$bin" -t "$pkgdir/usr/bin"
  done

  # Install perf-libs
  # export SOLANA_PERF_LIBS=/usr/lib/solana/perf-libs at runtime to enable
  install -dm755 "$pkgdir/usr/lib/solana/perf-libs"
  cp -a target/perf-libs/* "$pkgdir/usr/lib/solana/perf-libs/" 2>/dev/null || true
}

package_solana-dev() {
  pkgdesc="Solana program developer tools"
  install=$pkgname.install
  depends=(bash bzip2 glibc libgcc libstdc++)
  optdepends=('cargo: required for cargo-build-sbf and cargo-test-sbf')
  conflicts=(solana-dev-bin)

  cd "$srcdir/agave"
  for bin in "${_dev_bins[@]}"; do
    install -Dm755 "target/release/$bin" -t "$pkgdir/usr/bin"
  done

  # Install platform tools
  install -dm755 "$pkgdir/usr/lib/solana/platform-tools-sdk"
  cp -a platform-tools-sdk/sbf "$pkgdir/usr/lib/solana/platform-tools-sdk"

  # Install program deps
  install -dm755 "$pkgdir/usr/lib/solana/deps"
  shopt -s nullglob
  for dep in target/release/deps/libsolana*program.*; do
    install -Dm755 "$dep" -t "$pkgdir/usr/lib/solana/deps"
  done
}

package_solana() {
  pkgdesc="A fast, secure, and censorship resistant blockchain (meta package)"
  depends=(solana-cli agave-validator solana-dev)
  arch=(any)
}