记录OCC的webgl案例编译过程。整个编译借助emcc编译器,cmake生成nmake file,最后使用nmake编译。
1. 安装Emscripten SDK。
注意版本不要过高,3.1.10是可以的,新版本会报错。这是emcc的bug,估计未来版本会修复。
2. 编译FreeType。
OCC 7.6版本虽然增加了编译选项USE_FREETYPE,选择是否使用Freetype。不过关闭该选项编译过程中会报错,虽然可以修改代码解决,还是建议开启FreeType。
下载完Freetype源码后,用cmake-gui打开,先配置生成“NMake Makefiles”,选择指定交叉工具链,单击“Next”指定“emscripten/cmake/Modules/Platform/Emscripten.cmake”文件的位置。
完成后进入CMake主界面,单击“Generate”即可生成NMake文件。进入编译目录,使用nmake编译即可。
3. OCC交叉编译。
使用cmake-gui打开OCC7.6源码,与Freetype类似,配置生成“NMake Makefiles”,并选择指定交叉工具链。单击“Finish”进入CMake配置主界面。在这里有几个选项要改一下:
- 取消Draw编译,BUILD_MODULE_Draw
- 指定Freetype路径,3RDPARTY_FREETYPE_DIR
-
指定编译成静态库,BUILD_LIBRARY_TYPE改为Static
之后单击“Generate”生成nmake文件。打开cmd或git-bash,进入build目录,执行nmake即可编译OCC。编译成功后在lin32\clang\lib目录下会生成.a静态库文件。
4. 编译OCC的webgl样例。
occ的这个webgl样例的CMake文件写的不好,可以先修改一下,直接指定freetype与occ的目录。更改部分参考如下:
# FreeType
# find_package(freetype REQUIRED NO_DEFAULT_PATH)
# if(freetype_FOUND)
# message (STATUS "Using FreeType from \"${freetype_DIR}\"" )
# else()
# message(WARNING "Could not find FreeType, please set freetype_DIR variable." )
# endif()
INCLUDE_DIRECTORIES(C:/workspace/occ_wasm/freetype-2.12.1/build/include)
LINK_DIRECTORIES(C:/workspace/occ_wasm/freetype-2.12.1/build)
# Open CASCADE Technology
# find_package(OpenCASCADE REQUIRED NO_DEFAULT_PATH)
# if(OpenCASCADE_FOUND)
# message (STATUS "Using OpenCASCADE from \"${OpenCASCADE_DIR}\"" )
# INCLUDE_DIRECTORIES(${OpenCASCADE_INCLUDE_DIR})
# LINK_DIRECTORIES(${OpenCASCADE_LIBRARY_DIR})
# else()
# message(WARNING "Could not find OpenCASCADE, please set OpenCASCADE_DIR variable." )
# set(OCCT_LIBRARY_DIR)
# set(OCCT_BIN_DIR)
# endif()
INCLUDE_DIRECTORIES(C:/workspace/occ_wasm/opencascade-7.6.0/inc)
LINK_DIRECTORIES(C:/workspace/occ_wasm/opencascade-7.6.0/build/lin32/clang/lib)
改完之后,直接用cmake-gui生成nmake file即可编译。编译完成用http-server启动http服务,在浏览器打开效果如下: