brunch

You can make anything
by writing

C.S.Lewis

by 이경종 Aug 05. 2020

Ch10-1. 툴체인(Toolchain)

소프트웨어 툴체인은 말 그대로 연관된 소프트웨어 툴의 모음입니다.  더 정확히는 소프트웨어를 만드는 툴을 말하지요. 통상 각각의 고유한 목적을 갖는 단독 애플리케이션의 모음으로 배포됩니다. 


툴체인은 크게 두부분으로 나눌 수 있습니다.


첫째는 프로그램의 코드를 읽어서 실행파일을 만드는 빌드 툴입니다.

C, C++, JAVA 컴파일러와 같은 상위 언어 컴파일러, 어셈블러, 링커, 각 언어별 라이브러리 등이 포함됩니다.


둘째는 빌드툴에서 만든 프로그램 실행파일을 실행하고 검증하는 디버깅 툴입니다.

디버거, 프로파일러, 분석도구와 같은 각종 유틸리티 툴이 포함됩니다.

임베디드 소프트웨어 개발에 있어, 툴체인은 보통 SoC업체에서 배포합니다. 실제 툴체인의 원본을 만드는 주체는 여러 곳일 수 있습니다. 마이크로 프로세서 제조사일수도 있고, GNU 톨체인인 경우 오픈소스 진영에서 툴체인을 업데이트합니다.


툴체인의 특징 및 선택 기준을 6가지로 나눠보았습니다.


1 . 프로그래밍 언어 지원 

C, C++, JAVA 와 같은 상위 프로그래밍 언어를 컴파일해서 기계어 코드로 만드는 것이 툴체인에서 가장 대표적인 기능입니다. 다양한 프로그래밍 언어를 지원하는 것도 중요하지만, 프로그래밍 언어 표준이나(대표적으로 ANSI-C가 있겠죠), 최신 버전에 대한 지원이 되어야 하겠습니다.


2 . 강력한 분석툴

툴체인에서 빌드는 기본 기능입니다. 부가적인 유틸리티가 다양하고 강력할수록 좋은 툴체인입니다. 빌드된 바이너리를 분석하거나 다른 포멧으로 변환시켜주는 툴이라든지, 에러가 발생했을 때 문제 지점을 포착하고 원인을 잡아낼 수 있는 디버깅 툴, 그리고 시스템의 성능을 다각도로 진단할 수 있는 프로파일링 툴등이 있습니다.


3 . 라이브러리 제공 

각각의 프로그래밍언어에 필요한 라이브러리들이 정상적으로 지원되는지 확인이 필요합니다. 많이 사용되거나 널리 알려진 표준적인 툴체인이 아닌 특정 Soc 벤더에서 제공하는 고유한 툴체인의 경우 최소한의 라이브러리만을 제공하기도 합니다. 이경우 아래 항목에서 다시 살펴보겠지만, 툴체인에 별도의 라이브러리나 표준  API를 집어넣어야 하는 상황도 발생하게 됩니다. 개발에 있어 고려하지 않았던 불필요한 리소스가 낭비될 수 있습니다.


4 .  프로세서 지원 여부

프로세서 계열 전체를 지원하느냐, 단일 프로세서의 특정종류만 지원하는건 아닌지 확인이 필요합니다. 만약 단일 프로세서만을 지원하는 툴체인을 쓰고 있다면, 동일한 계열의 유사 프로세서임에도 또다른 툴체인을 써야하거나 툴체인을 확장해야 하는 문제가 있을 수 있습니다. 툴체인도 일반 소프트웨어처럼 업데이트되고 확장이 되기는 합니다만, 가능하면 처음 쓸때부터 이미 시중에 나와있는 기존 프로세서는 가능한 많이 지원하는 툴체인을 쓰는게 좋겠죠.


5 . 툴체인 배포주체(제조사)의 지원 여부

툴체인에 대한 제조사 지원이 원할한지도 따져봐야 합니다. 이것은 3항과 4항과도 연계되는 사항입니다. 보통 표준적인 툴체인(GNU툴체인과 같은)을 쓰더라도, SoC제조사가 자신들의 칩셋에 맞도록 패치를 적용한 툴체인을 만들어서 SDK와 함께 제공하는 것이 보편적입니다. 

실제 겪었던 일인데, 툴체인의 C 라이브러리에 문제가 있었던 적이 있었습니다. 직접 개발하고 있는 소프트웨어코드가 아닌, 툴체인의 라이브러리에서 발생하는 문제는 찾거나 해결하는게 쉽지 않습니다. 툴체인 라이브러리는 보통 코드가 아닌 라이브러리로 제공되기 때문입니다.  또 한가지 사례는 툴체인의 라이브러리에 있는 디버그 코드를 보안상 삭제해야 할 일이 있었습니다. 이 경우 대부분 툴체인을 배포하는 SoC 제조사의 지원이 필요합니다.


6 . 빌드툴의 최적화 지원 옵션

마지막으로 최적화 지원에 대한 사항입니다. 컴파일러는 대개 최적화옵션이 있습니다. 불필요한 코드를 없애거나, 실행순서를 바꾼다거나 하는 여러가지 기법을 사용하여 컴파일러는 최적화한 소프트웨어 코드를 기계어로 변환할 수 있습니다. 참고로 최적화는 실행시간을 줄이거나 메모리를 점유하는 크기를 줄이는 효과가 있어서 대부분의 최종 배포 소프트웨어는 최적화된 소프트웨어라고 보면 됩니다. 


이 밖에도 여러 가지 따져볼 것들이 있을수 있겠지만, 여기까지 하도록 하죠.











작가의 이전글 Ch14-1. 임베디드 소프트웨어 개발환경
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari