์ฌ๋ฌ๋ถ ์๋ ํ์ธ์,
avr-rust ํฌํฌ๋ฅผ Rust๋ก ํฉ์น๋ ๊ฒ์ ๋ํ ์ผ๋ฐ์ ์ธ ์๊ฒฌ์ ์๊ณ ์ถ์ต๋๋ค.
ํฌํฌ ์์ฒด๋ ์ต๊ทผ ๋ช ๋ฌ ๋์ ๋ฒ๊ทธ๊ฐ ์ค์ด๋ค๋ฉด์ ํจ์ฌ ๋ ์์ ์ ์ด ๋์์ต๋๋ค. ๋ํ ์ฌ์ฉ์ ๊ด์ฌ์ด ์๋ ๋ง์ ์ฌ๋๋ค์ ๋์ด๋ค์ด๊ธฐ ์์ํ์ต๋๋ค.
GitHub ์์ avr-rust๋ฅผ ์ฌ์ฉํ์ฌ ๋ ํฅ๋ฏธ๋ก์ด ํ๋ก์ ํธ ์ค ํ๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
~Rust๋ ํ์ฌ ์๋ํ๋ AVR ๋ฐฑ์๋๊ฐ ํฌํจ๋ LLVM 4.0์ ์์ง๋ง ๊ทธ ์ดํ๋ก ๋ง์ ๋ฒ๊ทธ๊ฐ ์์ ๋์์ต๋๋ค. ๋ช ๊ฐ์ง ์ค์ํ ๋ฒ๊ทธ๊ฐ ์์ ๋ AVR ๋ฐฑ์๋ ๋ฒ์ ์ ์ป๊ธฐ ์ ์ LLVM 5.0์ด ์ง์๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค(๊ฑฐ์ ์๋ฃ: #43370).
์ด๊ฒ์ ๋ ์ด์ ์ฐจ๋จ๊ธฐ๊ฐ ์๋๋๋ค. Upstream Rust๋ 2018๋ 2์ 20์ผ ํ์ฌ LLVM 6.0์ ์์ต๋๋ค.
AVR ์ง์์ด ๋ฉ์ธ๋ผ์ธ์ ๋ด์ฅ๋์ด ์๋ค๋ฉด Rust์ LLVM ํฌํฌ์ ํจ์น๋ฅผ ์ ๋ณํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ๋ง์ ์ค์ํ ์์ ์ฌํญ์ ์ ํํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ํฐ ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
avr-rust ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ๋ณ๋ ๋ชจ๋ ๋ฒ๊ทธ ์์ ์ ์ด๋ฏธ LLVM ํธ๋ ํฌ๋ก ์ ์คํธ๋ฆผ๋์์ต๋๋ค. ์ ๋ ํธ๋ ํฌ์์ ๋๋ฌด ๋ฉ๋ฆฌ ๋ฐ์ฐํ๋ LLVM ํฌํฌ์ ํฌ์ด ์๋๊ธฐ ๋๋ฌธ์ ํฌํฌ๋ฅผ ๋ณํฉํ๋ฉด ๊ณ์ ๊ทธ๋ด ๊ฒ์ ๋๋ค.
LLVM์ 6๊ฐ์ ์ถ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ฒด๋ฆฌ ํผํน์ด ํ์ํฉ๋๋ค.
avr-rust/rust ์ ์ฅ์์๋ ์๋ ค์ง ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ์๋ ค์ง ๋ชจ๋ ๋ฒ๊ทธ๋ AVR LLVM ๋ฐฑ์๋์ ๋ฌธ์ ์ ๋๋ค. ์ฌ๊ธฐ์ ๋ ํฅ๋ฏธ๋กญ๊ณ ์ํฅ๋ ฅ ์๋ ๋ช ๊ฐ์ง๊ฐ ์์ต๋๋ค.
libcore
๋ ์์ ์์ด ์ปดํ์ผํ ์ ์์ต๋๋ค.libcore
๋ฅผ ์์ ์์ด ์ฑ๊ณต์ ์ผ๋ก ์ปดํ์ผํ๊ธฐ ์ํด ์์ ํด์ผ ํ๋ ๋ฒ๊ทธ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ์ค์ ๋ ์ด์ ํ ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ์ง๊ธ๊น์ง ์ฌ์ฉ์๋ฅผ์ํ ๋ง์ ๋ฌธ์ ๊ฐ๋์ง ์์์ต๋๋ค xargo์ด ํฌ๋ช
ํ๊ฒ ์ปดํ์ผ libcore
ํ์๋ก ํ ๋ ์ฆ์, ์ฐ๋ฆฌ๋์ libcore ๋์ฒด ํ ์ ์์ต๋๋ค Xargo.toml
.
Rust ํ์ด ์คํก libcore๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋์์ ๋ณํฉํ๋ ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด๊ฒ์ AVR์ด Harvard ์ํคํ ์ฒ๋ฅผ ์ํ ์ต์ด์ ์ธํธ๋ฆฌ LLVM ๋ฐฑ์๋์ธ ์ฆ์์ ๋๋ค. LLVM์ ํ์ฌ ๋ชจ๋ ๊ธฐ๋ฅ์ด RAM์ ํด๋นํ๋ "์ผ๋ฐ ์ฃผ์ ๊ณต๊ฐ"์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด ๋๋ฌธ์ ํจ์ ํฌ์ธํฐ๋ฅผ ํตํด ๋ก๋/์ ์ฅ์ ์๋ํ๋ฉด ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ ๋์ RAM์ ์ก์ธ์คํฉ๋๋ค.
์ข์ ์์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ์คํธ๋ฆผ LLVM ํจ์น๊ฐ ๋ณด๋ฅ ์ค์ด๋ผ๋ ๊ฒ์ ๋๋ค( D37052 , D37053 , D37054 , D37057 ).
compiler-rt
๋ฃจํด์ ๋ํ ํธ์ถ์ ์์ฑํฉ๋๋ค(avr-llvm/llvm#163).๊ธฐ๋ณธ์ ์ผ๋ก 32๋นํธ ์ํํธ๋ฅผ ์ง์ํ์ง ์๋ ๋์์ด ๋ง์ง ์๊ธฐ ๋๋ฌธ์ libgcc
๋ฐ compiler-rt
์๋ LLVM์ด ์ฌ์ ํ 32๋นํธ ๋ฒ์ ์ ์ํํธ ๋ฃจํด์ด ์์ต๋๋ค. ํ๋ณตํ๊ฒ ํธ์ถ์ ์์ฑํฉ๋๋ค.
๋งํฌํ๋ ๋์ ์ ์๋์ง ์์ ๊ธฐํธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๊ฒ์ ๋ง์ปค๊ฐ ๋ชจ๋ ๋ฐ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ์๋นํ ๋ฅ์ํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ 32๋นํธ ์ํํธ๋ฅผ ์ํํ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ๋ฐ์ํฉ๋๋ค.
๋ฆด๋ฆฌ์ค ๋ชจ๋์์ ์ปดํ์ผํ์ฌ ํ ์ฌ์ฉ์๊ฐ ๋๋ฝ๋ ์ํํธ ๋ฒ๊ทธ๋ฅผ ์ณ์ โโ"์ต์ ํ"๋ก ์ํํธ๋ก์ ๊ณฑ์ ์ ์น๊ฒฉ์์ผฐ์ต๋๋ค.
์ด diff ๋ฅผ ๋ณด๋ฉด ๋ชจ๋ AVR ๊ด๋ จ ์ฐจ์ด์ ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด diff์ ์ ๋ฐ ์ด์์ด README ๋ฐ Travis CI ๊ตฌ์ฑ์ผ ๋ฟ์ ๋๋ค. ์ ์คํธ๋ฆผ๋๋ ์ค์ ์ฝ๋๋ ๋งค์ฐ ์์ต๋๋ค. AVR ๋ฐฑ์๋ ๋ฐ ๋์ ์ฌ์์ ํ์ฑํํ๋ ๋ช ๊ฐ์ง ๊ธ๋ฃจ ์ฝ๋์ ๋๋ค.
์ด diff๋ ๋ํ AVR์ ๋ํด libcore
์ผ๋ถ๋ฅผ ์กฐ๊ฑด๋ถ๋ก ๋นํ์ฑํํฉ๋๋ค. ์ด๋ฌํ ์์ ์ฌํญ์ ์
์คํธ๋ฆผ๋์ง ์์ผ๋ฉฐ ๋ค์ด์คํธ๋ฆผ ์ฌ์ฉ์๊ฐ Xargo๋ฅผ ์ฌ์ฉํ์ฌ AVR์ ๋ํด ์ถ์๋ libcore
๋ฅผ ์ปดํ์ผํ ์ ์์ผ๋ฏ๋ก ์๊ฒฉํ๊ฒ ํ์ํ์ง ์์ต๋๋ค.
+1! ์ ์ ํ ์ปดํ์ผ๋ฌ์ ๋ด์ฅ๋ Avr ๋ น์ ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค. ์ด์ ๋ฒ๊ทธ๊ฐ ๊ฑฐ์ ์์ต๋๋ค.
๋ฒ๊ทธ๊ฐ ์์ ํ ์๋ ๊ฒ์ ์๋๋๋ค. :)
๋ฐฑ์๋ wrt ๋ฒ๊ทธ์ ์ํ์ ๋ํ ์ผ๋ถ ์ ๋ณด๋ฅผ ํฌํจํ๋๋ก ์ค๋ช ์ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
๊ฑฐ์ ๐. ์ปคํ๋ง ๊ฐ์
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ์ฃผ์ง ์๋ ํ Rust-lang/rust์ ์ ์คํธ๋ฆผ ํ๋ซํผ์ ๋งค์ฐ ํ์ํฉ๋๋ค! ๋น์ ์ด ์๊ฐํ๊ณ ์๋ ๋ช ๊ฐ์ง ๊ตฌ์ฒด์ ์ธ ์๊ฐ:
#[cfg]
๋ฅผ ํตํด ๋ ๋ง์ ์์
์ ํ๊ณ ์ถ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌํ ํญ๋ชฉ์ "LLVM์ ๋ฒ๊ทธ"๋ก ์ธํด ๋๋ฝ๋์๊ฑฐ๋ AVR์์ ๊ทผ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ฝ๋ ๊ฒ์
๋๊น? ์ ์๋ ์ด๋ป๊ฒ๋ "LLVM์ ์์ "ํ์ฌ ๊ฐ์ฅ ์ ์ํ๋๋ ๋ฐ๋ฉด ํ์๋ ์ผ์ ๋ ๊น๋ค๋กญ๊ฒ ๋ง๋ญ๋๋ค.์ผ๋ฐ์ ์ผ๋ก ํ์ฌ ์ฐ๋ฆฌ๋ libcore/libstd์ ๋์ผํ ๊ท ์ผ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๋ชจ๋ ํ๋ซํผ์ ๋ณด์ ํ๊ณ ์์ง๋ง ๊ณ์ํด์ ๋ ๋ง์ ํ๋ซํผ์ ์ ํํจ์ ๋ฐ๋ผ ์ด๊ฒ์ด ์ฌ์ค์ธ์ง๋ ํ์คํ์ง ์์ต๋๋ค.
๊ฐ์ง๊ณ ์๋ ํจ์น๋ ๊ฝค ์ข์ ๋ณด์ด์ง๋ง libcore์ ๋ค์ํ #[cfg]๋ฅผ ํตํด ๋ ๋ง์ ์์ ์ ํ๊ณ ์ถ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌํ ํญ๋ชฉ์ "LLVM์ ๋ฒ๊ทธ"๋ก ์ธํด ๋๋ฝ๋์๊ฑฐ๋ AVR์์ ๊ทผ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ฝ๋ ๊ฒ์ ๋๊น?
LLVM์ ๋ฒ๊ทธ ๋๋ฌธ์ ๋๋ค.
๋ด ์๊ฐ์ ์ ์ผํ ์ง๋ฌธ์ i128
/ u128
์ ํ์ ์ง์์ ๊ดํ ๊ฒ์
๋๋ค. AVR์ ๊ฒฝ์ฐ ์ด๋ฌํ ์ ํ์ด ์ค์ ๋ก ์ ์ฉํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. i128
์์ ์ง์ libcore
ํ์ฌ ๋ฒ๊ทธ๋ก ์ธํด ์ฃผ์ ๋ง์ด ์๋๋ผ ํ
์คํธ ์ฝ๋ ๊ฒฝ๋กํ์ง ์๊ณ , ์ ๋ง AVR๊ณผ ๊ฐ์ ๋ ์ง์คํฐ ํ ๋น์ ํ์ฌ ๊ฐ์ ๋ค๋ฅธ ๋ฐ๊ฒฌ๋์ง ์์ ๋ฒ๊ทธ๊ฐ์์ ์ ์์ต๋๋ค ๋ง 32๋ฐ์ดํธ ๊ฐ์น์ ๋ฒ์ฉ ๋ ์ง์คํฐ๊ฐ ์์ต๋๋ค.
AVR์์ i128
์ฌ์ฉํ ์ ์์ ๊ฐ๋ฅ์ฑ์ ์ฌ์ ํ โโ๋์ง๋ง ๋ฐฑ์๋์์ ์ ๋ฐํ๋ ํน์ ๋ฌธ์ ์ ๋ํด์๋ ์ ๋ชจ๋ฆ
๋๋ค.
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ libcore๊ฐ ์์ ์์ด ์ปดํ์ผ๋๊ฑฐ๋ ์ต์ํ ์์ ์์ด ์ค์ ๋ก ํ ๋ฒ ํจ์น๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ libcore๊ฐ ์์ ์์ด ๋๋ ์ต์ํ ์์ ์์ด ์ปดํ์ผ๋๋ฉด ์ค์ ๋ก ํจ์น๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋์๊ฒ ํฉ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆฐ๋ค!
๋ด ์๊ฐ์ ์ ์ผํ ์ง๋ฌธ์ i128/u128 ์ ํ์ ์ง์์ ๊ดํ ๊ฒ์ ๋๋ค. AVR์ ๊ฒฝ์ฐ ์ด๋ฌํ ์ ํ์ด ์ค์ ๋ก ์ ์ฉํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
AVR์์ i128
๋ฅผ ์ง์ํ์ง ์๋ ๊ฒ์ ๋ํ ๋์ ์ฃผ๋ ๋๋ ค์์ AVR ๋๋ ๊ธฐํ ์๋ฒ ๋๋ ํ๋ซํผ๊ณผ์ ํธํ์ฑ์ ์ํด 128๋นํธ ์ ์ ์ฑํ์ ๋๊ฐ ํจ๊ณผ๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด 128๋นํธ ์ ์๋ฅผ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ AVR ์ฌ์ฉ์๋ ์ฌ์ฉ ์ค๋จ ๋ฌธ์ ๋ฅผ ์ ์ถํฉ๋๋ค. ์ด๊ฒ์ 128๋นํธ ์ ์๋ฅผ ์ด์์ฑ์ ์ํด ๋
ธ๋ ฅํ๋ Rust ์ฝ๋์์ ์ฌ์ฉํ๊ธฐ์ "์์ ํ์ง" ์๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
AVR ๋๋ ๊ธฐํ ์๋ฒ ๋๋ ํ๋ซํผ๊ณผ์ ํธํ์ฑ์ ์ํด 128๋นํธ ์ ์ ์ฑํ ์ ๋๊ฐ ํจ๊ณผ
๋๋ ๊ทธ๊ฒ์ด ์ฌ๊ธฐ์์ ๋์ฐํ๊ฒ ํฐ ๊ฑฐ๋๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ํ ์๋ฒ ๋๋ ์ฅ์น์๋ ์ด๋ฏธ ๊ฑฐ๋ํ ์ ํ ์ฌํญ(stdin/stdout ์์, ์ผ๋ฐ์ ์ผ๋ก ํ ๋น์ ์์ ๋ฑ)์ด ์์ด ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ธฐ๊ฐ ์ ๋ง ์ด๋ ต์ต๋๋ค. ์ต๊ทผ์ AVR GCC์ double
๊ฐ ์ค์ ๋ก float
์ ๋ณ์นญ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค! ์ฐ๋ฆฌ๊ฐ ๊ทธ ๊ธฐ์ดํจ์ ์ ์งํ ๊ฒ์ธ์ง ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง i128
๋ณด๋ค ๋ ํฐ ์์์ ์ํฅ์ ๋ฏธ์น ๊ฒ์
๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ no-std์์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์๋ฒ ๋๋์ ์ ํฉํ ํฌ๋ ์ดํธ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ํน๋ณํ ๊ธฐ๋ฅ์ ํญ์ ๊ฐ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
stdin / stdout ์์, ์ผ๋ฐ์ ์ผ๋ก ํ ๋น์ ์์ ๋ฑ
#![no_std]
์ํ๊ณ๋ฅผ ์ค๋ช
ํ๊ณ ์์ต๋๋ค. ์ด ์ํ๊ณ๋ฅผ ๋์์ผ๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ํ๊ณ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ท์น์ i128
๋ ํฌํจํ๋ libcore
๋ฅผ ์ฃผ์ด์ง ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฒ์
๋๋ค. i128
์ง์ํ์ง ์๋ ๊ฐ ๋์์ x86 ์ ํ๊ตฐ์ด ๊ทธ๋ค์ง ๊ด๋ จ์ฑ์ด ์๋ ์ ์ฒด Rust ์ํ๊ณ์ ํ์ ์งํฉ ๋ด์์ ์๋ฒ ๋๋ ๋์์ "์์ฅ ์ ์ ์จ"์ด ๋ ํฌ๊ธฐ ๋๋ฌธ์ ์ด ์ํ๊ณ ๋ด์์ ๋ ํฐ ๋๊ฐ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋๋ค. .
์ฐ๋ฆฌ๊ฐ ๊ทธ ์ด์ํจ์ ์ ์งํ ๊ฒ์ธ์ง ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๊ทธ๊ฒ์ i128๋ณด๋ค ํจ์ฌ ๋ ํฌ๋ ์ดํธ์ ์ํฅ์ ๋ฏธ์น ๊ฒ์ ๋๋ค.
ํฅ๋ฏธ๋ก์ด! f64
๋ณ์นญ์ f32
ํ๊ฑฐ๋ ์ ๊ณตํ์ง ์์ผ๋ฉด ์ํ๊ณ์ ๋ ๋ง์ ์ํฅ์ ๋ฏธ์น ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋
ธ๋ ฅํ ์ ์๋ค๋ฉด ์ ํ์ง ๋ง์์ผ ํฉ๋๊น? i128
๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ํ์คํ ๊ฐ๋ฅํฉ๋๋ค.
i128์ ๊ตฌํํ๋ ๊ฒ์ ํ์คํ ๊ฐ๋ฅํฉ๋๋ค.
๋ฌผ๋ก , AVR์ฉ์ผ๋ก i128์ ๊ตฌํํด์ผ ํ๋ค๊ณ ๋ช
ํํ๊ฒ ์ธ๊ธํ์ง ์์์์ ์ค์ ๋ก i128
๋ฅผ ์ฌ์ฉ ํ๋ ๋ชจ๋ ์ฝ๋๋ ๊ณ ํต์ ์ธ๊ณ์ ๋ค์ด๊ฐ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋ ธ๋ ฅํ ์ ์๋ค๋ฉด ์ ํ์ง ๋ง์์ผ ํฉ๋๊น?
๋ฌด์ ๊ณผ์ ์ผ๊ด์ฑ์ด ๋ฌธ์ ์
๋๋ค. GCC( f64
== f32
) ๋๋ ๋ค๋ฅธ ๋ชจ๋ Rust ํ๊ฒ( f64
!= f32
)๊ณผ์ ์ผ๊ด์ฑ?
#![no_std] ์ํ๊ณ๋ฅผ ์ค๋ช ํ๊ณ ์์ต๋๋ค.
๋ค, ๊ทธ๋์ ์ ๊ฐ "no-std์์ ํ๋ ๊ฒ์ฒ๋ผ ๋ด์ฅํ์ ์ ํฉํ ํฌ๋ ์ดํธ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ํน์ ๊ธฐ๋ฅ"์ด๋ผ๊ณ ๋งํ ๊ฒ์ ๋๋ค. ๐
์ฐ๋ฆฌ๊ฐ 16๋นํธ usize
ํจ์น๋ฅผ ์ฒ์ ์ถ์ํ ์ดํ๋ก ์ ๋ง์ ์์ ์๋ ๋ ํฐ ๋ฌธ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Rust์ Rust ํ๋ก๊ทธ๋๋จธ๊ฐ usize
๊ฐ "๋ค์ดํฐ๋ธ"๋ผ๊ณ ๊ฐ์ ํ๋ ๊ฒฝํฅ์ด ์๋ค๋ ๊ฒ์
๋๋ค. ๋ ์ง์คํฐ์ ํฌ๊ธฐ. AFAIK, ์ด๊ฒ์ Rust๊ฐ ๋์์ผ๋ก ํ๋ ๋ค๋ฅธ ๋ชจ๋ ํ๋ซํผ์ ํด๋น๋์ง๋ง AVR์๋ ํด๋น๋์ง ์์ต๋๋ค.
๋ฌด์๊ณผ์ ์ผ๊ด์ฑ์ด ๋ฌธ์ ์ ๋๋ค. GCC(f64 == f32) ๋๋ ๋ค๋ฅธ ๋ชจ๋ Rust ํ๊ฒ(f64 != f32)๊ณผ์ ์ผ๊ด์ฑ?
f64
๋ผ๋ ์ด๋ฆ
์ฌ๊ธฐ์ ์ข์ ์ ์ 128๋นํธ ์ ์์ ๋ํ ์ฐ๋ ค๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ๊ถ์ฅํด์๋ ์ ๋์ง๋ง ์ง์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. i128
์ ํ์ ๋ํ ํน์ฑ impls์ ๊ฐ์ ๊ธฐ๋ฅ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ์์๋ฅผ ๋ณด๊ณ ์ถ์ง ์์ต๋๋ค. ์ฌ์ฉํ์ง ์๋ i128 ํญ๋ชฉ์ ๋ชจ๋ ๋ง์ปค์์ ์ ๊ฑฐํด์ผ ํ๋ฏ๋ก ์ด๊ฒ์ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
f32/64 ๋ฌธ์ ๋ ํฅ๋ฏธ๋ก์ด ๋ฌธ์ ์ ๋๋ค. f64๋ฅผ ์ค์ ๋ก 64๋นํธ๋ก ๋ง๋๋ ๊ฒ์ ๋ํ ๋์ ์ฃผ์ ๊ด์ฌ์ฌ๋ C FFI๊ฐ ๋งค์ฐ ๋ถ์์ง๊ธฐ ์ฝ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ AVR-GCC๊ฐ 32๋นํธ ๋๋ธ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ FFI๋ฅผ ํตํ ํธ์ถ์ ์ด๊ธฐํ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋๋ ์ธ๊ทธํดํธ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ๋์ libc
ํฌ๋ ์ดํธ์ ์ ํ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ธฐ๋ํจ์ผ๋ก์จ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ ์ ๋ ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. c_double
๋ฅผ f32
๋ก ์ค์ ํ๋ AVR ๊ด๋ จ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ฌ๋๋ค์ด FFI ๋ฐ์ธ๋ฉ์ libc
ํฌ๋ ์ดํธ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ํฉ๋ฆฌ์ ์ผ๋ก ๊ธฐ๋ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ณํฉ์ ์ํด ๊ธฐ์ตํด์ผ ํ ์ฌํญ์ main()
์๋ช
์ ์ฌ์ฉ๋ c_int
์ ํ์ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค. https://github.com/rust-lang/rust/pull/44906#discussion_r141843808
ํธ์ง: MSP430์๋ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ์ด์ ๋ํ ๋ฌธ์ ๋ฅผ ์ด์์ต๋๋ค. https://github.com/rust-lang/rust/issues/44934
main() ์๋ช ์ ์ฌ์ฉ
@mattico ์ด์ฉ๋ฉด ๋ด๊ฐ ์ด์ํ ๋ฐฉ์์ผ๋ก ์ผ์ ๋ด ์ฝ๋ ์ค ์ด๋ ๊ฒ๋ Rust์ main
์ฌ์ฉํ์ง ์์์ต๋๋ค .
#[no_mangle]
pub extern fn main() {
๋ก ๋์๊ฐ๋ ค๋ฉด ์๋ฌด ๊ฒ๋ ์๊ธฐ ๋๋ฌธ์ ๋ ์ค์ํ ๊ฒ์, ์ฐ๋ฆฌ๊ฐ ์ ๋ง ๋ฐํ ํ ์ ์์ต๋๋ค. ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์์ํ ์คํ๋์ด์ผ ํฉ๋๋ค.
@mattico ์ ํ์ด AVR์ฉ GCC์ ์ผ์นํ๋๋ก libc๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
์, ๋ฌผ๋ก main
์ด ์ฐ๋ฆฌ์๊ฒ ์ ํ ์ํฅ์ ๋ฏธ์น ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@shepmaster ๋ด์ฅ๋์ง ์์ ํ๋ซํผ์์๋ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ์๋ชป ์๊ณ ์์๊ณ IR์ ๊ฒ์ฌํ ๋ ์ธ์๋ ์๋ฌด๋ ๋์น์ฑ์ง ๋ชปํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ main์ argc
ํฌ๊ธฐ๋ ์ค์ํ์ง ์์ต๋๋ค. ํ๋ก์ธ์ค์ ํ์ค main() ์ง์
์ ์ ์ฌ์ฉํ๋ ์ผ๋ถ RTOS๊ฐ ์์ ์ ์์ต๋๊น? ์ด์จ๋ ์ฝ๊ฒ ๊ณ ์น ์ ์์ต๋๋ค.
์ง๊ธ ์๊ฐํด๋ณด๋ฉด ์์ ์ฌํญ์ ์ ์ถํ๋ ๋ฐ ์ ๋ ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ ธ์ ๊ฒ์ ๋๋ค. ๐
์ด ๋ณํฉ์ ๋ฐฉํดํ๋ libcore ๋ฌธ์ ๋ฟ์ ๋๊น? ๋ ธ๋ ฅ์ ์ด๋์ ์ง์คํด์ผ ํ๋์ง ์๊ธฐ ์ํด์์ ๋๋ค.
๋ด๊ฐ libcore์์ ๊ฒช์๋ ์ ์ผํ ๋ฌธ์ ๋ ๋ด๊ฐ ๋ฌด์์ ๋ชจ๋ฅด๊ณ 32๋นํธ ์ํํ ์ค๋ฅ๋ก ์ธํด ๋ฐ์ํ๋ ์ด์ํ ๋ง์ปค ์ค๋ฅ์ ๋๋ค(๋ด ์๊ฐ์ ๋ด์ฅ ๋๋ฝ). ๊ทธ๊ฒ๋ค์ด ๋ณํฉ์ ์ฐจ๋จํ๊ณ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
chocol4te: ์ด ๋ณํฉ์ ๋ฐฉํดํ๋ libcore ๋ฌธ์ ๋ฟ์ ๋๊น? ๋ ธ๋ ฅ์ ์ด๋์ ์ง์คํด์ผ ํ๋์ง ์๊ธฐ ์ํด์์ ๋๋ค.
์ - ์ฌ๊ธฐ์์ ํ์ํ ๋ชจ๋ ์์ ์ LLVM ๋ด์์ ์ํ
Restioson: ๋ด๊ฐ libcore์์ ๊ฒช์๋ ์ ์ผํ ๋ฌธ์ ๋ ๋ฌด์์ธ์ง ๋ชจ๋ฅด๊ณ 32๋นํธ ๋นํธ ์ํํ ์ค๋ฅ(๋ด ์๊ฐ์ ๋ด์ฅ ๋๋ฝ)๋ก ์ธํ ์ด์ํ ๋ง์ปค ์ค๋ฅ์ ๋๋ค.
AVR ๋ฐฑ์๋ ์ดํฌ๋ฅผ ๋ง๋๋ ๋ชจ๋ ์ฝ๋๊ฐ ์ฃผ์ ์ฒ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. :)
Restioson: ๊ทธ๊ฒ์ด ๋ณํฉ์ ์ฐจ๋จํ๊ณ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ง์ ์ ์๋์ง๋ง ๋ฐฑ์๋๊ฐ ๋ณํฉ๋๊ธฐ ์ ์ ์์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ณํฉํ๊ธฐ ์ ์ ์์ ํด์ผ ํ๋ ์ด์ ๊ฐ์ ์ ๋ง ์ฑ๊ฐ์ ๋ฒ๊ทธ๊ฐ ๋ช ๊ฐ์ง ์์ง๋ง ๋ฐ๋์ ์ ์ง๋๋ ๊ฒ์ ์๋๋๋ค.
@dylanmckay LLVM6์ด https://github.com/rust-lang/rust/pull/47828 ๋ณํฉ๋์์ต๋๋ค. ์ด๊ฒ์ ์ด RFC์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
@kellerkindt "AVR ๋ฐฑ์๋์ ํ์ฌ ๋ฌธ์ "์ ๋์ด๋ ๋ชจ๋ ๋ฌธ์ ๋ ์ฌ์ ํ ์ฌ์ค์ ๋๋ค. avr-rust์ ํ์ฌ HEAD๊ฐ ์ฌ๊ธฐ๋ฐ๋ ์ ์๊ณ ํฅ๋ฏธ๋ก์ด Rust ๊ด๋ จ ์ฝ๋๊ฐ ๋ณํฉ๋ ์ ์์ง๋ง ์ฌ์ ํ ์๋ํ๋ ์ฝ๋๋ฅผ ์ป์ง๋ ๋ชปํฉ๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ฌ์ ํ ์ฐฌ์ฑํฉ๋๋ค
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ libcore๊ฐ ์์ ์์ด ๋๋ ์ต์ํ ์์ ์์ด ์ปดํ์ผ๋๋ฉด ์ค์ ๋ก ํจ์น๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ถ๊ฐ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ํผํ๋ ๊ฒ์ด ์ข์ง๋ง.
๊ฐ๋ฐ ๋ฐ๋ ์ด ์ง๋ ์ง๊ธ, AVR์์ Rust์ ํ์ฌ ์ํ๊ฐ ๊ถ๊ธํฉ๋๋ค. ๋๋ ์ฐ๋ฆฌ ๋ง์์์ ์์ Arduino ํ๋ก์ ํธ ๊ทธ๋ฃน์ ์ด์ํ๊ณ ์์ผ๋ฉฐ ๋์ Rust๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ _์ฌ๋_ํ๊ณ ์ถ์ต๋๋ค.
์ข์ ์์์ ๋๋ค!
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ libcore๊ฐ ์์ ์์ด ๋๋ ์ต์ํ ์์ ์์ด ์ปดํ์ผ๋๋ฉด ์ค์ ๋ก ํจ์น๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ด ์ง๊ธ์ ๊ฒฝ์ฐ์ ๋๋ค!
ํ์ฌ avr-rust ํฌํฌ์๋ libcore
๋ํ ์์ ์ฌํญ์ด ์์ต๋๋ค.
์ฌ๊ณ Rus์์ AVR์ ์ง์ํ๋ ๋ฐ ํ์ํ ์์ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
LLVMInitializeAVR{Target,TargetInfo,AsmPrinter,AsmParser, ...}
๊ฐ ์ ์ธ๋๊ณ ํธ์ถ๋ฉ๋๋ค.avr-unknown-unknown
์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๊ฒ์ ๋ช
์์ ์ผ๋ก ์ง์ ๋์ง ์๋ ํ ๊ฐ์ฅ ๋ฎ์ ๊ณตํต ๋ถ๋ชจ๋ฅผ ๊ตฌ์ถํ๋ avr-gcc์ ๊ธฐ๋ณธ ๋์์ ๋ชจ๋ธ๋งํฉ๋๋ค. -mmcu=<avr mcu name>
์ธ์๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ํ๋ avr-gcc
์ ๋ฌ๋ฆฌ AVR์ AVR ๊ด๋ จ ๋ช
๋ น์ค ์ธ์๊ฐ ์ถ๊ฐ๋์ง ์์์ต๋๋ค. ์ฆ, ๋ชจ๋ ํ๋ก์ ํธ์ ๋ํด ์ฌ์ฉ์ ์ง์ ๋์ ์ฌ์ JSON ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋ง์ Rust ์๋ฒ ๋๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ์
๋๋ค.config.toml.example
ํ์ผ์ ์ถ๊ฐ๋ฉ๋๋ค. AVR์ ๊ธฐ๋ณธ์ ์ผ๋ก ์
์คํธ๋ฆผ Rust์ ํฌํจ๋์ด์ผ ํฉ๋๊น, ์๋๋ฉด ์ตํธ์ธํด์ผ ํฉ๋๊น?"avr-interrupt"
ํธ์ถ ๊ท์น์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๊ฒ์ extern "avr-interrupt" fn my_isr_handler() { .. }
ํฉ๋๋ค. ์ด๊ฒ์ ์์ ํ๋๊ธฐ ์ํด ์๋ง๋ RFC ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์ณ์ผ ํ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ฐ ํ๋ฆด ์ ์์ต๋๋ค.#[cfg(target_cpu = "...")]
๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ๊ตฌํ์ ์ฌ๊ธฐ ์์ ์ฐพ์ ์ ruduino
์์๋ ์ค๋ฆฌ์ฝ์์ ์ง์๋๋ ๋ชจ๋ IO, ๋ ์ง์คํฐ ๋ฐ ๋ชจ๋์ ๋
ธ์ถํ๋ ์ฅ์น๋ณ ๋ชจ๋์ ์กฐ๊ฑด๋ถ๋ก ํฌํจํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์
์คํธ๋ฆผ ์ ์ RFC ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.์ด์ ๋ฐฑ์๋๋ฅผ ๋น์คํ ์ํ๋ก ์น๊ฒฉํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ RFC๋ฅผ LLVM-dev์ ๋ณด๋ผ ๋๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ ์์ ์ ์คํธ๋ฆผ Rust์์ avr-rust๋ก์ ์ ์ฒด ๋ณ๊ฒฝ ์ฌํญ์ ๋ณผ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ์ฌ ์ ๋ณํ ์ง๋ ๋ ๋ฌ ๋์์ LLVM ํจ์น๊ฐ ๋ช ๊ฐ ์์ง๋ง, ๋ค๋ฅธ ๋ชจ๋ ๋์์ ์ฌ์ฉ๋๋ LLVM ๋ฒ์ ๊ณผ ์ ์คํฌ๋ฆฝํผ ๋ฒ์ ์ LLVM์ ๋ถ๋ฆฌํ๋ ค๋ ์
์คํธ๋ฆผ Rust์ ๋
ธ๋ ฅ์ผ๋ก ์ ๋ง ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. rust-lang/llvm
repo์์ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ด์ ์ ๊ธฐ์ ์ผ๋ก ์
์คํธ๋ฆผ์ ์
๋ฐ์ดํธ๋ฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ <4๊ฐ์ ์ฒด๋ฆฌ ํฝ LLVM ํจ์น๋ ํ์ฌ ์ ์คํธ๋ฆผ LLVM์์ ๊ฒํ ์ค์ด๋ฏ๋ก ๊ฒํ ์๊ฐ ์ถฉ๋ถํ ์๊ฐ์ ์ฐพ์ผ๋ฉด ํด๋น ํจ์น๋ ์๋์ผ๋ก ์ ์คํธ๋ฆผ Rust๋ก ์ด๋ํฉ๋๋ค. Upstream Rust์๋ ๋์๋ณ Rust๋ณ ํจ์น๋ ์์ผ๋ฏ๋ก ์ฒด๋ฆฌ ์ ํ LLVM ํจ์น๋ ์๋ง๋ avr-rust upstream ๋ณํฉ์ ์ํ ์ฐจ๋จ๊ธฐ๊ฐ ์๋ ๊ฒ์ ๋๋ค.
AVR์์ Rust์ ์ํ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋ํ ์๊ณ ์ถ์ด! ์ง๊ธ์ STM32 ๋ธ๋ฃจ ์์ฝ์ ํดํนํ๋ ๊ฒ์ผ๋ก ์ ํํ์ง๋ง ๋ น์์ avr์ ๋ํ ์ง์์ด ์ค๋น๋๋ฉด ํ์คํ arduino๋ก ๋์๊ฐ๊ณ ์ถ์ต๋๋ค.
@slowtec ์ ๋ํ AVR ํ๋ก์ ํธ์ Rust๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ํ ๊ฒ์ด๋ฉฐ ๋ฌผ๋ก ๋ง์ ํ๋ก๋์ ์ฝ๋๋ฅผ ๊ณต๊ฐํ ๊ฒ์ ๋๋ค. :)
๋ฒํ, ์ง์์ด ๊ณต์ํ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค. ํ๋ก์ ํธ์ ํฌํฌ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค.
์ ๋ฐ์ดํธ: ํ์ฌ ํฌํฌ๋ฅผ ์ต์ ๋ฒ์ ์ Rust(avr-rust/rust#137)๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ฐ๊ฒฌํ ๋ ๊ฐ์ง ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค.
LLVM ์ค๋ฅ: ๋ ์ง์คํฐ ํ ๋น ์ค ๋ ์ง์คํฐ ๋ถ์กฑ
์ด๊ฒ์ llvm/ llvm-project@45eb4c7e55341c0b83a21ddecc092e273795eda์ LLVM ํธ๋ ํฌ์์ ์์ ๋์์ต๋๋ค
LLVM ์ค๋ฅ: ์ ํํ ์ ์์: t2: i16 = addrspacecast[1 -> 0] undef:i16
t1: i16 = undef
๊ธฐ๋ฅ: _ZN4core3ptr87_$LT$impl$u20$core..fmt..Debug$u20$for$u20$unsafe$u20$fn$LP$A$RP$$u20$.$GT$$u20$Ret$GT $3fmt17h0fdf8ca7140def9b
์ด๊ฒ์ ์์ ํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค. ์ด๋ ์ฃผ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์คํ๊ธฐ ์ํ ๋ ๊ฐ์ ๊ฐ๋ณ ํฌ์ธํฐ ์ฃผ์ ๊ณต๊ฐ์ด ์๋ Harvard ์ํคํ ์ฒ์์ Rust๊ฐ ํจ์ ํฌ์ธํฐ๋ฅผ ์๋ชป ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค.
์ค๋ช ์ @ecstatic-morse๊ฐ ๊ฐ์ฅ ์ ํฉ๋๋ค.
๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ *const T์ ํญ์ addrspace(0)์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ช ์์ ์บ์คํธ(ptr as *const T)๋ ์ฌ๊ธฐ์์ ์ ๋ ฅ์ ์ฃผ์ ๊ณต๊ฐ์ ๋ณด์กดํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฒ๊ทธ๋ ํจ์ ๋ฐ ํจ์ ํฌ์ธํฐ์ ๋ํ std::fmt::Debug
๊ตฌํ์ ์ํด ๋
ธ์ถ๋ฉ๋๋ค. Rust๋ ์์์ ์ผ๋ก ๋นํธ์บ์คํธ(iN -> iM ๋นํธ) ๋๋ ํ์ํ ๊ฒฝ์ฐ ์ฃผ์ ๊ณต๊ฐ ์บ์คํธ๋ฅผ ์ฝ์
ํ๋ LLVM ๋ฃจํด์ ์ฌ์ฉํ์ฌ addrspace(0)* i16
๋์ ํฌ์ธํฐ ์ ํ์ผ๋ก ํฌ์ธํฐ ์ญ์ฐธ์กฐ๋ฅผ ๋ด๋ณด๋
๋๋ค. ํจ์ ํฌ์ธํฐ์ ๊ฒฝ์ฐ, Rust๋ addrspace(1)* i16
ํฌ์ธํฐ๋ฅผ ์ฝ๋ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋์ LLVM์ด ( addrspacecast
) PROGMEM ํฌ์ธํฐ๋ฅผ RAM ํฌ์ธํฐ์ ๋งคํํ ํ์๊ฐ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํ ์์
์
๋๋ค. ์ฃผ์ ๊ณต๊ฐ์ ๊ฒน์น์ง ์์ต๋๋ค.
์ด ๋ฒ๊ทธ๊ฐ ์ฃผ์ ์ฐจ๋จ๊ธฐ์ ๋๋ค.
๋๋ ์ ์คํธ๋ฆผ Rust๊ฐ LLVM ๋ง์คํฐ(AFAICT, 8.0 ๋ฆด๋ฆฌ์ค์ ์์)์์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํฌ๋งํ๋ฏ๋ก ๋ง์ ์ฒด๋ฆฌํฝ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๋๋ ์ต๊ทผ์ AVR ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๊ณตํ https://github.com/dylanmckay/avr-compiler-integration-tests/ ํ ์คํธ๋ฅผ ์ป์์ต๋๋ค. ์ด๋ ์ค์ ๋ก LLVM์ด ๋ด๋ฟ๋ AVR ์ด์ ๋ธ๋ฆฌ๋ฅผ ์คํํ๋ ๋ค๋ฅธ ํ ์คํธ ์ ํ๊ตฐ์ด ์๊ธฐ ๋๋ฌธ์ ํ๋ฅญํฉ๋๋ค. ๋ชจ๋ AVR-Rust ์ปค๋ฐ(GitLab ์ ์ฅ์ ๋ฏธ๋ฌ๋ฅผ ํตํด)์ ๋ํ ํ ์คํธ๋ฅผ ์คํํ๋๋ก GitLab ๋ฌ๋๋ฅผ ์ค์ ํ์ง๋ง GitLab์ pull ์์ฒญ์ ๋ํ CI ๋น๋๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ณ๋ก ์ ์ฉํ์ง ์์ต๋๋ค. ๋ถ๊ธฐ๋ ์ ์ฅ์.
@dylanmckay ์ ๋ฐ์ดํธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ๋น์ ์ด ์ด ์ผ์ ์์ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฐ๋ฆฌ๋ ์ด์ Rust ๊ธฐ๋ฐ rust-lang/ rust@fb7cca33f ์ ํฌํฌ๋ฅผ ์ ๊ทธ๋ ์ด๋
์ด ๋ฌธ์ ๊ฐ ์ค๋จ๋์์ต๋๊น?
์ด์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ์ฃผ์ ๊ณต๊ฐ ๋ฌธ์ ๋ก ์ธํด PR์ด ์ฌ์ ํ ์ง์ฐ๋๊ณ ์์ต๋๊น?
@dylanmckay๋ , ๋ฒ๊ทธ๋ก ์ธํด ์ฃ์กํฉ๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ฌ๊ธฐ ์ ๋ก๋ถํฐ ๋ช ๊ฐ์ง ์๊ฒฌ์ด ์์ต๋๋ค.
์ฒด๋ฆฌ ๋ฐ๊ธฐ ์์
libcore
์์
์ ํ์ํ ๊ฑฐ์ ๋ชจ๋ ์์ ์ฌํญ์ด LLVM ๋ง์คํฐ๋ก ์
์คํธ๋ฆผ๋์์ผ๋ฉฐ ํ์ฌ rust-lang/llvm ํฌํฌ์ ์์ต๋๋ค. ์ด์ ์ ๋ AVR ํฌํฌ๋ฅผ 1.39.0(avr-rust/rust#155)์ผ๋ก ์
๋ฐ์ดํธํ๊ธฐ ์ํด PR์ ์์ํ์ต๋๋ค. ์ ๋ ์์ง ๊ฑฐ๊ธฐ์ ์๋ ํ๋์ ์์ ์ฌํญ๋ง ์ ํํ๋ฉด ๋์์ต๋๋ค .
libcore๋ ์์ ์์ด ์ปดํ์ผํ ์ ์์ต๋๋ค.
AVR์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ ์ด์ ์ฌ์ฉ์ ์ง์ libcore ํฌํฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค. ํ์ฌ avr-rust ํฌํฌ์์ libcore
์ ๋ํ ์์ ์ฌํญ์ ํ๋๋ง ์์ต๋๋ค. - avr-rust/ rust@44240ac59c5949b8a9fd191f5cd666d0206fbe85 - ์ฌ๋ฐ๋ฅธ IR ์์ฑ์ ์ํด ํฌ์ธํฐ ์บ์คํธ๋ฅผ ๋ค์ ์์ฑํ์ญ์์ค.
์ฐ๋ฆฌ๋ AVR-Rust ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ปดํ์ผํ๊ธฐ ์ํด xargo ์ ์์กดํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ std-aware Cargo ์ด๋์ ํฐ๋ธ๊ฐ
ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ 'ํธ์ถ' ์ก์ธ์ค RAM ์ด์ธ์ ํจ์ ํฌ์ธํฐ์ ๋ํ ๋ชจ๋ ์์ (avr-rust#68)
์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
32๋นํธ ์ํํธ๋ ์กด์ฌํ์ง ์๋ ์ปดํ์ผ๋ฌ-rt ๋ฃจํด์ ๋ํ ํธ์ถ์ ์์ฑํฉ๋๋ค(avr-llvm/llvm#163).
์ด๊ฒ์ ์ฌ์ ํ โโ๊ณ ํต์ค๋ฌ์ด ๋ฌธ์ ์ ๋๋ค. ์ต์ ์ ์์ ์ LLVM AVR ๋ฐฑ์๋์ ์ฌ์ฉ์ ์ ์ ๋ฎ์ถ๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ด๋ฌํ ์์ ์ด์ ๋ธ๋ฆฌ๋ก์ ์ ํ์ ๋ฎ์ถ๊ณ ์ปดํ์ผ๋ฌ-rt ๋๋ libgcc์ ๋ํ ABI ์ข ์์ฑ์ ์ ๊ฑฐํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์ฑ๋ ์ฝ๋ ํฌ๊ธฐ๊ฐ ์ผ๋ง๋ ์ปค์ง ์ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ์ข์ ์๊ฐ์ด ์๋ ์๋ ์์ต๋๋ค.
์ด ๋๊ธ์ ์ค๋ ๋์ ์ฌ๋ ธ์ต๋๋ค
"avr-interrupt" ํธ์ถ ๊ท์น์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๊ฒ์ extern "avr-interrupt" fn my_isr_handler() { .. }๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๊ฒ์ ์์ ํ๋๊ธฐ ์ํด ์๋ง๋ RFC ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์ณ์ผ ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ฐ ํ๋ฆด ์ ์์ต๋๋ค.
RFC ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ถ์์ ํ ํธ์ถ ๊ท์น์ ์ถ๊ฐํ ์ ์์ต๋๊น?
ํ์ฌ #![feature(abi_avr_interrupt)]
๊ธฐ๋ฅ ๊ฒ์ดํธ ์๋์ "avr-interrupt"
๋ฐ "avr-non-blocking-interrupt"
๊ฐ ์์ต๋๋ค. ํฅํ ์์ ํ RFC๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ถ์์ ํ ํธ์ถ ๊ท์น์ผ๋ก ์
์คํธ๋ฆผ๋ ์ ์์ต๋๊น?
LLVM ๋ฐฑ์๋๋ฅผ ์ ์คํธ๋ฆผํ๋ ค๋ฉด ํด๋น ๋ฐฑ์๋์ ๋ํ ํ ์คํธ๋ฅผ ์คํํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ์ ์ฉ ๋น๋๋ด์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด Rust์ ๊ฒฝ์ฐ์ ๋๊น? ํ ์คํธ ์ค์ํธ๊ฐ ํธ์ํ ๋๋ง๋ค AVR ๋ชจ๋์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? WASM๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ฐฑ์๋๋ ๋ฌด์์ ํ์ต๋๊น?
"avr-rust fork upstream ๋ณํฉ"์ ๋จ์ํ ๋ ๊ฐ์ ํฌํฌ๋ฅผ ํ๋๋ก ๋ณํฉํ์ง๋ง ์ฌ์ ํ ์์ค์์ ๋น๋ํด์ผ ํจ์ ์๋ฏธํฉ๋๊น? ๋ฐฑ์๋๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง ์ผ๊ฐ์๋ง ๊ฐ๋ฅํฉ๋๊น? ๋ค๋ฅธ ๋ฐฑ์๋๋ ๋ฌด์์ ํ์ต๋๊น?
๊ทธ ์ธ์๋ avr-rust ํน์ ํจ์น๊ฐ ๋งค์ฐ ์์ผ๋ฉฐ ์์ฆ์ ํดํน์ด ์์ต๋๋ค.
์ ์ฒด ํจ์น ์ธํธ๋ https://github.com/rust-lang/rust/compare/master...avr-rust :avr-support์์ ๋ณผ ์ ์์ต๋๋ค.
๋ด WIP 1.39.0 ๋ฆฌ๋ฒ ์ด์ค ํจ์น ์ธํธ(๋๋ถ๋ถ ๋์ผ)๋ https://github.com/rust-lang/rust/compare/master...avr-rust :avr-support-1.39.0-4560ea788c์์ ์ฐพ์ ์ ์์ต๋๋ค. . ์ด๊ฒ์ ์์ผ๋ก ๋ฉฐ์น ๋ด์ avr-rust/master์ ๋ณํฉ๋์ด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ์ฐจ๋จํ๋ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์๊ฐ๋์ง ์์ต๋๋ค. ์๋ง๋ ํจ์น๋ฅผ ์ ์ถํ๊ณ ์ด๋ป๊ฒ ์งํ๋๋์ง ๋ณผ ์๊ฐ์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/rust-lang/rust/issues/44036
์์์ ์ด ๋ฌธ์ ๋ฅผ ์ธ๊ธํ์ง๋ง AVR ๋ฐฑ์๋์ ์ ์คํธ๋ฆผ์ ์ฐจ๋จํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ AVR ์์ด๋ ์๋ํ๊ณ ์ ์ฉํ Rustc ๋ฒ์ ์ ์ถ์ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ค์ ํ ์ ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ํดํน์ด ์๋ค๊ณ ํ์ ํฉ๋๋ค. ๋ฐฑ์๋๊ฐ ๊ฐ์์ผ๋ก ๋ณํฉ๋ ํ์ API๋ฅผ ์ฟผ๋ฆฌํ๋ ๊ณต์ ๋์ CPU๊ฐ ๊ณต์ Rust์ ๋์ฐฉํ๊ธฐ ์ ์ AVR ์์์์ ์ฅ์น ๊ฐ์ง.
๊ทธ๋ ์ฐ๋ค! @dylanmckay ์ ๋ฐ์ดํธ, ํฅ๋ฏธ๋ก์ด ์งํ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ํ์ด @dylanmckay! ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ฃผ์ ์์ ์กฐ๊ธ ๋ฒ์ด๋์ง๋ง: avr์ฉ rustc๊ฐ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก FFI๋ฅผ ์ํํ ์ ์์ต๋๊น?
์ด๋ฏธ avr์ ์ฌ์ฉํ ์ ์์ง๋ง C/C++๋ก ์์ฑ๋ ์ฑ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง์ด ์์ต๋๋ค.
๊ทธ๊ฒ๋ค์ ์ํ ์ฝ๊ฐ์ ๋ฌ์คํธ ์คํ์ผ ๋ํผ๋ฅผ ๋ง๋ค๊ณ ์ฐ๋ฆฌ์ ๋ฌ์คํธ avr ํ๋ก์ ํธ์์ ์ฌ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค.
Rust๋ ์ด๋ฏธ ์ผ๋ฐ์ ์ผ๋ก C๋ก FFI๋ฅผ ํ ์ ์์ต๋๋ค.
์, ์ ๋ง ํ๋ฅญํฉ๋๋ค! ๊ทธ๋ฌ๋ ๋ฌธ์ ๋ ์ด๊ฒ์ด rust-avr๋ก ๋ณํ๋ฉ๋๊น?
AVR์ฉ LLVM์ C ABI๊ฐ gcc์ ABI์ ์ผ์นํ๋ ํ ์๋ํด์ผ ํฉ๋๋ค.
RFC ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ถ์์ ํ ํธ์ถ ๊ท์น์ ์ถ๊ฐํ ์ ์์ต๋๊น?
๋ด ํฌํ๋ AVR ํธ์ถ ๊ท์น์ ์ง์ํ๊ธฐ ์ํด ๋ณํ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ๋ฅ ๊ทธ๋ค์๊ฒ ์ด๋ฆ์ ๋ถ์ฌํ๊ณ LLVM ๋ฒํธ์ ๋งคํ๋๊ณ , yes์ ๋๋ค. ๋ถ์์ ํ ๊ท์น์ ๋ํ ์ง์์ด ์ด๋ฏธ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ์ ์ธ ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ์ง ์์ต๋๋ค.
LLVM ๋ฐฑ์๋๋ฅผ ์ ์คํธ๋ฆผํ๋ ค๋ฉด ํด๋น ๋ฐฑ์๋์ ๋ํ ํ ์คํธ๋ฅผ ์คํํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ์ ์ฉ ๋น๋๋ด์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด Rust์ ๊ฒฝ์ฐ์ ๋๊น? ํ ์คํธ ์ค์ํธ๊ฐ ํธ์ํ ๋๋ง๋ค AVR ๋ชจ๋์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? WASM๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ฐฑ์๋๋ ๋ฌด์์ ํ์ต๋๊น?
Rust์ ํฐ์ด ์์คํ ์ ์ฝ๊ฐ ๋์จํ๊ฒ ์ ์๋์ด ์์ง๋ง AVR ์ ์ฉ ์ฝ๋ ๋ฅผ ๋ณํฉ Tier 3 ๊ฐ ๋ฉ๋๋ค. ์ฆ, ์๋์ผ๋ก ๋น๋๋๊ฑฐ๋ ํ ์คํธ ๋์ง ์๊ณ ์ฝ๋์ ๋งค๋ฌ๋ ค ์์ ๋ฟ์ ๋๋ค. ์ต์ํ ์ด๋ ํด๋น ํ์ผ์ด ์ปดํ์ผ๋ฌ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋ผ ์ต์ ์ํ๋ก ์ ์ง๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
"avr-rust fork upstream ๋ณํฉ"์ ๋จ์ํ ๋ ๊ฐ์ ํฌํฌ๋ฅผ ํ๋๋ก ๋ณํฉํ์ง๋ง ์ฌ์ ํ ์์ค์์ ๋น๋ํด์ผ ํจ์ ์๋ฏธํฉ๋๊น?
๋ด๊ฐ ์๋ ํ, ํ๋์ ์ปค๋ฐ ์ PR๋ก ์ ์ถํ๋
์๋ง๋ ํจ์น๋ฅผ ์ ์ถํ ์๊ฐ์ ๋๋ค
๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํด.
@edvorg ์ฃผ์ IMO์ ๋งค์ฐ
์ฃผ์ ์์ ์กฐ๊ธ ๋ฒ์ด๋์ง๋ง: avr์ฉ rustc๊ฐ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก FFI๋ฅผ ์ํํ ์ ์์ต๋๊น?
์ด๋ฏธ avr์ ์ฌ์ฉํ ์ ์์ง๋ง C/C++๋ก ์์ฑ๋ ์ฑ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง์ด ์์ต๋๋ค.
๋ค.. ๋๋ถ๋ถ. AVR ๋ฐฑ์๋์ ์ํด ๊ตฌํ๋ AVR ํธ์ถ ๊ท์น์ AVR-GCC( ์ฌ๊ธฐ์ ๋ฌธ์ํ๋จ)์ ์ผ์นํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ง๋ง ๊ฒํ ํด์ผ ํ๋ LLVM ํจ์น D68524 ๋ฅผ ํตํด ์์ ํด์ผ ํฉ๋๋ค.
Rust ํธ์ถ ์ฌ์ดํธ๋ ํญ์ Rust ๋๋ avr-clang ์ปดํ์ผ๋ ํจ์(avr-clang C๊ฐ Rust ํ๋ก ํธ์๋์ ๋์ผํ extern "C"
ํธ์ถ ๊ท์น ๊ตฌํ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์) ๋ฐ AVR-GCC์์ ์ํธ ์์
์ _should_ ์๋ํ๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ํธ์ถํ ์ ์์ต๋๋ค. ํนํ ๋จ์ํ ํจ์ ์๋ช
์ ๊ฒฝ์ฐ์๋ ์ง์ํ ์ ์์ต๋๋ค(์์ธํ ๋ด์ฉ์ D68524 ์ค๋ช
์ฐธ์กฐ).
์ด์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๊ทธ๋ฅ ๊ถ๊ธํฉ๋๋ค.
LLVM AVR ๋ฐฑ์๋๋ฅผ ๊ณต์ ๋ฐฑ์๋๋ก ๋ง๋ค๊ธฐ ์ํด ์ ์ถ๋ ์์ฒญ - https://reviews.llvm.org/D75099
@dylanmckay ์๋ฝ๋๋ฉด ์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ ๋ฐ ๋จ์ ๋ถ๋ถ์ ๋ฌด์์ ๋๊น?
@dylanmckay ์๋ฝ๋๋ฉด ์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ ๋ฐ ๋จ์ ๋ถ๋ถ์ ๋ฌด์์ ๋๊น?
๊ธฐ์ ์ ์ผ๋ก Rust๋ ๊ณต์ ๋ฐฑ์๋์ ์คํ์ ๋ฐฑ์๋ ๋ชจ๋์์ ์๋ํฉ๋๋ค. ๋ฐฑ์๋์ ๋๋ถ๋ถ์ ์ ์คํธ๋ฆผํ๊ธฐ ์ํด #69478์ ์ฌ๋ ธ์ต๋๋ค.
AVR์ Tier 3 ๋์์ผ๋ก ๋ณํฉํ๋ ๊ฒ์ด AVR์ด ๊ณต์ LLVM ๋ฐฑ์๋๊ฐ ๋๋ ๊ฒ์ ์ ์ ๋ก ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํ์ํฉ๋๋ค.
๊ทธ๊ฒ์ ๋ํด ์๊ฐํด๋ณด๋ฉด, LLVM์ ๊ณต์ ๋ ์คํ์ ๊ตฌ๋ณ์ Rust์ ๊ณ์ธต ์์คํ ์ ๋งคํ๋ ์ ์์ผ๋ฉฐ, ๊ทธ ์ค Rust์๋ 3๊ฐ์ ๊ณ์ธต์ด ์๊ณ LLVM์๋ 2๊ฐ์ ๊ณ์ธต์ด ์์ต๋๋ค. LLVM ๊ณต์ ๋ฐฑ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ์คํธ ์ ํ๊ตฐ ๋ฐ ๊ณต์ ๋ฆด๋ฆฌ์ค์ ํฌํจ๋ Tier 1 ๋ฐ 2์ ํผํฉ์ ํด๋นํฉ๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ํ LLVM ์คํ์ ๋ฐฑ์๋๋ ์๋ฏธ์ Rust Tier 3 ๋ฐฑ์๋์ ๋์ผํฉ๋๋ค. ์์ค ํธ๋ฆฌ์ ํฌํจ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆด๋ฆฌ์ค์ ํฌํจ๋์ง ์์, ๊ธฐ๋ณธ CI ํ ์คํธ์ ํฌํจ๋์ง ์์ ๋ฑ
๊ทธ๋ฐ ๋ค์ ์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ ๋ฐ ๋จ์ ์ ์ผํ ๋ถ๋ถ์ #69478์ ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋์ค๋ ๋ถ๋ถ์ผ ๊ฒ์ ๋๋ค.
tl;dr AVR ๋ฐฑ์๋๊ฐ ๋ณํฉ๋๋ฉด rust-lang/rust#69478์ Tier 3 ์ ์คํธ๋ฆผ ๋์์ด ๋์ด ํฌํฌ๊ฐ ์ข ๋ฃ๋ฉ๋๋ค.
avr-rust/rust ํฌํฌ์ #69478์ ์ ์ผํ ์ฐจ์ด์ ์ AVR ํฌํฌ์๋ ์์ง๋ง ์
์คํธ๋ฆผ์๋ ์๋ target_cpu
cfg ํ๋๊ทธ์
๋๋ค. ์ด๊ธฐ PR์์ ์๋ตํ์ต๋๋ค.
๋๋จธ์ง ์กฐ๊ฐ์ ๋ฌด์์ ๋๊น
๋ค์ํ ์ ํ์ ์ฝ๋์ ๋ํ ์๋ชป๋ ์ปดํ์ผ์ด ์ฌ์ ํ ๋ง๋ค๊ณ ํ์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๋ ๋ง์ ์ฌ๋๋ค์ด ์๋ํ๊ณ ๋ฒ๊ทธ๋ฅผ ์ต์ํํ๊ณ ์์ ํด์ผ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ตฌ์ ํฌํฌ๋ฅผ ์ปดํ์ผํ๋ ๋์ ๋งค์ผ ๋ฐค ์ผ๋ฐ Rust๋ฅผ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ก ์ฌ๋ผ๊ฐ๋ฉด ์ฌ๋๋ค์ด ์๋ํ๋๋ก ๋ง๋๊ฐ ๋ฎ์์ง ๊ฒ์ ๋๋ค.
Tier 3 ๋์์ผ๋ก ์
์คํธ๋ฆผ๋๋ฉด AVR ๊ฐ๋ฐ์ด ํ๋ฌผ์ -Z build-std
๊ธฐ๋ฅ๊ณผ ํจ๊ป ์๋ํฉ๋๊น, ์๋๋ฉด xargo๊ฐ ํ์ํฉ๋๊น? Rust์ ํจ๊ป ์ ๊ณต๋๋ LLD๋ AVR์ ์ง์ํฉ๋๊น, ์๋๋ฉด gnu ๋ง์ปค๊ฐ ํ์ํฉ๋๊น?
AVR ๊ฐ๋ฐ์ ํ๋ฌผ์
-Z build-std
๊ธฐ๋ฅ๊ณผ ํจ๊ป ์๋ํฉ๋๊น, ์๋๋ฉด xargo๊ฐ ํ์ํฉ๋๊น? Rust์ ํจ๊ป ์ ๊ณต๋๋ LLD๋ AVR์ ์ง์ํฉ๋๊น, ์๋๋ฉด gnu ๋ง์ปค๊ฐ ํ์ํฉ๋๊น?
๊ทธ๊ฒ์ด ์๋ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ๋งํ ์ ๋ ์์ง๋ง ๋ด๊ฐ ํ ๋ชจ๋ ๊ฒ์ Xargo์ GNU ๋ง์ปค๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
GNU ๋ง์ปค๋ Windows์์ ์ค์ ํ๊ธฐ ์ด๋ ต๊ณ xargo๋ฅผ ์ค์นํ๋ ค๋ฉด ๋๊ตฌ๊ฐ ํ๋ ๋ ํ์ํฉ๋๋ค. ๊ทธ๋์ ์ ๊ฐ ๋ฌป์ต๋๋ค.
Rust์ ํจ๊ป ์ ๊ณต๋๋ LLD๋ AVR์ ์ง์ํฉ๋๊น, ์๋๋ฉด gnu ๋ง์ปค๊ฐ ํ์ํฉ๋๊น?
LLD๋ AVR ์ฐ๊ฒฐ์ ๋ํ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ์ง์๋ง ์ ๊ณตํ๋ฉฐ ์์ง ์ค์ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ avr-ld
๊ฐ ํ์ํฉ๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ๋ฌป๋ ์ด์ ์ ๋๋ค.
์ค์ํ์ง ๋ง์ญ์์ค. ๋ํ ๊ทธ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ต์ข ๋ชฉํ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ์ ์ธ๊ณ ์ํ๊ฐ ์๋ ์๋ ์์ต๋๋ค. ์์งํ, ๋๋ ์ค๋ฒ ํค๋๋ฅผ ๋ฎ์ถ๊ณ ๋ฎ์ถ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค. ๋ณํฉํ๋ ๊ฒ์ ์ด๋ฅผ ์ํ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ผ ๋ฟ์ ๋๋ค.
์ด์ AVR ๋ฐฑ์๋๊ฐ ๊ณต์ LLVM ๋์์ผ๋ก ํ์ฑํ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก AVR์ ํฌํจํ๋ ์ฒซ ๋ฒ์งธ LLVM ๋ฆด๋ฆฌ์ค๋ ์ฝ 6๊ฐ์ ํ์ LLVM 11์ด ๋ ๊ฒ์ ๋๋ค.
๋ฉ์ง! ๋ชจ๋ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์์ฃผ ๋ฉ์ ธ!
์ด ๋๋ผ์ด ์ฑ๊ณผ์ @dylanmckay ๋ฅผ ์ถํํฉ๋๋ค. ์ปค๋ฎค๋ํฐ๋ ์ด์ ๋ํ ๊ทํ์ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋๋ ์ ์ ๋์ ์ด ๋ฌธ์ ๋ฅผ ์ถ์ ํด ์์ผ๋ฉฐ ์ด๊ฒ์ด ๋๋ถ๋ถ ์ฃผ์ ๋ฅผ ๋ฒ์ด๋๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ด๊ฒ์ด ์์ค๊ฐ ์๋ ํ๊ท ์ฌ์ฉ์์๊ฒ ๋ฌด์์ ์๋ฏธํ๋์ง ๊ด์ฌ์ด ์์ต๋๋ค... ์ด๊ฒ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ Rust๋ก Arduino Uno๋ฅผ ์คํํ๊ณ ์์ต๋๊น? ๋๋ Rust๊ฐ ์ถฉ๋ถํ ๋ณดํธ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๊ฐ์ฅ ๊ด์ฌ์ด ์์ต๋๋ค.
@Jimmio92 ์ ๊ฐ ์๊ธฐ๋ก๋ ๊ทธ๋ ์ต๋๋ค. "์, ๋ณต์กํฉ๋๋ค"์ ๊ฐ์ด. ๋๋ ํน๋ณํ ๋ณต์กํ์ง ์๋๋ผ๋ ์ต์ํ ๊ธธ๊ณ ์ง๋ฃจํฉ๋๋ค. ์์ค์์ Rust ์ปดํ์ผ๋ฌ์ ์ฌ์ฉ์ ์ ์ ํฌํฌ๋ฅผ ๋น๋ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ค์์ LLVM์ ๋น๋ํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์๋๋ฉด ๋ณดํต ๋ช ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค
๊ทธ๋ฌ๋ LLVM์ ๋ํ ์ ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ ์์คํ ์ ๋ฌด์ธ๊ฐ๊ฐ ๋ง์์ ๋ค์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ฑ๊ณตํ๊ฑฐ๋ ํฌ๊ธฐํ ๋๊น์ง ํ์ฐ์ ์ผ๋ก ์ค์น ๊ฒฝ๋ก์ ์ฌ์ฉ์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ฌ์งํ๊ฒ ๋ฉ๋๋ค.
์์ (ํ๋ฅญํ) ๋ด์ค๊ฐ ์๋ฏธํ๋ ๋ฐ๋ LLVM์ ๊ฐ๋ฐ์๊ฐ ์ด์ ๊ณต์์ ์ผ๋ก AVR์ ๋ชฉํ๋ก/์ง์ํ๊ณ ์์ผ๋ฉฐ(?) LLVM์ ๋ค์ ๋ฆด๋ฆฌ์ค์๋ AVR ์ง์์ด ํฌํจ๋ ๊ฒ์ ๋๋ค. ์ด์ Rust๊ฐ ๋จ๊ธฐ๊ฐ์ AVR๋ ์ง์ํ๊ฑฐ๋ ์ง์ํ ๊ฒ์ด๋ผ๊ณ ๋งํ ์๋ ์์ต๋๋ค . ๋ฌธ์ ์ ์์ ๋๊ธ์ ๋ณด๋ฉด AVR ์ง์์ด ๊ธฐ๋ณธ Rust ๋๊ตฌ ์ฒด์ธ์์ "๊ทธ๋ฅ ์๋"ํ ๋๊น์ง ๋ง์ ์์ ์ด ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
LLVM ๋ง์คํฐ์์ Rust LLVM ํฌํฌ๋ก AVR ์์ ์ฌํญ์ ์ ๋ณํ์ฌ ๋ณผ ์ ์๋ ํ๋ก์ธ์ค/์๊ฐ ์์ต๋๊น?
๋ํ Rust๋ ์ฌ์ ํ LLVM ๋ง์คํฐ๋ฅผ ์ถ์ ํฉ๋๊น? ์ธ๊ด์์ผ๋ก๋ ํ์ฌ ๋ฆด๋ฆฌ์ค์ ์ผ๋ถ ์ฒด๋ฆฌ ์ ํ ์์ ์ฌํญ์ ์ถ์ ํฉ๋๋ค. LLVM ๋ฒ์ ์ ๋ง์คํฐ๋ก ์ ๋ฐ์ดํธํ๋ PR์ด ๊ณ์ ํ์ฉ๋ฉ๋๊น?
@dylanmckay
๋ํ Rust๋ ์ฌ์ ํ LLVM ๋ง์คํฐ๋ฅผ ์ถ์ ํฉ๋๊น?
๋น์ ์ด ๋์น ์ฑ์ ๋ ๊ทธ๊ฒ์ ์ง๊ธ ๋ฆด๋ฆฌ์ค๋ฅผ ์ถ์ ํฉ๋๋ค.
LLVM ๋ฒ์ ์ ๋ง์คํฐ๋ก ์ ๋ฐ์ดํธํ๋ PR์ด ๊ณ์ ํ์ฉ๋ฉ๋๊น?
๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์์ง๋ง cc @nikic
@dylanmckay 10.0 ๋ฆด๋ฆฌ์ค์ ๋น๊ตํ์ฌ Rust์ LLVM ํฌํฌ์ ๋ง์ ์์ ์ฌํญ์ด ์์ต๋๋ค. https://github.com/rust-lang/llvm-project/commits/rustc/10.0-2020-05-05
LLVM ๋ง์คํฐ์์ Rust LLVM ํฌํฌ๋ก AVR ์์ ์ฌํญ์ ์ ๋ณํ์ฌ ๋ณผ ์ ์๋ ํ๋ก์ธ์ค/์๊ฐ ์์ต๋๊น?
์ฌ๊ธฐ์ ์ง์นจ์ด ์์ต๋๋ค: https://rustc-dev-guide.rust-lang.org/backend/updating-llvm.html#bugfix -updates
๋ํ Rust๋ ์ฌ์ ํ LLVM ๋ง์คํฐ๋ฅผ ์ถ์ ํฉ๋๊น? ์ธ๊ด์์ผ๋ก๋ ํ์ฌ ๋ฆด๋ฆฌ์ค์ ์ผ๋ถ ์ฒด๋ฆฌ ์ ํ ์์ ์ฌํญ์ ์ถ์ ํฉ๋๋ค. LLVM ๋ฒ์ ์ ๋ง์คํฐ๋ก ์ ๋ฐ์ดํธํ๋ PR์ด ๊ณ์ ํ์ฉ๋ฉ๋๊น?
Rust๋ ํ์ฌ LLVM ๋ฆด๋ฆฌ์ค๋ฅผ ์ถ์ ํ๊ณ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋๋ค์ ํด๋น clang ๋ฒ์ ์ผ๋ก ์ธ์ด ๊ฐ LTO๋ฅผ ์ฝ๊ฒ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์ ๊ธฐ๋ณธ ๋๋ต์ ์๋ง๋ "์๋์ค"์ ๋๋ค.
์ฆ, LLVM 10 ์ปดํ์ผ ํ์ ํ๊ท๋ฅผ ์ํํ๊ธฐ ์ํด LLVM ๋ง์คํฐ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋ํ ๋ ผ์๊ฐ ์์์ต๋๋ค. ํ์ฌ ํ๊ฐ ๋ชฉ์ ์ผ๋ก ์์ ์ค์ ๋๋ค. ๋๋ ์ด๊ฒ์ด ์ผ์ด๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ LLVM 10 ํฌํฌ์ ๋ํด ์ฒด๋ฆฌ ํฝ์ ์ ์ถํ๋ ๊ฒ์ด ๋ ์์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(๋ง์ ๊ฒ์ด ์์ต๋๊น?)
ํฌํฌ๊ฐ ๋ณํฉ๋์์ต๋๋ค! ์ค๋ ์คํ์ ์ ์ ํ ์ ๋ฐ์ดํธ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
์ค๋ ์คํ์ ์ ์ ํ ์ ๋ฐ์ดํธ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
๋๋ ๊ทธ ์ ๋ฐ์ดํธ์ ๊ด์ฌ์ด ์์ต๋๋ค. @dylanmckay ์ด๋์ ๊ฒ์ํ ๊ณํ์ธ๊ฐ์?
๋๋ ๋ง ๊ทธ๋๋ก ๋ช ๋ ๋์ Rust ์ํ๊ณ์ ์ด ์ถ๊ฐ๋ฅผ ๊ฐ์ ํ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค! ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ง์คํฐ์์ ์ฌ์ฉํ๋ ค๋ ์์งํ ์๋๋ ๊ฒฐํจ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ./x.py build
ํ์ค master
์ผ๋ก ๋งํฌ๋ ๋ค์ avr-rust/blink ์์ ๋ฅผ ๋น๋ํ๋ ค๊ณ ์๋ํ์ต๋๋ค( llvm_asm!
๋ฅผ ์ฌ์ฉํ๋๋ก src/main.rs
์
๋ฐ์ดํธ ํ). llvm_asm!
):
RUST_TARGET_PATH=`pwd`
XARGO_RUST_SRC=/home/nixpulvis/Projects/rust
rustup run master xargo build --target avr-atmega328p --release
์ด๊ฒ์ ๋ค์๊ณผ ํจ๊ป ์คํจํฉ๋๋ค.
error: no matching package named `core` found
location searched: registry `https://github.com/rust-lang/crates.io-index`
required by package `sysroot v0.0.0 (/tmp/xargo.oXlxlujoXvXJ)`
error: `"cargo" "build" "--release" "--manifest-path" "/tmp/xargo.oXlxlujoXvXJ/Cargo.toml" "--target" "avr-atmega328p" "-p" "core"` failed with exit code: Some(101)
note: run with `RUST_BACKTRACE=1` for a backtrace
์์ง ๋๋ฝ๋ ๊ตฌ์ฑ์ด ํ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
@nixpulvis ์ฐธ์กฐ https://github.com/rust-lang/rust/issues/44052#issuecomment -591396417
libcore๊ฐ ์๋ชป ์ปดํ์ผ๋ ๊ฒ์ ์ผ๋ถ์ด๋ฏ๋ก ์ง๊ธ์ ์๋ฌด ๊ฒ๋ ์๋ํ์ง ์์ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
AVR Rustc ํฌํฌ๊ฐ ์ ์คํธ๋ฆผ์ ๋ณํฉ๋์์ต๋๋ค.
์ ์คํธ๋ฆผ ํฌํฌ๋ ์์ง ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋จผ์ ๋ฐ์ํด์ผ ํ ๋ช ๊ฐ์ง ์ฌํญ์ด ์์ต๋๋ค.
@nikic ์ ์ง๋ฌธ์ ๋ตํ๊ธฐ
์ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ LLVM ์
์คํธ๋ฆผ์์ ๋ก์ปฌ ํฌํฌ๋ก _all_ AVR ์ปค๋ฐ์ ์๋์ผ๋ก ์ ํํ์ต๋๋ค.
์ด๊ฒ์ ํฐ ๋ง์น์ด๋ฉฐ ๋ถํ์ํ ์์ ์ฌํญ์ด ์์ ๊ฒ์
๋๋ค. ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๊ธฐ ์ ์ ์
์คํธ๋ฆผ Rust๋ก ๊ฐ์ ธ์์ผ ํ๋ ์
์คํธ๋ฆผ LLVM ์์ ์ฌํญ์ด ์์ต๋๋ค. ๊ทธ๋ค์ ๊ฑธ๋ฌ๋ด๊ณ ์๋ฅ Rust๋ก ์ฒด๋ฆฌ ํผํนํด์ผ ํฉ๋๋ค.
์
์คํธ๋ฆผ ๋
ธ๋ ฅ์ด ์ด์ ๋ช ๋ฌ ๋์ ์งํ๋จ์ ๋ฐ๋ผ ๋ค์ด์คํธ๋ฆผ avr-rust ํฌํฌ
์์ง Rust์ ํนํ ์ค๋๋ ๋ฒ์ ์ ์์ต๋๋ค. ๊ทธ ์ดํ๋ก LLVM ์ฃผ์ฅ ์ค๋ฅ๋ฅผ ์ผ์ผํค์ง ์๊ณ AVR์ ์ง์ํ๊ธฐ ์ํด ์ผ๋ฐํ๊ฐ ํ์ํ ์
์คํธ๋ฆผ Rust์ ์ต์ํ ํ ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ด ์์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด pull request #73270์ ์ด์์ต๋๋ค.
AVR์ ๋ํ ๋ณ๊ฒฝ์ด ํ์ํ ์ ์คํธ๋ฆผ Rust์ ๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
๊น๋ฐ์ ํ๋ก๊ทธ๋จ์ด ์๋ํ๋ฉด ๊ทธ ์์ ์์ ์ ์คํธ๋ฆผ AVR ์ง์์ด ์ฌ์ฉ/์คํ ์ค๋น๊ฐ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ ๋ฐ์ดํธ๋ฅผ ๊ฒ์ํ๊ฒ ์ต๋๋ค.
@wezm ์ข์ ์ง์ ์ ํ์ จ์ต๋๋ค. ์ ๋ฐ์ดํธ๋ฅผ ์ํ "์ถ๋ณต๋ฐ์" ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋์ด ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋๋๋ค. ์ด ํฐ์ผ์ ์ ์ฌ์ฉ๋์์ง๋ง ๊ณง ๋ถ๋์ดํ๊ฒ ๋ซํ ๊ฒ์ ๋๋ค.
AVR-Rust Gitter ์ฑ๋์ ํ์กดํ๋ ๊ฐ์ฅ ์์ฐ์ค๋ฌ์ด ์ ํ์
๋๋ค. ๋๋ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ๋ผ๋ ์์ด๋์ด๋ฅผ ์ข์ํ๋ค(๊ทธ๋ฌ๋ ๋๋ ๊ฐ๋ฅํ๋ค๋ฉด ๋ฉ์ผ ์๋ฒ๋ฅผ ํธ์คํ
ํ๋ค๋ ์์ด๋์ด๋ ์ข์ํ์ง ์๋๋ค). Gitter ์ฑ๋์๋ ํ ๋ก ์ด ์์ผ๋ฏ๋ก ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๊ฐ์ ๊ฒ์ด ๋์์ด ๋ ๊ฒ์
๋๋ค.
๊ณต์ง/์
๋ฐ์ดํธ๋ฅผ ์ค์ ์ง์คํํ๋ ค๋ฉด ๋ธ๋ก๊ทธ๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์บ์ฅฌ์ผํ ์
๋ฐ์ดํธ๋ฅผ ์ํ๋ ๋ถ๋ค์ด ๋์น์ง ์๋๋ก "๊ณต์ ๋งค์ฒด"๋ฅผ ๊ฐ๊ณ ์ถ์ต๋๋ค. ๋ธ๋ก๊ทธ๋ ์ ๊ฒ์๋ฌผ์ ์ง์์ ์ผ๋ก ํ์ธํด์ผ ํ๋ ๋ฐ๋ฉด ๋ฉ์ผ๋ง ๋ฆฌ์คํธ๋ ๋ณธ์ง์ ์ผ๋ก
๊ด์ฌ์๋ ๋ชจ๋ ๋ถ๋ค. ์ ์์ ํ์ํฉ๋๋ค.
(rustc version, Xargo version)
ํ
์ด๋ธ์ด ํ์ํ๋ฏ๋ก๋น๋ถ๊ฐ์ ๋ ๋์ ๋งค์ฒด๋ฅผ ์ฐพ์ ์ ์์ ๋๊น์ง ์ด GitHub ๋ฌธ์ ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ค์ ๊ฒ์ํ๊ฒ ์ต๋๋ค. Gitter์๋ ๊ฒ์ํ๊ฒ ์ต๋๋ค.
๊ณต์ง/์ ๋ฐ์ดํธ๋ฅผ ์ค์ ์ง์คํํ๋ ค๋ฉด ๋ธ๋ก๊ทธ๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์บ์ฅฌ์ผํ ์ ๋ฐ์ดํธ๋ฅผ ์ํ๋ ๋ถ๋ค์ด ๋์น์ง ์๋๋ก "๊ณต์ ๋งค์ฒด"๋ฅผ ๊ฐ๊ณ ์ถ์ต๋๋ค. ๋ธ๋ก๊ทธ๋ ์ ๊ฒ์๋ฌผ์ ์ง์์ ์ผ๋ก ํ์ธํด์ผ ํ๋ ๋ฐ๋ฉด ๋ฉ์ผ๋ง ๋ฆฌ์คํธ๋ ๋ณธ์ง์ ์ผ๋ก
๊ด์ฌ์๋ ๋ชจ๋ ๋ถ๋ค. ์ ์์ ํ์ํฉ๋๋ค.
๋ด ๊ฐ์ธ์ ์ธ ์ทจํฅ์ ๋ธ๋ก๊ทธ(RSS ํผ๋ ํฌํจ)๋ฅผ ๊ฐ๋ ฅํ ์ ํธํฉ๋๋ค. ๋ธ๋ก๊ทธ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฒ์ ์์ง ๊ฒฐ๊ณผ์ ๋ ์ ๋ํ๋๋ฉฐ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ์ค๋ ๋๋ณด๋ค ๋งํฌํ๊ธฐ์ ๋ ์ข์ต๋๋ค. RSS ํผ๋๋ ํ์ธ/ํต์ง ์ธก๋ฉด์ ํด๊ฒฐํฉ๋๋ค.
์ต๊ณ ์ ์ฅ์์ธ์ง 100% ํ์ ํ ์๋ ์์ง๋ง Embedded WG ๋ธ๋ก๊ทธ๊ฐ ์์ต๋๋ค. ์ปค๋ฎค๋์ผ์ด์ ์ ์ํ ๋ ธ๋ ฅ์ด ์ ๊ฒ ๋๋ ์ฑ๋์ผ ์ ์์ต๋๋ค.
์๋ง๋ ํธ์ํฐ ๊ณ์ ๋? ์๋ก์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๊ณต์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค(์ต์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด).
๋ด์ฅ๋ ์์ ๊ทธ๋ฃน์ด ์ฌ๊ธฐ์์ ๊ธฐ๊บผ์ด ๋์์ ์ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํธ์ํฐ ๊ณ์ @rustembedded ๊ฐ ์์ผ๋ฉฐ ๋ด์ค๋ ํฐ์๋ AVR ๊ด๋ จ ๋ด์ค๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
๋๋ ๋ํ ์ผ๋ง ์ ์ O-AVR
๋ ์ด๋ธ์ ๋ง๋ค์์ผ๋ฏ๋ก AVR ๊ด๋ จ ๋ฌธ์ ์๋ Rust ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ์ญ์์ค. ๊ทธ ์ธ์๋ ๋๋ถ๋ถ์ Rust ํ์ด ์๋ ๊ณณ์ด๊ธฐ ๋๋ฌธ์ Rust-lang Zulip์์ ์กฐ์ ํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ ํน์ Rust ๋์(์: Windows ๋๋ Arm)์ ์ด์ ์ ๋ง์ถ "๋์ ๊ทธ๋ฃน"์ ๋๋ฆฌ๋ ๊ณผ์ ์ ์์ผ๋ฉฐ AVR๋ ์ด์ ์ ํฉํ ์ ์์ต๋๋ค. ์ด์ ๋ํด์๋ Zulip์ ๋ฌธ์ํ์ญ์์ค.
์ ๋ฐ์ดํธ.
libcore
๊ฐ ์คํก rust-lang/master ๋ธ๋์น์์ AVR์ฉ์ผ๋ก ์ปดํ์ผ๋๊ธฐ ์ ์ ๋ ๊ฐ์ง๊ฐ ๋จ์ ์์ต๋๋ค.
addrspace(1)
๋ก ํ๊ทธ ์ง์ ๋์ด์ผ ํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. addrspace(0)
. Rust-lang/rust#73270 - ํ์ฌ ์ฝ๋ ๊ฒํ ์ค์
๋๋ค.~2. blink
์์ ๊ฐ ์๋ํ์ง ๋ชปํ๋๋ก ์ฐจ๋จํ๋ ๋ ๋ค๋ฅธ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค - avr-rust/rust#92. ์์ง ์
๋ฐ์ดํธ๋์ง ์์ ํจ์น๊ฐ ์์ด ์ด๋ฅผ ์์ ํ ์ ์์ต๋๋ค - https://reviews.llvm.org/D68524. ์ด๊ฒ์ ์
์คํธ๋ฆผ๋ ๋ค์ ์ ๋ ๋ฐ ํตํฉ ํ
์คํธ๋ฅผ ํต๊ณผํ๋ฉด
์ด ๋ ๊ฐ์ง ์์
์ด ์๋ฃ๋๋ฉด ์
์คํธ๋ฆผ๋ Rust AVR ๋์์ ํ์ฌ avr-rust/rust ํฌํฌ์ ๋์ผํ ์์ค์ผ๋ก AVR ์ฝ๋๋ฅผ ์ปดํ์ผํ ์ ์์ผ๋ฉฐ blink
์์ ์
๋ฐ์ดํธ ํ๋ก์ธ์ค๋ฅผ ์์ํ ์ ์์ต๋๋ค. , arduino
ํฌ๋ ์ดํธ, ๋ฌธ์, ๊ฐ์ด๋, ์
์คํธ๋ฆผ ๋ถ๊ธฐ์ฉ. ๊ทธ๋ฐ ๋ค์ ์
์คํธ๋ฆผ ๋ถ๊ธฐ๋ฅผ ์คํ์ ์ผ๋ก ์ฌ์ฉํ ์ค๋น๊ฐ ๋์ด ์์ด์ผ ํฉ๋๋ค.
๋ ํ๋์ TODO:
llvm_asm!
๋ฅผ ํตํด ์ด์ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.๋ค์์ ๋ชจ๋ ๊ฒ์ด ํฌํจ๋ ๋ถ๊ธฐ์ ๋๋ค. https://github.com/dylanmckay/rust/commits/dylan/avr-workable-upstream-candidate. ์ด ๋ถ๊ธฐ๋ libcore๋ฅผ ์ปดํ์ผํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค.
์
์คํธ๋ฆผ rust-lang/master
์์ ๋น๋๋์ง๋ง ์์ง ์
์คํธ๋ฆผ๋์ง ์์ LLVM ํจ์น D68524 , ์์ง ๋ณํฉ๋์ง ์์ Rust PR rust-lang/rust#73270, ์
์คํธ๋ฆผ LLVM์์ ์๋์ผ๋ก ์ฒด๋ฆฌ ์ ํ๋๋ 46๊ฐ์ AVR ๊ด๋ จ ์ปค๋ฐ๋ ํฌํจํฉ๋๋ค. ์คํฌ๋ฆฝํธ(LLVM ๋ถ๊ธฐ: https://github.com/dylanmckay/llvm-project/commits/dylan/avr-workable-upstream-candidate). 46๊ฐ ๋ชจ๋๊ฐ ํ์ํ ๊ฒ์ ์๋๋ฉฐ ์ต์ข
๋ชฉ๋ก์ ๋ ์์์ง ๊ฒ์
๋๋ค.
์ ๋ฐ์ดํธ : ๋ชจ๋ ์ ์คํธ๋ฆผ LLVM ์์ ์ฌํญ์ ํฌํจํ๋ ํ ์์ฒญ์ ์ด์์ต๋๋ค.
๋ค์์ LED ๊น๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ๊ณ ์ฑ๊ณต์ ์ผ๋ก ์คํํ๊ธฐ ์ ์ ๋จ์ ์์ ์ ์ ์ฒด ๋ชฉ๋ก์ ๋๋ค.
--eh-frame-hdr
์ธ์๋ฅผ ๋ง์ปค์ ๋ฌด์กฐ๊ฑด ์ ๋ฌํ๊ธฐ ์์ํ์ต๋๋ค. AVR-GCC ๋ง์ปค๋ ์ด ํ๋๊ทธ๋ฅผ ์ง์ํ์ง ์์ผ๋ฏ๋ก ๊ธฐ์กด Windows ์ ์ธ์ ์ ์ฌํ๊ฒ AVR์ ๋ํด ์ ๋ฌํ์ง ์๋๋ก ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์๋ผ๋ฆฌ์ค, UEFI.๋๊ตฌ๋ฅผ Cargo์ ์ง์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ ๋์ ์ ์์ต๋๋ค(์ด์ ๋ํ ์ถ์ ๋ฌธ์ ๊ฐ ์์).
๋๋ ์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๋ฌธ์ ๋ผ๊ณ ๊ฐ์ ํ๊ณ ์์ต๋๋ค: rust-lang/cargo#4959.
cargo build -Z build-std=core
๋ ๋ด AVR ์์ ์ฌ๋ก์์ ์ ์๋ํ์ต๋๋ค.
@shepmaster ์ด์จ๋ ์ ์ ๊ฐ๊น์์ง๋ ๊ฒ ๊ฐ์ต๋๋ค, ๊ฐ์ฌํฉ๋๋ค! ์ง๊ธ์ ๋นํธ์บ์คํธ ํญ๋ชฉ์ ๊ฐํ ๊ฒ ๊ฐ์ผ๋ฏ๋ก ๋ณํฉ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ๊ฒ์ ๋๋ค(PR์ ์์ฑํ๋ ๋ฐ ํ์ํ ํ์ผ๊ณผ ๋ด๊ฐ ํ๊ณ ์๋ IDK๋ฅผ ์์ฑํ๋ ๋ฐ ํ์ํ ํ์ผ์ด ๋๋ฝ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฏ๋ก).
-Z build-std=core
์ ์ฌ์ฉํ๋ ๊ณผ์ ์์ target triple์ ์ ๊ณตํด์ผ ํ๊ธฐ ๋๋ฌธ์ rustc +master --print target-list | grep avr
๋ฅผ ์คํํ๊ณ avr-unknown-unknown
์ฐพ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ณด๊ด๋ ๋ฌธ์ avr-llvm/llvm#35๋ ํธ๋ฆฌํ์ด ์ค์ ๋ก avr-atmel-none
(์ด์จ๋ ๋์๊ฒ ๋ ์ดํด๊ฐ ๋จ)์ฌ์ผ ํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๊ฒ ๋ง๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๊ธฐ์์ ์
๋ฐ์ดํธํด์ผ ํ ์ฌํญ์ด ์์ต๋๊น, ์๋๋ฉด ์ ๊ฐ ๋์น๊ณ ์๋ ๊ฒ์ด ์์ต๋๊น?
avr-unknown-unknown
๋ง์ต๋๋ค.
์ด๋ฆฐ ์ง๋ฌธ
* Should GitHub issues on the avr-rust fork be moved to the upstream Rust repository? ** Regardless, new issues should be raised on the upstream repository - the old issue tracker will need to be wound down. * Where should the instructions for compiling Rust with AVR live?
๋๋ ์ด๊ฒ์ด ์ฌ์ฉ์ ์ธก๋ฉด์์ ๋๋ฌด ์ค์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ddg ๋ฐ/๋๋ ์ด๋ฒ ์ฃผ ๋ฌ์คํธ๋ฅผ ํตํด ์ถฉ๋ถํ ์ฝ๊ฒ ์ฐพ์ ์ ์์์ต๋๋ค.
๋ฌด์์ด๋ ๊ฐ๋ฐ์๋ฅผ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
์ด๋ฆฐ ์ง๋ฌธ
* Should GitHub issues on the avr-rust fork be moved to the upstream Rust repository? ** Regardless, new issues should be raised on the upstream repository - the old issue tracker will need to be wound down. * Where should the instructions for compiling Rust with AVR live?
๋๋ ์ด๊ฒ์ด ์ฌ์ฉ์ ์ธก๋ฉด์์ ๋๋ฌด ์ค์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ddg ๋ฐ/๋๋ ์ด๋ฒ ์ฃผ ๋ฌ์คํธ๋ฅผ ํตํด ์ถฉ๋ถํ ์ฝ๊ฒ ์ฐพ์ ์ ์์์ต๋๋ค.
๋ฌด์์ด๋ ๊ฐ๋ฐ์๋ฅผ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
Rust๋ฅผ AVR๋ก ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ https://docs.rust-embedded.org/์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์๊ฒ ์ต๋๋ค. ์ ๋ฐ์ดํธ ์๊ฐ์ ๋๋ค.
AVR์ ํ์ํ ๋ชจ๋ ํจ์น ๋ ์ค๋์ nighty rustc 1.47.0-nightly (0820e54a8 2020-07-23)
ํ์ฌ Rust nightly ์ปดํ์ผ๋ฌ์ ์กด์ฌํฉ๋๋ค . Rust ์ผ๊ฐ ์ปดํ์ผ๋ฌ๋ ์์ ์์ด ์ด์ LED ๊น๋ฐ์ ์์ ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ปดํ์ผํ๊ณ AVR ELF ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค.
-Z build-std
ํ๋๊ทธ๊ฐ AVR์์ Xargo์ ํ์์ฑ์ ๋์ฒดํฉ๋๋ค. ํ๋ฌผ ํฌํฌ๋ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค. ์๋ฅ ํ๋ฌผ์ด ํ์ํฉ๋๋ค.Rust nightly ์ปดํ์ผ๋ฌ๋ ์ด์ AVR์ ์ง์ํ๋ Rust์ ๊ถ์ฅ ์ฑ๋๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค.
๋๋ ์ง๊ธ ์ด ๋ฌธ์ ๋ฅผ ๋ซ๊ณ ์์ต๋๋ค - ์ฐ๋ฆฌ๊ฐ ํด๋์ต๋๋ค!
๋ฒ๊ทธ ๋ณด๊ณ ๋จ๊ณ๋ AVR ๊ฐ์ด๋๋ถ ์์ ์ฐพ์ ์ ์์ต๋๋ค.
AVR ๊ฐ์ด๋๋ถ ๊ณผ https://github.com/avr-rust/blink ์ ๊น๋ฐ์ ์์ ๋ ๋์ ์ฌ์ฉ์ ์์ํ๋ ๋ฐ ๊ฐ์ฅ ์ข์ ๋ฆฌ์์ค์ ๋๋ค.
์ด ์ ์คํธ๋ฆผ ๋ ธ๋ ฅ์ ํตํด ํ๋ก์ ํธ๋ฅผ ๋ ผ์ํ๊ณ ์ง์ํ ๋ชจ๋ ์ฌ๋์๊ฒ ๊น์ด ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค.
์ง๋๋ฌ๋ฏธ
์์ฐ ์์ฐ ์์ฐ.
์ด ์ผ์ ๊ธฐ์ฌํด ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๋ ์ง๊ธ๊น์ง ์ด ๋ ์ ๊ณ ๋ํด ์์ต๋๋ค!
๋ น์ avr๋ก ์ด์ํ๊ธฐ ์ ์ Dylan McKay
๊ทธ๋ฆฌ๊ณ ํ์
๋ชจ๋ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! :-) ํน ์ฌ์ธ์!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๊ฒ ์ต๋๋ค. ์ ๋ฐ์ดํธ ์๊ฐ์ ๋๋ค.
AVR์ ํ์ํ ๋ชจ๋ ํจ์น ๋ ์ค๋์ nighty
rustc 1.47.0-nightly (0820e54a8 2020-07-23)
ํ์ฌ Rust nightly ์ปดํ์ผ๋ฌ์ ์กด์ฌํฉ๋๋ค . Rust ์ผ๊ฐ ์ปดํ์ผ๋ฌ๋ ์์ ์์ด ์ด์ LED ๊น๋ฐ์ ์์ ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ปดํ์ผํ๊ณ AVR ELF ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค.-Z build-std
ํ๋๊ทธ๊ฐ AVR์์ Xargo์ ํ์์ฑ์ ๋์ฒดํฉ๋๋ค. ํ๋ฌผ ํฌํฌ๋ ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค. ์๋ฅ ํ๋ฌผ์ด ํ์ํฉ๋๋ค.Rust nightly ์ปดํ์ผ๋ฌ๋ ์ด์ AVR์ ์ง์ํ๋ Rust์ ๊ถ์ฅ ์ฑ๋๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค.
๋๋ ์ง๊ธ ์ด ๋ฌธ์ ๋ฅผ ๋ซ๊ณ ์์ต๋๋ค - ์ฐ๋ฆฌ๊ฐ ํด๋์ต๋๋ค!
๋ฒ๊ทธ ๋ณด๊ณ ๋จ๊ณ๋ AVR ๊ฐ์ด๋๋ถ ์์ ์ฐพ์ ์ ์์ต๋๋ค.
AVR ๊ฐ์ด๋๋ถ ๊ณผ https://github.com/avr-rust/blink ์ ๊น๋ฐ์ ์์ ๋ ๋์ ์ฌ์ฉ์ ์์ํ๋ ๋ฐ ๊ฐ์ฅ ์ข์ ๋ฆฌ์์ค์ ๋๋ค.
์ด ์ ์คํธ๋ฆผ ๋ ธ๋ ฅ์ ํตํด ํ๋ก์ ํธ๋ฅผ ๋ ผ์ํ๊ณ ์ง์ํ ๋ชจ๋ ์ฌ๋์๊ฒ ๊น์ด ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค.
์ง๋๋ฌ๋ฏธ