반응형

OpenGL SusperBible 책에서 제공하는 예제를 MacOS 에서 동작케 하는 것은 진짜 똥이었다.


예제를 다운받고 HowToBuild 를 읽어봐도 맥(OSX, MacOS)과 관련해서는 어찌나 설렁설렁 설명되어 있는지...

그럼에도 불구하고 삽질의 시간을 보낸 뒤 드디어 빌드하는 방법을 찾았다.

다시 한번 말하지만 정말 똥같은 과정이었다.


1. CMake 설치

먼저 CMake는 설치되어 있어야 한다.

https://cmake.org/ 에서 다운로드받아 설치하도록 하자.


2. 예제 다운로드 

http://www.openglsuperbible.com/example-code/ 에서 OpenGL Super Bible 예제를 다운로드 받자.

글쓰는 시점에서는 sb7code-master.zip 파일이 다운로드 된다.




3. GLFW 준비

압축을 풀고나서 HOWTOBUILD.txt 를 읽어보면 알겠지만 

superbible 예제 코드들은 GLFW 라이브러리를 사용하고 있다. 

따라서 superbible 예제 코드를 빌드하기 전에 GLFW 를 먼저 빌드해 libglfw3.a 파일을 생성하여야 한다.


GLFW 는?

GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. It provides a simple API for creating windows, contexts and surfaces, receiving input and events.

GLFW is written in C and has native support for Windows, macOS and many Unix-like systems using the X Window System, such as Linux and FreeBSD.

GLFW is licensed under the zlib/libpng license.


- http://www.glfw.org/


HOWTOBUILD.txt 파일이 있는 위치에 extern 디렉토리가 있다. 

이 디렉토리에 glfw가 있지만 macOS에서 예제를 실행하기에는 포함된 GLFW의 버전이 낮으므로 

GLFW 공식 사이트에서 3.3 버전을 다운로드 하자.

GLFW 공식 사이트에 링크된 github 페이즈에서 다운로드 할 수 있다.

(macOS 에서 예제를 실행하기 위해서는 glfw 3.3 버전이 필요하다. 3.2 에서도 실행은 되지만 에러 로그가 출력된다. )






다운로드 받은 뒤에는 glfw-master.zip을 압축해제한 뒤 glfw-master 디렉토리에서 cmake를 실행하고 빌드한다.


3-1. glfw-master 디렉토리 위치에서 [cmake .] 를 실행


3-2. [cmake .]이후에는 Makefile이 생성된다. 이제 [make ]를 입력해 GLFW를 빌드하도록 한다.

문제없이 빌드되었다면 src/ 디렉토리에 libglfw3.a 파일이 생성된다.

:GLFW 라이브러리를 정상 빌드한 후 생성되는 libglfw3.a


생성된 libglfw3.a 를 압축 해제한 superbible 예제 소스(sb7code-master)의 lib 디렉토리(sb7code-master/lib)에 복사한다.


이제 GLFW는 준비되었다.


4. Mac용 X11 설치 (XQuartz)

GLFW 다음으로는 X11 이 필요하다.

superbible 예제에서 윈도우 시스템을 컨트롤하기 때문에 필요하다.

https://support.apple.com/ko-kr/HT201341 페이지를 참고해 Mac용 X11 에 대한 내용을 알 수 있으며

결론적으로는 XQuartz 를 설치하도록 하자(https://www.xquartz.org).


:Mac용 X11에 관하여(https://support.apple.com/ko-kr/HT201341)


:https://www.xquartz.org/

:XQuartz 설치.


설치를 완료하고 나면 터미널에서 /usr/X11 경로를 확인할 수 있다.

5. CMakeLists.txt를 수정하자.

CMake와 GLFW, X11로 사전 준비는 끝났다.

윈도우즈나 리눅스였다면 superbible 예제 디렉토리에서 CMake 툴을 이용해 Makefile 혹은 프로젝트 파일을 생성했겠지만

MacOS 용 Xcode 프로젝트 파일을 생성하기 위해서는 CMakeLists.txt 파일의 수정이 불가피하다.


CMakeLists.txt를 수정 후 본격적으로 예제 소스를 빌드해보도록 하자. 

수정포인트는 다음과 같다.


git diff 를 나타낸 모습이고 녹색라인의 내용을 본인의 CMakeLists.txt에 추가한다.

diff 내용이 헷갈리거나 알아보기 힘들어 전체 내용이 필요하다면 

다음의 github 페이지(https://github.com/Hurderella/sb7code/blob/master/CMakeLists.txt)를 참고하거나 파일 전체를 다운로드하여 교체한다.


라인별로 세부적인 변경 사항은 다음과 같다.

line 6 : 빌드시에 필요한 X11 라이브러리를 링크하기 위해 6 line에서 X11 라이브러리가 있는 위치를 명시한다.

line 32 ~ 38 : MacOS인 경우에 IOKit, Cocoa, CoreFoundation, CoreVideo 라이브러리를 찾아둔다. 그리고 librt는 링크에 명시하지 않아도 된다.

line 153 ~ 155 : MacOS인 경우 찾아두었던 IOKit, Cocoa, CoreFoundation, CoreVideo를 링킹과정에 포함시킨다. 

line 165 ~ 167 : c++11를 사용하기 위해 작성.

line 170 : 기본적으로 포함되어 있던 glfw 대신 최신의 glfw를 다운받아 교체하였으므로 그에 맞게 path를 수정.


추가적으로 superbible 예제에서 glfw를 교체하고 CMakeLists.txt를 수정한 superbible 전체 버전을 github에 올려두었으니 참고하셔도 된다.

(https://github.com/Hurderella/sb7code,  Star 눌러주시면 감사!)


6. glext.h 파일의 typedef 관련 수정.

지금의 6번 과정없이 빌드를 해보면 typedef 관련하여 에러가 발생한다. 

Xcode 프로젝트 파일을 생성후 에러가 발생하는 것을 보고 수정해도 되지만 구지 아는 내용인데 나중에 수정할 필요는 없으니

미리 수정해두자.


수정할 파일은 include/GL/glext.h 파일이며 수정할 line은 다음과 같다.

MacOS 인 경우에 GLhandleARB 타입을 void * 타입으로 정의한다.

diff 내용이 필요하다면 다음의 페이지(https://github.com/Hurderella/sb7code/commit/be131727d1267c306eb79e6f682d6de53f1eb1b0)를 참고하고

파일 전체를 확인하고 싶다면 다음의 페이지(https://github.com/Hurderella/sb7code/blob/master/include/GL/glext.h)를 참고하도록 한다.




7. CMake 툴을 이용해 Xcode용 프로젝트 파일을 생성하도록 하자.

superbible 예제 소스를 빌드하기 위해서는 gui 용 cmake를 이용한다.

cmake 실행하고 Where is the source code: 란에는 예제 소스의 위치(sb7code-master)를,

Where to build the binaries : 란에는 예제 소스 위치내의 build 디렉토리 위치를 (sb7code-master/build) 설정한다.


그리고 Configure 를 실행한다. 실행 이후에는 project 타입을 설정할 수 있는데, 여기에는 Xcode를 선택하도록 한다.

그리고 Generate를 실행하도록 하자. 

sb7code-master/build 디렉토리에 프로젝트파일 superbible7.xcodeproj 가 생성된다.

superbible7.xcodeproj를 더블 클릭하거나 Xcode에서 superbile7.xcodeproj를 열어보자.

그리고 필요한 예제를 선택해 빌드 & 실행하면 정상동작하는 것을 확인할 수 있다.


반응형