summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 433b4efc4b5c6ce1a28307cc9fde11bdd601b04f (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
# Maintainer: Zion Nimchuk <zionnimchuk@gmail.com>
# Submitter: Maxime Gauduin <alucryd@archlinux.org>

pkgname=rpcs3-git
pkgver=0.0.33.r16885.e56164f1e3
pkgrel=1
pkgdesc='A Sony PlayStation 3 emulator'
arch=(x86_64)
url=https://github.com/RPCS3/rpcs3
license=(GPL-2.0-only)
depends=(
  alsa-lib
  glew
  glu
  # Use bundled FFMPEG for now since we use FFMPEG 6.0
  #libavcodec.so
  #libavutil.so
  #libswscale.so
  libevdev
  libgl
  libice
  libncursesw.so
  libpng
  libpulse
  libsm
  libx11
  libxext
  openal
  qt6-base
  qt6-declarative
  qt6-multimedia
  qt6-svg
  sdl2
  vulkan-icd-loader
  zlib
  curl
  pugixml
# newer system flatbuffers is incompatible with the version RPCS3 depends on
# flatbuffers
)
optdepends=(
  rpcs3-udev
)
makedepends=(
  cmake
  git
  libglvnd
  python
  vulkan-validation-layers
  # clang is required because audio is broken with latest gcc
  clang
)
provides=(rpcs3)
conflicts=(rpcs3)
options=(!emptydirs !lto !strip)
source=(
  git+https://github.com/RPCS3/rpcs3.git
  llvm::git+https://github.com/llvm/llvm-project.git
  git+https://github.com/KhronosGroup/glslang.git
)
sha256sums=(
  SKIP
  SKIP
  SKIP
)

pkgver() {
  cd rpcs3

  COMM_TAG="$(grep 'version{.*}' rpcs3/rpcs3_version.cpp | awk -F[{,] '{printf "%d.%d.%d", $2, $3, $4}')"
  COMM_COUNT="$(git rev-list --count HEAD)"
  COMM_HASH="$(git rev-parse --short HEAD)"
  echo "${COMM_TAG}.r${COMM_COUNT}.${COMM_HASH}"
}

prepare() {
  cd rpcs3
  
  git submodule init 3rdparty/glslang/glslang 3rdparty/llvm/llvm
  git config submodule.3rdparty/glslang.url ../glslang
  git config submodule.3rdparty/llvm/llvm.url ../llvm
  
  SUBMODULES=($(git config --file .gitmodules --get-regexp path | \
    awk '!/libpng/ && !/zlib/ && !/curl/ && !/llvm/ && !/glslang/ && !/pugixml/ '))

  # We need to convert from a relative folder path to a https://github.com path
  for ((i=0;i<${#SUBMODULES[@]};i+=2))
  do
    pathid=${SUBMODULES[$i]}
    path=${SUBMODULES[$i+1]}

    git submodule init $path
    urlid=${pathid/%.path/.url}

    # This gets the last two paths in the url, ie RPCS3/rpcs3.git
    url=$(git config $urlid | awk -F/ '{print $(NF-1)"/"$(NF-0)}')

    git config $urlid https://github.com/$url
    git -c protocol.file.allow=always submodule update --init --filter=tree:0 $path
  done
  
  git -c protocol.file.allow=always submodule update 3rdparty/glslang/glslang 3rdparty/llvm/llvm
}

build() {
  # GLIBCXX_ASSERTIONS is know to cause unwanted assertions and crash rpcs3
  BAD_FLAG="-Wp,-D_GLIBCXX_ASSERTIONS"
  CXXFLAGS="${CXXFLAGS//$BAD_FLAG/}"

  CC=clang CXX=clang++ cmake -S rpcs3 -B build \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_SKIP_RPATH=ON \
    -DUSE_NATIVE_INSTRUCTIONS=OFF \
    -DUSE_SYSTEM_FFMPEG=OFF \
    -DUSE_SYSTEM_LIBPNG=ON \
    -DUSE_SYSTEM_ZLIB=ON \
    -DUSE_SYSTEM_CURL=ON \
    -DUSE_SYSTEM_FLATBUFFERS=OFF \
    -DUSE_SYSTEM_PUGIXML=ON \
    -DUSE_SDL=ON \
    -DUSE_SYSTEM_SDL=ON \
    -DBUILD_LLVM=ON \
    -DUSE_SYSTEM_WOLFSSL=OFF
  
  make -C build
}

package() {
  make DESTDIR="${pkgdir}" -C build install
}

# vim: ts=2 sw=2 et: