Ch05. Make Build System - Hongjayeong-02/Basic_SoC_implementation GitHub Wiki
๋ชฉํ
Ch03์์ ์ง์ ์ ๋ ฅํ๋arm-none-eabi-gcc๋ช ๋ น์ Makefile๋ก ์๋ํํ๊ณ ,
๋ฐ๋ณต ๊ฐ๋ฅํ build workflow๋ฅผ ๋ง๋ ๋ค.
ํ์ฌ ์๋ฃ ๊ธฐ์ค ์๋ด
Notion์๋ ์ดํ ๋ชจ๋ ์ฑํฐ๊ฐcommon/mk/common.mk๋ฅผ ๊ณต์ ํ๋ ๊ตฌ์กฐ๋ก ์ ๋ฆฌ๋์ด ์๋ค.
๊ทธ๋ฌ๋ ํ์ฌ ์ฒจ๋ถํbare-metal ์ค์ต์ฝ๋.zip์๋common/mk/common.mk๊ฐ ํฌํจ๋์ด ์์ง ์๊ณ ,
์ค์ ํ์ธ ๊ฐ๋ฅํ Makefile์Ch04_linker_startup/manual_build/Makefile์ด๋ค.
๋ฐ๋ผ์ ์๋์์๋ Notion์ ์ค๊ณ ๊ฐ๋ ๊ณผ ์ฒจ๋ถ ZIP์ ์ค์ Makefile์ ๊ตฌ๋ถํด์ ๊ธฐ๋กํ๋ค.
Ch03์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ ์ง์ ์คํํ๋ค.
gcc -E
gcc -S
gcc -c
gcc -T ...
objcopy
sizeํ์ผ์ด ๋์ด๋๋ฉด ๋งค๋ฒ ๋ชจ๋ ๋ช ๋ น์ ์ง์ ์ ๋ ฅํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๋ค.
Make๋:
Target
โ
Dependency
โ
Source๊ด๊ณ๋ฅผ ์ ์ํ๊ณ ํ์ํ ๋ช ๋ น์ ์๋ ์คํํ๋ค.
ํต์ฌ ๋ชฉ์ :
Build command ์๋ํ
๋์ผ build option ๋ฐ๋ณต ์ฌ์ฉ
๋ณ๊ฒฝ๋ ํ์ผ ์ค์ฌ ์ฌ๋น๋
์ค์ ๊ฐ์
์ฌํ ๊ฐ๋ฅํ build ํ๊ฒฝ ๊ตฌ์ฑ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ท์น:
target: dependencies
command์:
main.o: main.c
arm-none-eabi-gcc -c main.c -o main.o๋ป:
main.o๋ฅผ ๋ง๋ค๊ธฐ ์ํดmain.c๊ฐ ํ์ํ๊ณ , ํ์ํ ๋ ์๋ ๋ช ๋ น์ ์คํํ๋ค.
CC := arm-none-eabi-gcc์ดํ:
$(CC)๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ณต๋๋ compiler path๋ option์ ํ ๊ณณ์์ ๊ด๋ฆฌํ ์ ์๋ค.
Notion์์ ์ ๋ฆฌํ ํต์ฌ ์๋ ๋ณ์:
๋ณ์ | ์๋ฏธ -- | -- $@ | ํ์ฌ target $< | ์ฒซ ๋ฒ์งธ dependency $^ | ์ ์ฒด dependency์ฆ:
.text : 704 โ 668์ผ๋ก 36 byte ๊ฐ์ํ๋ค๊ณ ๊ธฐ๋ก๋์ด ์๋ค.
์ด ๊ฒฐ๊ณผ๋ Notion์ ๋น์ ๊ณต์ฉ Makefile ๊ตฌ์ฑ์์ ์ธก์ ํ ๊ธฐ๋ก์ด๋ฉฐ, ํ์ฌ ZIP์ manual Makefile๊ณผ ์ ํํ ๊ฐ์ build configuration์ด๋ผ๊ณ ๋จ์ ํ์ง ์๋๋ค.
Ch03:
๋ช
๋ น์ ์ง์ ํ๋์ฉ ์คํCh05:
Build rule์ Makefile์ ๊ธฐ๋ก
โ
make ํ ๋ฒ์ผ๋ก ์ฌํ์ฆ Makefile์ ๋จ์ํ ๋ช ๋ น์ด๋ฅผ ์ค์ด๋ ํ์ผ์ด ์๋๋ค.
Compiler option
Source list
Linker script
Build dependency
Output naming
Optimization setting์ ๋ชจ๋ build specification์ผ๋ก ๊ธฐ๋กํ๋ค.
Notion์ ์ต์ข ์ค๊ณ ์๋:
๊ฐ Chapter
โ
โโ Source file๋ง ์ ์
โโ TARGET ์ ์
โโ CMSIS ์ฌ์ฉ ์ฌ๋ถ ์ ์
โ
โผ
common.mk include
โ
โผ
๊ณตํต build flow์ด ๋ฐฉ์์ chapter ์๊ฐ ๋์ด๋ ์๋ก ์ค๋ณต์ ํฌ๊ฒ ์ค์ธ๋ค.
Notion์๋ ๊ณต์ฉ startup object๋ฅผ ์ฌ๋ฌ chapter๊ฐ ๋์์ ์ฌ์ฉํ ๋ ๋ณ๋ ฌ build์์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ๊ธฐ๋ก๋์ด ์๋ค.
ํ์ต์ฉ ๊ตฌ์กฐ์์๋ ํฐ ๋ฌธ์ ๊ฐ ์์ง๋ง ๋ ๊ฒฌ๊ณ ํ ๊ตฌ์กฐ๋ผ๋ฉด:
Chapter07/build/
Chapter08/build/
Chapter09/build/
...์ฒ๋ผ chapter๋ณ output directory๋ฅผ ๋ฐ๋ก ๋๋ ํธ์ด ์์ ํ๋ค.
Ch03
GNU ARM ๋ช
๋ น์ ์ง์ ์คํ
โ
โผ
Ch04
Linker Script / Startup File ์ง์ ์์ฑ
โ
โผ
Ch05
๊ทธ build ๊ณผ์ ์ Makefile๋ก ์๋ํ์ธ ์ฑํฐ๋ ๋ฐ๋ก ๋จ์ด์ง ๋ด์ฉ์ด ์๋๋ผ ํ๋์ ํ๋ฆ์ด๋ค.
Source Code
+
Startup
+
Linker Script
+
Compiler Options
โ
โผ
Make
โ
โผ
ELFBuild ๊ณผ์ ์ ๋ฐ๋ณต ๊ฐ๋ฅํ๊ฒ ๊ธฐ์ ํ ๊ท์น ํ์ผ.
%.o: %.c๊ฐ์ ํํ์ ์ฌ๋ฌ ํ์ผ์ ๊ณตํต build ๊ท์น ์ ์ฉ.
$@ : target
$< : first prerequisite
$^ : all prerequisitesmake
make OPT=-O2์ง์ ์น๋ compiler/linker ๋ช ๋ น์ Makefile๋ก ์๋ํํ๋ค.
compiler option์ ๋ณ์ํํด build configuration์ ๊ด๋ฆฌํ๋ค.
$@,$<,$^์๋ ๋ณ์์ ์ญํ ์ ์ดํดํ๋ค.-O0๊ณผ-O2๊ฐ ๊ฒฐ๊ณผ binary size์ ์ํฅ์ ์ค ์ ์์์ ํ์ธํ๋ค.Linker Script์ Startup File์ build system ์์ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ค.
์ดํ peripheral chapter๋ค์ด ๋์ผํ build ๊ธฐ๋ฐ์ ์ฌ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ํ์ตํ๋ค.