홈으로 돌아가기

GNU Make를 통한 IAR STM32 빌드: CI/CD 자동화

이 기사는 IAR 컴파일러를 사용한 STM32 펌웨어 자동 빌드를 위한 GNU Make 설정 과정을 설명합니다. 주요 IAR 유틸리티, Makefile 구조, 컴파일 및 링킹 옵션 설정, 그리고 산업 개발을 위한 CI/CD 시스템 통합의 이점을 다룹니다.

IAR와 Make를 사용한 STM32 빌드 CI/CD 자동화
Advertisement 728x90

IAR와 GNU Make로 STM32 펌웨어 빌드 자동화: CI/CD 실전 가이드

IAR 컴파일러와 GNU Make를 결합하면 임베디드 시스템 개발에서 산업 수준의 자동화를 구현할 수 있습니다. IDE 의존성을 벗어나 CI/CD 파이프라인을 간소화하세요. 이 방법으로 명령줄에서 STM32 마이크로컨트롤러 펌웨어를 직접 빌드하며, 재현성, 확장성, 지속적 통합 시스템과의 원활한 연동을 보장합니다.

IAR 툴체인과 명령줄 유틸리티 분석

IAR Embedded Workbench는 컴파일과 링크의 모든 단계를 처리하는 명령줄 도구를 제공합니다. 주요 구성 요소는 다음과 같습니다:

  • iasmarm.exe — ARM 어셈블러.
  • iccarm.exe — ARM용 C/C++ 컴파일러.
  • ilinkarm.exe — 링커.
  • ielftool.exe — HEX, BIN 등의 바이너리 파일 생성 유틸리티.

이 도구들은 IDE의 그래픽 빌드에서 백그라운드에서 호출되지만, 스크립트에서 직접 사용할 수 있습니다. IAR IDE의 빌드 로그를 확인하면 각 도구에 사용된 정확한 명령줄 플래그를 파악할 수 있습니다. 예를 들어 iccarm.exe 컴파일러의 일반적인 옵션으로는 --cpu=Cortex-M4, --fpu=VFPv4_sp, --debug, 최적화 비활성화 플래그 --no_inline 또는 --no_cse 등이 있습니다.

Google AdInline article slot

IAR용 Makefile 작성

핵심 목표는 적절한 파라미터로 IAR 도구를 호출하는 Makefile을 만드는 것입니다. 스크립트는 IAR_PATH 환경 변수나 시스템 PATH를 통해 도구를 유연하게 찾도록 해야 합니다. 도구 변수 정의 예시:

ifdef IAR_PATH
    CC = $(IAR_PATH)/iccarm.exe
    AS = $(IAR_PATH)/iasmarm.exe
    LD = $(IAR_PATH)/ilinkarm.exe
    ELF_TOOL = $(IAR_PATH)/ielftool.exe
else
    CC = iccarm.exe
    AS = iasmarm.exe
    LD = ilinkarm.exe
    ELF_TOOL = ielftool.exe
endif

필수 Makefile 섹션:

  • 컴파일 플래그 (CFLAGS): 타겟 코어 선택, FPU 설정, 디버그 정보 등 IAR 전용 옵션.
  • 어셈블러 플래그 (ASFLAGS): 어셈블리 파일 처리 파라미터.
  • 링커 플래그 (LDFLAGS): 링커 옵션, 구성 파일 (.icf) 및 진입점 포함.
  • 빌드 규칙: 소스 파일 (.c, .s)을 오브젝트 파일 (.o)로 컴파일하고 실행 파일 (.out)로 링크하는 타겟.

컴파일러 구성과 주요 옵션

안정적인 빌드를 위해 IAR 컴파일러 옵션을 정확히 설정해야 합니다. 전형적인 STM32F407 (Cortex-M4) 프로젝트의 일반 플래그:

Google AdInline article slot
  • --cpu=Cortex-M4: 타겟 CPU 코어 지정.
  • --fpu=VFPv4_sp: 부동소수점 유닛 활성화.
  • --endian=little: 바이트 순서 설정.
  • -e: IAR C 언어 확장 활성화.
  • --debug: 디버그 정보 추가.
  • 인라인 함수 비활성화 등 최적화 제어 --no_inline.

이 옵션들은 Makefile의 COMPILE_IAR_OPT 변수에 묶여집니다. --diag_suppress로 특정 컴파일러 경고를 억제할 수도 있습니다.

링킹 프로세스와 최종 아티팩트 생성

IAR 링커(ilinkarm.exe)는 링커 스크립트(.icf)를 사용해 오브젝트 파일을 결합하며, 섹션을 마이크로컨트롤러 메모리에 매핑합니다. 주요 링커 옵션:

  • --config $(LDSCRIPT): 링커 구성 파일 지정.
  • --entry __iar_program_start: 프로그램 진입점 정의.
  • --semihosting: 디버깅용 세미호스팅 활성화.
  • --map $(BUILD_DIR)/$(TARGET).map: 메모리 맵 생성.

.out 파일이 준비되면 ielftool.exe로 플래시 가능한 형식으로 변환:

Google AdInline article slot
  • --ihex로 HEX 파일.
  • --bin로 바이너리 이미지.

CI/CD 통합과 주요 이점

GNU Make와 IAR를 활용하면 전문 임베디드 개발에 혁신적인 이점을 제공합니다:

  • 자동화: Jenkins, GitLab CI 등 CI/CD 서버에서 수동 단계 없이 빌드 자동 트리거.
  • 재현성: Makefile로 환경에 상관없이 일관된 결과 보장, IDE 설정 변동성 해결.
  • 확장성: 기기 모델별 빌드 구성 추가 시 몇 줄만 수정, IDE 설정 대량 편집 불필요.
  • IDE 독립성: IAR Embedded Workbench에 묶이지 않고 원하는 에디터/IDE 사용.
  • 컴파일러 비교: IAR와 GCC 간 전환 용이, 크로스 검증 및 버그 탐지.

단계별 구현 가이드

  • IAR Embedded Workbench 설치하고 명령줄 도구를 PATH에 추가하거나 IAR_PATH 변수 설정.
  • 기존 IAR 프로젝트 분석 (예: STM32CubeMX 생성)하여 IDE 빌드 로그에서 컴파일러 플래그 추출.
  • 기본 Makefile 생성 — 도구 변수, 컴파일/링크 플래그, 빌드 규칙 포함.
  • 링커 스크립트 (.icf) 조정 — 타겟 플랫폼에 맞게 필요 시 수정.
  • 명령줄에서 빌드 테스트 — HEX/BIN 출력 확인.
  • CI/CD 파이프라인에 연동make 호출 추가.

주요 요약

  • 빌드 자동화: GNU Make로 IAR 펌웨어 컴파일 완전 자동화, IDE 수동 작업 제거.
  • 구성 유연성: Makefile로 다중 빌드 변형 관리 — 제품 라인 프로젝트에 필수.
  • CI/CD 통합: 지속적 통합/배포에 완벽 연동, 개발 사이클 가속.
  • 도구 독립성: 특정 IDE에서 해방, 워크플로 유연성 향상.
  • 코드 품질 강화: 다중 컴파일러 빌드로 숨겨진 버그 발견 및 이식성 향상.

— Editorial Team

Advertisement 728x90

다음 읽기