Bitcode๋ Apple ์ฑ ๋ฐฐํฌ์ ๋ฏธ๋์ด๋ฉฐ ํ์ฌ ์ง์ํ์ง ์์ต๋๋ค. Apple์ด ์ํ๋ LLVM ๋ฒ์ ์ ์ ํํ๊ณ ๋ณ๋์ ๋ฐ๋ผ ์ ๊ทธ๋ ์ด๋ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๊น๋ค๋กญ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ ์์ ์ ํ์๊ฐ ์๊ณ Apple์ด ๊ฒฐ์ ํ ๋๋ง๋ค ์ ๊ทธ๋ ์ด๋๋ฅผ ๊ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ LLVM์ ๊ทธ๋ค์ ๊ฒ๊ณผ ๊ฒฐํฉํ ์ ์์ต๋๋ค.
๋ค์์ ๋ช ๊ฐ์ง ์ต์ ์ ๋๋ค.
๋๋ LLVM ๋์ ๋ก๋ฉ๊ณผ defer-to-alternate-rustc ์๋ฃจ์ ์ด ๊ฐ์ฅ ์ ๋งํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐธ์กฐ https://users.rust-lang.org/t/ios-rust-integration/6928/4
cc @bluejekyll
์ฐ๋ฆฌ๋ LLVM์ ๋์ ์ผ๋ก ๋ก๋ํ๋๋ก rustc๋ฅผ ๋ณ๊ฒฝํ๊ณ , rust-llvm ํจํค์ง์ ์ ํ ์ฌํญ์ธ rust-llvm-apple ํจํค์ง๋ฅผ ๋ง๋ค๊ณ , rustc๋ ๋นํธ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ๊ณผ LLVM์ ๋ก๋ํ๋๋ก ํฉ๋๋ค.
LLVM์ ๋์ ์ผ๋ก ๋ก๋ํ๋ ๊ฒ์ ํ์คํ ์ต์
์ด ์๋๋๋ค. LLVM API๋ ๋นํธ์ฝ๋๋ณด๋ค ๋ ์์ ์ ์ด๋ฉฐ LLVM xy์ ๋ํด ๋น๋ํ๋ ๊ฒฝ์ฐ xy ๋์ LLVM xz๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฑฐ์ ํ์คํ rustc๊ฐ ์ค๋จ๋ฉ๋๋ค. ์์คํ
LLVM์ ์ ์ ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค( --llvm-root
์ด๋ฏธ ํ๋ ๊ฒ์ฒ๋ผ).
์ฐ๋ฆฌ๋ rustc_llvm_apple ํฌ๋ ์ดํธ๋ฅผ ๋ง๋ค๊ณ ๋ ๊ฐ์ ์ ์ฒด LLVM์ ํญ์ rustc์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด๊ฒ์ ์๋ง๋ ๋ ์ง ์์ ๊ฒ์ ๋๋ค
์ฌ๊ณผ ๋ฐฐํฌ๋ฅผ ์ํด ์์คํ LLVM(์ ์ ์ผ๋ก)์ ์ฐ๊ฒฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ด ๊ฒฝํ์ ์ด๋ฏธ ์ ์๋ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ ๋นํธ์ฝ๋๋ฅผ ๊ทธ๋ค์ ๋นํธ์ฝ๋๋ก ๋ฒ์ญํ๊ธฐ ์ํด ๋นํธ์ฝ๋ ์๋ ์ ๋ฅผ ์กฐ์ฌํ ์ ์์ต๋๋ค. ์ ์ง ๋ณด์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฑ๊ณต ๊ฐ๋ฅ์ฑ์ ๋ฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ RenderScript๊ฐ ์ด๊ฒ์ ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค.
์ข์์... ๊ทธ๋์ ๋ฌธ์ ๋ LLVM ๋นํธ์ฝ๋ ํ์์ด LLVM ๋ฒ์ ๊ฐ์ ๋ค์ ์์ ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ณผ๋ ์ฌ์ค์ด ์๋ ๊ฒ์ ๋ง๋ค๊ธฐ ์ํด ์ด์ํ ์ผ์ ํฉ๋๊น? ์๋๋ฉด ๋นํธ์ฝ๋ ํ์์ด LLVM์ด ์๋(์: ์ฌ๊ณผ ๊ด๋ จ ํญ๋ชฉ์ด ์์) ์ฌ์ฉ๋ฉ๋๊น?
2013๋ ์ LLVM ๋นํธ์ฝ๋๋ฅผ ๋ฐฐํฌ ํ์์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ฆฌ์๋ค๋ ๋ง์ ๋ค์ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ํ์คํ ๋์ํฉ๋๋ค. iOS์์ ๋ค์ดํฐ๋ธ ๋ฐ์ด๋๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐฐํฌ๊ฐ ๋ ์ด์ ์๋ํ์ง ์์ต๋๊น?
๋ํ Apple์ด ๋ด๋ถ์ ์ผ๋ก ํธํ๋์ง ์๋ ๋นํธ์ฝ๋ ํ์์ ์ฌ์ฉํ๋ LLVM ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ์ฌ๋๋ค์ด ์ฌ์ ํ ์ค๋๋ ์ปดํ์ผ๋ฌ๋ก ์ปดํ์ผํ ๋ ์ด๋ค ์ผ์ด ์ผ์ด๋ ์ง ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์คํํ์ต๋๋ค. ์ฆ, ํ๋ฌผ ๋น๋ ๋์ ์ถ๋ ฅ ๋นํธ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋ค์ ๋นํธ์ฝ๋๊ฐ ํฌํจ๋ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๋ ค๊ณ ํ์ต๋๋ค. ๋นํธ์ฝ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด llvm-๋งํฌ๋ฅผ ์๋ํ์ ๋ ๋นํธ์ฝ๋์์ ํธํ๋์ง ์๋ LLVM ๋ฒ์ ์ ์ป์์ต๋๋ค.
์ด๊ฒ์ ์ฌํํ ์ ์๋ ์ฌ์ด ํ ์คํธ๊ฐ ์์ง๋ง ๋ด ์๊ฐ์๋ ๋ค๋ฅธ LLVM ๋ฒ์ ๊ฐ์ ์ฐ๊ฒฐ์ ๊ฑฐ๋ถํ๋ ๋ฉ์ฒญํ ๋ฒ์ ๊ฒ์ฌ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋๋ฉด, ๋ด๊ฐ ์์ ํ ์๋ชป๋ ์ผ์ ํ์ ๋ฟ์ ๋๋ค. ๋๋ ์ด๊ฒ์ ๋ค์ ๋ณผ ์๊ฐ์ด์์ ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์๊ฐํด ๋ด๊ธฐ ์ํด ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
llvm-link์ ์ ํํ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์์ผ๋ฉด ์ ์ฉํ ๊ฒ์ ๋๋ค.
@bluejekyll LLVM์ ํ ์คํธ ๋๋ ํ ๋ฆฌ์๋ ๋ง์ ๋นํธ์ฝ๋ ํ์ผ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋นํธ์ฝ๋ ํ์ผ์ ๋ํ ํ ์คํธ๋ ์ง์์ ์ผ๋ก ์คํ๋๋ฏ๋ก(์: llvm-dis-3.8/opt-3.8์ 3.2์์ 3๋ ๋ ๋นํธ์ฝ๋ ํ์ผ์ ์ ์ดํดํฉ๋๋ค), ์ผ๋ถ ์ฌ๊ณผ ํญ๋ชฉ์ด์ด์ผ ํฉ๋๋ค.
์ฌ๊ณผ ๋ฐฐํฌ๋ฅผ ์ํด ์์คํ LLVM(์ ์ ์ผ๋ก)์ ์ฐ๊ฒฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ด ๊ฒฝํ์ ์ด๋ฏธ ์ ์๋ํฉ๋๋ค.
์ด๊ฒ์ ๋ง๋ณด๋ค ์ฝ์ง๊ฐ ์์ต๋๋ค. ์ ๊ฐ ์๋ ํ, App Store ์ ๋ก๋๋ฅผ ์ํ ์ ์ผํ ์ถ๋ณต๋ฐ์ apple-llvm ๋ฒ์ ์ ํ์ฌ Xcode์ ํจ๊ป ์ ๊ณต๋๋ ๋ฒ์ ์ ๋๋ค. ์ด๊ฒ์ ๋ํ ์ ์ฌ์ ์ผ๋ก ๋ ๊ฐ์ LLVM ๋ฒ์ ์ ๋ํ LLVM ๋ฐ์ธ๋ฉ์ ์ ์งํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค(๋ฐ๋์ ์ธ์ ํ ๋ ๊ฐ์ ๋ง์ด๋ ๋ฒ์ ์ผ ํ์๋ ์์). ์ด์ ๋ฒ์ ์ apple-llvm์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํจํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ Apple์ด ๋ด๋ถ์ ์ผ๋ก ํธํ๋์ง ์๋ ๋นํธ์ฝ๋ ํ์์ ์ฌ์ฉํ๋ LLVM ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ์ฌ๋๋ค์ด ์ฌ์ ํ ์ค๋๋ ์ปดํ์ผ๋ฌ๋ก ์ปดํ์ผํ ๋ ์ด๋ค ์ผ์ด ์ผ์ด๋ ์ง ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
๋๋ ๊ทธ๋ค์ด ์ต์ Xcode๊ฐ ์ฑ์ ์ ์ถํ๋๋ก ํ์ฉํจ์ผ๋ก์จ ์ด๊ฒ์ ํผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
IIRC์์๋ ์ํคํ ์ฒ ๊ฐ ๋นํธ์ฝ๋๊ฐ clang์ ์ํด ์์ฑ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ ์ํคํ ์ฒ์ ๋ํด ๋นํธ์ฝ๋๊ฐ ํจํค์ง๋ฉ๋๋ค(์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ด clang ๋ฐ ๋นํธ์ฝ๋์ ๋ฐ๋ ๋ชฉํ๋ผ๊ณ ์๊ฐํฉ๋๋ค). ๊ฐ ์ค๋ธ์ ํธ ํ์ผ์ ๋ํ ์น์ ์ ์ ์ฅ๋๋ฏ๋ก ์ต์ํ ๋ณต์ ๋ฉ๋๋ค. ๋๊ตฐ๊ฐ ๋นํธ์ฝ๋๊ฐ ์ด์ ๋ํ ์ต์ ์ ๋ฐฉ๋ฒ์ด ์๋ ์๋ ์๋ค๊ณ ์ธ๊ธํ ์ด์ ์ค ์ผ๋ถ์ผ ์ ์์ต๋๋ค.
๊ถ์ฅ๋๋ ๋ชจ๋ ์๋ฃจ์ ์ด ๋ค์ ์๋ฑํ ๊ฒ ๊ฐ์ ๋๋์ด ๋ญ๋๋ค. ๋ด๊ฐ ์๊ฐํ ์ ์๋ ๊ฐ์ฅ ์ง์ ๋ถํ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ๋์์ด codegen ๋์์ ์ค๋ฒ๋ก๋ํ๋๋ก ํ์ฉํ๊ณ Apple codegen ๊ฒฝ๋ก๊ฐ ๋์ ํฌ๋ ์ดํธ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. (apple-llvm์ ๋ํด ์ปดํ์ผ๋ ์ผ๋ฐ codegen ๊ฒฝ๋ก์ผ ๋ฟ์ ๋๋ค.)
์ด ๋ฒ๊ทธ๊ฐ App Store๋ฅผ ์ธ๊ธํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์์ธ ์ฒ๋ฆฌ์ ๋ํด ์ด์ผ๊ธฐํ ๊ฐ์น๊ฐ ์์ต๋๊น? (์ฆ, ํ์ฌ panic=abort
๋ ์๊ฒฉํ๊ฒ ํ์ํฉ๋๋ค.)
LLVM์ ํ ์คํธ ๋๋ ํ ๋ฆฌ์๋ ๋ง์ ๋นํธ์ฝ๋ ํ์ผ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋นํธ์ฝ๋ ํ์ผ์ ๋ํ ํ ์คํธ๋ ์ง์์ ์ผ๋ก ์คํ๋๋ฏ๋ก(์: llvm-dis-3.8/opt-3.8์ 3.2์์ 3๋ ๋ ๋นํธ์ฝ๋ ํ์ผ์ ์ ์ดํดํฉ๋๋ค), ์ผ๋ถ ์ฌ๊ณผ ํญ๋ชฉ์ด์ด์ผ ํฉ๋๋ค.
@nagisa ์๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฌ๊ธฐ์ ์์ง ํด๊ฒฐ์ฑ ์ด ์์ ์ ์๋ค๋ ํฌ๋ง๊ณผ ๋ด๊ฐ ๋ญ๊ฐ ์๋ชปํ๊ณ ์๋ ๊ฒ ๊ฐ๋ค๋ ํฌ๋ง์ ์ค๋๋ค.
@ricky26 ์ข์ ์ .
๋ด๊ฐ ์๋ ํ, App Store ์ ๋ก๋๋ฅผ ์ํ ์ ์ผํ ์ถ๋ณต๋ apple-llvm ๋ฒ์ ์ ํ์ฌ Xcode์ ํจ๊ป ์ ๊ณต๋๋ ๋ฒ์ ์ ๋๋ค.
Apple์ Xcode LLVM์ ์์คํ LLVM๊ณผ ๋์ผํ์ง ์์ต๋๊น? ๋๋ ๊ทธ๋ Xcode LLVM์ ์๋ฏธํ์ต๋๋ค. Rustc ์ด์ฐจ๋ฅผ ๋ฐฐ์กํ ๋ xcode๊ฐ ํญ์ ์ต์ ๋ฒ์ ์ธ์ง ํ์ธํด์ผ ํฉ๋๋ค.
๋ฌผ๋ก Apple์ด ์์ ํ๋ ๋ฐฉ์์ ์ฐ๋ฆฌ๊ฐ ์ด์ ๋ฒ์ ์ rustc๋ก ์ ํจํ ์ฌ๊ณผ ๋นํธ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ฐฐ์ ํ๊ณ ๋ณธ์ง์ ์ผ๋ก ์ฐ๋ฆฌ์ ์์ ์ฑ ์คํ ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ์ด์ ์ ์ฐฝ ๋ฐ์ผ๋ก ๋์ง๋๋ก ๊ฐ์ํ๋ฉฐ ์ด๊ฒ์ด ๊ณ ์น ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ณด์ด์ง ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์ ์ฌ์ ์ผ๋ก ๋ ๊ฐ์ LLVM ๋ฒ์ ์ ๋ํ LLVM ๋ฐ์ธ๋ฉ์ ์ ์งํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ LLVM ๋ฒ์ 3.7์์ 3.9(๋ฐ ์ ์ฌ์ ์ผ๋ก ํธ๋ ํฌ)์ ๋ํ ์ง์์ ์ ์งํฉ๋๋ค. Xcode์ LLVM์ด ๊ณ ๋ ๋ฒ์ ์ด ์๋ ํ ์ฐ๋ฆฌ๋ ๊ทธ๋ฐ ์ ์์ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. Xcode LLVM์ด ์ค์ ๋ก ๊ณ ๋/์ฌ์ฉ์ ์ ์/๊ธฐํ ๋ฒ์ ์ด๋ผ๋ฉด ์ด ๊ธฐ๋ฅ์ ์ ํ ์ง์ํ ์ ์๋ค๊ณ ๋ด ๋๋ค. ํนํ ํ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด _that_ LLVM์ ํจ์น๋ฅผ ๋ณด๋ผ ์ ์๋ ์ต์ ์ด ์๊ธฐ ๋๋ฌธ์ ํนํ ๊ทธ๋ ์ต๋๋ค. ๋ํ Apple์ด 2038๋ ๊น์ง Xcode LLVM์ ์ ๋ฐ์ดํธํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ์ ๋๋นํ์ฌ 3.7์ ์์ํ ์ง์ํ๋๋ก rustc๋ฅผ ์ ๊ทธ๊ณ ์ถ์ง ์์ต๋๋ค.
ยน: ๊ทธ๋ฌ๋ Rustc๊ฐ LLVM xy์ ๋ํด ๋น๋๋ ๊ฒฝ์ฐ LLVM xy์ ์ ํํ ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค.
LLVM์ ๋์ ์ผ๋ก ๋ก๋ํ๋ ๊ฒ์ ํ์คํ ์ต์ ์ด ์๋๋๋ค. LLVM API๋ ๋นํธ์ฝ๋๋ณด๋ค ๋ ์์ ์ ์ด๋ฉฐ LLVM xy์ ๋ํด ๋น๋ํ๋ ๊ฒฝ์ฐ xy ๋์ LLVM xz๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฑฐ์ ํ์คํ rustc๊ฐ ์ค๋จ๋ฉ๋๋ค. ์์คํ LLVM์ ์ ์ ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค(์: --llvm-root๊ฐ ์ด๋ฏธ ํ๊ณ ์์).
@nagisa C++ API๋ ๋ถ์์ ํ์ง๋ง ์ฐ๋ฆฌ๋ C API๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ํ ๋ฒ์ ์ฌ๋ฌ ๋ฒ์ ์ LLVM์ ์ง์ํ๋ ๋ฐ ๋ง์ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค. API ์ง์ ์ธก๋ฉด์์ ์ฐจ์ด์ ์ด ๋ณด์ด์ง ์์ต๋๋ค.
์ฌ๊ณผ ๋ฐฐํฌ๋ฅผ ์ํด ์์คํ LLVM(์ ์ ์ผ๋ก)์ ์ฐ๊ฒฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ด ๊ฒฝํ์ ์ด๋ฏธ ์ ์๋ํฉ๋๋ค.
๋ชจ๋ Apple ํ๋ซํผ์ ๋ํด Apple์ LLVM์ ์ผ๊ด ๋ฐฐ์กํ ์ ์์ง๋ง ์ด๋ ๋ฐ์คํฌํฑ ๊ธฐ๊ณ ์ฝ๋ ์์ฑ์ ์ํด LLVM์ Apple์ ๊ฒฐํฉํ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ Apple์ด ์๋ ํธ์คํธ์์ iOS ๋นํธ์ฝ๋๋ฅผ ์ง์ํ๋ ์ต์ ์ ๋ฐฐ์ ํฉ๋๋ค.
์ข์์... ๊ทธ๋์ ๋ฌธ์ ๋ LLVM ๋นํธ์ฝ๋ ํ์์ด LLVM ๋ฒ์ ๊ฐ์ ๋ค์ ์์ ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ณผ๋ ์ฌ์ค์ด ์๋ ๊ฒ์ ๋ง๋ค๊ธฐ ์ํด ์ด์ํ ์ผ์ ํฉ๋๊น? ์๋๋ฉด ๋นํธ์ฝ๋ ํ์์ด LLVM์ด ์๋(์: ์ฌ๊ณผ ๊ด๋ จ ํญ๋ชฉ์ด ์์) ์ฌ์ฉ๋ฉ๋๊น?
๋นํธ์ฝ๋ ํ์์ ๋ฒ์ ๊ฐ์ ์์ ์ ์ด์ง ์์ต๋๋ค.
iOS์์ ๋ค์ดํฐ๋ธ ๋ฐ์ด๋๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐฐํฌ๊ฐ ๋ ์ด์ ์๋ํ์ง ์์ต๋๊น?
๊ทธ๊ฒ์ ์ค๋ ์๋ํฉ๋๋ค. ์ ํธํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฉฐ ๊ณ์ ์ง์๋ ์ง๋ ํ์คํ์ง ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์ ์ฌ์ ์ผ๋ก ๋ ๊ฐ์ LLVM ๋ฒ์ ์ ๋ํ LLVM ๋ฐ์ธ๋ฉ์ ์ ์งํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค(๋ฐ๋์ ์ธ์ ํ ๋ ๊ฐ์ ๋ง์ด๋ ๋ฒ์ ์ผ ํ์๋ ์์). ์ด์ ๋ฒ์ ์ apple-llvm์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํจํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@ricky26 ์ฌ๋ฌ ๋ฒ์ ์ LLVM ๊ฐ์ ํธํ์ฑ์ ์ฑ๊ณต์ ์ผ๋ก ์ ์งํ๊ณ ์์ต๋๋ค. Apple๊ณผ ์ฐ๋ฆฌ๊ฐ ๋๋ฌด ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ง ์๋ ํ ๊ฐ๋ฅํด์ผ ํ์ง๋ง ๋ถํ ์ ๋์ ์ ์์ ์ ๋๋ก ํฐ ํ์์ ์ํ์ด ํญ์ ์กด์ฌํ๋ฉฐ ์ฃผ์ API ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๊ฒ์์ ์๊ณ ์์ต๋๋ค.
Xcode์ LLVM์ด ๊ณ ๋ ๋ฒ์ ์ด ์๋ ํ ์ฐ๋ฆฌ๋ ๊ทธ๋ฐ ์ ์์ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ํ์ด์ง์์ https://gist.github.com/yamaya/2924292 :
clang-700.0.72 => LLVM 3.7.0
clang-700.1.76 => LLVM 3.7.0
clang-700.1.81 => LLVM 3.7.0
clang-703.0.29 => LLVM 3.8.0
clang-703.0.31 => LLVM 3.8.0
C++ API๋ ๋ถ์์ ํ์ง๋ง C API๋ฅผ ์ฌ์ฉํ๋ฉฐ ํ ๋ฒ์ ์ฌ๋ฌ ๋ฒ์ ์ LLVM์ ์ง์ํ๋ ๋ฐ ๋ง์ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค. API ์ง์ ์ธก๋ฉด์์ ์ฐจ์ด์ ์ด ๋ณด์ด์ง ์์ต๋๋ค.
๊ทธ๊ฒ์ ์ฌ์ค์ด ์๋๋ค. ์ฐ๋ฆฌ๋ Rustllvm์ ํํ๋ก C++ API์ ๋ํ ๋ง์ ๋ฐ์ธ๋ฉ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ปดํ์ผ๋ LLVM ๋ฒ์ ์ ๋ฐ๋ผ ๋ํผ๋ฅผ ์ปดํ์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ์์ต๋๋ค. ์ฌ์ฉ ๋ฐ ์ปดํ์ผ๋ LLVM์ ๋ฒ์ ์ด ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ ๋์ ๋ง์ปค ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ๋ ์ฌํ๊ฒ๋ ๋ฐํ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
Apple์ด ์๋ ํธ์คํธ์์ iOS ๋นํธ์ฝ๋๋ฅผ ์ง์ํ๋ ์ต์ ์ ๋ฐฐ์ ํฉ๋๋ค.
Apple์ด LLVM ํฌํฌ ์ด์ธ์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ์์ฑ๋ ๋นํธ์ฝ๋๋ฅผ ์ํ์ง ์๋๋ค๋ฉด ์ ์ฌํ ํฌํฌ๋ฅผ ์ ์งํ๊ณ ๋ด๋ถ ํจ์น๋ฅผ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋งํ๋ ๊ฒ ์ธ์๋ ์ด๋ป๊ฒ ํ ์ ์๋์ง ์ ์ ์์ต๋๋ค.
๋นํธ์ฝ๋ ํ์์ ๋ฒ์ ๊ฐ์ ์์ ์ ์ด์ง ์์ต๋๋ค.
๋ฌผ๋ก ์ ๋๋ค. ๊ทธ๋ฌ๋ ์๋ฅผ ๋ค์ด 3.7.0์ผ๋ก ์๋ ค์ง LLVM์ ๋ค์ํ ๊ฐ์ ํ ์ฌ์ด์ ๋นํธ์ฝ๋๋ 3.7.0 ์๋ฆฌ์ฆ์ ๋ค๋ฅธ LLVM ๋น๋์์ ์ฌ์ฉํ ๋นํธ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ถฉ๋ถํ ํธํ ๊ฐ๋ฅํ๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ๊ณต์ ํฉ๋๋ค. libLLVM์ ๋์ ์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ๋ณด๋ค ํ์คํ ๋ซ์ต๋๋ค.
ยน: ํนํ 3.2 ์๋ฆฌ์ฆ์ ๋นํธ์ฝ๋๊ฐ ๋งค์ฐ ์์ ํ๋ณธ์ผ์ง๋ผ๋ 3.8 LLVM๊ณผ ์ฌ์ ํ ํธํ๋๋ค๋ ์ ์ ๊ณ ๋ คํ ๋.
๋ช ๊ฐ์ง ์ฐธ๊ณ ์ฌํญ:
cc @rust-lang/์ปดํ์ผ๋ฌ
๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ณํ์ธ์ง ๋ฃ๊ณ ์ถ์ต๋๋ค. ํนํ ๋ชจ๋ ธ ์ค ๊ณ .
์ด ๋ฌธ์ ์ ๋ํ Unity์ ๋๋ต์ ๋ชจ๋ IL ์ด์ ๋ธ๋ฆฌ๋ฅผ C++ ์ฝ๋๋ก ๋น๋ํ๋ il2cpp์ ๋๋ค.
๊ด๋ จ golang ๋ฒ๊ทธ: https://github.com/golang/go/issues/12682; LLVM go ๋๊ตฌ ์ฒด์ธ(ํ์ค go ๋๊ตฌ ์ฒด์ธ๋งํผ ๊ธฐ๋ฅํ์ง ์์)์ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์์ด ์์ต๋๋ค.
๋์ฒด๋ก Apple ์ธ๋ถ์ ๋นํธ์ฝ๋ ์ง์์ ๋ํ ์ด์ผ๊ธฐ๋ ์ข์ง ์์ต๋๋ค.
์ ์ ํ Mono๋ Apple LLVM์ ํตํด ํ์๋ฉ๋๋ค. http://tirania.org/blog/archive/2015/Sep-02.html
ํ ๊ฐ์ง ๊ฑธ๋ฆผ๋์ ๋นํธ์ฝ๋๋ก ์ธ๋ผ์ธ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ ๋ฌํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ชจ๋ ธ ์ด์ผ๊ธฐ๋ฅผ ์ํด ๋๋ Mono๊ฐ ํธ๊ธฐ์ฌ ๋ง์ ์ฌ๋๋ค์ ์ํด ๋ฌด์์ ํ๋์ง์ ๋ํด Miguel de Icaza์ ๋น ๋ฅธ ๊ตํ์ ํ์ต๋๋ค: https://twitter.com/mitsuhiko/status/769458873237434368
@mitsuhiko iOS ๋ฐ tvOS์์๋ ๋นํธ์ฝ๋๋ก ์ธ๋ผ์ธ ์ด์ ๋ธ๋ฆฌ๋ฅผ _ํ ์_ ์์ง๋ง ์ด๋ค ์ด์ ๋ก watchOS๋ ์์ต๋๋ค.
์ด์ ๋ํ ์์ง์์ด ์์ต๋๊น? ๋นํธ์ฝ๋ ์ง์ ๊ณํ ์์ด iOS์์ Rust๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํ ๊ธฐ๋ถ์ด ์ข์ง ์์ต๋๋ค. ์ ํ์ ์ด๋ฐ ์ต์ ๋์ ์๋นํ ๊ฐ์๊ธฐ ๋น ์ต์ ๋๋ก ๋ง๋ ์ญ์ฌ๊ฐ ์๊ณ ์ค์ ๋ก ๋นํธ์ฝ๋๋ ์ด๋ฏธ watchOS์ tvOS์์ ํ์ํฉ๋๋ค.
๊ถ์ฅ๋๋ ๋ชจ๋ ์๋ฃจ์ ์ด ๋ค์ ์๋ฑํ ๊ฒ ๊ฐ์ ๋๋์ด ๋ญ๋๋ค. ๋ด๊ฐ ์๊ฐํ ์ ์๋ ๊ฐ์ฅ ์ง์ ๋ถํ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ๋์์ด codegen ๋์์ ์ค๋ฒ๋ก๋ํ๋๋ก ํ์ฉํ๊ณ Apple codegen ๊ฒฝ๋ก๊ฐ ๋์ ํฌ๋ ์ดํธ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. (apple-llvm์ ๋ํด ์ปดํ์ผ๋ ์ผ๋ฐ codegen ๊ฒฝ๋ก์ผ ๋ฟ์ ๋๋ค.)
์ด ์ ๊ทผ ๋ฐฉ์(@ricky26)์ Rustc ์ฌ์ฉ์์ธ ์ ์๊ฒ ๊ฐ์ฅ ์์ฐ์ค๋ฌ์ด ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ์ต๊ทผ์ ์ ์ด๋ ๋ด๊ฐ ์๋ ํ ์ด๊ฒ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ฐ๋์ง ์์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฒ์ ๊ด๋ฆฌ์ ๋ํ LLVM์ ์ต๊ทผ ๋ฐํ ์์ ๋นํธ์ฝ๋๋ (๋ด ์๊ฐ์) ํญ์ LLVM์ ํฅํ ๋ฒ์ ์์ ๋ก๋ํ ์ ์์ด์ผ ํ๋ค๊ณ ํ์ํ์ต๋๋ค. ์ด๋ ์ด ๋ฌธ์ ๊ฐ ๊ทผ๋ณธ์ ์ธ ์์ค์์ "ํด๊ฒฐ๋จ"์ ์๋ฏธ ํ ์ ์์ง๋ง ๋ชจ๋ ๋นํธ์ฝ๋๋ฅผ ์ถ์ถํ๋ ค๋ฉด ๋ ์ธ์ฒด๊ณตํ์ ์ธ ์ธํฐํ์ด์ค๊ฐ ์ฌ์ ํ ํ์ํฉ๋๋ค.
์ด์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
HackerNews์ ์ด ๋๊ธ ์์ฑ์๋ macOS ๋ฐ iOS์์ Rust์์ ์์ฑ๋ Bitcode๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค. ์ค๋ ๋์๋ Rust ๋ฐ์ด๋๋ฆฌ์ ๋ํ ๋นํธ์ฝ๋๋ฅผ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ์ ๋ณด๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ์ข์ ์์์ฒ๋ผ ๋ค๋ฆฝ๋๋ค!
๋ฌธ์ ์ ๋๊ธ ์์ฑ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ตํ ์ค๋ช ํฉ๋๋ค.
-C lto --emit llvm-bc
๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์์์ ๋ชจ๋ ์ข
์์ฑ์ ํฌํจํ๋ ํ๋์ .bc ํ์ผ์ ๋ด๋ณด๋ด๋๋ก rustc๋ฅผ ๊ฐ์ ธ์์ต๋๋ค. ์ด๊ฒ์ ์๋ํ์ง๋ง ๋ณธ์ง์ ์ผ๋ก ํดํน์
๋๋ค. ํนํ jemalloc์ ํฌํจํ C ์ข
์์ฑ์์๋ ์๋ํ์ง ์์ต๋๋ค(์ด์จ๋ iOS์์๋ ์ฌ์ฉ๋์ง ์์). Rustc๊ฐ "๋ด์ฅ๋ ๋นํธ์ฝ๋"๋ก Mach-O ๋ฐฉ์ถ์ ์ ์ ํ ์ง์ํ๋ค๋ฉด ๋ ์ข์ ๊ฒ์
๋๋ค. clang ์์ค๋ฅผ ๋ณด๊ณ ์ด๋ป๊ฒ ์๋ฃ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๊ฒ์ ์๋ํ๊ณ ํดํน์ ์ ๊ฒฝ ์ฐ์ง ์๋๋ค๋ฉด ๋ฒ์ ๋ฌธ์ ๋ฅผ ์ ์ธํ๊ณ ๋ '๊ทธ๋ฅ ์๋'ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฃผ์ ์ค์ ์ฅ์ ๋ฌผ์ Rust๊ฐ Xcode๋ณด๋ค ๋ ์์ฃผ LLVM ํธ๋ ํฌ์ ๋๊ธฐํํ๋ค๋ ๊ฒ์ ๋๋ค. Xcode๋ ๋งค๋ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์ต์ LLVM ๋ฒ์ ์ ์ด์ ๋นํธ์ฝ๋๋ฅผ ๋ก๋ํ ์ ์์ง๋ง ๊ทธ ๋ฐ๋๋ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ์ด์ ๋ฒ์ ์ rustc๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ด์ LLVM์ ๋ํด ์ต์ ๋ฒ์ ์ ๋น๋ํด์ผ ํฉ๋๋ค. (์ฌ์ค, Rustc 1.17์ ์ฌ์ ํ โโXcode 8.x์์ ์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง LLVM 4.0 ์ ๊ทธ๋ ์ด๋ ์ดํ๋ก ์ผ๊ฐ์๋ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ์ฐ์ฐ์ ์ผ์น์ ๋๋ค.)
์ด์์ ์ผ๋ก Rust๋ ์ ์ ํ LLVM ๋ฒ์ ์ ๋ํด ๋น๋๋ ๊ณต์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ค์ ๋ก๋ ์ฌ๋ฐ๋ฅธ ๋ฒ์ ์ ์คํก LLVM์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ง๋ง Apple์ ํฌํฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ:
(ํ
์คํธ๋ก ๋ฐฉ๊ธ Xcode 8.2.1 Clang์ ๋ํด Rust๋ฅผ ์ปดํ์ผํ๋ ค๊ณ ์๋ํ์ต๋๋ค. rustllvm
๋ ๋น๋์ ์คํจํฉ๋๋ค. #if LLVM_VERSION_GE(..)
์กฐ๊ฑด๋ฌธ ์ค์ฒฉ์ผ๋ก ์ธํด ๋ ๊ฐ์ง ๋ชจ๋์ ๋ํด ์ปดํ์ผํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด์ ๋ฐ ์ต์ LLVM์ LLVM 3.9svn์ด๋ผ๊ณ ์ฃผ์ฅํ์ง๋ง API ๋ฐฉ์์ 3.8๊ณผ 3.9 ์ฌ์ด์ ์๋ ์ด ๋ถ๊ธฐ๋ก ์ธํด ํผ๋์ค๋ฌ์์ง๋๋ค. Xcode๋ ์ด์จ๋ ๋ค์ ํด๋ง๋ค ์๋ก ๊ณ ์น ์์ ์ด๋ฏ๋ก ์์ ํ ๊ฐ์น๊ฐ ์์ ๊ฒ์
๋๋ค.)
์ด ๋ถ๋ถ์์ ์ง์ ์ด ์์์ต๋๊น? ๋์์ผ๋ก ๋น์ (ํต์ฌ ํ)์ ์ด ์๋ จ์ ํ์คํ ์๊ตฌ์ ์ธ ์์ ์ด ์๋ ๋ฌธ์ ๋ก ๊ฐ์ฃผํ์๊ฒ ์ต๋๊น, ์๋๋ฉด ์ด ๋ฒ์ ํธํ์ด ๊ฐ๊น์ด ์ฅ๋์ ์ ์ง๋ ๊ฒ์ผ๋ก ์์ํ์ญ๋๊น?
์ ๋ iOS ์ฑ์ ์ฐ์ํ ์ ํ ์์คํ ๊ณผ ์ ์์ค ์๋ฏธ ์ฒด๊ณ๋ฅผ ์ํด Rust์์ iOS ์ฑ์ ์ผ๋ถ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์์ผ๋ฉฐ Xcode ๋๋ Rustc์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ ๋๋ง๋ค ๋นํธ์ฝ๋๊ฐ ์๋ ์ผ๋ฐ ํต/์ง์ฐ์ ์ฝ๋งค์ด์ง ์์ ๊ฒ์ ๋๋ค.
@regexident
๋ค๋ฅธ ์ด์ ๋ก ๊ต์ฒด ๊ฐ๋ฅํ LLVM ๋ฒ์ ์ ๊ตฌํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ด ๊ตฌํ๋๋ค๋ฉด Apple, wasm ๋ฐ ๊ธฐํ ๋ชจ๋ ์ ํ์ ๋ํด ๋ณ๋์ ํธ๋์ค๋ฅผ ๋ฐฐ์กํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ ๋๋ค.
์ฐธ์กฐ #45684
https://medium.com/@FredericJacobs/why -im-not-enabling-bitcode-f35cd8fbfcc5 ๋น๋ ํ์ธ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ํธํ ๋ฌธ์ . ๋ฑ.
@burdges ํน์ ์ฑ์ ๊ฒฝ์ฐ ์ด๊ฒ์ ์ ๋์ ์ผ๋ก ๋ฌธ์ ์ ๋๋ค.
๊ทธ๋ฌ๋ watchOS ๋ฐ tvOS์ ๊ฒฝ์ฐ Apple์ ์ค์ ๋ก App Store ์ ์ถ์ ์ํด Bitcode๋ฅผ ์๊ตฌํฉ๋๋ค. ์ ํ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. "ํด๋น ํ๋ซํผ์์ ์ํธํ ๋๋ ์ค์ํ ์์ ์ ์ํํ์ง ๋ง์ญ์์ค" ์ธ์๋. ๋ํ ๋ฏธ๋์ ์ด๋ ์์ ์์ Apple์ด iOS์ฉ Bitcode๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ ค์ํด์ผ ํฉ๋๋ค. ๋๋ ๊ทธ ์์ ์์ ๋ฒฝ๋๋ก ๋ ์ ํ์ ๊ฐ์ง๊ณ ์์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
-C lto --emit=llvm-bc
ํธ๋ฆญ์ ์ฌ์ฉํ์ฌ iOS์ฉ Rust 1.24.0์ผ๋ก ๋น๋๋ฅผ ์๋ํ์ง๋ง ๋ง์ปค์์ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
Undefined symbols for architecture x86_64:
"_backtrace_create_state", referenced from:
std::sys_common::gnu::libbacktrace::init_state::h686c3e443c712b0f in Logger(x86_64.o)
"_backtrace_syminfo", referenced from:
std::panicking::default_hook::_$u7b$$u7b$closure$u7d$$u7d$::h598a932d5bb0d80b in Logger(x86_64.o)
core::iter::iterator::Iterator::position::_$u7b$$u7b$closure$u7d$$u7d$::hbf03153d55553502 in Logger(x86_64.o)
"_backtrace_pcinfo", referenced from:
std::panicking::default_hook::_$u7b$$u7b$closure$u7d$$u7d$::h598a932d5bb0d80b in Logger(x86_64.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
์ด๋ค ์์ด๋์ด๊ฐ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๊น?
ํธ์ง: ๊ฐ public extern fn์ ๋ชจ๋ ์ฝ๋๋ฅผ AssertUnwindSafe
๋ก ๋ํํ์ฌ ํด๋น ๋ฌธ์ ๋ฅผ ์ต์ํ ์ต์ ํ ์ ์๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
libbacktrace๋ Rust ์์ค ํธ๋ฆฌ์ ํฌํจ๋ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค:
https://github.com/rust-lang/rust/tree/master/src/libbacktrace
์ด๋ป๊ฒ๋ ๋นํธ์ฝ๋๋ก ์ปดํ์ผํด์ผ ํฉ๋๋ค.
๋ด ๋ฉํฑ์ฉ์ผ๋ก ๋น๋๋ libbacktrace๋ง ์ฐพ์ ์ ์์ง๋ง ์ ํ OS์ฉ์ ์๋๊ธฐ ๋๋ฌธ์ ํผ๋์ค๋ฝ์ต๋๋ค. ๋ น์ ์ด๋ป๊ฒ ํด๋น ๊ธฐํธ๋ฅผ stdlib์ ์ฝ์ ํฉ๋๊น? ์ด๋ป๊ฒ๋ ์ญ์ถ์ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ์ฌ ์ด๋ฅผ ์ํํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์ต๋๊น? RUST_BACKTRACE ํ๊ฒฝ ๋ณ์๋ฅผ ์ ๊ฑฐํ์ง๋ง ๋์์ด ๋์ง ์์์ต๋๋ค. ๋๋ ๋น์ ์ด ์ญ์ถ์ ์์ด Rustc๋ฅผ ์ปดํ์ผํ ์ ์๋ค๋ ๊ฒ์ ์ฝ์์ง๋ง, ๋ด ํ๋ก์ ํธ์ ํ๋ฌผ.toml ํ์ผ๊ณผ ๊ฐ์ด ๋ ์ฌ์ด ๊ฒ์ ์ํ์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ ์ C ์ปดํ์ผ๋ฌ์ -fembed-bitcode
๋ฅผ ์ ๋ฌํ๋ผ๊ณ ๋งํ๋ฉด์ Rustc ์์ค ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ์ด์์ ์ผ๋ก๋ CFLAGS
์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ถํํ๋ ๋ฐฉ๊ธ ์๋ํ์ง๋ง gcc-rs
(rustc์ ๋น๋ ์์คํ
์์ C ์ข
์์ฑ์ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ)์ ๋ ๊ฐ์ง ๋ฌธ์ ๋ก ์ธํด ์ ๋๋ก ์๋ํ์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๊ฐ์ ํดํน ์ ์ฐจ๋ก ์๋ํ๋๋ก ํ์ต๋๋ค.
cd /tmp/build
cat >ccwrap.py <<END
#!/usr/bin/env python
import os, sys
os.execv('/usr/bin/xcrun', ['clang', '-fembed-bitcode'] + [arg for arg in sys.argv[1:] if arg not in {'-ffunction-sections', '-fdata-sections'}])
END
chmod 755 ccwrap.py
ln -s /usr/bin/ar ar
export CC_aarch64_apple_ios=`pwd`/ccwrap.py
/usr/src/rust/configure --target=aarch64-apple-ios
make
๋นํธ์ฝ๋๊ฐ ํฌํจ๋ libbacktrace.a
( ./build/aarch64-apple-ios/native/libbacktrace/.libs/
)๋ฅผ ์ป์ ์ ์์ต๋๋ค.__LLVM,__bitcode
์ ๋นํธ์ฝ๋๋ฅผ ํฌํจํ๋ ๊ฒ์
๋๋ค __LLVM,__bitcode
์น์
: ๊ทธ๋ฌ๋ฉด .bc ํ์ผ์ ์๋์ผ๋ก ์ปดํ์ผํ๊ณ ๋งํฌํ ํ์๊ฐ ์์ต๋๋ค.
(์ฌ์ค, ์ธ์ฉํ์ ์ค๋ฅ๋ ์ผ๋ฐ ๋ง์ปค ์ค๋ฅ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋นํธ์ฝ๋๊ฐ ํฌํจ๋์ง ์์ ์ผ๋ฐ libbacktrace.a
์ ์ฐ๊ฒฐํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ง๋์น ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ๊ธฐ๊ปํด์ผ ์ถ๋ ฅ ํ์ผ์ด ์์ฑ๋ ๊ฒ์
๋๋ค. ํฌํจ๋ ๋นํธ์ฝ๋๊ฐ ๊นจ์ง)
์์ ์ธ๊ธํ ๋ฌธ์ :
-ffunction-sections
๋ฐ -fdata-sections
๋ฅผ ํด์ ํ ๋ฐฉ๋ฒ ์์ด ์ ๋ฌํฉ๋๋ค. clang์ -fembed-bitcode
์ ๊ฒฐํฉํ ๋ ์ด์ ๋ํด ๋ถํํฉ๋๋ค( -fno-function-sections
๊ฐ ๋์ค์ ์ ๋ฌ๋๋๋ผ๋).๋ฌธ์ ๋ณด๊ณ ์๋ฅผ ์ ์ถํ์ผ๋ฉฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์์ ์ ์ฐจ์์๋ ์ด๋ฌํ ์ธ์๋ฅผ ์ ๊ฑฐํ๋ ๋ํผ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ฒ์งธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ar
๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ์ CC_aarch64_apple_ios
(!?) AR_aarch64_apple_ios
์๋์ผ๋ก ์ค์ ํด๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค.์ต์ cc-rs
( gcc-rs
์์ ์ด๋ฆ ๋ณ๊ฒฝ)์ผ๋ก ์ด๊ฒ์ ์ฌํํ ์ ์์ด์ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ง ์์์ต๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์์ ์ ์ฐจ๋ ar
๋ฅผ ๋์ผํ ๋๋ ํ ๋ฆฌ์ ์ฌ๋ณผ๋ฆญ ๋งํฌํฉ๋๋ค.
์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ค์ ๋ก ๋ฐฑํธ๋ ์ด์ค ํญ๋ชฉ์ด ์๋ ๋ด ์์ ์ ์ฝ๋์ ๋ํ ๋นํธ์ฝ๋๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋นํธ์ฝ๋ ์๋ฒ ๋ฉ ์์ด ์ปดํ์ผ๋ libbacktrace๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๋ด๊ฐ ์๋ํ ํดํน์ผ๋ก ์ด์ dSYM์ ๋ง๋ค๋ ค๊ณ ํ ๋ dsymutil segfaults๋ผ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. dSYM์ด ์๋ ์ผ๋ฐ ์คํ์ ์ ์๋ํ์ง๋ง dSYM ์์ฑ์ด ์ด๋ค ์ด์ ๋ก ์ค๋จ๋์์ต๋๋ค. ๋ด libbacktrace.a๋ฅผ ์ ๊ฑฐํ๊ณ ๋น ์๋ฆฌ ํ์์ ๊ธฐ๋ฅ์ผ๋ก ๋์ฒดํ๋๋ฐ ๋ชจ๋ ๊ฒ์ด ์ ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ด rust lib์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๊ฒ์ LLVM์ ์ ์คํธ๋ฆผ์ผ๋ก ๋ณด๊ณ ๋์ด์ผ ํ๋ dsymutil์ ๋ฒ๊ทธ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. LLDB์์ dsymutil์ ์คํํ๊ณ ์ถฉ๋์ ์ญ์ถ์ ์ ๊ฒ์ํ ์ ์์ต๋๊น? ๋๋ ๋ ๋์ ๋๋ฒ๊ทธ ์ ๋ณด๋ฅผ ์ป์ผ๋ ค๋ฉด ๋๋ฒ๊ทธ ๋ชจ๋์์ LLVM์ ๋น๋ํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌํํ ์ ์์ต๋๋ค.
(์คํก LLVM ์ค์น์ ๋ฐ์ด๋๋ฆฌ๋ llvm-dsymutil
๋ผ๊ณ ํ์ง๋ง ์์ฆ Xcode์ dsymutil
๋ llvm-dsymutil
๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ผ ๋ฟ์
๋๋ค. dsymutil
์๋ ๋ณ๋์ ๋น๊ณต๊ฐ ์์ค ์ ํธ๋ฆฌํฐ์ด์ง๋ง ๋ช ๋
๋์ ํด๋น ๋ฒ์ ์ dsymutil-classic
๋ก ๋ฐฐ์ก๋์์ผ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์์ต๋๋ค.)
@comex ๋ ํธ๊ธฐ์ฌ์, cc
ํฌ๋ ์ดํธ๋ -fembed-bitcode
๋ชจ๋ ๊ฒ์ ์ปดํ์ผํด์ผ ํฉ๋๊น? ๋๋ "๊ณต์" clang์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋นํธ์ฝ๋๋ฅผ ํฌํจํ์ง ์์๋ ๊ด์ฐฎ์ต๋๊น?
(์ฃ์กํฉ๋๋ค ์ ๊ฐ ios ๋ชจ๋ฒ ์ฌ๋ก์ ์ต์ํ์ง ์์ต๋๋ค!)
Rust ์ฝ๋ ์์ฒด์ ๊ฒฝ์ฐ ๊ฐ์ฒด ํ์ผ ๋์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๊น? Clang/๋ง์ปค๊ฐ ์ดํดํ ์ ์๋ ๋ด์ฉ์ธ๊ฐ์?
@alexcrichton
cc
ํฌ๋ ์ดํธ๋-fembed-bitcode
๋ชจ๋ ๊ฒ์ ์ปดํ์ผํด์ผ ํฉ๋๊น? ๋๋ "๊ณต์" clang์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋นํธ์ฝ๋๋ฅผ ํฌํจํ์ง ์์๋ ๊ด์ฐฎ์ต๋๊น?
๊ณต์ clang์ ์ฌ์ฉํ๋ค๊ณ ํด์ ํฌํจ๋ ๋นํธ์ฝ๋๊ฐ ํ์ํ์ง ์์ ๊ฒ์ ์๋๋๋ค. ์คํ๋ ค ๋นํธ์ฝ๋๋ ๋ค์ดํฐ๋ธ ์ฝ๋์ ํจ๊ป Apple์ ์ ๋ก๋๋ ์ฑ ์์นด์ด๋ธ์ ํฌํจ๋๊ณ Apple์ ์๋ฒ ์ธก์์ ์ด๋ฅผ ๋ค์ ์ปดํ์ผํ์ฌ ์๋ฅผ ๋ค์ด ๋ค์ํ ๋ง์ดํฌ๋ก์ํคํ ์ฒ์ ์ต์ ํํ ์ ์์ต๋๋ค.
iOS/watchOS/tvOS์์ ๊ธฐ๋ณธ์ ์ผ๋ก -fembed-bitcode
๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ๊ฒ์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋๋ฒ๊ทธ ๋ชจ๋์์ ๋น๋ํ ๋ -fembed-bitcode-marker
๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค(๋์ ๋๋ ์ถ๊ฐ๋ก ์๊ด ์์). ์ด๊ฒ์ ํฌํจ๋ ๋นํธ์ฝ๋๊ฐ ์ต์ข
์ฑ ์์นด์ด๋ธ์๋ง ํ์ํ๊ณ ์ด๋ฅผ ์๋ตํ๊ธฐ ์ํด ์ปดํ์ผ ์๋๊ฐ ์ฝ๊ฐ ๋นจ๋ผ์ง๊ธฐ ๋๋ฌธ์ clang์ด ์ค์ ๋นํธ์ฝ๋๊ฐ ์๋ ๋๋ฏธ ๋นํธ์ฝ๋ ์น์
๋ง ํฌํจํ๋๋ก ์ง์ํฉ๋๋ค. ์ค์ ๋ก Xcode๋ ์ต์ข
์ฑ ์์นด์ด๋ธ๋ฅผ ๋น๋ํ๋ ๊ฒ ์ด์ธ์ ๋ชจ๋ ๊ฒ์ ๋ํด -fembed-bitcode-marker
๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ฌ์ง์ด ์ต์ ํ๊ฐ ์ผ์ง ๊ฐ๋ฐ ๋น๋์กฐ์ฐจ๋ - ํ์ง๋ง cc
์๋ "์ง์ง ์ต์ข
๋ฆด๋ฆฌ์ค"๋ผ๋ ๋ณ๋์ ๊ฐ๋
์ด ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋", ๋๋ฒ๊ทธ ๋ชจ๋์์ ๊ทธ๋ฅ ์ ๋ฌํด์ผ ํฉ๋๋ค. ์ต์ข
๋น๋์ ๋นํธ์ฝ๋๊ฐ ํ์ํ์ง ์๋๋ผ๋ ๋นํธ์ฝ๋๋ฅผ ํฌํจํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
Rust ์ฝ๋ ์์ฒด์ ๊ฒฝ์ฐ ๊ฐ์ฒด ํ์ผ ๋์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๊น? Clang/๋ง์ปค๊ฐ ์ดํดํ ์ ์๋ ๋ด์ฉ์ธ๊ฐ์?
clang๊ณผ ld ๋ชจ๋ ์
๋ ฅ์ผ๋ก ์ ๋ฌ๋ ์์ ๋นํธ์ฝ๋ ํ์ผ์ ์ง์ํฉ๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก LTO๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ( -flto
) ์ฌ์ฉ๋๋ฉฐ, ์ด ๊ฒฝ์ฐ clang์ด ์์ฑํ๋ .o ํ์ผ์ Mach-O๊ฐ ์๋๋ผ ์ค์ ๋ก ์์ ๋นํธ์ฝ๋์
๋๋ค. (์ด๊ฒ์ ์ฌ์ ํ โโ์ผ๋ฐ lipo ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.) ๊ทธ๋ฌ๋ ์ด๊ฒ์ __LLVM,__bitcode
์น์
์ ์ฑ์์ง ๋นํธ์ฝ๋๊ฐ ์๋ Mach-O๋ก ๊ตฌ์ฑ๋ "์๋ฒ ๋๋ ๋นํธ์ฝ๋" ํ์๊ณผ ๋ณ๊ฐ์
๋๋ค. ์ผ๋ฐ์ ์ธ ์น์
์ ๊ธฐ๋ณธ ์ฝ๋์ ์ถ๊ฐํฉ๋๋ค. ์ด ํ์์ LTO๊ฐ ๊บผ์ ธ ์์ ๋ ๊ฐ์ฒด ํ์ผ์์ ์ฌ์ฉ๋๋ฉฐ LTO ์ค์ ์ ๊ด๊ณ์์ด ์ต์ข
๋งํฌ๋ ์คํ ํ์ผ์ด๋ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉ๋ฉ๋๋ค. (LTO๊ฐ ์ผ์ ธ ์์ผ๋ฉด ๋ง์ปค๊ฐ ์ด ์น์
์ ์์ฑํ๋ ์ญํ ์ ํฉ๋๋ค. LTO๊ฐ ๊บผ์ ธ ์์ผ๋ฉด ๋ง์ปค ๋ ๋จ์ผ ๊ฒฐํฉ์ ์์ฑํ๋ ๋์ ๋ค๋ฅธ ์น์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ ๊ฐ์ฒด ํ์ผ์ ) ํธ์ง: ์ค์ ๋ก ๋ ๋นํธ ์ฝ๋ ์น์
์ xar ์์นด์ด๋ธ๋ฅผ ์์ฑํ๊ณ __LLVM,__bitcode
์น์
์ ๋จ์ํ ์ฐ๊ฒฐํฉ๋๋ค. ๋นํธ์ฝ๋ ๋ชจ๋.__LLVM,__bundle
๋ผ๋ ์น์
์ ๋ฃ๋ ์ข ๋ ๋ณต์กํ ์์
์ ์ํํฉ๋๋ค. ์ด์จ๋ ์ฐ๋ฆฌ๊ฐ ์ ๊ฒฝ ์จ์ผ ํ ๊ฒ์ ์๋๋๋ค.
์ด์์ ์ผ๋ก๋ Rustc๊ฐ ์์ ๋นํธ์ฝ๋๊ฐ ์๋ iOS์์ ๊ธฐ๋ณธ์ ์ผ๋ก "ํฌํจ๋ ๋นํธ์ฝ๋"๋ฅผ ์์ฑํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ผ๋ฉฐ ์ฆ๋ถ ์ปดํ์ผ์ด ์ค๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ํนํ ๋๋ฏธ ๋นํธ์ฝ๋ ์น์
ala -fembed-bitcode-marker
์์ฑํ ์ ์๋ ๋๋ฒ๊ทธ ๋ชจ๋์์ ๋ง์ปค๊ฐ ๊ฐ์ฒด๋ฅผ ์ฑ์ฐ๊ธฐ ๋๋ฌธ์ ๋ฆด๋ฆฌ์ค ๋ชจ๋์์๋ ์ ์ฌ์ ์ผ๋ก ๊ฐ๋ฅํฉ๋๋ค. ' ๋งํฌ ํ์์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ์ํํ๋ ๋์ ๋นํธ์ฝ๋ ์น์
์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
clang์ด ํฌํจ๋ ๋นํธ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/BackendUtil.cpp#L1242
๋น๊ต์ ๊ฐ๋จํจ - ๋ฐฑ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ํ์ฌ LLVM ๋ชจ๋์ ๋นํธ์ฝ๋๋ก ๋คํํ ๋ค์
__LLVM,__bitcode
์น์
์ ๋ฐฐ์น๋ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ญ ๋ณ์(๊ฐ์ ๋ชจ๋์ ์์)์ ๋ฃ์ต๋๋ค. ์ผ์ข
์ ํดํค ๋์์ธ์ฒ๋ผ ๋ณด์ด์ง๋ง(ํ๋ก ํธ์๋์์ ์๋์ผ๋ก ์ด ์์
์ ์ํํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?), rustc์์ ์ฌํํ๊ธฐ์๋ ๋๋ฌด ์ด๋ ต์ง ์์์ผ ํฉ๋๋ค.
@comex ๊ทธ ์ ๊ทผ ๋ฐฉ์์ ์๋ฏธ๊ฐ ์์ง๋ง(๋ฐฉ๊ธ ๋ง๋ #48833 ์ฐธ์กฐ) Apple์ clang์ ๋ฐฑ์๋๋ก ์ฌ์ฉํ๋ ๋ฐ์๋ ์ด์ ๊ฐ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ด์ ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ์๊ฐํ๊ณ ์์ต๋๋ค. ๋ํ ๋ด์ฅ๋ ๋นํธ์ฝ๋์์ ์ปดํ์ผํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ฌ์ด๊ฐ์?
@michaeleiselsc ์ฃ์กํฉ๋๋ค. "์๋ฒ ๋๋ ๋นํธ์ฝ๋์์ ์ฐ๋ฆฌ ์์ ์ ์ปดํ์ผ"ํ๋ค๋ ๋ง์ด ๋ฌด์จ ๋ป์ธ์ง ์ดํด๊ฐ ๋์ง ์์ต๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋นํธ์ฝ๋๊ฐ ํฌํจ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ App Store์ ์ ๊ณตํ๋ ๋์ Apple clang์ ์ฌ์ฉํ์ฌ ๋นํธ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ ์์ฒด์ ์ผ๋ก ๋น๋ํ๋ ์ด์ ๋ ์์ต๋๋ค. ๋ด๊ฐ ๊ด์ฌ์ ๊ฐ๊ณ ์๋ ๋ ๊ฐ์ง ์ด์ ์ Apple clang์ ๋ค์ด์คํธ๋ฆผ ์์ ์ฌํญ๊ณผ clang ์๋ ์ (์: ์ ์ฉ ๋ฒ์ ์๋ ์ )๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
@comex ok ๊ทธ๋์ ์กฐ๊ธ ํ๊ณ ์ถฉ๋ถํ ์ฌ์ด ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋ช ๊ฐ์ง ์ง๋ฌธ์ด ์์ต๋๋ค.
-fembed-bitcode-marker
๊ฐ ์ ์ค์ํ๊ฐ์? ๋ก์ปฌ์์ clang์ ์ฌ์ฉํ๋ฉด ๋น ์ ์ ์ ์น์
์ผ๋ก ๋ด๋ณด๋
๋๋ค. ๊ทธ ์น์
์๋จ ๋ฌด์ธ๊ฐ์ ๋จ์ํ ์กด์ฌ๋ฅผ ์๋ฏธ ํ๋๊ฐ? ์น์
์ด ์์ผ๋ฉด iOS์ ์ผ๋ถ ๋๊ตฌ๊ฐ ์ค๋จ๋ฉ๋๊น? (๊ทธ๋ฌ๋ ๋น์ด ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์น์
๋ด๋ถ๋ฅผ ๋ณด์ง ์์ต๋๊น?__cmdline
์น์
์ด ํ์ํ์ง ์๊ณ ๊ณ์ญ๋๊น? -fembed-bitcode
๋ ๋ฐ์ด๋๋ฆฌ์ ๋ช
๋ น์ค ํ์์ ํฌํจํ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ์ด๊ฒ์ ์๋ง๋ Rustc์ ๋ช
๋ น์ค์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๋ฌด์์ ๋ฃ์์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ด๋ค ๋๊ตฌ๊ฐ ์ด๊ฒ์ ๋ณผ ์ ์์ต๋๊น? iOS์์ -fembed-bitcode=bitcode
๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ์ด ์ค๋จ๋ฉ๋๊น?-fembed-bitcode-marker๊ฐ ์ ์ค์ํ๊ฐ์?
๋๋ ๊ทธ๊ฒ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ํ ๋ด๊ธฐ ์ํด ์์ค ์ฝ๋์ ์ํด ์ฌ์ฉ์ด ์ฌ์ฉ ๋นํธ ์ฝ๋๋ก ์ถ์ ๋๋ ๋นํธ ์ฝ๋๊ฐ ์ค์ ๋ก ์ปดํ์ผ๋์ง ์์ ์๊ฐํฉ๋๋ค. ๋์ค์ ๊ทธ๋ฌํ ํ๋ก์ ํธ๋ฅผ ์์นด์ด๋ธํ๋ ค๊ณ ํ๋ฉด ld๊ฐ ์ค๋ฅ์ ํจ๊ป ์คํจํฉ๋๋ค.
์ด๊ฒ์ ํญ์ ํ์ฑํํ๊ณ ์ถ์์ง ์ฌ๋ถ์ ๋ํ ์ง๋ฌธ์ ๋ํด ์ฐ๋ฆฌ๊ฐ ์ฃผ์ํด์ผ ํ ๋ช ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๋ถ๋ช ํ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋๊ตฐ๊ฐ HockeyApp๊ณผ ๊ฐ์ ๋ฒ ํ ์ฑ ๋ฐฐํฌ ํ๋ซํผ์ ์ ์ถํ๋ฉด HockeyApp์์ ํด๋น ๋นํธ์ฝ๋ ์น์ ์ ์ ๊ฑฐํ๊ฑฐ๋ ๋ฒ ํ ํ ์คํฐ๊ฐ ํ์ํ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ํฐ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๊น?
@mitsuhiko ์, ์์ด๋์ด๋ ํ์ฌ ์ค์ ๋ก ๋นํธ์ฝ๋๊ฐ ํ์ํ์ง ์์ ๋น๋๋ฅผ ํ ์คํธํ๊ณ ์๋ ๊ฒฝ์ฐ์๋ ๋ง์ปค๊ฐ ๋น๋๊ฐ ๋นํธ์ฝ๋์ ๋ํด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋นํธ์ฝ๋๋ฅผ ์ธ๊ธํ์ง ์๊ณ C ํ์ผ์ ์ปดํ์ผํ๊ณ -fembed-bitcode-marker
์ ๋งํฌํ๋ ค๊ณ ํ๋ฉด ๋ค์์ ์ป์ต๋๋ค.
$ clang -c -o test.o test.c
$ clang -dynamiclib -o test.dylib test.o -fembed-bitcode-marker
ld: warning: all bitcode will be dropped because 'test.o' was built
without bitcode. You must rebuild it with bitcode enabled (Xcode
setting ENABLE_BITCODE), obtain an updated library from the vendor,
or disable bitcode for this target.
์ฒซ ๋ฒ์งธ ์ค์๋ -fembed-bitcode-marker
๋ฅผ ์ ๋ฌํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ์ฌ๋ผ์ง๋๋ค.
@alexcrichton __cmdline
... ํ ... ๋ง์ปค๊ฐ ์์ด์ผ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค("๋นํธ ์ฝ๋ ์์ฑ" ๊ฒ์).
๊ทธ๋ฌ๋ ์ค์ ๊ฐ์น์ ๋ํด ๊ด์ฌ์ ๊ฐ๋ ๊ฒ์ ์์ต๋๋ค. ์๋ง๋ ๋๋ฏธ ๊ฐ์ ๊ฑฐ๊ธฐ์ ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
#48896์ ๋ณํฉํ์ฌ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๊น?
๋๋ ์ผ๊ฐ ๋น๋์์ ์ด๊ฒ์ ๊ฐ์ง๊ณ ๋์๊ณ Xcode๋ก ์์นด์ด๋ธ๋ฅผ ์๋ํ ๋๊น์ง ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. Rust ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๋ ฅ์ fembed-bitcode-marker๊ฐ ์ถ๊ฐ๋์ง๋ง fembed-bitcode๋ ์ถ๊ฐ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค์์ ์ฌ์ฉํ์ฌ cargo lipo --release
๋ก ์ปดํ์ผ๋ฉ๋๋ค.
$ cargo --version
cargo 1.27.0-nightly (af3f1cd29 2018-05-03)
$ cargo lipo --version
cargo-lipo 2.0.0-beta-2
$ rustc --version
rustc 1.27.0-nightly (565235ee7 2018-05-07)
ld: '/Users/chrisbal/Documents/Beach/rust-universal-template/target/universal/release/libexample.a(example_generic-be72fb1769c1779b.example_generic6-152d14edfb6970f54250733c74e59b7.rs.rcgu.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
otool -arch arm64 -l /Users/chrisbal/Documents/Beach/rust-universal-template/target/universal/release/libexample.a | grep bitcode
์คํํ๋ฉด ๋ง์ sectname __bitcode
๊ฐ ๋ฐ์ํ์ง๋ง ์ด๊ฒ์ด ๋ง์ปค๊ฐ ์๋๋ผ ์ค์ ๋นํธ์ฝ๋์ธ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ค์ฒฉ๋ ํฌ๋ ์ดํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ๋ด๋ถ "์ผ๋ฐ" ํฌ๋ ์ดํธ์ ๋นํธ์ฝ๋ ํ๋๊ทธ๊ฐ ํ์๋์ง ์์ต๋๊น?
ํธ์ง: ๋ค์์ ๋ฌธ์ ๋ฅผ ์์ฐํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋๋ค. https://github.com/Raizlabs/rust-universal-template/tree/879e7412d729e8963586c5b083d51b09733aec32
@chrisballinger , ์ถ๊ฐ ํ๋๊ทธ์ ํจ๊ป ์๋ํฉ๋๋ค. ์ฐธ์กฐ
RUSTFLAGS="-Z embed-bitcode" cargo lipo --release
$ cargo --version
cargo 1.28.0-nightly (f352115d5 2018-05-15)
$ cargo lipo --version
cargo-lipo 2.0.0-beta-2
$ rustc --version
rustc 1.28.0-nightly (952f344cd 2018-05-18)
๊ทธ๋ฌ๋ arm7 ์์น์ ๋ํด์๋ง ๋ค๋ฅธ ์ปดํ์ผ ์ค๋ฅ๊ฐ ์์ต๋๋ค.
.rs.rcgu.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
arm7 arch
์์ ํ๋ ๋ฐฉ๋ฒ ์์๋ ๋ถ ๊ณ์ ๊ฐ์?
์ฌํ๊ฒ๋ @chrisballinger ์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค.
ld: '/sandbox/target/universal/release/librgame.a(std-da6dba40351cda22.std3-d36cd881bae00a8b5fc36289b5737f78.rs.rcgu.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
๋๋ ๊ทธ๊ฒ์ ์ปดํ์ผ ์๋ํ์ต๋๋ค RUSTFLAGS="-Z embed-bitcode" cargo lipo --release
ํ๊ณ ๊ทธ๊ฒ์ ์ค์ .cargo/config
. ๊ทธ๋๋ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
`
Executing: "cargo" "build" "--target" "x86_64-apple-ios" "--lib" "--features" "" "--color" "auto" "--release" "--verbose"
Compiling libc v0.2.42
Compiling rand_core v0.2.1
Running `rustc --crate-name libc /Users/aleksandrivanov/.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.42/src/lib.rs --crate-type lib --emit=dep-info,link -C opt-level=3 --cfg 'feature="default"' --cfg 'feature="use_std"' -C metadata=dce309634355ac97 -C extra-filename=-dce309634355ac97 --out-dir /Users/aleksandrivanov/Sandbox/Projects/tetris/rgame/target/x86_64-apple-ios/release/deps --target x86_64-apple-ios -L dependency=/Users/aleksandrivanov/Sandbox/Projects/tetris/rgame/target/x86_64-apple-ios/release/deps -L dependency=/Users/aleksandrivanov/Sandbox/Projects/tetris/rgame/target/release/deps --cap-lints allow -Zembed-bitcode`
...
์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ์ด ๊ณ ์ C++ ์์ด ์ฑ์ ๊ณต์ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌ๊ฒ ๊ณ ๋ คํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ์ต์ ์ ๋๋ค.
@chrisballinger , https://github.com/rust-lang/rust/issues/52686 ๊ณผ ๊ด๋ จ์ด
@volodg ์๋์, ์ด ๋ฌธ์ ๋ ์ผ๋ง ์ ์ ๋ฌธ์ ์ ๋๋ค.
#48896์ ๋ณํฉ์ผ๋ก ์ฆ์ ์๋ํด์ผ ํฉ๋๊น?
์ ๋ 1.29.1์ ์ฌ์ฉ ์ค์ด๊ณ ๊ฐ์ฒด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํธ์ฝ๋๊ฐ ํฌํจ๋์ด ์์ง ์์ต๋๋ค. @volodg ๊ฐ ์์ ์ธ๊ธํ๋ฏ์ด RUSTFLAGS="-Z embed-bitcode"
์ฌ์ฉํ์ฌ ๋
น์ ํฌํจํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ด๊ฐ ๊ฒฝํํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด Rust์ ์์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ(compiler_builtins, std)๊ฐ embed-bitcode๋ก ์ปดํ์ผ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ง๋ Embed-bitcode์ ํจ๊ป xargo๋ฅผ ์ฌ์ฉํ์ฌ iOS ํ๊ฒ์ ์ฌ๊ตฌ์ถํ๋ ๊ฒ์ด ํจ๊ณผ๊ฐ ์์ ์ ์์ง๋ง ์ ๋ ์๋ํ์ง ์์์ต๋๋ค.
๋๋ ๋น์ ์ด ์ ์ํ๋๋ก xargo
์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ์ง๋ง ๋ฌธ์ ๋ ์ฌ์ ํ ์ฌ๊ธฐ์์๋ ๊ฒ ๊ฐ์ต๋๋ค :(
์ด Xargo.toml
[dependencies]
std = {}
[target]
features = ["jemalloc"]
๋ํ ์ด๊ฒ์ Cargo.toml
:
[profile.release]
panic = "abort"
๋ชจ๋ ๋์์ ๋ํด xargo build --release --target $TARGET
๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผํ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ lipo
๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ฌ์ ํ ๋ง์ปค ์ค๋ฅ๊ฐ ์์ต๋๋ค.
ld: '../../cargo/target/universal/libgreetings.a(greetings-ceeec73d35f7dbe0.greetings.9kcaav8v-cgu.2.rcgu.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
xargo ๊ฒฝ๋ก๋ก ์กฐ๊ธ ๋ ๋์๊ฐ์ต๋๋ค.
๋ด Xargo.toml
[dependencies]
std = {}
๋ด Cargo.toml
[profile.release]
panic = "abort"
ํ์ํ์ง ๋ชจ๋ฅด๊ฒ ์ผ๋ xargo ๋ฌธ์์์ ๋ช
์์ ์ผ๋ก extern crate compiler_builtins
์ฌ์ฉํด์ผ ํ๋ฉฐ ์ด๋ฅผ lib.rs์ ์ถ๊ฐํ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ปดํ์ผํ๊ธฐ ์ํด RUSTFLAGS="-Z embed-bitcode" xargo build --target $TARGET --release
๋ก ์ปดํ์ผํ์ต๋๋ค. core/std/compiler_bultins๋ฅผ ๋น๋ํ๋์ง ํ์ธํ์ญ์์ค. xargo clean
๋ ๋ด๊ฐ ๊ฒฝํํ ๊ฒ์์ ์ด์ ๋น๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฆฌํ์ง ์์ผ๋ฏ๋ก ๋ค๋ฅธ Xargo.toml
์กฐ์ ์ ์๋ํ ๋ std๋ฅผ ๋ค์ ์ปดํ์ผํ๋ ค๋ฉด rm -rf ~/.xargo
๊ฐ ํ์ํ์ต๋๋ค.
๊ทธ๋ฌ๋ Xcode 10์ ๋ณด๊ดํ๋ฉด ( armv7
๋งํฌ์์) ๋ค์์ ์ป์ต๋๋ค.
Intrinsic has incorrect argument type!
void (i8*, i8, i32, i1)* @llvm.memset.p0i8.i32
Intrinsic has incorrect argument type!
void (i8*, i8*, i32, i1)* @llvm.memcpy.p0i8.p0i8.i32
Intrinsic has incorrect argument type!
...
(lots of it)
...
LLVM ERROR: Broken module found, compilation aborted!
clang: error: linker command failed with exit code 1 (use -v to see invocation)
๋ฒ๊ทธ๊ฐ LLVM์ ์์กดํ๋ค๋ ์๋ฏธ์ ๋๊น?
ํธ์ง : ์ด ๋ฌธ์ ๋ฅผ ์งํํ๋ ๋ฐ ์ด๋ป๊ฒ ๋์์ด ๋ฉ๋๊น?
์ต๊ทผ์ ์ด๊ฒ์ ์๋ํ ์ฌ๋์ด ์์ต๋๊น? armv7์ด ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์๋ฐ์?
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ. ์ ๋ ์ด ์ค๋ ๋๋ฅผ ํ๋์ ํ๋ก์ฐํด ์์ผ๋ฉฐ Apple ๋นํธ์ฝ๋๊ฐ Rust์์ ์ง์๋๋ ๊ฒ์ ๋ณด๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค. ์ง๊ธ๊น์ง ์ด ์์
์ ์ํํ ์ ์๋ ์ฌ๋์ด ์์ต๋๊น? ํ์ฌ ๋๋ฝ๋ ๊ฒ์ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ๋์ธ ์ ์์ต๋๊น?
๊ฐ์ฌ ํด์!
๋ช ์๊ฐ ๋์ ์ด ๋ฌธ์ ๋ฅผ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ Rust์ ๋นํธ์ฝ๋ ์๋ฒ ๋ฉ์ด Xcode์์ ์๋ํ์ง ์๋ ์ด์ ๋ฅผ ์ฐพ์์ต๋๋ค. ์งง์ ๋๋ต์ Xcode์ LLVM ๋ฒ์ ์ LLVM 6.0 ๋นํธ ์ฝ๋๋ฅผ ์์ํ๋ ๋ฐ๋ฉด Rust๋ 2018๋ 7์ ์ LLVM 7.0์ผ๋ก ์ถฉ๋ ํ๋ค๋ ๊ฒ ์ ๋๋ค.
์ด์ ๊ธด ๋ต๋ณ์ด...
LLVM 7.0์ changelog ์์ ๋ณผ ์ ์๋ฏ์ด @llvm.memcpy
, @llvm.memmove
๋ฐ @llvm.memset
๋ํ ์๋ช
์ ๋ณ๊ฒฝํ์ผ๋ฉฐ Xcode ๋น๋ ์ค๋ฅ๋ ์๋ชป๋ ์ธ์ ์ ํ์ ๋ํด ๋ช
ํํ์ต๋๋ค. ๋ด ์ด์ ๋๊ธ์์ .
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , Kotlin Native๋ 2018๋ 10์ ์ Embed-bitcode์ ๋ํ ์ง์์ ์ถ๊ฐํ์ผ๋ฉฐ ๋ถ๋ช ํ Xcode์์ ์ ์๋ํ๊ณ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ Kotlin์ด ์ฌ์ ํ LLVM 6.0์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๊ฑธ ๋ณด๊ณ 7.0์ผ๋ก ์ฌ๋ผ๊ฐ๊ธฐ ์ ์ ๊ตฌ ๋ฒ์ ์ Rust๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ์ ์๋ํ์ต๋๋ค. nightly-2018-06-01-x86_64-apple-darwin
์๋ํ๋๋ฐ ์ฑ๊ณตํ๋ฉด ์ปดํ์ผ๋ฉ๋๋ค!
๋๋ ๋ํ ์ฑ๊ณตํ์ง ๋ชปํ Xargo๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ปดํ์ผ์ ์๋ํ์ต๋๋ค. ๋ชจ๋ ์ข ์์ฑ์ ๋นํธ์ฝ๋ ์๋ฒ ๋ฉ์ผ๋ก ์ปดํ์ผํด์ผ ํฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, Apple์ด LLVM ๋ฒ์ ์ ๋ฒํ์ง ์๋ ํ, ์๋ฒ ๋๋ ๋นํธ์ฝ๋์ ๋ํ ์ง์์ ๊ณง ๋ณด๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค... ๋๊ตฐ๊ฐ ์๋ฒ ๋๋ ๋นํธ์ฝ๋๋ฅผ 6.0์ ๋นํธ์ฝ๋๋ก ๋ณํํ๋ ์๋ฆฌํ ๋ฐฉ๋ฒ์ ์ฐพ์ง ์๋ ํ...
@appaquet ์์ธํ ์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๊ทธ๊ฒ์ ๋์๊ฒ ์์ฃผ ์ ๋น๋ก์ด ์ผ์ด์๊ณ ๋น์ ์ฒ๋ผ ๊น์ด ์ ์ํ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ๋ ์๊ฐํ์ง ์์ต๋๋ค. Apple์ด LLVM ๋ฒ์ ์ ๋ฒํ๋ฉด ์๋์ ์์ํด์ผ ํ๋ค๋ ์ฌ์ค์ ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
@appaquet๋ ์ ๋ช ์พํ ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์ฌ๋ฐ๋ฅธ ์ผ์ ํ๊ธฐ ์ํด Apple์ ์์กดํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋ฐ์ผ์ฉ ๋ฉํฐํ๋ซํผ์ ๊ด์ฌ์ด ์๊ณ ๋๋ถ๋ถ์ ์ ๋งํ ์๋ฃจ์ (React Native, Flutter, Kotlin/Native, Rust)์ ๋น๊ตํ ์ฌ๋์ ์ธก๋ฉด
๋ค์ดํฐ๋ธ์ ๋ฐ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ฆฌ์ง๋ C++๋ก ์์ฑ๋๊ณ ๋ฐํ์์์ JS ์ฝ๋๋ฅผ ํด์ํ๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ๋นํธ์ฝ๋๋ฅผ ์ง์ํฉ๋๋ค.
์ค๋ฃฉ ๊ฑฐ๋ฆฌ๋ค. ์์ง ๋นํธ์ฝ๋๋ฅผ ์ง์ํ์ง ์์ต๋๋ค - https://github.com/flutter/flutter/issues/15288
์ฝํ๋ฆฐ/๋ค์ดํฐ๋ธ. JetBrains๋ ๋ชจ๋ฐ์ผ ํ๋ซํผ์ ์ฐ์ ์์๋ก ๊ณ ๋ คํ๊ณ ์์ผ๋ฉฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋นํธ์ฝ๋ ๋ง์ปค์ผ ๋ฟ(์์ง ์ ์ฒด ๋นํธ์ฝ๋๊ฐ ์๋) ์์ ์ ์์ํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค. https://github.com/JetBrains/kotlin-native/ ์ฐธ์กฐ pull/1564 ๋ฐ https://github.com/JetBrains/kotlin-native/issues/1202#issuecomment -444022513
๋ น. LLVM 7์ฉ ๋นํธ์ฝ๋๋ฅผ ์ง์ํ์ง๋ง Apple์ ๋ฒ์ 6์ ์ฌ์ฉํฉ๋๋ค.
๋น์ฆ๋์ค ๋ก์ง๊ณผ UI ํฌ๋ก์ค ํ๋ซํผ์ ๋ชจ๋ ๊ฐ๊ณ ์ถ๋ค๋ฉด React Native ๋๋ Flutter๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ง์ ์ฌ๊ฐํ ์ฑ์ ๊ฒฝ์ฐ ์ด ๊ฒฝ๋ก๋ ๋๋ฌด ์ํํฉ๋๋ค. React Native๋ ์ฑ๋ฅ์ด ์ถฉ๋ถํ์ง ์์ผ๋ฉฐ API ๋ฐ ์ข ์์ฑ ์์ ์ฑ ์ด ๋ฌธ์ ์ ๋๋ค(v1.0์ด ์ฌ๊น์?). Flutter๋ ์ฝ๊ฐ ๋ฏธ์ํ์ง๋ง ์ ์ ๋ ๋ง์ ๊ฒฌ์ธ๋ ฅ์ ์ป๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ์ด๋ค ์ข
๋ฅ์ ๋ชจ๋์์ ๋น์ฆ๋์ค ๋ก์ง๋ง ๊ณต์ ํ๊ณ (์: C++ ๋ฐ JNI/Obj-C++๋ก ์ํํ ์ด์ ๋ํ ์ฑ์ฒ๋ผ) ๊ทธ ์์ ์ง์ ํ ๋ค์ดํฐ๋ธ UI๋ฅผ ๊ตฌ์ถํ๋ ค๋ ๊ฒฝ์ฐ ์ฒ์์๋ 4๊ฐ์ง ๋ชจ๋ ์ค์์ ์ ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ JS<->Native ์ฌ์ด์์ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๊ธฐ ์ํด ์์ ํ JavaScriptCore์ ๋ธ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฝ๊ฐ ์ค๋ฒ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ React Native๋ฅผ ์ง์๋๋ค(์ด ๋ธ๋ฆฌ์ง๋ฅผ ์ด๊ธฐํํ๋ ๊ฒ๋ ์๋นํ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค). Flutter๋ ์ ์ฌ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ง๋ง ๊ทธ๋ฐ ์์ผ๋ก ์๋๋ ๊ฒ์ ์๋๋ฏ๋ก ๋ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๊ธฐ ์ํด UI ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์
๋๋ค. ๋ํ ๋นํธ ์ฝ๋๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
Rust์ Kotlin/Native๋ ๋ชจ๋ ์ด ํ์ ์์ฅ์ ๋ชฉํ๋ก ํ๊ณ ์์ผ๋ฉฐ, ์ ์ ํ ๋๊ตฌ๋ฅผ ๊ฐ์ถ๊ณ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ ๋ฐ์ด๋๋ฆฌ(์ฑ๋ฅ ๋ฐ ๊ณต๊ฐ!)๋ฅผ ์์ฑํฉ๋๋ค. Bitcode๋ ๋ชจ๋ฐ์ผ ํ๋ซํผ์์ ๋ค์ค ํ๋ซํผ ๋ชจ๋์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ธ์ด๋ก Rust๋ฅผ ์ฑํํ๋ ค๋ ์ฌ๋๋ค์๊ฒ ํฐ ๋ฌธ์ ์
๋๋ค. ์ด์ Kotlin/Native์ ์ด์ ์ด ์์ต๋๋ค.
iOS ๊ฐ๋ฐ์์๊ฒ ๋นํธ์ฝ๋๊ฐ ๋งค์ฐ ์ค์ํ ์ด์ ๋ฅผ ์์ฝํ์๋ฉด. tvOS ๋๋ watchOS์์ ์๋ฌด ๊ฒ๋ ์ธ ์ ์์ต๋๋ค. ๋ฐ์ด๋๋ฆฌ๋ก ๋ฐฐํฌ๋๋ ๋ง์ ํ์ฌ ํ๋ ์์ํฌ์๋ ๋นํธ์ฝ๋๊ฐ ํ์ฑํ๋์ด ์์ต๋๋ค. ์ผ๋ถ ๋ณด์ ๊ฐ์ฌ์์๋ ์ด๋ฅผ ์๊ตฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก Apple์ด "๋ด๋ ๋ถํฐ ๋นํธ์ฝ๋๊ฐ ์์ ํ ํฌํจ๋์ง ์์ ์ฑ์ ๋ ์ด์ ํ์ฉํ์ง ์์ต๋๋ค"๋ผ๊ณ ๋งํ ๋๋ง๋ค ๋ชจ๋ ์ฌ๋์ด ํ์ด๋จธ๋ฅผ ๋ฐ์ต๋๋ค.
์ด์ ์ฐ๋ฆฌ๋ ์ฌ๋ฐ๋ฅธ ์ผ์ ํ๊ธฐ ์ํด Apple์ ์์กดํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์, ๋ง์ต๋๋ค. ์ด๊ฒ์ด Apple์ด ์
๋ช
๋์ ๊ฒ์
๋๋ค ;)
๊ฐ์ฅ ์ข์ ์๋ฃจ์
์ด ๋ฌด์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง(์ผ์์ ์ผ๋ก LLVM 6์ผ๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ ์ ํ ์ฌํญ์ด ์๋๋๋ค. ๋ง์ฃ ?) Rust๋ iOS ๋ฐ ๋ชจ๋ฐ์ผ ํฌ๋ก์ค ํ๋ซํผ ๊ฐ๋ฐ์๋ฅผ ์์ ํ ์๊ณ ์์ต๋๋ค.
@oleksandr-yefremov์ ๋ํ ์์ธํ ์ค๋ช ์ ๋ง ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ฃผ์ ์ ๋ํด ์กฐ๊ธ ์ฝ์๊ณ ๋ค์๊ณผ ๊ฐ์ ํฅ๋ฏธ๋ก์ด ์๊ฒฌ์ ๋ฐ๊ฒฌํ์ต๋๋ค. https://gist.github.com/yamaya/2924292#gistcomment -2738480
LLVM ๋ฒ์ ์ XCode์์ ์ฌ์ฉ๋๋ Swift ๋ฒ์ ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์ง๊ธ๊น์ง ๋ค์ ์ง์์ด ์ ์ฉ๋์์ต๋๋ค.
Xcode 8.3 --> swift 3.1 --> llvm 4.0.0
Xcode 9.0 --> swift 4.0 --> llvm 4.0.0
Xcode 9.3 --> swift 4.1 --> llvm 5.0.2
Xcode 10.0 --> swift 4.2 --> llvm 6.0.1
swift-5.0-branch
๋ณด๋ ๋์ LLVM์ ์ ์ธ๋ ๋ฒ์ ์ด 7.0.0
์์ ์์์ต๋๋ค. https://github.com/apple/swift-llvm/blob/swift-5.0-branch/ CMakeLists.txt#L25 -L33
์ฌ๊ธฐ์ ๋ ๋ง์ ์ฐจ๋จ๊ธฐ๊ฐ ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง Rust๋ฅผ ์ฌ์ฉํ์ฌ Bitcode ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ถ๋ ฅํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค ๐
Xcode 10.2์๋ Swift 5.0์ด ํฌํจ๋ ๊ฒ์ด๋ฉฐ ๊ณง ์ถ์๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํํธ LLVM 8.0์ ๋ค์ ์ฃผ์ ์ถ์๋ ์์ ์ ๋๋ค. Rust๋ Apple์ด ์ฌ์ฉํ๊ธฐ ์ ์ ์ ๊ทธ๋ ์ด๋ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
Rust๊ฐ ๋นํธ์ฝ๋๋ฅผ ์ ์ ํ๊ฒ ์ง์ํ๋ ค๋ฉด ๊ณ ์ ๋ ๋ฒ์ ์ LLVM์ ์ฌ์ฉํ๋ Rust์ Apple ARM ์ํคํ ์ฒ ๋น๋๊ฐ ํ์ํฉ๋๋ค(https://github.com/apple/swift-llvm ๋ฆฌํฌ์งํ ๋ฆฌ์ ์์ ์ ์์ - Apple์ ์ฌ์ฉํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฆด๋ฆฌ์ค๋ LLVM ํจํค์ง์ด์ง๋ง ์์ฒด ๋ถ๊ธฐ). ํด๋น ๋ฒ์ ์ LLVM์ Apple์ด ๋ค๋ฅธ LLVM ๋ฒ์ ์ผ๋ก Xcode์ ์๋ก์ด ์ต์ข ๋ฒ์ ์ ์ถ์ํ ๋๋ง ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
Btw, ์ต์ Rust๋ LLVM 6์ผ๋ก ๋น๋ํ ์ ์์ผ๋ฏ๋ก ํ์คํ ์คํ ๊ฐ๋ฅํ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. https://github.com/rust-lang/rust/blob/master/src/bootstrap/native.rs#L282
LLVM์ ํ์ ๋ฒ์ (LLVM 6์ฉ ๋ฒ์ : https://github.com/rust-lang/rust/issues/55842)์ ์
๋ฐ์ดํธํ๊ธฐ ์ํด ๋ฌธ์ ๊ฐ ์์ฑ๋๋ฉด ์ฌ๋์ด ๊ฐ์
ํด์ผ ํฉ๋๋ค.
@vincentisambart Rust๋ IIRC 5๊ฐ์ ๋์ ์ผ๊ฐ ๋น๋์ ์ด๋ฏธ LLVM 8์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋น์ ์ด ์ค์ค๋ก๋ฅผ ๊ตฌ์ถํ๋ ค๋ ๊ฒฝ์ฐ LLVM (6) ์ง์ ์ต์ํ์ ๋ฒ์ ๊ณผ๋ CI ํ
์คํธ ๊ฒ : https://github.com/rust-lang/rust/blob/706e67b0a0143d651eb03f2fa2c30645899e81ff/src/ci/docker/x86_64-gnu-llvm-6.0 /๋์ปคํ์ผ
์ด์ ์ฐ๋ฆฌ๋ ์ฌ๋ฐ๋ฅธ ์ผ์ ํ๊ธฐ ์ํด Apple์ ์์กดํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ ์ ๋์ ์ด ๋ผ์ธ์ ๋ฐ๋ผ ๋ฌด์ธ๊ฐ๋ฅผ ์ซ๊ณ ์์๊ณ (์ง๊ธ์ ์ข ๋ฃํ์ต๋๋ค) ํ๋ซํผ ์ธก๋ฉด์์ Apple์ด ์ด๊ฒ์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด์ง ์๋ค๊ณ ์ถ์ธกํ๊ณ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Rust๋ ์ด๋ฏธ 5๊ฐ์ ๋์ IIRC์ ์ผ๊ฐ ๋น๋์ LLVM 8์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด Apple์ด LLVM 7 ๋นํธ์ฝ๋๋ฅผ ์ง์ํ๊ธฐ ์์ํ๋๋ผ๋ ์ต๊ทผ Rust์ ๊ณต์ ๋น๋์์ ์์ฑ๋ ๋นํธ์ฝ๋๊ฐ ์๋ํ์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ๋๋๋ผ๋ ๋ค์์ Rust๊ฐ ์์ฑ๋ ๋นํธ์ฝ๋์์ ํธํ๋์ง ์๋ ๋ณ๊ฒฝ์ด ์๋ LLVM ๋ฒ์ ์ผ๋ก ์ด๋ํ ๋ ์ค๋จ๋ ์ ์์ต๋๋ค.
LLVM 6์ ์ง์ ๋น๋ํ๊ณ CI์์ ํ ์คํธํ ๊ฒฝ์ฐ ์ง์๋๋ ์ต์ ๋ฒ์ ์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ Rust์ ๊ณต์ *-apple-ios
๋น๋๊ฐ LLVM 6(๋๋ https://github.com/apple/swift-llvm/releases/tag/swift-4.2.2-RELEASE์ ๊ฐ์ ๋ ๋์ ๊ฒ)์ผ๋ก ๋น๋๋๋๋ก ํ๋ฉด ์๋) ๋นํธ์ฝ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
Rust๋ ํ์ฌ https://github.com/rust-lang/rust/issues/46819 ๋ณํฉ ํ ๋ ๊ฐ์ LLVM ๋ฐฑ์๋(Emscripten ๋ฐ ํ์ค)์ ํจ๊ป ์ ๊ณต๋๋ค๊ณ ์๊ฐ
#46819๋ ๋นํธ์ฝ๋์ ๋ํ ios LLVM ๋ฐฑ์๋๋ฅผ ์ธ๊ธํ์ง๋ง ๊ตฌํํ์ง ์์์ต๋๋ค.
์ด๊ฒ์ ์์ ํ ํ์ ์ํค๋ ๊ฒ์ ์๋์ง๋ง ๊ทธ๋ฌํ ๊ฒฝ์ฐ์ C๋ก์ ํธ๋์คํ์ผ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ด ์ ๋ฐ์ ์ผ๋ก ๋ ํฉ๋ฆฌ์ ์ด์ง ์์๊น์? Rust๊ฐ Apple ์ธก์ ๋นํธ์ฝ๋ ์๊ตฌ ์ฌํญ์ ์ต์ ์ํ๋ก ์ ์งํ ์ ์์ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
์ค์ ๋ก ์ ์ฌ์ ์ธ ๋นํธํ์ฑ ์์ค๊ฐ ์๋๋ผ๋ Apple์ ์ ํฉํ LLVM ๋ฒ์ ์ ํฌํจํ๋ ํธํ ๊ฐ๋ฅํ ์ด์ ๋ฒ์ ์ Rust๋ก ์ปดํ์ผ์ ์๋ํ ์ ์๋ ํ ์คํธ์ ๋ฌธ์ด ์ด๋ฆฝ๋๋ค.
์์ ํ ํฌ๋ก์ค ํ๋ซํผ ์ ๊ทผ ๋ฐฉ์์์ ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ต์ ๊ฐ์ ์ฌํญ์ ์ด์ ์ ์ป๊ณ ์ด์ ๋ฒ์ ์์ ์ปดํ์ผํ ์ ์๋๋ก ์ต์ ๋ฒ์ ์ Rust์์ ๋์ผํ ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํ์คํ ์ฐจ๋จ๋ฉ๋๋ค. ํนํ Apple ์ํ๊ณ๋ฅผ ์ํ ๋นํธ์ฝ๋ ํธํ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ Rust ๋ฒ์ ์ ๋๋ค. ๊ทธ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ์ ํฉํ์ง ์์ต๋๋ค.
์ ์ด๋ ๋ ๋ง์ ์ฌ๋๋ค์ด ์ด๊ฒ์ ํ ์คํธํ๊ณ ์ฐ๋ฆฌ ๋ชจ๋๋ฅผ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๊ฒ ํ ์ ์๋ ๊ธฐํ๊ฐ ์ด๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ด ์ผ์ด ์ผ์ด๋๋ ๊ฒ์ ๋ณด๊ณ ๋งค์ฐ ๊ธฐ์ฉ๋๋ค.
ํ์ฌ ์๋นํ ํฐ ํ์ ์ํด ํฌ๋ก์ค ํ๋ซํผ ๋ชจ๋ฐ์ผ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ ๊ทผ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ค๊ณ ํ๋ ์ฌ๋์ผ๋ก์ ๋งํ์๋ฉด, ๋นํธ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค๋ฉด ๋ฌธ์ ๊ทธ๋๋ก Rust๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ ์ฑ ์ค ํ๋๋ ์ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ค์ด๋ก๋ํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ์์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋๋ก ๋นํธ์ฝ๋์ ์์กดํ๊ณ ์์ผ๋ฉฐ ์ด๋ฅผ ์ฃผ์ฅํ๋ ์ผ๋ถ ๋๊ท๋ชจ ๊ณ ๊ฐ์ด ์์ต๋๋ค.
Rust์ ๋ํด ๋ด๊ฐ ๋ณธ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๋ณผ ๋ Rust๊ฐ ๋ด๊ฐ ๋ณผ ์ ์๋ ๊ฐ๋ฅ์ฑ(Kotlin Multiplatform, ํฌ๋ก์ค ์ปดํ์ผ Swift, Mono, Dart, C++, React Native) ์ค ๊ฐ์ฅ ์ฅ๊ธฐ์ ์ธ ์ฅ์ ์ด ์๋ค๊ณ ์๊ฐํ์ง๋ง ํ์คํ ๋นํธ์ฝ๋๊ฐ ํ์ํฉ๋๋ค. ์ต์ Rust ๋ฆด๋ฆฌ์ค๋ฅผ ๋ฐ๋ผ๊ฐ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋๋ผ๋ ์๋ฒฝํ๊ฒ ์ง์๋ฉ๋๋ค.
๋นํธ ์ฝ๋๊ฐ ์๋ํ๋๋ผ๋ Rust๋ ์ฌ์ ํ watchOS ๋๋ tvOS๋ฅผ ๋์์ผ๋ก ํ ์ ์์ต๋๋ค.
Rust๊ฐ Apple ์ธก์ ๋นํธ์ฝ๋ ์๊ตฌ ์ฌํญ์ ์ต์ ์ํ๋ก ์ ์งํ ์ ์์ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๋ Rust์ LLVM์ด ๋๋ฌด ์๋กญ๊ธฐ ๋๋ฌธ์ด ์๋๋ผ ๋๋ฌด ์ค๋ ๋์๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ๋ ๋์ ํธํ์ฑ ์ด์ผ๊ธฐ๊ฐ ์์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
Rustc๊ฐ ์ฌ๋ฌ LLVM์ ์ง์ํ๋ ๊ฒ์ด ์ผ๋ง๋ ์คํ ๊ฐ๋ฅํฉ๋๊น?
์ด๋ฏธ ์ฌ๋ฌ LLVM์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. emscripten ๋์์ ๊ฒฝ์ฐ LLVM 6 atm์ ์๋ emscripten์ LLVM ํฌํฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๋ Rust์ LLVM์ด _๋๋ฌด ์๋กญ๊ธฐ ๋๋ฌธ์ด์ง _๋๋ฌด ์ค๋๋์๋ค๋ ๊ฒ์ด ์๋๋๋ค. ์ฌ๊ธฐ์ ๋ ๋์ ํธํ์ฑ ์ด์ผ๊ธฐ๊ฐ ์์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
๋ฌธ์ ๋ ๋๋ฌด ์ค๋๋์๊ฑฐ๋ ๋๋ฌด ์๋กญ๋ค๋ ๊ฒ์ด ์๋๋ผ Rust๊ฐ LLVM ๋ฒ์ ๊ณผ ์ผ์นํ๋๋ผ๋ ๋ชจ๋ iOS ๋ฆด๋ฆฌ์ค์์ ์ด๊ฒ์ด ๋ค์ ์ค๋จ๋ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. Apple(๋ด๊ฐ ์๋ ํ)์ ๋นํธ์ฝ๋์ ๊ด๋ จํ์ฌ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์์ ์ฑ์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
๋ฌธ์ ๋ ๋๋ฌด ์ค๋๋์๊ฑฐ๋ ๋๋ฌด ์๋กญ๋ค๋ ๊ฒ์ด ์๋๋ผ Rust๊ฐ LLVM ๋ฒ์ ๊ณผ ์ผ์นํ๋๋ผ๋ ๋ชจ๋ iOS ๋ฆด๋ฆฌ์ค์์ ์ด๊ฒ์ด ๋ค์ ์ค๋จ๋ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. Apple(๋ด๊ฐ ์๋ ํ)์ ๋นํธ์ฝ๋์ ๊ด๋ จํ์ฌ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์์ ์ฑ์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
์ค์ ๋ก ์ฐ๋ฆฌ๋ ์๋ก์ด iOS ๋ฒ์ ์ด ๋์ฌ ๋ 1๋ ์ ํ ๋ฒ ์ฃผ์ Xcode ์ ๋ฐ์ดํธ๋ฅผ ๋ด ๋๋ค. ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ๋ฉด ๊ฐ๋ฐ์๋ ์ต์ ๋ฒ์ ์ Xcode๋ก ์ฑ ์ ์ถ์ ์์ํด์ผ ํ๋ค๋ ๋ถ๋ช ํ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. ๋๋ ์ด๊ฒ์ด ํน๋ณํ ๊ณํํ๊ธฐ ์ด๋ ต๋ค๊ณ ๋งํ์ง ์์ ๊ฒ์ด๋ค.
๋๋ ์ด๊ฒ์ด ํน๋ณํ ๊ณํํ๊ธฐ ์ด๋ ต๋ค๊ณ ๋งํ์ง ์์ ๊ฒ์ด๋ค.
๊ณํํ๊ธฐ ๋งค์ฐ ์ด๋ ค์ด ๊ฒ์ผ๋ก ๋ณํ ์ ์๋ ๋นํธ์ฝ๋์ ๋ํ ๋ณด์ฅ์ด ์ ํ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. LLVM์ ์คํ ์์ค ๋ฆด๋ฆฌ์ค๋ก ๋๋์ง ์๋ ์์ฒด ๋นํธ์ฝ๋ ํ์์ ์ฌ์ฉํ๊ธฐ ์ํด ํ ๋ฆด๋ฆฌ์ค์์ ๋ค๋ฅธ ๋ฆด๋ฆฌ์ค๋ก ๊ฒฐ์ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
๊ณํํ๊ธฐ ๋งค์ฐ ์ด๋ ค์ด ๊ฒ์ผ๋ก ๋ณํ ์ ์๋ ๋นํธ์ฝ๋์ ๋ํ ๋ณด์ฅ์ด ์ ํ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. LLVM์ ์คํ ์์ค ๋ฆด๋ฆฌ์ค๋ก ๋๋์ง ์๋ ์์ฒด ๋นํธ์ฝ๋ ํ์์ ์ฌ์ฉํ๊ธฐ ์ํด ํ ๋ฆด๋ฆฌ์ค์์ ๋ค๋ฅธ ๋ฆด๋ฆฌ์ค๋ก ๊ฒฐ์ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
Apple์ด ๋ค๋ฅธ ๋๊ตฌ์๋ ๋ฌด๊ดํ๊ฒ ํ๊ธฐ์ ์ธ ๋ณํ๋ฅผ ์ผ์ผํฌ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค๋ฉด, ๋ฌผ๋ก ์ ๋๋ค. Bitcode์ ๋ํ ๊ณํ์ ๋ํด ์ข ๋ ๋ช ํํ ๋ฌธ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ํด์ ๊ทธ๊ฒ์ด ์ ์์ ์ด๊ฑฐ๋ ๊ทธ๋ฅ ์๋ฌด ์๊ด์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด ๊ทธ๋ค์ง ๊ฐ์ ๋์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๋ถ๋ช ํ Swift๋ฅผ ํ๋ซํผ์ ์ค์ํ ๋ถ๋ถ์ผ๋ก ๋ง๋ค์์ผ๋ฉฐ ์์ฒด ํ๊ณผ ๊ฐ์ฅ ์ค์ํ ํํธ๋๋ฅผ ํฌํจํ์ฌ ์์ฒ ๋ช ์ ๊ฐ๋ฐ์๊ฐ Swift์ ์์กดํ๊ณ ์์ต๋๋ค. Swift๋ ์์ ์คํ ์์ค LLVM์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ Xcode๊ฐ Apple์ด ํ์ฉํ๋ ๋นํธ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋๊ตฌ ์ฒด์ธ์ ํฌํจํ์ฌ ์์ ํ ๊ณต๊ฐ์ ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ์๋ฌด๋ ๋์น์ฑ์ง ๋ชปํ๊ฑฐ๋ ๋๋ณด์ง ์๊ณ ๊ฐ์๊ธฐ ํ์์ ๋ณ๊ฒฝํ๋ ค๋ฉด Swift ๋ฐ LLVM ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ชจ๋ ๋น๊ณต๊ฐ๋ก ์ค์ ํด์ผ ํ์ง ์์ต๋๊น? ๊ทธ๊ฒ์ ํ์คํ ๊ฐ๋ฅํ์ง๋ง ๋์๊ฒ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
Rust ํ์ด ๊ทธ ์ํ์ด ๋นํธ์ฝ๋๋ฅผ ์ง์ํ์ง ์๋ ์ข์ ์ด์ ๋ผ๊ณ ๊ฒฐ์ ํ๋ค๋ฉด, ๊ทธ๊ฒ์ ํ์คํ ๊ทธ๋ค์ ํน๊ถ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ํด ์กฐ๊ธ ์ฌํ์ง๋ง ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์ด๋์์ ์๊ฐ์ ๋ณด๋ด์ผ ํ๋์ง๋ฅผ ๋งํ๋ ๊ฒ์ ๋ด ์๋ฆฌ๊ฐ ์๋๋๋ค.
๊ณํํ๊ธฐ ๋งค์ฐ ์ด๋ ค์ด ๊ฒ์ผ๋ก ๋ณํ ์ ์๋ ๋นํธ์ฝ๋์ ๋ํ ๋ณด์ฅ์ด ์ ํ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. LLVM์ ์คํ ์์ค ๋ฆด๋ฆฌ์ค๋ก ๋๋์ง ์๋ ์์ฒด ๋นํธ์ฝ๋ ํ์์ ์ฌ์ฉํ๊ธฐ ์ํด ํ ๋ฆด๋ฆฌ์ค์์ ๋ค๋ฅธ ๋ฆด๋ฆฌ์ค๋ก ๊ฒฐ์ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
Apple์ 6์ ์ด์ Xcode ๋ฒ ํ๋ฅผ ์ถ์ํ๊ณ 9์์ ์ต์ข ๋ฒ์ ์ ์ถ์ํฉ๋๋ค. 6-9๊ฐ์ ํ์๋ ์ด์ Xcode ๋ฒ์ ์ผ๋ก ๋น๋๋ ์ฑ์ Appstore์ ํ์ฉํ์ง ์์ต๋๋ค.
๊ทธ ํ์๋ผ์ธ์์ ๋นํธ์ฝ๋ ๋ณ๊ฒฝ์ ์ค๋นํ ์๊ฐ์ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
Xcode 10.2 ๋ฒ ํ 3(Swift 5 w/ LLVM 7 ํฌํจ)์ผ๋ก ๋ฐฉ๊ธ ํ ์คํธํ์ผ๋ฉฐ ์ต๊ทผ ๋ฐค์ ์๋ฒ ๋๋ ๋นํธ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Rust์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. Rust์๋ watchOS/tvOS ํ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ช ํ ์ด๊ฒ์ iOS ํ๊ฒ์์๋ง ์๋ํฉ๋๋ค.
๋๋ ๋ํ ๋นํธ์ฝ๋ ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํด Rust๊ฐ ๋ชจ๋ Apple ๊ด๋ จ ๋์์ ๋ํด Apple LLVM ํฌํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
์, ๋ฒ ํ ๋ฆด๋ฆฌ์ค ๊ธฐ๊ฐ์ด ํฉ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆฝ๋๋ค. Apple์ด ์์ค LLVM ๋๋ ๋นํธ์ฝ๋ ํ์์ ๋ซ์ ๊ฒ์ด๋ผ๋ ์์ด๋์ด๋ ๋งค์ฐ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ง๋ง ํฅํ iOS ๋ฆด๋ฆฌ์ค์์ Apple์ด ๋นํธ์ฝ๋๋ฅผ ์๊ตฌํ ๊ฒ์ด๋ผ๋ ์๊ฐ์ ๋ถ๋ช ํ ์ผ์ด๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Marzipan ํ๋ก์ ํธ์ ํจ๊ป Mac App Store ์ ์ถ์ ์ํด ๋นํธ์ฝ๋๋ฅผ ์๊ตฌํ๊ธฐ ์์ํ ์๋ ์์ต๋๋ค.
์ ์๋ ํธํ์ฑ์ ๋ณด์ฅํ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ถ๋ช ํ ์ฑ๊ธํ์ง๋ง ๋ชจ๋ฐ์ผ ํ๋ซํผ์ ๊ฒฐ๊ตญ Tier 1 ํ๋ซํผ ์ด ๋์ด์ผ ํ๋ค๊ณ ์๊ฐ
์ปดํ์ผ๋ฌ ํ์์ ๊ณต์์ ์ผ๋ก ์น์ธํ ์ ๊ทผ ๋ฐฉ์์ด ๋๊ตฐ๊ฐ๊ฐ ์ด ์์ ์ ์ํํ๋๋ก ๊ถ์ฅํ๊ธฐ๋ฅผ ํฌ๋งํ์ง๋ง @brson ์ ์ด์ ๋๊ธ์ ์ฃผ์ ๋ฅผ ์์ฝํ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๋ฌ ๋ฒ์ ์ LLVM ๊ฐ์ ํธํ์ฑ์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. Apple๊ณผ ์ฐ๋ฆฌ๊ฐ ๋๋ฌด ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ง ์๋ ํ ๊ฐ๋ฅํด์ผ ํ์ง๋ง ๋ถํ ์ ๋์ ์ ์์ ์ ๋๋ก ํฐ ํ์์ ์ํ์ด ํญ์ ์์ต๋๋ค.
์๋๋ฉด ๋ฏธ๋์ ๋นํธ์ฝ๋๊ฐ ์์ ํ๋ ๊ฒ์ด๊ณ ์ฐ๋ฆฌ ๋ชจ๋๋ ์ด ๋ ผ์์ด ์ผ์ด๋ ๊ฒ์ ์์ด๋ฒ๋ฆด ๊ฒ์ ๋๋ค ๐
์ด์ ๋ชจ์๋ฅผ ๋จน๊ฒ ์ต๋๋ค ๐
๋ด๊ฐ ๋งํ๋ค :
Apple์ด ์์ค LLVM ๋๋ ๋นํธ ์ฝ๋ ํ์์ ๋ซ์ ๊ฒ์ด๋ผ๋ ์๊ฐ์ ๊ฑฐ์ ์์ต๋๋ค.
์ด๋ ์ฃผ๋ก @mitsuhiko๊ฐ ํํํ ๋ถ์ ์ ๋ํ ์๋ต
LLVM์ ์คํ ์์ค ๋ฆด๋ฆฌ์ค๋ก ๋๋์ง ์๋ ์์ฒด ๋นํธ์ฝ๋ ํ์์ ์ฌ์ฉํ๊ธฐ ์ํด ํ ๋ฆด๋ฆฌ์ค์์ ๋ค๋ฅธ ๋ฆด๋ฆฌ์ค๋ก ๊ฒฐ์ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
๊ทธ๋ฌ๋ ๋ฌธ์ #48833 ์ ๋ณด๋ฉด ๋ถ๋ช ํ ์ ๋ก๊ฐ ์์ต๋๋ค. @comex๋ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
LLVM ํธ๋ ํฌ ์ด์ ์ Xcode์ LLVM์ ๊ธฐ๋ฅ์ด ํ์๋๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ฒด arm64 ํฌํธ๊ฐ ์๋ ๊ฐ๋ฐ๋์์ ๋, ๊ทธ ์ด์ ๋ Apple์ด arm64 ์ฅ์น๋ฅผ ์ถํํ ๊ณํ์ด๋ผ๋ ์ฌ์ค์ ๋น๋ฐ๋ก ์ ์งํ๊ธฐ๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๋ฌธ์ ์์ @michaeleiselsc ์ ์ด์ผ๊ธฐ:
๋ด๊ฐ ์์ ํ๊ณ ์๋ ์ฑ์ 2016๋ 12์์ ๋ฌด์์๋ก ๋ค์ ์์ํ์ฌ ํฐ ํ๊ฒฉ์ ๋ฐ์์ผ๋ฉฐ ์ด๋ ์คํ ์์ค LLVM์ด 2017๋ 12์์๋ง ์์ ํ ํน์ ๋ฌธ์ ๋ก ์ธํด ๋ฐ์ํ์ต๋๋ค. 2016๋ 12์์ ์คํ ์์ค LLVM์์ Apple์ LLVM์ผ๋ก ์ด์ ํ์ ๋ ๋ฌธ์ ๊ฐ ๊ณ ์ ๋์๋ค
์ด ์์ด๋์ด๊ฐ Rust์ ํจ๊ป Apple์ LLVM์ ์ฌ์ฉํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ๊ทธ๋ ๊ฒ ๋์์ง๋ ์์ง๋ง ๋ค์ํ ๊ตฌํ์ผ๋ก ์ธํด ๊ฐ๋ ๊ณ ์ฝํ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ํ์ด ์์ต๋๋ค. ๐ข. ๋ชจ๋ ํ๋ก์ ํธ๊ฐ ์ง์ด์ง ์ ์๋ ์ํ์ ์๋๋๋ค. ์ด ์์ ์์ Transpiling์ด ๋ ๋์ ์ต์ ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง, ์ง๊ธ๊น์ง๋ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง ์์ต๋๋ค .
๋๋ ์ฌ์ ํ Apple์ LLVM์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ง์๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ๊ณ์ ์๋ํ ๊ฒ์ด๋ผ๋ ๋ณด์ฅ์ด ์์์ ์ค๋ช ํ๋ ๋ฌธ์์ ๋ช ํํ ๊ฒฝ๊ณ ๊ฐ ์์ด์ผ ํฉ๋๋ค(A Tier 1.5 ๋๋ ๊ธฐํ).
์ฝํ๋ฆฐ/๋ค์ดํฐ๋ธ. JetBrains๋ ๋ชจ๋ฐ์ผ ํ๋ซํผ์ ์ฐ์ ์์๋ก ๊ณ ๋ คํ๊ณ ์์ผ๋ฉฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋นํธ์ฝ๋ ๋ง์ปค์ผ ๋ฟ(์์ง ์ ์ฒด ๋นํธ์ฝ๋๊ฐ ์๋) ์์ ์ ์์ํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค. JetBrains/kotlin-native#1564 ๋ฐ JetBrains/kotlin-native# ์ฐธ์กฐ 1202(๋๊ธ)
@oleksandr-yefremov๋ฅผ ์ง์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ์กฐ๊ธ ๋ ํ๊ณ ์ ์ฝ ํ๋ฆฐ / ๊ธฐ๋ณธ ์ ๊ทผ ๋ฐฉ์ ๋ณต์ ํ ์ ์์๋ค golang์๋ฅผ . ๋๋ ์ฌ๋ฌ๋ถ์ด ๋นํธ์ฝ๋๋ฅผ ๋ฐฉ์ถํ์ง ์๊ณ ๋ ๋นํธ์ฝ๋ ์ง์ iOS/tvOS/watchOS ์ฑ์์ ๋ น์ ์ฌ์ฉํ ์ ์๋๋ก ๋๊ฐ์ด ํ ์ ์์ด์ผ ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค.
์ด์ ๋นํธ์ฝ๋๊ฐ ์๋ํฉ๋๊น? ์๋ํ ์ฌ๋์ด ์์ต๋๊น?
@volodg ์ ๋ ๋
น์จ ์ด๋ณด์์
๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ด ํํ ๋ฆฌ์ผ ์ ์ผ๊ฐ์ ์ต์ ๋ฌ์คํธ( rustc 1.37.0-nightly (088b98730 2019-07-03)
)๋ก ์คํํ์ง๋ง ์๋ํ์ง ์์์ต๋๋ค.
๋ง์ปค๊ฐ ์๋๊ฑฐ๊ฐ์๋ฐ..
$ otool -arch arm64 -l librust.a | grep bitcode
sectname __bitcode
...
๊ทธ๋ฌ๋ iOS ์ฅ์น์ฉ์ผ๋ก ๋น๋ํ ๋ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค(์๋ฎฌ๋ ์ดํฐ ์๋).
ld: '/Users/amrox/Documents/Projects/rust-ios-example/hello-rust/libs/librust.a(rust-e6011ffb55678675.rust.8yq9vjk7-cgu.3.rcgu.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
๊ทธ๊ฒ ๋ด๊ฐ ์ป์ ๊ฒ์ ๋๋ค.
rustc nightly-2019-09-05 aarch64-apple-ios and rustflags = "-C lto -Z embed-bitcode"
staticlib๋ฅผ clang-1100.0.33.5 (Xcode 11 beta 7) and -fembed-bitcode
์ฑ๊ณผ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค. ์์ค ์ฝ๋๋ https://github.com/saturday06/rust-ios-bitcode-test ์
๋๋ค.
__cmdline
์น์ ์ด ํ์ํ์ง ์๊ณ ๊ณ์ญ๋๊น?
2๋ ํ์ ๋๋ ์ด ์ง๋ฌธ์ ๋ตํ ์ ์์ต๋๋ค. ๋ฌผ๋ฆฌ์ ์ฅ์น์ ๋ฐฐํฌํ๊ฑฐ๋ Xcode ์์นด์ด๋ธ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋น cmdline์ ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฌ๋ App Store ์ ์ถ์ ๊ฒฝ์ฐ Apple์ clang ๋ช ๋ น์ค์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. ์๋ํ๋๋ก ํ๋ ํดํน ํจ์น๊ฐ ํฌํจ๋ ์ด PR์ ๋ ๊ธด ์ค๋ช ์ ๋ฃ์์ต๋๋ค. https://github.com/getditto/rust-bitcode/pull/7
์ด๋ป๊ฒ๋ ์ด๊ฒ์ ์ ์คํธ๋ฆผํ๊ณ ์ถ์ง๋ง ์ต์ ์ด ๋งค๋ ฅ์ ์ด์ง ์์ต๋๋ค. iOS๋ฅผ ๋์์ผ๋ก ํ ๋ ์ผ๋ถ ํด๋ ์ต์ ์ ๊ตฌ์ฑํฉ๋๊น? Apple์ด ์ ํจ์ฑ ๊ฒ์ฌ ๊ท์น์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ๊ฑฐ์ง๋ง์ ํ๋ ๋ฐฉ๋ฒ์ ์ ํํ ์ ํํ ์ ์๋๋ก envvar๋ฅผ ์ ๊ณตํฉ๋๊น? ์ฌ๊ธฐ์ ํฉ๋ฆฌ์ ์ธ ์ ํ์ด ์๋ค๋ฉด ๊ธฐ๊บผ์ด ๋ณ๊ฒฝํ๊ฒ ์ต๋๋ค.
-Cembed-bitcode=no๋ ios ๋์์์ ์๋ํ์ง ์์ต๋๋ค. .a ํ์ผ์ ์ฌ์ ํ ๋นํธ์ฝ๋ ์น์
์ด ์์ต๋๋ค.
๋นํธ์ฝ๋ ์์ด ๋น๋ํ๋ ๋ฐฉ๋ฒ?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
rustc nightly-2019-09-05 aarch64-apple-ios and rustflags = "-C lto -Z embed-bitcode"
staticlib๋ฅผclang-1100.0.33.5 (Xcode 11 beta 7) and -fembed-bitcode
์ฑ๊ณผ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค. ์์ค ์ฝ๋๋ https://github.com/saturday06/rust-ios-bitcode-test ์ ๋๋ค.