C/C++ ๊ธฐ๋ฐ์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋๋ฐ ์์ด ๋ณดํต cmake ์ make ๋ฅผ ์ด์ฉํด์ ๋น๋๋ฅผ ํ๊ฒ ๋ฉ๋๋ค.
๊ฐ๋ตํ๊ฒ cmake ๋ CMakeList.txt ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Makefile ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , make ๋ Makefile ๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ๋น๋ํฉ๋๋ค.
cmake ๋ ๋น๋๋ฅผ ์ํ ํ๋ก์ธ์ค์ด๊ณ , make ๋ ์ค์ ๋ก ๋น๋๋ฅผ ํด์ฃผ๋ ํ๋ก์ธ์ค์ธ ์ ์ด์ฃ .
๊ทธ๋ฐ๋ฐ C/C++ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋๋ฐ, ๋น๋ ์๊ฐ์ด ๋๋ต 1์๊ฐ ์ ๋ ์๋ชจ๋ฉ๋๋ค. ๋๋ฌด ์ค๋๊ฑธ๋ ค์..
์งํํ runner ๋ 2GB Memory ์ ์ธ์คํด์ค์ ๋๋ค.
๋น๋ ์๊ฐ์ ๋จ์ถ์ํค๊ณ ์ถ์ต๋๋ค. ๋น๋ ์๊ฐ์ ๋จ์ถ์ํค๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅด๋ ๊ฒ์ ๋ฐ๋ก ์บ์ฑ ์ ๋๋ค.
๋งค๋ฒ ๊ฐ์ด ํ์ผ์ ๋น๋ํ์ง ๋ง๊ณ , ๋ฐ๋ณต๋๋ ๋น๋ ํ์ผ์ ์บ์ฑํด๋์ผ๋ฉด ์๊ฐ์ด ๋ง์ด ๋จ์ถ๋ ๊ฒ์ ๋๋ค.
๋คํํ C/C++ ํ๋ก์ ํธ์ ๋น๋ ์บ์ฑ ๊ด๋ จํ ํจํค์ง๊ฐ ์กด์ฌํฉ๋๋ค. ๋ฐ๋ก ccache ์ฃ .
ccache ๋ apt, yum ๊ณผ ๊ฐ์ ํจํค์ง ๋งค๋์ ๋ก ์ฝ๊ฒ ์ค์น๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ~/.ccache ๊ฒฝ๋ก๋ฅผ ์บ์ ๋๋ ํฐ๋ฆฌ๋ก ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋์ ccache ์ action/cache ๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ผ๋ก ์บ์ฑํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
action/cache ์ ๋ํด ๊ถ๊ธํ๋ค๋ฉด ์ฌ๊ธฐ ์ฐธ๊ณ !
๊ทธ๋ผ ๋ ์ธ ๋๋์ฝ๋~
์ฐ์ action/cache ์ ๋๋ค.
/home/runner/.ccache ๋ฅผ ์บ์ ๋๋ ํฐ๋ฆฌ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ action/cache ์ path ๋ /home/runner/.ccache ๋ก ์์ฑํฉ๋๋ค.
key ๋ ํ๊ณ ์ถ์ ๊ฒ์ผ๋ก ํ๋ฉด ๋ฉ๋๋ค.
jobs:
linux-x64:
runs-on: [ al2_x86_64 ]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Cache
id: cache
uses: actions/cache@v3
with:
path: |
/home/runner/.ccache
key: ${{ runner.os }}-build-ccache
restore-keys: |
ccache
${{ runner.os }}-build-ccache
action/cache ๋ถ๋ถ์ ์ด๊ฒ ๋์ ๋๋ค.
์ด๋ฒ์ cmake, make ๋ถ๋ถ์ ์์ฑํฉ๋๋ค.
build.sh ๋ฅผ ์คํ์์ผ ์ค ๊ฒ์ด๊ณ , ๊ทธ ์์ ์ค์ build ๋ช ๋ น์ด๋ฅผ ์์ฑํฉ๋๋ค.
jobs:
linux-x64:
runs-on: [ al2_x86_64 ]
steps:
...
- name: Build
run: |
bash build.sh
build.sh ์ ๋๋ค.
ccache ๋ฅผ ํจํค์ง ๊ด๋ฆฌ์๋ก ์ค์นํด์ฃผ๋ฉด /usr/lib/ccache ์ ์ค์น๋ฉ๋๋ค. (ubuntu 20 ๊ธฐ์ค)
cmake ์ make ๋ฅผ ์งํํ ๋ ์ปดํ์ผ๋ฌ๋ฅผ ccache gcc ์ ccache g++ ๋ก ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ช ๋ น์ด ์ธ์๋ก ์๋์ ๊ฐ์ด ๋๊ฒจ์ค๋๋ค.
#!/bin/bash
set -eu
# ubuntu 20 ๊ธฐ์ค ccache ๊ฒฝ๋ก
declare -r C_COMPILER="/usr/lib/ccache/gcc"
declare -r CXX_COMPILER="/usr/lib/ccache/g++"
# ccache ์ปดํ์ผ๋ฌ๋ก ์ธ์๋ก ๋๊ฒจ์ค
cmake ./ -DCMAKE_C_COMPILER="${C_COMPILER}" -DCMAKE_CXX_COMPILER="${CXX_COMPILER}"
make -e CC="${C_COMPILER}" CXX="${CXX_COMPILER}"
์ข์ต๋๋ค. ๋ชจ๋ ์ค๋น๋ ๋๋ ๊ฑฐ ๊ฐ์์!
๊ทธ๋ผ ์บ์ฑ์ด ์ ๋๋ก ๋๋ ์ง ํ์ธํด๋ณด์ฃ !
action/cache ๋ ์ฑ๊ณต์ ์ ๋๋ค.
๊ทธ๋ผ ccache ๋ถ๋ถ๋ ํ์ธํด๋ณด์ฃ .
์๋ ์ด๋ฏธ์ง๋ ccache -s ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์คํํ์ ๋์ ๊ฒฐ๊ณผ์ด๋ฉฐ, ์ด๋ฅผ ํตํด ์ค์ ๋ก ์บ์ฑ์ด ๋์๋ ์ง ํ์ธํ ์ ์์ต๋๋ค.
cache hit ๊ฐ ์ฌ๋ผ๊ฐ๋ค๋ฉด ์ฑ๊ณต์ ์ผ๋ก ์บ์ฑ์ด ๋ ๊ฒ๋๋ค.
์ต์ด๋ก ccache ๋ฅผ ์ฌ์ฉํ๋ฉด cache hit ๊ฐ ์๋ cache miss ๋ง ๊ณ์ ์ฌ๋ผ๊ฐ ๊ฒ์ ๋๋ค.
์ด์ ๋ ์ต์ด์๋ ์บ์๋ ํ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ์บ์ ํ์ผ์ ์ฐพ์ ์ ์์ด cache miss ๊ฐ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ด์ฃ .
๊ทธ๋์ ์ต์ด์ ๋น๋๋ฅผ ์คํํ ํ ๊ทธ ์ดํ์๋ cache miss ๊ฐ ์๋ cache hit ์ด ์ฌ๋ผ๊ฐ ๊ฒ์ ๋๋ค.
action ์์ ์๊ฐ์ผ๋ก๋ ๋น๊ตํด๋ด ์๋ค.
์ค~ 55๋ถ์์ 9๋ถ์ผ๋ก ๋ง์ด ๋จ์ถ๋์ด์!
๊ทธ๋ผ ์์ธํ๊ฒ ์๊ธฐ ์ํด ์ก์ ๋จ์๊ฐ ์๋ ์ค์ ๋น๋๋ง ์ํํ๋ ์คํ ๋จ์๋ก ํ์ธํด๋ณด์ฃ !
์ก์ ๋จ์์์ ์ถ๊ฐ์ ์ธ ์คํ ๋ถ๋ถ๋ค์ ์ํํ๋ ์๊ฐ์ด ์์ด์ ์์ C/C++ ๋น๋๊ฐ ์ผ์ด๋๋ ์คํ ๋จ์๋ก ๋น๊ตํด๋ดค๋๋ฐ,
๋ฌด๋ ค 8๋ฐฐ์ ๋ ๋จ์ถ์์ผฐ์ต๋๋ค!!
์ด๋ฒ ์๊ฐ์๋ action/cache ์ ccache ๋ฅผ ์ด์ฉํด์ C/C++ ํ๋ก์ ํธ์ ๋น๋ ์๊ฐ์ ๋ํญ ๋จ์ถ์์ผ๋ณด์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ค๋์ ์ฌ๊ธฐ๊น์ง~
'DevOps > Github Action' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Github Action] MacOS.. ๋ ์ ARC ์ง์์ด ์๋์... - Runner with MacOS (6) | 2023.11.12 |
---|---|
[Github Action] EKS, Karpenter ๊ทธ๋ฆฌ๊ณ Window Runner (7) | 2023.11.06 |
[Github Action] cmake ์ ์ผ๊ณฑ ํ์ด์ฌ (5) | 2023.10.06 |
[Github Action] ๋ฐ์ดํฐ ์ข ๋งก๊ธธ๊ฒ! ๋์ค์ ๊ทธ๋๋ก ๋ค์์ค๋? - action cache (0) | 2023.06.03 |
[Github Action] ARC ๋ฅผ ์ด์ฉํ Gradle Build Cache (2) | 2023.03.06 |