|
|
| 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> |
|
| |
|