「インストール - Qt5」の版間の差分

ナビゲーションに移動 検索に移動
712行目: 712行目:
*: <br>
*: <br>
<br>
<br>
 
===== EGLFSを使用する場合 =====
===== Raspberry Pi 4B =====
qmake.confを作成する。<br>
<u>Raspberry Pi 4Bの場合、以下のように、qmake.confをカスタマイズする必要がある。</u><br>
qmake.confファイルは、ビルド時の設定を定義するものである。<br>
qmake.confファイルは、ビルド時の設定を定義するものである。<br>
cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs
cp -r linux-arm-gnueabi-g++ linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' ./linux-arm-gnueabihf-g++/qmake.conf
<br>
===== Raspberry Pi 3B (XCBを使用する場合) =====
<u>設定不要だと推測される。</u><br>
<br>
以下のように、qmake.confをカスタマイズする必要がある。<br>
  cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
  cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
  cp -r linux-rasp-pi3-vc4-g++ linux-rasp-pi3-vc4-brcm-g++
  mkdir linux-raspberrypi-new-g++ && cd linux-raspberrypi-new-g++
  vi linux-rasp-pi3-vc4-brcm-g++/qmake.conf
  vi qmake.conf
<br>
<br>
  # linux-rasp-pi3-vc4-brcm-g++/qmake.confファイル
  # qmake.confファイル
include(../common/linux_device_pre.conf)
   
   
  # 編集前
  SYSROOT_INC = $$[QT_SYSROOT]/usr/include
QMAKE_LIBS_EGL        += -lEGL
  SYSROOT_LIB = $$[QT_SYSROOT]/usr/lib
  QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL
   
   
  # 編集後
  # Extra stuff (OpenGL, DirectFB, ...)
  QMAKE_LIBS_EGL          += -lbrcmEGL -lbrcmGLESv2
  QMAKE_INCDIR_EGL        = $$[SYSROOT_INC] \
  QMAKE_LIBS_OPENGL_ES2  += -lbrcmGLESv2 -lbrcmEGL
                          $$[SYSROOT_INC]/arm-linux-gnueabihf \
<br>
                          $$[SYSROOT_INC]/GL \
===== Raspberry Pi 3B (EGLを使用する場合)=====
                          $$[SYSROOT_INC]/EGL \
* 方法 1
                          $$[SYSROOT_INC]/GLES \
Raspberry Pi 3Bの場合も、以下のように、qmake.confをカスタマイズする必要がある。<br>
                          $$[SYSROOT_INC]/GLES2 \
  cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
                          $$[SYSROOT_INC]/GLES3 \
cp -r linux-rasp-pi3-g++ linux-rasp-pi3-brcm-g++
                          $$[SYSROOT_INC]/GLFW
  vi linux-rasp-pi3-brcm-g++/qmake.conf
  QMAKE_LIBDIR_EGL        = $$[SYSROOT_LIB] \
<br>
                          $$[SYSROOT_LIB]/arm-linux-gnueabihf
  # qmake.confファイル
QMAKE_INCDIR_OPENGL_ES2 = $$[QMAKE_INCDIR_EGL]
QMAKE_LIBDIR_OPENGL_ES2 = $${QMAKE_LIBDIR_EGL}
QMAKE_INCDIR_OPENVG    = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENVG    = $${QMAKE_LIBDIR_EGL}
QMAKE_LIBS_EGL          = -lEGL
QMAKE_LIBS_OPENGL_ES2  = -lGLESv2 $${QMAKE_LIBS_EGL}
QMAKE_LIBS_OPENVG      = -lOpenVG $${QMAKE_LIBS_EGL}
# Raspberry Pi 3B / 3B+の場合
QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
# Raspberry Pi 4Bの場合
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72 -mfpu=crypto-neon-fp-armv8
  QMAKE_CFLAGS            = $${COMPILER_FLAGS}
QMAKE_CXXFLAGS          = $${COMPILER_FLAGS}
  QMAKE_CXXFLAGS_RELEASE  += -O3
   
   
  # qmake configuration for the Raspberry Pi 3 using the Broadcom graphics stack
  QMAKE_LIBS              += -lrt -lpthread -ldl
# MODIFIED to use the library names that are shipped since 2016
#
# Also setting the linker flags according to the pkg-config files that are shipped with the libraries.
# Remove egl.pc and glesv2.pc from /usr/lib/arm-linux-gnueabihf/pkgconfig/ for these to take effect.
# The reason for using static values instead of supplying the correct pkg-config files is that configure ignores -pthread from there
#
# Including headers from /opt/vc first, but also from mesa version of EGL and GLES, since the /opt/vc headers are from 2009 and don't work with qtwebengine.
# This way you can make mesa headers available by manually removing directories EGL, GLES and GLES2 from /opt/vc/include before building.
   
   
  include(../common/linux_device_pre.conf)
  # Raspberry Pi OS 32ビットの場合
