skui学习笔记(三)IMX8平台移植 上篇

代码仓库:
https://github.com/czhzasui/skui-imx

环境准备

使用的skui git分支:

commit 201707d06bd29c9ec4b05350b25b777493d5362e (origin/master, origin/HEAD)
Author: Ruben Van Boxem <vanboxem.ruben@gmail.com>
Date:   Tue Sep 1 17:43:19 2020 +0200

编译平台:Ubuntu18
目标平台:NXP IMX8Q Android9

开始移植

一、修改CMakeLists.txt
skui/CMakeLists.txt添加宏SKUI_USE_IMX8,控制编译平台

option(SKUI_USE_IMX8 "Use imx8 platform package" OFF)

修改cmake/3rdparty_options.cmake,屏蔽skui自带的库

if (NOT SKUI_USE_IMX8)
  add_subdirectory(3rdparty)
endif ()

修改cmake/toolchain_options.cmake,设置交叉编译环境

if (SKUI_USE_IMX8)
    set(CMAKE_C_COMPILER /work/android-toolchain/arm64/bin/clang)
    set(CMAKE_CXX_COMPILER /work/android-toolchain/arm64/bin/clang++)
    message("CMAKE_C_COMPILER:" ${CMAKE_C_COMPILER})
    message("CMAKE_CXX_COMPILER:" ${CMAKE_CXX_COMPILER})

    include_directories(common/include)
    include_directories(common/include/skia)
    include_directories(common/include/skia/include)
    include_directories(common/include/skia/include/config)
    include_directories(common/include/skia/include/core)
    include_directories(common/include/skia/include/codec)
    include_directories(common/include/skia/include/gpu)
    include_directories(common/include/skia/include/gpu/vk)
    include_directories(common/include/skia/include/android)
    include_directories(common/include/skia/include/config/android)
    include_directories(common/include/skia/include/private)
    include_directories(common/include/skia/include/utils)
    include_directories(common/include/skia/include/effects)
    include_directories(common/include/skia/include/third_party/vulkan)
    include_directories(common/include/skia/include/gpu/gl)
else()
    include(toolchain_options)
endif ()

修改core/CMakeLists.txt
删掉stdc++fs,IMX8平台没有该库

if (NOT SKUI_USE_IMX8)
    target_link_libraries(core PUBLIC $<$<PLATFORM_ID:Linux>:-pthread>
            $<$<CXX_COMPILER_ID:GNU>:-lstdc++fs>
            $<$<AND:$<PLATFORM_ID:Windows>,$<AND:$<CXX_COMPILER_ID:Clang>,$<NOT:$<STREQUAL:"x${CMAKE_CXX_SIMULATE_ID}","xMSVC">>>>:-lstdc++fs>
            $<$<AND:$<NOT:$<PLATFORM_ID:Windows>>,$<AND:$<CXX_COMPILER_ID:Clang>,$<AND:$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,7>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9>>>>:-lc++fs>
            $<$<AND:$<NOT:$<PLATFORM_ID:Windows>>,$<AND:$<CXX_COMPILER_ID:Clang>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,7>>>:-lc++experimental>
            $<$<NOT:$<PLATFORM_ID:Windows>>:-ldl>)
else ()
    target_link_libraries(core PUBLIC $<$<PLATFORM_ID:Linux>:-pthread>
            $<$<AND:$<PLATFORM_ID:Windows>,$<AND:$<CXX_COMPILER_ID:Clang>,$<NOT:$<STREQUAL:"x${CMAKE_CXX_SIMULATE_ID}","xMSVC">>>>:-lstdc++fs>
            $<$<AND:$<NOT:$<PLATFORM_ID:Windows>>,$<AND:$<CXX_COMPILER_ID:Clang>,$<AND:$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,7>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9>>>>:-lc++fs>
            $<$<AND:$<NOT:$<PLATFORM_ID:Windows>>,$<AND:$<CXX_COMPILER_ID:Clang>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,7>>>:-lc++experimental>
            $<$<NOT:$<PLATFORM_ID:Windows>>:-ldl>)
endif ()

修改graphics/CMakeLists.txt,使用imx平台的库skia、opengl库

if (NOT SKUI_USE_IMX8)
    target_link_libraries(graphics PRIVATE skia opengl)
else()
    target_link_libraries(graphics PRIVATE -lskia_m75 -lGLESv2_VIVANTE)
    target_compile_definitions(graphics PRIVATE SKUI_GRAPHICS_INSIDES
            SKUI_USE_IMX8)
