← 과제 목록

[과제] 1주차) 프로젝트 작업환경 구성 오태준

@taejun0
  • #과제
목차

ThorVG 환경 세팅해보기

공식 튜토리얼이랑 README를 보고 Windows에서 ThorVG를 설치하고, 예제까지 같이 돌려본 기록입니다.

결론부터 말하면 빌드에 성공했고, 예제 62개가 모두 나왔으며, 실제로 창을 띄워서 렌더링까지 확인했습니다. 아래 스크린샷이 그 결과입니다.


한 일 순서

1. meson이랑 ninja부터

문서에 meson + ninja가 필요하다고 명시되어 있어 pip로 설치했습니다.

python -m pip install --user meson ninja

설치는 됐는데 Scripts 경로가 PATH에 안 잡혀서 직접 넣어줘야 했습니다.

$env:Path = "C:\Users\SSAFY\AppData\Roaming\Python\Python312\Scripts;" + $env:Path

2. 컴파일러

원래 MSYS2를 깔아서 MinGW를 쓰려고 했는데, winget으로 설치하다 실패했습니다.
폴더(C:\msys64)만 생기고 bash랑 pacman이 없어서, 포기하고 WinLibs로 넘어갔습니다.

winget install --id BrechtSanders.WinLibs.POSIX.UCRT -e --accept-package-agreements --accept-source-agreements

GCC 16.1이 들어 있는 MinGW가 설치됐고, 이후로는 이걸로 빌드했습니다.

3. SDL2

예제 README에 ThorVG + SDL이 필요하다고 명시되어 있었습니다.
SDL2 MinGW 개발용 패키지를 받아서 .tools에 풀어 두었습니다.

curl.exe -L -o .\.tools\SDL2-devel-2.32.8-mingw.tar.gz `
  https://github.com/libsdl-org/SDL/releases/download/release-2.32.8/SDL2-devel-2.32.8-mingw.tar.gz
tar -xzf .\.tools\SDL2-devel-2.32.8-mingw.tar.gz -C .\.tools

여기서 한 번 막혔습니다. sdl2.pc 안에 prefix가 /tmp/tardir/...처럼 이상한 경로로 되어 있었습니다.
실제 경로로 바꿔줘야 pkg-config가 찾았습니다.

4. 환경변수

매번 치기 귀찮아서 setup-env.ps1을 만들어 두었습니다. 새 터미널을 열면 이거부터 실행합니다.

. .\setup-env.ps1

안에 PATH랑 PKG_CONFIG_PATH를 넣어 둔 상태입니다.


ThorVG 빌드

예제랑 맞추려고 loader 전부, gif saver, CAPI를 켰습니다.
설치는 시스템이 아니라 로컬 .tools/prefix로 했습니다.

cd thorvg

meson setup builddir `
  --prefix="$PWD\..\.tools\prefix" `
  -Dloaders=all `
  -Dsavers=gif `
  -Dbindings=capi `
  -Dstatic=true

ninja -C builddir install

빌드 자체는 잘 됐습니다. Lottie expression 때문에 JerryScript도 같이 컴파일돼서 조금 오래 걸렸습니다.


예제 빌드

cd thorvg.example
meson setup builddir
ninja -C builddir

처음엔 바로 되지 않았습니다. 아래에서 막힌 부분을 정리했습니다.

결국 builddir/src 아래에 exe 62개가 나왔습니다.

실행은 이렇게 했습니다.

. .\setup-env.ps1
.\thorvg.example\builddir\src\Shapes.exe

기본은 software 렌더러이고, GL을 쓰려면 Shapes.exe gl처럼 넘기면 됩니다.


막혔던 부분

MSYS2 설치 실패

winget으로 설치하다 실패했습니다. 디렉터리만 남고 툴이 없었습니다.
→ WinLibs로 대체했습니다.

pkg-config 이름

WinLibs에는 pkgconf.exe만 있었습니다. meson은 pkg-config를 찾습니다.
pkgconf.exe를 복사해서 pkg-config.exe로 만들어 두었습니다.

PKG_CONFIG_PATH

로컬 prefix에 설치해서인지, 설치가 끝난 뒤 pkg-config --modversion thorvg-1을 하면 찾지 못했습니다.
→ ThorVG랑 SDL2의 lib/pkgconfig 경로를 PKG_CONFIG_PATH에 넣으니 해결됐습니다.

include 경로 꼬임

예제 쪽은 이렇게 include합니다.

#include <thorvg-1/thorvg.h>
#include <thorvg_capi.h>   // Capi만 이렇게

그런데 기본 pc 파일 Cflags가 -I.../include/thorvg-1만 있어서
헤더를 못 찾는 에러가 났습니다.

그래서 thorvg-1.pc를 이렇게 고쳤습니다.

Cflags: -I${includedir} -I${includedir}/thorvg-1

고친 뒤에는 builddir를 지우고 다시 세팅해야 반영됐습니다.

Remove-Item -Recurse -Force builddir
meson setup builddir
ninja -C builddir

SDL2 pc prefix

위에 말한 대로 /tmp/... 경로를 .tools 경로로 수정했습니다.


실제 실행 결과

빌드 성공만으로는 충분하지 않아, 예제들을 하나씩 띄워보고 캡처해 두었습니다.
창 상단에 Engine과 FPS가 표시되는 것으로 정상 렌더링을 확인할 수 있습니다.

Shapes

튜토리얼에 나오는 기본 도형입니다.

Shapes

Path

선이랑 베지어로 직접 path를 그린 예제입니다.

Path

FillRule

FillRule

FillSpread

FillSpread

LinearGradient

LinearGradient

RadialGradient

RadialGradient

Stroke

Stroke

StrokeLine

StrokeLine

Scene

Scene

SceneTransform

회전, 확대, 이동을 보여줍니다.

SceneTransform

PictureSvg

PictureSvg

PicturePng

PicturePng

TextTtf

TextTtf

Masking

Masking

Blending

Blending

Lottie

애니메이션도 잘 돌아갔습니다.

Lottie

Animation

Animation

폴더 구조

1st/
├── README.md
├── setup-env.ps1          # 환경 세팅용
├── .tools/
│   ├── prefix/            # ThorVG 설치한 곳
│   └── SDL2-2.32.8/       # SDL2
├── thorvg/
└── thorvg.example/

나중에 다시 할 때

  1. . .\setup-env.ps1
  2. pkg-config --modversion thorvg-1 / sdl2 확인
  3. ThorVG를 다시 설치하면: ninja -C thorvg/builddir install
  4. 예제: ninja -C thorvg.example/builddir
  5. .\thorvg.example\builddir\src\Shapes.exe 실행

링크

댓글

Discussion 원문