파다 평범일상

크로스 컴파일 (Cross-Compile) 본문

컴퓨터 IT/얕은 컴퓨터 지식과 프로그래밍

크로스 컴파일 (Cross-Compile)

파다 평범일상 2024. 4. 30. 19:12
반응형

컴파일 (Compile)에 필요한 것

  • AR = ar (Archive maintaining program)
  • AS = as (Assembler)
  • CC = cc (= gcc , C compiler) 
  • CXX = g++ (C++ compiler)
  • LD = ld (Linker)
  • NM = list symbols from object files 😅?
  • RANLIB = generate index to archive (= ar -s) 😅?

크로스 컴파일 (Cross-Compile) 이란?

크로스 컴파일은 하나의 시스템에서 만들어져 사용되는 프로그램이나 소스 등을 다른 시스템에서 사용할 수 있도록 빌드하는 절차이다.

호스트 시스템에서 타겟 시스템에서 실행될 결과물을 만드는 과정이라고 생각하면 될 것 같다.

  • 호스트 (Host) 시스템 : 컴파일을 수행하는 시스템으로, 일반적으로 x64 또는 x86_64 CPU이다.
  • 타겟 (Target) 시스템 : 컴파일된 결과물을 실행하려는 시스템으로, 일반적으로 ARM AArch64이다.
  • 툴체인 (Toolchain) : 타겟 시스템에서 동작하는 프로그램 개발에 필요한 소프트웨어들 또는 개발 환경이다. 실행 파일을 생성하는데 필요한 각종 유틸리티 및 라이브러리의 모음

LuaJIT을 크로스 컴파일하기

나의 개발환경은 호스트 시스템이 x86_64이며, 타겟 시스템이 AArch64이다.

  • 호스트와 대상 아키텍처 모두 포인터 크기가 동일해야한다.
  • 64비트 대상은 항상 64비트 호스트에서 컴파일해야 한다.
  • 호스트 OS와 타겟 OS가 다를 때마다 TARGET_SYS를 지정해야 합니다.
  • 사전 빌드된 일반 툴체인의 경우 -mcpu=... 또는 -march=... 및 기타 필요한 플래그를 TARGET_CFLAGS 에 추가하세요.
  • ARM의 경우 올바른 -mfloat-abi=... 설정을 갖는 것도 중요합니다 . 그렇지 않으면 LuaJIT가 대상 CPU의 최대 성능으로 실행되지 않을 수 있습니다.
# ARM 소프트 플로트 
make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \ 
     TARGET_CFLAGS="-mfloat-abi=soft"
     
# ARM64 
make CROSS=aarch64-linux-gnu-
Comments