build.sh 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #!/bin/bash
  2. ##################################################################
  3. ## ##
  4. ## SPDX-License-Identifier: GPL-2.0-or-later ##
  5. ## ##
  6. ## Copyright (C) 2018-2022 Starfive Technology ##
  7. ## ##
  8. ##################################################################
  9. set -e
  10. CURDIR=$(cd `dirname $0`; pwd)
  11. cd $CURDIR
  12. rm -rf $CURDIR/target/
  13. Building_FFmpeg="enable"
  14. Building_GStreamer="enable"
  15. function apply_patch {
  16. local i
  17. local srcdir="${1}"
  18. local patchdir="${2}"
  19. for i in `cd $patchdir; ls -d *.patch 2> /dev/null` ; do
  20. echo "Applying $patchdir/$i "
  21. cat $patchdir/$i | patch -g0 -p1 -E --no-backup-if-mismatch -d $srcdir -t -N
  22. if [ $? != 0 ] ; then
  23. echo "Patch failed! Please fix $patchdir/$i!"
  24. exit 1
  25. fi
  26. done
  27. }
  28. ##################################################################
  29. ## Install third-party packages depended by ffmpeg and gstreamer
  30. if [ 1 != 1 ] ; then
  31. apt install build-essential libchromaprint-dev libaom-dev liblilv-dev libiec61883-dev libass-dev \
  32. libbluray-dev libbs2b-dev libcodec2-dev libdav1d-dev flite1-dev libgme-dev \
  33. libgsm1-dev libmp3lame-dev libmysofa-dev libopenjp2-7-dev libopenmpt-dev \
  34. libopus-dev librabbitmq-dev libssl-dev librubberband-dev libsamplerate0-dev \
  35. libshine-dev libsnappy-dev libsoxr-dev libsoxr-lsr0 libspeex-dev libssh-4 \
  36. libssh-dev libv4l-0 libv4l-dev libtheora-dev libtwolame-dev libvidstab-dev \
  37. libvpx-dev libwebp-dev libwebpdemux2 libx264-dev libx265-dev libxvidcore-dev \
  38. libzimg-dev libzvbi-dev libopenal-dev ocl-icd-opencl-dev opencl-c-headers \
  39. opencl-clhpp-headers javascript-common libjs-jquery libpocketsphinx-dev \
  40. libsphinxbase-dev libgnutls28-dev libsrt-openssl-dev libsrt-gnutls-dev \
  41. libsrt1.4-openssl libcaca-dev libdc1394-dev \
  42. libjack-dev libcdio-dev libcdparanoia-dev libcdio-paranoia-dev librsvg2-dev libzmq3-dev \
  43. meson ninja-build flex bison \
  44. libudev-dev libgudev-1.0-dev \
  45. libx11-dev libxext-dev libxv-dev libxfixes-dev libxdamage-dev \
  46. libasound2-dev libflac-dev
  47. apt purge libgstreamer1.0-0 libgstreamer-plugins-base1.0-0 gstreamer1.0-plugins-base
  48. sync
  49. fi
  50. ##################################################################
  51. ## Extract and patch for wave511, wave420l, codaj12, omx-il
  52. echo "Extract and patch wave511, wave420l, codaj12, omx-il..."
  53. mm_libs_TARBALL=mm_libs-VF2_515_v2.4.1.tar.xz
  54. mm_libs_PATCH=patch/mm_libs
  55. rm -rf wave511/ wave420l/ codaj12/ omx-il/
  56. tar xf ${mm_libs_TARBALL}
  57. mv wave511/code wave511/wave511
  58. sync
  59. apply_patch ./ $mm_libs_PATCH
  60. ## Extract and patch for gstreamer and ffmpeg
  61. GST_TARBALLS=("gstreamer-1.18.5" "gst-plugins-base-1.18.5" "gst-plugins-good-1.18.5" "gst-plugins-bad-1.18.5" "gst-plugins-ugly-1.18.5" "gst-omx-1.18.5")
  62. GST_PATCHS=("gstreamer1/gstreamer1" "gstreamer1/gst1-plugins-base" "gstreamer1/gst1-plugins-good" "gstreamer1/gst1-plugins-bad" "gstreamer1/gst1-plugins-ugly" "gstreamer1/sf-gst-omx")
  63. PKG_TARBALLS=(${GST_TARBALLS[@]} "ffmpeg-4.4.1")
  64. PKG_PATCHS=(${GST_PATCHS[@]} "ffmpeg")
  65. PKG_NUMS=${#PKG_TARBALLS[@]}
  66. for ((i=0; i<$PKG_NUMS; i++)); do
  67. pkg_src=${PKG_TARBALLS[$i]}
  68. pkg_tarball=$pkg_src.tar.xz
  69. pkg_patchs=patch/${PKG_PATCHS[$i]}
  70. rm -rf $pkg_src
  71. echo "Extract $pkg_tarball and patch $pkg_patchs"
  72. tar xf $pkg_tarball
  73. sync
  74. apply_patch $pkg_src $pkg_patchs
  75. done
  76. ##################################################################
  77. ## build wave511
  78. pushd wave511/wave511/
  79. echo "Building video decoder wave511..."
  80. make -f WaveDecode_buildroot.mak clean
  81. make -f WaveDecode_buildroot.mak
  82. make -f WaveDecode_buildroot.mak install
  83. sync
  84. popd
  85. ## build wave420l
  86. pushd wave420l/code/
  87. echo "Building video encoder wave420l..."
  88. make -f WaveEncoder_buildroot.mak clean
  89. make -f WaveEncoder_buildroot.mak
  90. make -f WaveEncoder_buildroot.mak install
  91. sync
  92. popd
  93. ## build codaj12
  94. pushd codaj12/
  95. echo "Building jpeg decoder codaj12..."
  96. make -f codaj12_buildroot.mak clean
  97. make -f codaj12_buildroot.mak
  98. make -f codaj12_buildroot.mak install
  99. sync
  100. popd
  101. ## build omx-il
  102. pushd omx-il/
  103. echo "Building omx-il library..."
  104. make clean && make
  105. make install
  106. sync
  107. popd
  108. ## install system
  109. ## install chagall.bin/encoder_defconfig.cfg/monet.bin to /lib/firmware/
  110. #sudo cp -ar target/lib/firmware/* /lib/firmware/
  111. ##################################################################
  112. ## build ffmpeg
  113. if [ "$Building_FFmpeg"X = "enable"X ]; then
  114. ffmpeg_src=ffmpeg-4.4.1
  115. pushd $ffmpeg_src
  116. echo "Building ffmpeg start..."
  117. ./configure --prefix=$CURDIR/target/usr --arch="riscv64" --target-os="linux" \
  118. --enable-gpl --disable-stripping --disable-static --enable-shared --enable-avfilter \
  119. --disable-version3 --enable-logging --disable-extra-warnings --enable-avdevice \
  120. --enable-avcodec --enable-avformat --enable-network --disable-gray --enable-swscale-alpha \
  121. --disable-small --enable-dct --enable-fft --enable-mdct --enable-rdft --enable-libv4l2 \
  122. --enable-alsa --enable-outdevs --enable-pthreads --enable-zlib --enable-indevs \
  123. --enable-runtime-cpudetect --enable-pic --cpu="rv64imafd" --enable-libaom --enable-libass \
  124. --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 \
  125. --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype \
  126. --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame \
  127. --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus \
  128. --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine \
  129. --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh \
  130. --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis \
  131. --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid \
  132. --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-openal \
  133. --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg \
  134. --enable-libdc1394 --enable-libdrm --enable-chromaprint --enable-libx264 \
  135. --disable-frei0r --disable-gnutls --disable-ladspa --disable-libiec61883 --enable-omx \
  136. --extra-ldflags="-L$CURDIR/target/usr/lib" \
  137. --extra-cflags="-I$CURDIR/target/usr/include/omx-il" \
  138. --extra-libs="-lOMX_Core"
  139. make -j$(nproc)
  140. make install
  141. sync
  142. echo "Building ffmpeg end..."
  143. popd
  144. fi
  145. ##################################################################
  146. ## build GStreamer
  147. if [ "$Building_GStreamer"X = "enable"X ]; then
  148. GST_CONFIGS=("--libdir=lib --default-library=shared --buildtype=release -Dstrip=true" \
  149. "--libdir=lib --default-library=shared --buildtype=release -Dstrip=true" \
  150. "--libdir=lib --default-library=shared --buildtype=release -Dstrip=true -Dcairo=disabled" \
  151. "--libdir=lib --default-library=shared --buildtype=release -Dstrip=true" \
  152. "--libdir=lib --default-library=shared --buildtype=release -Dstrip=true" \
  153. "--libdir=lib --default-library=shared --buildtype=release -Dstrip=true -Dtarget=stf -Dheader_path=$CURDIR/target/usr/include/omx-il" \
  154. )
  155. echo "Building GStreamer start..."
  156. GST_NUMS=${#GST_TARBALLS[@]}
  157. for ((i=0; i<$GST_NUMS; i++)); do
  158. gst_src=${GST_TARBALLS[$i]}
  159. gst_config=${GST_CONFIGS[$i]}
  160. pushd $gst_src
  161. mkdir -p $gst_src/build
  162. PKG_CONFIG_PATH=$CURDIR/target/usr/lib/pkgconfig meson --prefix=$CURDIR/target/usr $gst_config $CURDIR/$gst_src $CURDIR/$gst_src/build
  163. ninja -C $CURDIR/$gst_src/build -j $(nproc)
  164. ninja -C $CURDIR/$gst_src/build install
  165. sync
  166. popd
  167. done
  168. echo "Building GStreamer end..."
  169. fi