Ch05. Make Build System - Hongjayeong-02/Basic_SoC_implementation GitHub Wiki

Ch05. Make Build System

๋ชฉํ‘œ
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์„ ๊ตฌ๋ถ„ํ•ด์„œ ๊ธฐ๋กํ•œ๋‹ค.


1. ์™œ Make๊ฐ€ ํ•„์š”ํ•œ๊ฐ€

Ch03์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ์ง์ ‘ ์‹คํ–‰ํ–ˆ๋‹ค.

gcc -E
gcc -S
gcc -c
gcc -T ...
objcopy
size

ํŒŒ์ผ์ด ๋Š˜์–ด๋‚˜๋ฉด ๋งค๋ฒˆ ๋ชจ๋“  ๋ช…๋ น์„ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.

Make๋Š”:

Target
  โ†‘
Dependency
  โ†‘
Source

๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ช…๋ น์„ ์ž๋™ ์‹คํ–‰ํ•œ๋‹ค.

ํ•ต์‹ฌ ๋ชฉ์ :

  • Build command ์ž๋™ํ™”

  • ๋™์ผ build option ๋ฐ˜๋ณต ์‚ฌ์šฉ

  • ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ์ค‘์‹ฌ ์žฌ๋นŒ๋“œ

  • ์‹ค์ˆ˜ ๊ฐ์†Œ

  • ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ build ํ™˜๊ฒฝ ๊ตฌ์„ฑ


2. Makefile ๊ธฐ๋ณธ ๊ตฌ์กฐ

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ทœ์น™:

target: dependencies
	command

์˜ˆ:

main.o: main.c
	arm-none-eabi-gcc -c main.c -o main.o

๋œป:

main.o๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด main.c๊ฐ€ ํ•„์š”ํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.


3. ๋ณ€์ˆ˜

CC := arm-none-eabi-gcc

์ดํ›„:

$(CC)

๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ณต๋˜๋Š” compiler path๋‚˜ option์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


4. ์ž๋™ ๋ณ€์ˆ˜

Notion์—์„œ ์ •๋ฆฌํ•œ ํ•ต์‹ฌ ์ž๋™ ๋ณ€์ˆ˜:

๋ณ€์ˆ˜ | ์˜๋ฏธ -- | -- $@ | ํ˜„์žฌ target $< | ์ฒซ ๋ฒˆ์งธ dependency $^ | ์ „์ฒด dependency

์ฆ‰:

.text : 704 โ†’ 668

์œผ๋กœ 36 byte ๊ฐ์†Œํ–ˆ๋‹ค๊ณ  ๊ธฐ๋ก๋˜์–ด ์žˆ๋‹ค.

์ด ๊ฒฐ๊ณผ๋Š” Notion์˜ ๋‹น์‹œ ๊ณต์šฉ Makefile ๊ตฌ์„ฑ์—์„œ ์ธก์ •ํ•œ ๊ธฐ๋ก์ด๋ฉฐ, ํ˜„์žฌ ZIP์˜ manual Makefile๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์€ build configuration์ด๋ผ๊ณ  ๋‹จ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.


14. Make๋ฅผ ์“ฐ๋Š” ํ•ต์‹ฌ ์ด์œ 

Ch03:

๋ช…๋ น์„ ์ง์ ‘ ํ•˜๋‚˜์”ฉ ์‹คํ–‰

Ch05:

Build rule์„ Makefile์— ๊ธฐ๋ก
โ†“
make ํ•œ ๋ฒˆ์œผ๋กœ ์žฌํ˜„

์ฆ‰ Makefile์€ ๋‹จ์ˆœํžˆ ๋ช…๋ น์–ด๋ฅผ ์ค„์ด๋Š” ํŒŒ์ผ์ด ์•„๋‹ˆ๋‹ค.

Compiler option
Source list
Linker script
Build dependency
Output naming
Optimization setting

์„ ๋ชจ๋‘ build specification์œผ๋กœ ๊ธฐ๋กํ•œ๋‹ค.


15. ํ”„๋กœ์ ํŠธ์—์„œ์˜ ์—ญํ• 

Notion์˜ ์ตœ์ข… ์„ค๊ณ„ ์˜๋„:

