준호씨의 블로그

아두이노 - 로그로 알아보는 빌드 과정 본문

개발이야기

아두이노 - 로그로 알아보는 빌드 과정

준호씨 2021. 3. 15. 00:05
반응형

개발 공부를 좀 해보신 분들은 아두이노가 어떤 식으로 빌드되는지 좀 궁금해질 수 있습니다. 아두이노 IDE에서 빌드해 보면 로그가 자세히 나오지는 않아서 어떻게 빌드가 되는지 자세히 나오지는 않는데요.

Preferences -> Show verbose output during: complication을 켜주면 좀 더 상세한 로그가 나옵니다.

아래처럼 말이죠.

gcc로 컴파일해 보신 분들은 조금 다르지만 익숙한 빌드 명령어를 보실 수 있습니다. avr-g++명령어가 실행되는 것을 볼 수 있습니다.

...
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard /var/folders/f7/qrs7vm1n5pddvxcmxkl850ch0000gn/T/arduino_build_618791/sketch/LEA4_Blink.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
Generating function prototypes...
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard /var/folders/f7/qrs7vm1n5pddvxcmxkl850ch0000gn/T/arduino_build_618791/sketch/LEA4_Blink.ino.cpp -o /var/folders/f7/qrs7vm1n5pddvxcmxkl850ch0000gn/T/arduino_build_618791/preproc/ctags_target_for_gcc_minus_e.cpp -DARDUINO_LIB_DISCOVERY_PHASE
/Applications/Arduino.app/Contents/Java/tools-builder/ctags/5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /var/folders/f7/qrs7vm1n5pddvxcmxkl850ch0000gn/T/arduino_build_618791/preproc/ctags_target_for_gcc_minus_e.cpp
Compiling sketch...
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino -I/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard /var/folders/f7/qrs7vm1n5pddvxcmxkl850ch0000gn/T/arduino_build_618791/sketch/LEA4_Blink.ino.cpp -o /var/folders/f7/qrs7vm1n5pddvxcmxkl850ch0000gn/T/arduino_build_618791/sketch/LEA4_Blink.ino.cpp.o
Compiling libraries...
Compiling core...
...

그리고 대략적인 진행순서도 알 수 있는데요.

우선 아두이노 IDE에서 작성한 스케치 파일을 먼저 컴파일합니다.

그리고 라이브러리들을 컴파일하고요. 다음으로는 core를 컴파일합니다.

core는 지난번에 LED_BUILTIN값을 확인했던 ArduinoCore-avr인 거 같습니다. 보드와 칩셋과 관련된 내용들이 컴파일될 거 같네요.

그리고 Linking everything together이라고 나오는데 여기서 앞서 컴파일했던 내용들을 모두 합쳐주는 것으로 보입니다.

모두 합쳐진 결과물은 아두이노 보드에 업로드되고 아두이노는 업로드된 내용으로 구동되게 되겠죠?

이상으로 아두이노 상세로그를 통해 빌드 과정을 알아보았습니다.

반응형
Comments