Post

CMake CrossCompile && CMakePrests.json

  1. aarch64-cross-toolchain.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# aarch64-toolchain.cmake

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

# 툴체인 경로: 환경에 맞게 수정
set(TOOLCHAIN_DIR "$ENV{HOME}/ti-processor-sdk-linux-am62xx-evm-11.00.09.04/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux")

set(CMAKE_C_COMPILER   ${TOOLCHAIN_DIR}/aarch64-oe-linux-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/aarch64-oe-linux-g++)

# sysroot 경로 설정 (필요 시)
set(CMAKE_SYSROOT "$ENV{HOME}/ti-processor-sdk-linux-am62xx-evm-11.00.09.04/linux-devkit/sysroots/aarch64-oe-linux")

set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  1. x86-64-native-toolchain.cmake
1
2
3
4
5
6
7
8
9
10
11
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR x86_64)

set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)

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)
  1. CMakePresets.json 사용 없이, 아래처럼 수동으로 실행가능
1
2
3
4
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../Toolchains/aarch64-cross-toolchain.cmake
cmake --build . -j4
  1. CMakePresets.json 추가 프로젝트 구조
1
2
3
4
5
6
7
8
9
10
11
.
├── CMakeLists.txt
├── CMakePresets.json
├── README.md
├── Toolchains
│   └── aarch64-cross-toolchain.cmake 
├── inc
│   └── lib.h
└── src
    └── lib.cc

  1. CMakePresets.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
  "version": 3,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 19
  },
  "configurePresets": [
    {
      "name": "aarch64",
      "description": "Cross-compile for AARCH64",
      "generator": "Unix Makefiles",
      "binaryDir": "${sourceDir}/build/aarch64",
      "toolchainFile": "${sourceDir}/Toolchains/aarch64-cross-toolchain.cmake",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release"
      }
    },
    {
      "name": "native",
      "description": "GCC",
      "generator": "Unix Makefiles",
      "binaryDir": "${sourceDir}/build/gcc",
      "toolchainFile": "${sourceDir}/Toolchains/x86-64-native-toolchain.cmake",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release"
      }
    }
  ],
    "buildPresets": [
    {
      "name": "aarch64",
      "configurePreset": "aarch64"
    },
    {
      "name": "native",
      "configurePreset": "native"
    }
  ]
}

  1. CMakeprests.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
    "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
    "cmake.options.statusBarVisibility": "visible",
    "cmake.useCMakePresets": "auto",
    "files.associations": {
        "*.pyx": "cython",
        ".clang*": "yaml",
        "*.gpj": "jsonc",
        "*.gvw": "jsonc",
        "*.hpp.in": "cpp",
        "limits": "cpp",
        "iostream": "cpp"
    }
}

  1. 선택하여 실행가능
1
2
cmake --preset native
cmake --build --preset native
1
2
cmake --preset aarch64
cmake --build --preset aarch64
  1. vscode에서 preset 쉽게 사용법 참고 사이트 : https://github.com/microsoft/vscode-cmake-tools/blob/HEAD/docs/cmake-presets.md

  2. Ninja 설치 후, 재적용

1
2
3
4
5
6
sudo apt update
sudo apt install ninja-build
ninja --version

아래처럼 변경
"generator": "Ninja"
This post is licensed under CC BY 4.0 by the author.