summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 18f45c0698c6325db38617224197c51a4428ff02 (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
# Maintainer: sfn
# Contributor: Sven-Hendrik Haase <svenstaro@archlinux.org>
# Contributor: bartus <arch-user-repoᘓbartus.33mail.com>

pkgname='alice-vision'
pkgver=3.3.1
pkgrel=3
options=('!debug') # debug package is kinda big -- needs investigation!
pkgdesc="Photogrammetric Computer Vision Framework which provides 3D Reconstruction and Camera Tracking algorithms"
arch=('x86_64')
url="https://alicevision.org/"
license=('MPL-2.0' 'MIT')
depends=('boost-libs' 'geogram' 'coin-or-clp' 'coin-or-coinutils' 'coin-or-lemon' 'ceres-solver' 'openmesh' 'jemalloc' 'zlib'
         'alembic' 'popsift' 'assimp' 'onnxruntime' 'cuda' 'openimageio' 'usd')
makedepends=('boost' 'eigen' 'freetype2' 'flann' 'cctag' 'onnx' 'swig' 'expat'
             'git' 'cmake' 'doxygen' 'python-sphinx' 'nanoflann' 'metis' 'libe57format')
optdepends=('apriltag: Recognition of Apriltags'
			'libe57format: e57 3d imaging format I/O')
source=("git+https://github.com/alicevision/AliceVision.git#tag=v${pkgver}"
        "MeshSDFilter::git+https://github.com/alicevision/MeshSDFilter.git#branch=av_develop"
        "fix-default-ocio-path.patch"
        "alicevision.sh")

sha256sums=('395661cda7ac46e9f694a568a8e7caf42989da64d2e0b206a667881d10ddae71'
            'SKIP'
            '3f02c715f27498ac8982edee3e3af151b0cd2a9cb83da37fef3b7fec1e34b169'
            'b474a12823b1fb0e1613bba0d7bd455f63124aa8c29b3d00df94f0a3c00ab900')

prepare() {
  cd AliceVision

  git submodule init
  git config submodule."src/dependencies/MeshSDFilter".url "${srcdir}/MeshSDFilter"
  git -c protocol.file.allow=always submodule update

  # we don't want this as it causes a segfault and anyway we want to refer to makepkg config
  sed 's|OptimizeForArchitecture()||g'  -i src/CMakeLists.txt

  # Patch to find system lz4 and coinutils
  sed '1i find_package(PkgConfig REQUIRED)' -i src/CMakeLists.txt
  sed '1i find_package(PkgConfig REQUIRED)' -i src/cmake/AliceVisionConfig.cmake.in
  
  sed 's|find_package(lz4 REQUIRED)|pkg_check_modules(lz4 REQUIRED IMPORTED_TARGET liblz4)|g' -i src/CMakeLists.txt
  sed 's|lz4::lz4|PkgConfig::lz4|g' -i src/CMakeLists.txt

  sed 's|find_package(CoinUtils REQUIRED)|pkg_check_modules(CoinUtils REQUIRED IMPORTED_TARGET coinutils)|g' -i src/CMakeLists.txt
  sed 's|find_package(Clp REQUIRED)|pkg_check_modules(Clp REQUIRED IMPORTED_TARGET clp)|g' -i src/CMakeLists.txt
  sed 's|find_package(Osi REQUIRED)|pkg_check_modules(Osi REQUIRED IMPORTED_TARGET osi-clp)|g' -i src/CMakeLists.txt
  sed 's|find_dependency(CoinUtils REQUIRED)|pkg_check_modules(CoinUtils REQUIRED IMPORTED_TARGET coinutils)|g' -i src/cmake/AliceVisionConfig.cmake.in
  sed 's|find_dependency(Clp REQUIRED)|pkg_check_modules(Clp REQUIRED IMPORTED_TARGET clp)|g' -i src/cmake/AliceVisionConfig.cmake.in
  sed 's|find_dependency(Osi REQUIRED)|pkg_check_modules(Osi REQUIRED IMPORTED_TARGET osi-clp)|g' -i src/cmake/AliceVisionConfig.cmake.in

  sed 's|Coin::|PkgConfig::|g' -i src/*/*/CMakeLists.txt

  # eigen 5.x compat
  sed -i "s|Eigen3 3.3 REQUIRED|Eigen3 REQUIRED|g" src/CMakeLists.txt

  # lto is broken for cuda objects
  sed -e 's|\(${CUDA_NVCC_FLAGS};-std=c++20\)|\1;-Xcompiler=-fno-lto|g' -i src/CMakeLists.txt

  # fix default OCIO config path
  patch -p1 -i ../fix-default-ocio-path.patch
  
  # fix doc build
  sed 's|docs/sphinx/rst|docs/sphinx|g' -i src/CMakeLists.txt

  # fix build against newer boost
  sed 's|Boost 1.76.0|Boost|g' -i src/CMakeLists.txt
  sed '/Boost::system/d' -i src/software/convert/CMakeLists.txt
  sed '/Boost::system/d' -i src/aliceVision/system/CMakeLists.txt
  sed '/Boost::system/d' -i src/aliceVision/sensorDB/CMakeLists.txt
  sed 's|serialization system thread|serialization thread|g' -i src/CMakeLists.txt

  # fix build against newer cuda
  sed 's|\(<< "\\t- clock frequency (kHz):\)|//\1|g' -i src/aliceVision/gpu/gpu.cpp
  sed 's|ALICEVISION_CUDA_CC_LIST_BASIC 50 52 60 61 62 70 72 75 80 86 87 89 90|ALICEVISION_CUDA_CC_LIST_BASIC 75 80 86 87 89 90|g' -i src/CMakeLists.txt

  # patch build against newer usd
  sed 's|<pxr/usd/usd/zipFile.h>|<pxr/usd/sdf/zipFile.h>|g' -i src/software/export/main_exportUSD.cpp
  sed 's|UsdZipFileWriter|SdfZipFileWriter|g' -i src/software/export/main_exportUSD.cpp
  sed '/usdShade/a usd_ms' -i src/software/export/CMakeLists.txt
}

build() {
  local python_version=$(python -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
  cd ${srcdir}/AliceVision

  cmake \
   	-Bbuild \
    -DALICEVISION_BUILD_DEPENDENCIES=OFF \
    -DALICEVISION_INSTALL_MESHROOM_PLUGIN=ON \
    -DALICEVISION_BUILD_SWIG_BINDINGS=ON \
    -DALICEVISION_BUILD_DOC=OFF \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_SYSTEM_INCLUDE_PATH='/usr/include/python"${python_version}/' \
    -DCMAKE_SKIP_INSTALL_RPATH=ON

  make -C build

}

package() {
  install -vDm 644 "${srcdir}"/alicevision.sh -t "${pkgdir}"/etc/profile.d/

  cd ${srcdir}/AliceVision

  DESTDIR="${pkgdir}" make -C build install/fast

  install -Dm755 COPYING.md "${pkgdir}"/usr/share/licenses/${pkgname}/COPYING.md
  install -Dm755 LICENSE-MPL2.md "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE-MPL2.md
  install -Dm755 LICENSE-MIT-libmv.md "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE-MIT-libmv.md
}

# vim:set ts=2 sw=2 et: