0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5UnitV2 & ncnnAdvent Calendar 2023

Day 3

M5UnitV2のUnitV2Frameworkをコンパイルする手順

Last updated at Posted at 2023-12-02

目的

M5Stack UnitV2のGithubで公開されている、UnitV2に元々組み込まれているサンプルプログラム集「UnitV2 Framework」をクロスコンパイルして動かす手順です。

PC環境

UnitV2 Frameworkをコンパイル手順に入る前に、Ubuntuをインストールした環境で、クロスコンパイル環境を構築しておきます。

M5UnitV2のクロスコンパイル環境を構築する手順

はじめに

この記事を作成するにあたり、以下のmeganetaaan氏のUnitV2Frameworkを参考にさせて頂きました。
https://github.com/meganetaaan/UnitV2Framework

UnitV2Frameworkのダウンロード

Githubから、UnitV2Frameworkをダウンロードします。

$ git clone https://github.com/m5stack/UnitV2Framework.git

ncnnのヘッダファイル更新

m5stackのUnitV2Frameworkには、古いバージョンのncnnのヘッダファイルが入っているため、ncnnのヘッダファイルをクロスコンパイル環境の構築でインストールしたバージョンのもので上書きをします。

$ cd UnitV2Framework
$ cp -r ~/external/ncnn/install/x64/include/ncnn/include/

CMakeLists.txt の編集

cmakeの設定ファイルを、クロスコンパイル環境の構築にあわせて編集します。

meganetaaan氏のgithubを参考に、
cmakeに、TARGET_COMPILERのオプションを設けて、
UnitV2(arm環境)のビルドとPC環境(x64環境)のビルドを両立するようにしています。

$ gedit CMakeLists.txt 
CMakeLists.txt
if(NOT CMAKE_BUILD_TYPE)
   SET(CMAKE_BUILD_TYPE Release)
   message(STATUS "CMAKE_BUILD_TYPE Release")
else()
   SET(CMAKE_BUILD_TYPE DEBUG)
   message(STATUS "CMAKE_BUILD_TYPE DEBUG")
endif()

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

if(TARGET_COMPILER STREQUAL "arm")
    message(STATUS "TARGET_COMPILE STREQUAL arm")
    SET(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++)
    SET(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc)
    SET(NCNN_INSTALL_DIR /opt/external/ncnn/install/arm/)
    SET(ZBAR_INSTALL_DIR /opt/external/zbar-0.10/build/arm)
    SET(OpenCV_DIR /opt/external/opencv/build/arm)
else()
    message(STATUS "TARGET_COMPILE STREQUAL X64")
    SET(NCNN_INSTALL_DIR /opt/external/ncnn/install/x64/)
    SET(ZBAR_INSTALL_DIR /opt/external/zbar-0.10/build/x64/)
    SET(OpenCV_DIR /opt/external/opencv/build/x64) 
endif()


# project name
PROJECT(camera_capture)
# requirement of cmake version
cmake_minimum_required(VERSION 3.5)

# Enable C++11
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED TRUE)

# set the directory of executable files
if(TARGET_COMPILER STREQUAL "x64")
    message(STATUS "CMAKE_RUNTIME_OUTPUT_DIRECTORY X64")
    SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin/x64)
else()
    message(STATUS "CMAKE_RUNTIME_OUTPUT_DIRECTORY arm")
    SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin/arm)
endif()

SET(Target ${TARGET})

# find required opencv
find_package(OpenCV REQUIRED)
find_package(Threads REQUIRED)
# directory of opencv headers
include_directories(${OpenCV_INCLUDE_DIRS})

# name of executable file and path of source file
add_executable(${Target} main/${Target}.cpp)

# directory of opencv library
link_directories(${OpenCV_LIBRARY_DIRS})

# includes
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include/ncnn)

# opencv libraries
target_link_libraries(${Target} ${OpenCV_LIBRARIES})
target_link_libraries(${Target} ${NCNN_INSTALL_DIR}/libncnn.a -fopenmp)

# .so link
target_link_libraries(${Target} ${ZBAR_INSTALL_DIR}/lib/libzbar.so)

FILE(GLOB_RECURSE PRJ_SRC
        "${PROJECT_SOURCE_DIR}/src/*.c"
        "${PROJECT_SOURCE_DIR}/src/*.cpp"
        )

add_library(mainlib ${PRJ_SRC})
target_link_libraries(mainlib ${OpenCV_LIBRARIES})
target_link_libraries(mainlib ${NCNN_INSTALL_DIR}/libncnn.a -fopenmp)

target_link_libraries(${Target} mainlib)

UnitV2Frameworkをコンパイルする

UnitV2(arm環境)で動く「camera_capture」のサンプルをビルドする場合は以下のコマンドで実施します。

$ cmake -B build/arm -DTARGET_COMPILE=arm -DTARGET=camera_capture .
$ cmake --build build/arm

PC環境(x64環境)で動く「camera_capture」のサンプルをビルドする場合は以下のコマンドで実施します。

$ cmake -B build/x64 -DTARGET_COMPILE=x64 -DTARGET=camera_capture .
$ cmake --build build/x64

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?