๋นŒ๋“œ ๊ทœ์น™

Rust ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ cargo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. Chromium์€ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด gn ๋ฐ ninja๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ •์  ๊ทœ์น™์€ ์ตœ๋Œ€ ๋™์‹œ ๋กœ๋“œ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. Rust๋„ ์˜ˆ์™ธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

Chromium์— Rust ์ฝ”๋“œ ์ถ”๊ฐ€

์ผ๋ถ€ ๊ธฐ์กด Chromium BUILD.gn ํŒŒ์ผ์—์„œ rust_static_library๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

import("//build/rust/rust_static_library.gni")

rust_static_library("my_rust_lib") {
  crate_root = "lib.rs"
  sources = [ "lib.rs" ]
}

๋‹ค๋ฅธ Rust ํƒ€๊ฒŸ์—๋„ deps๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์„œ๋“œ ํŒŒํ‹ฐ ์ฝ”๋“œ์— ์˜์กดํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํฌ๋ ˆ์ดํŠธ ๋ฃจํŠธ ๋ฐ ์†Œ์Šค ์ „์ฒด ๋ชฉ๋ก _๋‘˜ ๋‹ค_๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. crate_root๋Š” ์ปดํŒŒ์ผ ๋‹จ์œ„์˜ ๋ฃจํŠธ ํŒŒ์ผ(์ผ๋ฐ˜์ ์œผ๋กœ lib.rs)์„ ๋‚˜ํƒ€๋‚ด๋Š” Rust ์ปดํŒŒ์ผ๋Ÿฌ์— ์ œ๊ณต๋˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. sources๋Š” ์žฌ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•œ ์‹œ์ ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ninja์— ํ•„์š”ํ•œ ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ์˜ ์ „์ฒด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

(Rust์—์„œ๋Š” ํฌ๋ ˆ์ดํŠธ ์ „์ฒด๊ฐ€ ์ปดํŒŒ์ผ ๋‹จ์œ„์ด๋ฏ€๋กœ Rust source_set์™€ ๊ฐ™์€ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. static_library๊ฐ€ ์ตœ์†Œ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.)

ํ•™์ƒ๋“ค์€ gn์˜ ๋‚ด์žฅ Rust ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  gn ํ…œํ”Œ๋ฆฟ์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ๊ถ๊ธˆํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋‹ต์€ ์ด ํ…œํ”Œ๋ฆฟ์ด CXX ์ƒํ˜ธ ์šด์šฉ์„ฑ, Rust ๊ธฐ๋Šฅ, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ค‘ ์ผ๋ถ€๋Š” ๋‚˜์ค‘์— ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.