반응형

간만에 쓰는 trouble shooting 포스트.

 

스터디를 위해 x265를 까보고자 했다.

Apple Silicon이기에 어느정도의 에로가 꽃 필 것임은 예상을 하였다. 

스스로도 어느정도 마음의 준비가 되었다고 생각했지만 하마터면 꺾일 뻔 했다.

 

각설하고.

0. x265(https://bitbucket.org/multicoreware/x265_git.git) 를 받고 빌드를 하기 위해서는 

cmake가 필요하다.

 

1. cmake-cli를 사용할 생각은 접어두었으면 좋겠다.

나도 처음엔 cli로 해결을 보려 하였다. 하지만 gui가 압도적으로 쉽다.

 

2. cmake gui를 실행하고 CMakeList.txt 가 있는 가장 상위의 위치를 source code에 지정한다. 

x265에서는 그 위치가 x265_git/source 위치다.

Where to build the binaries 에는 프로젝트 파일이(xcode 프로젝트 파일이나 makefile)생성될 위치를 지정한다.

여기에서는 x265_git 내부의 build 디렉토리를 설정.

 

3. 이대로 configure를 실행하면 어떤 프로젝트 제네레이터를 실행할건지 묻는데 가장 근본인 Unix Makefiles로 설정하자. 

이렇게하면 Makefile이 생성된다.

왜 Xcode로 하지 않느냐? 이 부분은 중간 과정을 뛰어넘고 설명하자면

Xcode로 하고 프로젝트 파일을 열어 빌들 진행하면 static library(.a)와 x265 실행 바이너리가 생성되긴하지만 dylib이 생성되지 않는다. 그래도 상관없다면 Xcode로 하던가.

4. 이대로 Generate 버튼을 누르면

----------------------------------------------------

CMake Error in CMakeLists.txt:
The custom command generating

/Users/chan/Documents/research/x265_git_xcode/build/mc-a.S.o

is attached to multiple targets:

cli
x265-static
x265-shared

but none of these is a common dependency of the other(s). This is not
allowed by the Xcode "new build system".

----------------------------------------------------

와 같은 에러가 발생한다. 

찾아보면 cmake -G Xcode buildsystem=1 <소스파일위치> 를 cli에서 실행해서 Xcode project 파일을 생성하라는 내용도 있는데

먼저 3에서 설명한 것과 같이 그러면 온전히 full build가 되지 않는다. 이와 같은 이유로 CMake Gui를 사용하기를 권하였다.

 

5. 하여 CMake Gui에서 해야할 일은 ENABLE ASSEMBLY 를 해제 하는 것이다.

이걸 CMakeList.txt를 수정해서 default를 OFF로 할 수 있는 사람도 있겠지만

CMakeList 만질수 있는 사람이라면 trouble shooting 한다고 찾아보지도 않고 알아서 뚝딱뚝딱 했겠지.

 

6. ASSEMBLY를 해제 하고 Generate를 실행한다. 그러면 x265_git/build위치에 Makefile이 생성되고 우리는 make를 통해 x265를 빌드 할 수 있게 된다.

내가 한 설명에서 Xcode Generator를 설정하지 않고 Unix Makefiles로 설정하였는데 Unix Makefiles 설정상태에서는 ENABLE ASSEMBLY를 선택한 상태로 Generate 실행이 되며 Makefile도 생성된다.

하지만 빌드를 해보면 아래와 같이 심볼을 찾지 못한다는 에러가 발생한다. 

이게 nasm의 설치와 관련이 있나 싶어 nasm을 설치해보았지만 결과는 동일했다.

----------------------------------------------------

Undefined symbols for architecture arm64:

  "x265_entropyStateBits", referenced from:

      _x265_costCoeffNxN_neon in pixel-util.S.o

     (maybe you meant: _x265_entropyStateBits)

----------------------------------------------------

 

7. 하여 build 디렉토리에서 make를 실행하면 libx265.a, libx265.207.dylib, x265가 정상적으로 생성된다.

 

* 정리

1. CMake Gui를 설치

2. x265 소스 받고

3. CMake Gui를 실행하고

4. CMake에서 source 위치를 x265 > source 로 설정, build binaries는 x265 > build로 설정

5. Configure 실행. 이때 Project Generator는 Unix Makefiles로 설정

6. Generate 전 ENABLE_ASSEMBLY는 해제. 그리고 Generate

7. build에 가서 make.

 

후.... 삽질하다가 억울해서 쓰는 troble shooting. 끝.

반응형