endif()

修改gui/CMakeLists.txt,添加Android Surface和EGL库

if (NOT SKUI_USE_IMX8)
    target_link_libraries(gui PUBLIC core graphics)
else()
    target_link_libraries(gui PUBLIC core graphics -lasurface -lEGL)
endif()

添加imx平台窗口初始化的代码

# Common source files
set(gui_src
    icon.h++
    input.h++
    layout.h++ layout.c++
    main_windows.c++
    make_element.h++
    window.h++ window.c++
               window_imx.c++
               window_linux.c++
               window_macosx.c++
               window_windows.c++
    window_flags.h++
    window_state.h++
   )
set(element_src
    element.h++ element.c++
    element/graphics_view.h++ element/graphics_view.c++
    element/label.h++ element/label.c++
    element/spacer.h++ element/spacer.c++
   )
set(events_src
    events.h++ events.c++ events_linux.c++
                          events_imx.c++
                          events_macosx.c++
                          events_windows.c++
    events/appkit.h++ events/appkit.c++
    events/uikit.h++ events/uikit.c++
    events/win32.h++ events/win32.c++
    events/xcb.h++ events/xcb.c++
    events/imx.h++ events/imx.c++
   )
set(input_src
    input.h++
    input/key.h++
    input/button.h++ input/button.c++
    input/scroll.h++ input/scroll.c++
    )
set(layout_src
    layout/alignment.h++
    layout/column.h++ layout/column.c++
    layout/orientation.h++
    layout/row.h++ layout/row.c++
   )
set(native_window_src
    native_window.h++ native_window.c++
                      native_window_imx.c++
                      native_window_linux.c++
                      native_window_macosx.c++
                      native_window_windows.c++
    native_window/appkit.h++ native_window/appkit.c++
    native_window/uikit.h++ native_window/uikit.c++
    native_window/win32.h++ native_window/win32.c++
    native_window/xcb.h++ native_window/xcb.c++
    native_window/xlib.h++ native_window/xlib.c++
    native_window/imx.h++ native_window/imx.c++
   )
set(native_visual_src
    native_visual.h++ native_visual.c++
    native_visual/cgl.h++ native_visual/cgl.c++
    native_visual/coregraphics.h++ native_visual/coregraphics.c++
    native_visual/egl.h++ native_visual/egl.c++
    native_visual/glx.h++ native_visual/glx.c++
    native_visual/raster.h++ native_visual/raster.c++
    native_visual/wgl.h++ native_visual/wgl.c++
    native_visual/win32.h++ native_visual/win32.c++
    native_visual/xcb.h++ native_visual/xcb.c++
    native_visual/imx.h++ native_visual/imx.c++
   )

注释xcb、x11代码

if(SKUI_USE_IMX8)
  exclude_from_build(events/xcb.h++ events/xcb.c++
          events_linux.c++
          native_visual/glx.h++ native_visual/glx.c++
          native_visual/xcb.h++ native_visual/xcb.c++
          native_window/xcb.h++ native_window/xcb.c++
          native_window/xlib.h++ native_window/xlib.c++
          native_window_linux.c++
          window_linux.c++)
else()
    exclude_from_build(events/xcb.h++ events/imx.c++
            events_imx.c++
            native_visual/imx.h++ native_visual/imx.c++
            native_window/imx.h++ native_window/imx.c++
            native_window_imx.c++
            window_imx.c++)

    if (XCB_FOUND)
        target_link_libraries(gui PUBLIC XCB::XCB XCB::AUX XCB::IMAGE)
    else ()
        exclude_from_build(events/xcb.h++ events/xcb.c++
                native_window/xcb.h++ native_window/xcb.c++
                native_visual/xcb.h++ native_visual/xcb.c++)
    endif ()

    if (GLX_FOUND)
        target_link_libraries(gui PUBLIC GLX)
    else ()
        exclude_from_build(native_visual/glx.h++ native_visual/glx.c++)
    endif ()

    if (EGL_FOUND)
        target_link_libraries(gui PUBLIC EGL::EGL)
    else ()
        exclude_from_build(native_visual/egl.h++ native_visual/egl.c++)
    endif ()

    if (X11_FOUND AND X11_XCB_FOUND)
        target_link_libraries(gui PUBLIC ${X11_LIBRARIES} X11::XCB)
    else ()
        exclude_from_build(native_window/xlib.h++ native_window/xlib.c++)
    endif ()

endif()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值