๊ฐ Chapter
    โ”‚
    โ”œโ”€ Source file๋งŒ ์ •์˜
    โ”œโ”€ TARGET ์ •์˜
    โ””โ”€ CMSIS ์‚ฌ์šฉ ์—ฌ๋ถ€ ์ •์˜
          โ”‚
          โ–ผ
     common.mk include
          โ”‚
          โ–ผ
     ๊ณตํ†ต build flow

์ด ๋ฐฉ์‹์€ chapter ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์ค‘๋ณต์„ ํฌ๊ฒŒ ์ค„์ธ๋‹ค.


16. ์•Œ๋ ค์ง„ ๋‹จ์ˆœํ™”

Notion์—๋Š” ๊ณต์šฉ startup object๋ฅผ ์—ฌ๋Ÿฌ chapter๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ๋•Œ ๋ณ‘๋ ฌ build์—์„œ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ๊ธฐ๋ก๋˜์–ด ์žˆ๋‹ค.

ํ•™์Šต์šฉ ๊ตฌ์กฐ์—์„œ๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ๋” ๊ฒฌ๊ณ ํ•œ ๊ตฌ์กฐ๋ผ๋ฉด:

Chapter07/build/
Chapter08/build/
Chapter09/build/
...

์ฒ˜๋Ÿผ chapter๋ณ„ output directory๋ฅผ ๋”ฐ๋กœ ๋‘๋Š” ํŽธ์ด ์•ˆ์ „ํ•˜๋‹ค.


17. Ch03 โ†’ Ch04 โ†’ Ch05 ์—ฐ๊ฒฐ

Ch03
GNU ARM ๋ช…๋ น์„ ์ง์ ‘ ์‹คํ–‰
        โ”‚
        โ–ผ
Ch04
Linker Script / Startup File ์ง์ ‘ ์ž‘์„ฑ
        โ”‚
        โ–ผ
Ch05
๊ทธ build ๊ณผ์ •์„ Makefile๋กœ ์ž๋™ํ™”

์„ธ ์ฑ•ํ„ฐ๋Š” ๋”ฐ๋กœ ๋–จ์–ด์ง„ ๋‚ด์šฉ์ด ์•„๋‹ˆ๋ผ ํ•˜๋‚˜์˜ ํ๋ฆ„์ด๋‹ค.

Source Code
+
Startup
+
Linker Script
+
Compiler Options
        โ”‚
        โ–ผ
      Make
        โ”‚
        โ–ผ
       ELF

18. ํ•ต์‹ฌ ์ •๋ฆฌ

Makefile

Build ๊ณผ์ •์„ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•œ ๊ทœ์น™ ํŒŒ์ผ.

Pattern rule

%.o: %.c

๊ฐ™์€ ํ˜•ํƒœ์˜ ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๊ณตํ†ต build ๊ทœ์น™ ์ ์šฉ.

์ž๋™ ๋ณ€์ˆ˜

$@ : target
$< : first prerequisite
$^ : all prerequisites

ํ˜„์žฌ ZIP์—์„œ Optimization ๋ณ€๊ฒฝ

make
make OPT=-O2

19. ์ด ์ฑ•ํ„ฐ์—์„œ ๋ฐฐ์šด ์ 

  • ์ง์ ‘ ์น˜๋˜ compiler/linker ๋ช…๋ น์„ Makefile๋กœ ์ž๋™ํ™”ํ–ˆ๋‹ค.

  • compiler option์„ ๋ณ€์ˆ˜ํ™”ํ•ด build configuration์„ ๊ด€๋ฆฌํ–ˆ๋‹ค.

  • $@, $<, $^ ์ž๋™ ๋ณ€์ˆ˜์˜ ์—ญํ• ์„ ์ดํ•ดํ–ˆ๋‹ค.

  • -O0๊ณผ -O2๊ฐ€ ๊ฒฐ๊ณผ binary size์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค.

  • Linker Script์™€ Startup File์„ build system ์•ˆ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ–ˆ๋‹ค.

  • ์ดํ›„ peripheral chapter๋“ค์ด ๋™์ผํ•œ build ๊ธฐ๋ฐ˜์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ํ•™์Šตํ–ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