12,951
回編集
681行目: | 681行目: | ||
<br><br> | <br><br> | ||
== PinePhone / Qt | == PinePhone / Qt 5との連携 == | ||
==== CMakeツールチェーンファイルの作成 ==== | |||
任意のディレクトリにCMakeツールチェーンファイルの作成する。<br> | |||
vi /<任意のディレクトリ>/ToolChain_for_PinePhone.cmake | |||
<br> | |||
<syntaxhighlight lang="cmake"> | |||
# /<任意のディレクトリ>/ToolChain_for_PinePhone.cmakeファイル | |||
cmake_minimum_required(VERSION 3.18) | |||
include_guard(GLOBAL) | |||
set(CMAKE_SYSTEM_NAME Linux) | |||
set(CMAKE_SYSTEM_PROCESSOR arm) | |||
set(TARGET_SYSROOT <PinePhoneのシステムルートディレクトリ>) | |||
set(CMAKE_SYSROOT ${TARGET_SYSROOT}) | |||
set(ENV{PKG_CONFIG_PATH} $PKG_CONFIG_PATH:${TARGET_SYSROOT}/usr/lib/pkgconfig:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig) | |||
set(ENV{PKG_CONFIG_LIBDIR} /usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig/:${TARGET_SYSROOT}/usr/lib/pkgconfig:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig:${TARGET_SYSROOT}/usr/share/pkgconfig) | |||
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT}) | |||
set(CMAKE_C_COMPILER /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gcc) | |||
set(CMAKE_CXX_COMPILER /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-g++) | |||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${TARGET_SYSROOT}/usr/include -I${TARGET_SYSROOT}/usr/include/aarch64-linux-gnu") | |||
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}") | |||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu") | |||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu") | |||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu") | |||
# PinePhoneの場合 | |||
set(QT_COMPILER_FLAGS "-march=armv8-a -mtune=cortex-a53") | |||
set(QT_COMPILER_FLAGS_RELEASE "-O2 -pipe") | |||
set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed") | |||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | |||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | |||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) | |||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) | |||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) | |||
set(CMAKE_BUILD_RPATH ${TARGET_SYSROOT}) | |||
set(XCB_PATH_VARIABLE ${TARGET_SYSROOT}) | |||
set(GL_INC_DIR ${TARGET_SYSROOT}/usr/include) | |||
set(GL_LIB_DIR ${TARGET_SYSROOT}:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/:${TARGET_SYSROOT}/usr:${TARGET_SYSROOT}/usr/lib) | |||
set(EGL_INCLUDE_DIR ${GL_INC_DIR}) | |||
set(EGL_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libEGL.so) | |||
set(OPENGL_INCLUDE_DIR ${GL_INC_DIR}) | |||
set(OPENGL_opengl_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libOpenGL.so) | |||
set(GLESv2_INCLUDE_DIR ${GL_INC_DIR}) | |||
set(GLIB_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libGLESv2.so) | |||
set(GLESv2_INCLUDE_DIR ${GL_INC_DIR}) | |||
set(GLESv2_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libGLESv2.so) | |||
set(gbm_INCLUDE_DIR ${GL_INC_DIR}) | |||
set(gbm_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libgbm.so) | |||
set(Libdrm_INCLUDE_DIR ${GL_INC_DIR}) | |||
set(Libdrm_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libdrm.so) | |||
set(XCB_XCB_INCLUDE_DIR ${GL_INC_DIR}) | |||
set(XCB_XCB_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libxcb.so) | |||
</syntaxhighlight> | |||
<br> | |||
==== Qt 5向けCMakeツールチェーン設定ファイルの作成 ==== | |||
PinePhone向けのQt 5ライブラリのインストールディレクトリ内のlib/cmake/Qt5ディレクトリにCMakeツールチェーン設定ファイルの作成する。<br> | |||
vi /<Qt 5ライブラリのインストールディレクトリ>lib/cmake/Qt5/qt.toolchain.cmake | |||
<br> | |||
<syntaxhighlight lang="cmake"> | |||
# /<Qt 5ライブラリのインストールディレクトリ>lib/cmake/Qt5/qt.toolchain.cmakeファイル | |||
set(__qt_toolchain_used_variables | |||
QT_CHAINLOAD_TOOLCHAIN_FILE | |||
QT_TOOLCHAIN_INCLUDE_FILE | |||
QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR | |||
QT_TOOLCHAIN_RELOCATABLE_PREFIX | |||
QT_ADDITIONAL_PACKAGES_PREFIX_PATH | |||
) | |||
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES ${__qt_toolchain_used_variables}) | |||
list(REMOVE_DUPLICATES CMAKE_TRY_COMPILE_PLATFORM_VARIABLES) | |||
if($ENV{_QT_TOOLCHAIN_VARS_INITIALIZED}) | |||
foreach(var ${__qt_toolchain_used_variables}) | |||
set(${var} "$ENV{_QT_TOOLCHAIN_${var}}") | |||
endforeach() | |||
endif() | |||
set(__qt_initially_configured_toolchain_file "<PinePhone向けCMakeツールチェーンファイルのパス>") | |||
set(__qt_chainload_toolchain_file "${__qt_initially_configured_toolchain_file}") | |||
if(NOT QT_QMAKE_TARGET_MKSPEC) | |||
set(QT_QMAKE_TARGET_MKSPEC <Qt 5のクロスコンパイルで使用したPinePhone向けデバイス定義ファイルのパス> CACHE STRING "") | |||
endif() | |||
if(NOT "${QT_CHAINLOAD_TOOLCHAIN_FILE}" STREQUAL "") | |||
set(__qt_chainload_toolchain_file "${QT_CHAINLOAD_TOOLCHAIN_FILE}") | |||
endif() | |||
if(__qt_chainload_toolchain_file) | |||
get_filename_component(__qt_chainload_toolchain_file_real_path | |||
"${__qt_chainload_toolchain_file}" REALPATH) | |||
if(__qt_chainload_toolchain_file_real_path STREQUAL CMAKE_CURRENT_LIST_FILE) | |||
message(FATAL_ERROR | |||
"Woah, the Qt toolchain file tried to include itself recursively! '${__qt_chainload_toolchain_file}' " | |||
"Make sure to remove qtbase/CMakeCache.txt and reconfigure qtbase with 'cmake' " | |||
"rather than 'qt-cmake', and then you can reconfigure your own project." | |||
) | |||
elseif(NOT EXISTS "${__qt_chainload_toolchain_file_real_path}") | |||
message(WARNING "The toolchain file to be chainloaded " | |||
"'${__qt_chainload_toolchain_file}' does not exist.") | |||
else() | |||
include("${__qt_chainload_toolchain_file}") | |||
set(__qt_chainload_toolchain_file_included TRUE) | |||
endif() | |||
unset(__qt_chainload_toolchain_file) | |||
endif() | |||
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../../../ ABSOLUTE) | |||
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) | |||
list(PREPEND CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}") | |||
list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}") | |||
if(NOT QT_AVOID_CUSTOM_PLATFORM_MODULES) | |||
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/platforms") | |||
endif() | |||
set(__qt_toolchain_additional_packages_prefixes "") | |||
if(QT_ADDITIONAL_PACKAGES_PREFIX_PATH) | |||
list(APPEND __qt_toolchain_additional_packages_prefixes ${QT_ADDITIONAL_PACKAGES_PREFIX_PATH}) | |||
endif() | |||
if(DEFINED ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH} AND NOT "$ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH}" STREQUAL "") | |||
set(__qt_env_additional_packages_prefixes $ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH}) | |||
if(NOT CMAKE_HOST_WIN32) | |||
string(REPLACE ":" ";" __qt_env_additional_packages_prefixes | |||
"${__qt_env_additional_packages_prefixes}") | |||
endif() | |||
list(APPEND __qt_toolchain_additional_packages_prefixes ${__qt_env_additional_packages_prefixes}) | |||
unset(__qt_env_additional_packages_prefixes) | |||
endif() | |||
if(__qt_toolchain_additional_packages_prefixes) | |||
set(__qt_toolchain_additional_packages_root_paths "") | |||
set(__qt_toolchain_additional_packages_prefix_paths "") | |||
foreach(__qt_additional_path IN LISTS __qt_toolchain_additional_packages_prefixes) | |||
file(TO_CMAKE_PATH "${__qt_additional_path}" __qt_additional_path) | |||
get_filename_component(__qt_additional_path "${__qt_additional_path}" ABSOLUTE) | |||
set(__qt_additional_path_lib_cmake "${__qt_additional_path}") | |||
if(NOT __qt_additional_path_lib_cmake MATCHES "/lib/cmake$") | |||
string(APPEND __qt_additional_path_lib_cmake "/lib/cmake") | |||
endif() | |||
list(APPEND __qt_toolchain_additional_packages_root_paths "${__qt_additional_path}") | |||
list(APPEND __qt_toolchain_additional_packages_prefix_paths "${__qt_additional_path_lib_cmake}") | |||
endforeach() | |||
list(PREPEND CMAKE_PREFIX_PATH ${__qt_toolchain_additional_packages_prefix_paths}) | |||
list(PREPEND CMAKE_FIND_ROOT_PATH ${__qt_toolchain_additional_packages_root_paths}) | |||
unset(__qt_additional_path) | |||
unset(__qt_additional_path_lib_cmake) | |||
unset(__qt_toolchain_additional_packages_root_paths) | |||
unset(__qt_toolchain_additional_packages_prefix_paths) | |||
endif() | |||
unset(__qt_toolchain_additional_packages_prefixes) | |||
set(__qt_toolchain_extra_file "${CMAKE_CURRENT_LIST_DIR}/qt.toolchain.extra.cmake") | |||
if(EXISTS "${__qt_toolchain_extra_file}") | |||
include("${__qt_toolchain_extra_file}") | |||
endif() | |||
if(QT_TOOLCHAIN_INCLUDE_FILE) | |||
get_filename_component(__qt_toolchain_include_file_real_path "${QT_TOOLCHAIN_INCLUDE_FILE}" REALPATH) | |||
if(EXISTS "${__qt_toolchain_include_file_real_path}") | |||
include("${__qt_toolchain_include_file_real_path}") | |||
else() | |||
message(WARNING "The passed extra toolchain file to be included does not exist: " "${__qt_toolchain_include_file_real_path}") | |||
endif() | |||
endif() | |||
if(DEFINED CACHE{CMAKE_BUILD_TYPE}) | |||
set(__qt_toolchain_cmake_build_type_before_project_call "${CMAKE_BUILD_TYPE}") | |||
endif() | |||
if(NOT "$ENV{_QT_TOOLCHAIN_VARS_INITIALIZED}") | |||
set(ENV{_QT_TOOLCHAIN_VARS_INITIALIZED} ON) | |||
foreach(var ${__qt_toolchain_used_variables}) | |||
set(ENV{_QT_TOOLCHAIN_${var}} "${${var}}") | |||
endforeach() | |||
endif() | |||
</syntaxhighlight> | |||
<br> | |||
==== ツールチェーンの設定 ==== | ==== ツールチェーンの設定 ==== | ||
[ファイル]メニューバー - [設定]を選択する。<br> | [ファイル]メニューバー - [設定]を選択する。<br> |