Jaebi의 Binary는 호남선

[WWDC 2024] Embedded Swift - 찍먹 본문

IoT

[WWDC 2024] Embedded Swift - 찍먹

jaebijae 2025. 3. 4. 02:04

Embedded Swift

  • Swift의 새로운 컴파일 모드
  • Apple은 이미 Secure Enclave Processor에서 Embedded Swift를 사용
  • Swift 언어의 특징(값/참조 타입, 옵셔널, 클로저, 제너릭 등)을 사용할 수 있음
    • 사용 불가: Mirror API, metatypeany 타입
  • 현재 ARM 및 RISC-V (32/64 비트)를 지원, nightly toolchain을 사용화면 실험 가능
  • 더 자세한 내용은 Embedded Swift User Manual 참고

Embedded Swift 사용 - 사전 준비

  • MacOS
  • Xcode 최신 버전 ('25.03.03부 16.2)
  • Swift Nightly Toolchain

Swift Nightly Toolchain 다운로드

  • Terminal로 설치된 Toolchain 확인 (~/Library/Developer/Toolchains/ 경로에 있음)

  • toolchain identifier 확인 .xctoolchain 안에서 plutil -extract CFBundleIdentifier raw -o -Info.plist 커맨드

  • 해당 toolchain identifier를 TOOLCHAINS 전역 변수에 넣고 swift --version으로 확인

  • Shell Environment 세팅하기 export TOOLCHAINS=org.swift.{toolchain identifier}를 하면 swift --version이 다른 버전을 사용함 확인

 

Swift 예제 프로그램 빌드

 

swift-embedded-examples/rpi5-blink at main · apple/swift-embedded-examples

A collection of example projects using Embedded Swift - apple/swift-embedded-examples

github.com

요구 사항

  • 라즈베리파이 5
  • 라즈베리파이 OS가 설치된 SD 카드
  • LLVM

MacOS에 LLVM 설치

  • brew install llvm 로 llvm 설치
  • echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc 로 path variable에 llvm 추가
  • CMake 또는 Make와 같은 빌드 도구를 사용하려면 특정 환경변수를 업데이트 해야함 - 아래 변수들을 .zshrc / .bashrc에 추가, source ~/.zshrc (.bashrc)로 적용
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
  • clang --version 으로 맞는 llvm 버전이 적용되었는지 확인

예제 프로그램 빌드

  • 예제 코드 클론, LED 동작을 바꾸고 싶으면 바꿔봄 (예시 코드)
@main
struct Main {

  static func main() {
    setLedOutput()

    while true {
      // 3초 동안 3번 깜빡이기
      let blinkDuration = 3_000_000  // 3초 Loop count
      for _ in 0..<3 {
        ledOn()
        for _ in 1..<500000 {}  // 0.5초
        ledOff()
        for _ in 1..<500000 {}  // 0.5초
      }
      
      // 3초 동안 켜있기
      ledOn()
      for _ in 1..<blinkDuration {}  // 3초 Delay
      
      // 3초 동안 꺼있기
      ledOff()
      for _ in 1..<blinkDuration {}  // 3초 Delay
    }
  }
}
  • 해당 디렉토리에서 make

  • 성공하면 kernel8.img가 디렉토리에 생성됨
  • cp kernel8.img /Volumes/bootfs로 kernel 이미지를 SD 카드에 copy
  • rm /Volumes/bootfs/kernel_2712.img로 kenerl 이미지를 지워서 kernel8.img가 사용되게 함
  • SD카드를 Raspberry Pi 5에 넣고 재부팅

 

'IoT' 카테고리의 다른 글

[IoT] Mac에 라즈베리파이5 설정  (0) 2025.02.24
[IoT] 라즈베리5 정리  (0) 2025.02.24