SDCC – Small Device C Compiler
SDCC는 8051, Z80, STM8, 6502, Padauk 등 다양한 레거시·소형 MCU를 대상으로 하는 오픈소스 최적화 C 컴파일러 제품군입니다. 2026년 4.6.0 릴리스와 함께 최신 C 표준, 링크 타임 최적화, 임베디드 보안 및 여러 타깃 아키텍처 지원을 강화하는 개발이 진행되고 있습니다.
AI 요약
SDCC(Small Device C Compiler)는 여러 세대의 소형 마이크로프로세서와 마이크로컨트롤러를 대상으로 하는 retargetable optimizing C compiler suite입니다. ANSI C89와 ISO C99, ISO C11, ISO C23을 지원하며, 하나의 컴파일러 프로젝트에서 8051 계열부터 Z80 계열, STM8, MOS 6502까지 서로 다른 임베디드 아키텍처를 다룹니다. 최신 릴리스인 SDCC 4.6.0은 2026년 6월 22일 공개됐으며, 소스 코드와 문서, GNU/Linux amd64·Windows x86 및 amd64·macOS amd64용 바이너리가 함께 제공됩니다.
SDCC가 지원하는 대표적인 타깃에는 Intel MCS-51 계열인 8031, 8032, 8051, 8052와 Maxim의 DS80C390 계열이 포함됩니다. Freescale의 HC08 및 S08, Zilog Z80 기반 MCU인 Z80·Z80N·Z180·SM83·Rabbit 2000/2000A/3000A/4000·TLCS-90·eZ80·R800도 대상으로 삼습니다. 이 밖에 Padauk pdk14·pdk15, STMicroelectronics STM8, MOS 6502와 WDC 65C02, PIC 계열도 지원합니다. Rabbit 5000·6000, Padauk pdk13, f8·f8l 타깃은 계속 개발 중이며, Microchip PIC16과 PIC18 타깃은 현재 유지보수가 중단된 상태입니다.
SDCC는 특정 프로세서 하나에만 맞춘 컴파일러가 아니라 다른 마이크로프로세서로 이식할 수 있는 구조를 지향합니다. 여러 출처에서 유래한 구성 요소가 결합된 프로젝트이므로 각 구성 요소에 적용되는 FOSS 라이선스가 서로 다를 수 있다는 점도 프로젝트의 특징입니다. 최초에는 Sandeep Dutta가 작성해 GPL로 공개했으며, 1999년 12월부터 SourceForge에서 소스 트리를 관리하면서 사용자였던 개발자들이 수정과 개선에 참여하는 방식으로 발전해 왔습니다.
SDCC 4.6.0에 앞서 2026년 5월 28일 Release Candidate 1, 6월 14일 Release Candidate 2가 공개됐습니다. 공식적으로 지원하는 주요 호스트 플랫폼은 GNU/Linux amd64, GNU/Linux x86, Microsoft Windows amd64, macOS amd64입니다. SDCC는 GNU/Linux와 macOS에서 gcc를 사용해 네이티브 빌드할 수 있으며, Windows 릴리스와 snapshot build는 Linux 호스트에서 mingw32로 cross-compile해 만듭니다. GNU/Linux aarch64와 ppc64, FreeBSD aarch64에서도 동작하는 것으로 알려져 있습니다.
주요 Linux 배포판은 자체 패키지 저장소에 SDCC를 포함하지만, 배포판 패키지가 최신 릴리스보다 오래된 경우가 많다고 안내합니다. 이 경우 최신 공식 릴리스를 직접 빌드하거나 SourceForge에서 사전 컴파일된 바이너리를 내려받을 수 있습니다. 버그를 확인하려는 사용자는 릴리스가 두 달 이상 오래됐을 때 snapshot build를 시도할 수 있으며, 최신 개발 코드는 Subversion으로 받을 수 있습니다. 예를 들어 svn checkout svn://svn.code.sf.net/p/sdcc/code/trunk/sdcc 명령으로 trunk 소스를 가져와 sdcc 디렉터리에 배치합니다.
SDCC는 주로 무급 자원봉사 개발로 유지돼 왔지만, 2025년 10월 두 건의 중요한 펀딩이 성사됐다고 밝혔습니다. NGI0 Commons Fund는 다양한 타깃 하드웨어 지원과 비자유 컴파일러와의 경쟁력을 높이기 위한 machine-independent 개선을 지원합니다. 구체적으로는 저가형 Padauk MCU 지원 개선, 구형 IoT 장치에서 사용되는 Rabbit MCU 지원 개선, Toshiba TLCS MCU 지원 개선이 계획돼 있습니다.
기계 독립적인 영역에서는 최신 ISO C 표준 지원 강화, 지역 변수의 메모리 사용량을 줄이는 최적화, 사용되지 않는 함수와 객체를 제거하는 link-time optimization 구현이 예정돼 있습니다. 특히 사용되지 않는 함수와 객체를 링크 단계에서 제거하는 기능은 최근 몇 년 동안 SDCC 사용자들이 가장 많이 요청한 기능이라고 설명합니다. 이 프로젝트에는 5명의 SDCC 개발자가 공동으로 참여합니다.
Sovereign Tech Fund는 임베디드 펌웨어의 safety와 security를 높이는 작업을 지원합니다. 현대적인 C 표준과 dialect 중 안전성과 보안에 관련된 부분의 지원을 개선하고, post-quantum cryptography를 준비하며, 잠재적인 side-channel attack에 대한 완화책을 연구하고, 덜 사용되는 command-line parameter 조합까지 포함하는 확장 테스트로 컴파일러 신뢰성을 높이는 것이 목표입니다. SDCC는 eZ80 또는 Rabbit 4000 SoC 기반 IoT 장치의 펌웨어를 예로 들면서, 타깃 아키텍처 지원, 최신 C 기능, 고수준 최적화, 보안 관련 C 기능, 암호화 코드의 효율성과 side-channel 방어, 컴파일러 버그 수정 및 테스트 개선이 하나의 개발 흐름에서 결합될 수 있다고 설명합니다.
SDCC에는 문서와 예제 코드가 포함돼 있으며, 문제를 보고할 때는 사용 중인 SDCC 버전과 빌드 날짜를 -v 옵션으로 확인하고 전체 버전 문자열을 제공해야 합니다. 특히 컴파일러 버그를 신고할 때는 개발자가 재현하고 수정할 수 있도록 실제 샘플 코드를 함께 보내는 것이 중요하다고 안내합니다. 이는 여러 아키텍처와 수많은 명령줄 조합을 지원하는 컴파일러에서 재현 조건을 명확히 하는 절차입니다.
Hacker News 댓글에서는 SDCC가 오래된 MCU를 위한 실용적인 오픈소스 선택지라는 평가와 함께, 최적화 및 코드 생성과 관련된 과거의 버그 경험도 함께 언급됐습니다. 따라서 SDCC는 상용 도구를 사용할 수 없는 환경이나 레거시 하드웨어를 유지해야 하는 프로젝트에서 의미가 있지만, 실제 펌웨어에 적용할 때는 대상 아키텍처와 컴파일러 버전을 고정하고 생성 코드 및 동작을 별도로 검증하는 접근이 필요하다는 경험이 공유되고 있습니다.
• @fiatpandas — 이 페이지를 통해 Dallas Semiconductor에 대해 알게 됐습니다. Silicon Prairie의 이야기를 좋아합니다.
• @dmitrygr — SDCC는 최고의 오픈소스 8051 컴파일러입니다. 지독할 정도로 버그가 많지만 무료입니다. 때로는 그것만으로도 충분합니다.
• @hacker_homie — 장난감 프로젝트 몇 개에 사용했는데, “이건 완전히 망가졌다”라고 할 만한 버그는 겪지 않았습니다. 하지만 확실히 특이한 점은 있습니다.
• @dmitrygr — 코드가 커지면 버그가 찾아옵니다. 예를 들어 uint16 변수 두 개를 전역으로 연달아 선언한 뒤 서로 더하면, 5~6번의 덧셈 후 쓰레기 메모리에 접근하는 문제가 있었습니다. 단순한 코드지만 재현하기 쉬운 사례입니다. 예전에 eInk 가격표 작업을 하다가 이 버그를 만났습니다.
• @raphman — 20년 전 학생이었을 때 PIC16에 SDCC를 사용하면서 제가 미쳐 가는 줄 알았습니다. 마이크로컨트롤러와 C를 처음 배우던 때였고, 단순한 blink LED 테스트조차 의사난수처럼 동작하거나 동작하지 않았습니다. 알고 보니 컴파일러가 출력 핀을 설정하는 빈 루프를 지나치게 공격적으로 최적화해 제거하고 있었습니다. 이런 버그는 오래전에 수정됐지만, 제 장기 기억 속에는 여전히 저주받은 컴파일러로 남아 있습니다.
원문: Hacker News / 번역·요약: Trawling