# Raspberry Pi OS 64ビットの場合はコメントアウトする
DISTRO_OPTS            += hard-float
   
   
  # Let the linker know about /opt/vc/lib. Required for EGL config.test (at least) because brcmGLESv2 also needs brcmEGL.
  # Raspberry Pi OS 64ビットの場合はコメントを解除する
  QMAKE_RPATHLINKDIR_POST  += $$[QT_SYSROOT]/opt/vc/lib
  #DISTRO_OPTS += aarch64
VC_LIBRARY_PATH          =  $$[QT_SYSROOT]/opt/vc/lib
VC_INCLUDE_PATH          =  $$[QT_SYSROOT]/opt/vc/include
MESA_INCLUDE_PATH        =  $$[QT_SYSROOT]/usr/include
QMAKE_LIBDIR_OPENGL_ES2  =  $${VC_LIBRARY_PATH}
QMAKE_LIBDIR_EGL          =  $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_LIBDIR_OPENVG      =  $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_LIBDIR_BCM_HOST    =  $$VC_LIBRARY_PATH
QMAKE_INCDIR_EGL          = \
                            $${VC_INCLUDE_PATH} \
                            $${MESA_INCLUDE_PATH} \
                            $${VC_INCLUDE_PATH}/interface/vcos/pthreads \
                            $${VC_INCLUDE_PATH}/interface/vmcs_host/linux
QMAKE_INCDIR_OPENGL_ES2  = $${QMAKE_INCDIR_EGL}
QMAKE_INCDIR_BCM_HOST    = $$VC_INCLUDE_PATH
   
   
  # recreating pkg-config --libs glesv2
  # for Raspberry Pi OS
  QMAKE_LIBS_OPENGL_ES2    = -L$${VC_LIBRARY_PATH} -lbrcmGLESv2 -lbcm_host -lvcos -lvchiq_arm -pthread
  DISTRO_OPTS            += deb-multi-arch
   
   
  # recreating pkg-config --libs egl
  # Preferred eglfs backend
  QMAKE_LIBS_EGL            = -L$${VC_LIBRARY_PATH} -lbrcmEGL -lbrcmGLESv2 -lbcm_host -lvchostif -lbcm_host -lvcos -lvchiq_arm -pthread
  ## Raspberry Pi 3B / 3B+の場合
EGLFS_DEVICE_INTEGRATION = eglfs_brcm
   
   
  #recreating pkg-config --libs bcm_host
  ## Raspberry Pi 4Bの場合
QMAKE_LIBS_BCM_HOST      = -L$${VC_LIBRARY_PATH} -lbcm_host -lvcos -lvchiq_arm -pthread
  EGLFS_DEVICE_INTEGRATION = eglfs_kms
QMAKE_CFLAGS              = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
QMAKE_CXXFLAGS            = $$QMAKE_CFLAGS
DISTRO_OPTS              += hard-float
DISTRO_OPTS              += deb-multi-arch
  EGLFS_DEVICE_INTEGRATION = eglfs_brcm
   
   
  include(../common/linux_arm_device_post.conf)
  include(../common/linux_arm_device_post.conf)
  load(qt_config)
  load(qt_config)
<br>
<br>
<u>Raspberry Pi 3Bの場合、上記で作成したqmake.confファイルを使用する必要がある。</u><br>
===== XCBを使用する場合 =====
これは、Qtをビルドする時、pkg-configを使用して、どのライブラリがどの場所にインストールされているかを判断する。<br>
<u>設定不要だと推測される。</u><br>
<br>
<br>
実際には複数の方法があるが、最良の方法は、上記で作成したqmake.confファイルの静的な定義を使用することである。<br>
# qmake.confファイル
そこで、.pcファイルを削除して、configureがMesaのデフォルトを使用せずに、上記の定義を使用する。<br>
   
  cd /<sysrootが存在するディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig
  include(../common/linux_device_pre.conf)
  mv egl.pc egl.pc.mesa
mv glesv2.pc glesv2.pc.mesa
<br>
* 方法 2
cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
cp -r linux-rasp-pi2-g++ linux-rasp-pi3-brcm-g++
vi linux-rasp-pi3-brcm-g++/qmake.conf
<br>
# linux-rasp-pi3-ex-g++/qmake.confファイル
# 編集前
QMAKE_LIBS_EGL    = -lEGL -lGLESv2
QMAKE_LIBS_OPENVG = -lEGL -lOpenVG -lGLESv2
   
   
  # 編集後
  SYSROOT_INC = $$[QT_SYSROOT]/usr/include
QMAKE_LIBS_EGL        = -lbrcmEGL -lbrcmGLESv2
  SYSROOT_LIB = $$[QT_SYSROOT]/usr/lib
QMAKE_LIBS_OPENGL_ES2 = -lbrcmEGL -lbrcmGLESv2  # 追記
  QMAKE_LIBS_OPENVG    = -lbrcmEGL -lbrcmOpenVG -lbrcmGLESv2
<br>
次に、以下のソースコードを編集する。<br>
vi /<Qtのソースコードが存在するディレクトリ>/qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
<br>
# qxcbeglwindow.cppファイル  96行目あたり
# 編集前
m_surface = eglCreateWindowSurface(m_glIntegration->eglDisplay(), m_config, m_window, 0);
   
   
  # 編集後
  # Extra stuff (OpenGL, DirectFB, ...)
  m_surface = eglCreateWindowSurface(m_glIntegration->eglDisplay(), m_config, (void*)m_window, 0);
  QMAKE_INCDIR_EGL        = $$[SYSROOT_INC] \
<br>
                          $$[SYSROOT_INC]/arm-linux-gnueabihf \
SysRootディレクトリから、nss.pcファイルがあるディレクトリに対して、パスを追加する。<br>
                          $$[SYSROOT_INC]/GL \
  find <SysRootディレクトリ> -type f -name nss.pc
                          $$[SYSROOT_INC]/EGL \
                          $$[SYSROOT_INC]/GLES \
                          $$[SYSROOT_INC]/GLES2 \
                          $$[SYSROOT_INC]/GLES3 \
                          $$[SYSROOT_INC]/GLFW
  QMAKE_LIBDIR_EGL        = $$[SYSROOT_LIB] \
                          $$[SYSROOT_LIB]/arm-linux-gnueabihf
QMAKE_INCDIR_OPENGL_ES2 = $$[QMAKE_INCDIR_EGL]
QMAKE_LIBDIR_OPENGL_ES2 = $${QMAKE_LIBDIR_EGL}
QMAKE_INCDIR_OPENVG    = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENVG    = $${QMAKE_LIBDIR_EGL}
   
   
  export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
  QMAKE_LIBS_EGL          = -lEGL
  export PKG_CONFIG_PATH="<nss.pcファイルが存在するディレクトリ>:$PKG_CONFIG_PATH"
  QMAKE_LIBS_OPENGL_ES2  = -lGLESv2 $${QMAKE_LIBS_EGL}
<br>
  QMAKE_LIBS_OPENVG      = -lOpenVG $${QMAKE_LIBS_EGL}
* 方法 3
  cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
cp -r linux-rasp-pi3-g++ linux-rasp-pi3-brcm-g++
vi linux-rasp-pi3-brcm-g++/qmake.conf
<br>
include(../common/linux_device_pre.conf)
   
   
  QMAKE_LFLAGS          += -Wl,-rpath-link,$$[QT_SYSROOT]/opt/vc/lib
  # Raspberry Pi 3B / 3B+の場合
QMAKE_LFLAGS          += -Wl,-rpath-link,$$[QT_SYSROOT]/home/pi/<Qtライブラリをデプロイするディレクトリ>/lib
QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
   
   
  QMAKE_LIBDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/lib
  # Raspberry Pi 4Bの場合
  QMAKE_LIBDIR_EGL        = $$QMAKE_LIBDIR_OPENGL_ES2
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72 -mfpu=crypto-neon-fp-armv8
QMAKE_LIBDIR_OPENVG    = $$QMAKE_LIBDIR_OPENGL_ES2
   
   
  QMAKE_INCDIR_EGL        = $$[QT_SYSROOT]/opt/vc/include \
  QMAKE_CFLAGS            = $${COMPILER_FLAGS}
                          $$[QT_SYSROOT]/opt/vc/include/interface/vcos/pthreads \
QMAKE_CXXFLAGS          = $${COMPILER_FLAGS}
                          $$[QT_SYSROOT]/opt/vc/include/interface/vmcs_host/linux
QMAKE_CXXFLAGS_RELEASE  += -O3
   
   
  QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
  QMAKE_LIBS              += -lrt -lpthread -ldl
QMAKE_INCDIR_OPENVG    = $${QMAKE_INCDIR_EGL}
   
   
  QMAKE_LIBS_EGL          = -lEGL -lGLESv2
  # Raspberry Pi OS 32ビットの場合
  QMAKE_LIBS_OPENVG      = -lEGL -lOpenVG -lGLESv2
# Raspberry Pi OS 64ビットの場合はコメントアウトする
  DISTRO_OPTS            += hard-float
   
   
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
  # Raspberry Pi OS 64ビットの場合はコメントを解除する
  QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
  #DISTRO_OPTS += aarch64
   
   
  DISTRO_OPTS            += hard-float
  # for Raspberry Pi OS
  DISTRO_OPTS           += deb-multi-arch
  DISTRO_OPTS             += deb-multi-arch
   
   
  # Preferred eglfs backend
  # Preferred eglfs backend
  EGLFS_DEVICE_INTEGRATION= eglfs_brcm
  EGLFS_DEVICE_INTEGRATION = eglfs_kms
   
   
  include(../common/linux_arm_device_post.conf)
  include(../common/linux_arm_device_post.conf)
   
   
  load(qt_config)
  load(qt_config)
<br>
* 方法 4
<u>この方法は、qt-everywhere-src-5.x.xファイルのみで実行できる。</u><br>
<br>
Githubから、mkspecsを自動編集するツールをダウンロードする。<br>
このツールでは、libbrcm*.soライブラリ名を参照するように設定されている。<br>
git clone https://github.com/oniongarlic/qt-raspberrypi-configuration.git
<br>
ツールをQtのソースコードがあるディレクトリにインストールする。<br>
cd ./qt-raspberrypi-configuration
make install DESTDIR=<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-5.x.x
<br>
<br>


案内メニュー