mirror of
https://github.com/PixarAnimationStudios/OpenSubdiv
synced 2024-12-13 04:20:10 +00:00
9712b44239
- add macro "_add_doxy_headers" in order to track all header files elligible for doxygen documenation. This captures public header files that would otherwise be excluded from installation because they are not supported by the OS. Private header files remain excluded though. - add custom targets and commands so that documentation build produces functioning RST and Doxygen documentation both in the build and install stages - switched to Doxygen 1.8 (because markdown will make in-lined documentation easier) - added build switches to disable examples, regression and python-SWIG targets - fixed doxygen link in the nav bar - modified python html processing tool to match Cmake changes
518 lines
14 KiB
CMake
518 lines
14 KiB
CMake
#
|
|
# Copyright (C) Pixar. All rights reserved.
|
|
#
|
|
# This license governs use of the accompanying software. If you
|
|
# use the software, you accept this license. If you do not accept
|
|
# the license, do not use the software.
|
|
#
|
|
# 1. Definitions
|
|
# The terms "reproduce," "reproduction," "derivative works," and
|
|
# "distribution" have the same meaning here as under U.S.
|
|
# copyright law. A "contribution" is the original software, or
|
|
# any additions or changes to the software.
|
|
# A "contributor" is any person or entity that distributes its
|
|
# contribution under this license.
|
|
# "Licensed patents" are a contributor's patent claims that read
|
|
# directly on its contribution.
|
|
#
|
|
# 2. Grant of Rights
|
|
# (A) Copyright Grant- Subject to the terms of this license,
|
|
# including the license conditions and limitations in section 3,
|
|
# each contributor grants you a non-exclusive, worldwide,
|
|
# royalty-free copyright license to reproduce its contribution,
|
|
# prepare derivative works of its contribution, and distribute
|
|
# its contribution or any derivative works that you create.
|
|
# (B) Patent Grant- Subject to the terms of this license,
|
|
# including the license conditions and limitations in section 3,
|
|
# each contributor grants you a non-exclusive, worldwide,
|
|
# royalty-free license under its licensed patents to make, have
|
|
# made, use, sell, offer for sale, import, and/or otherwise
|
|
# dispose of its contribution in the software or derivative works
|
|
# of the contribution in the software.
|
|
#
|
|
# 3. Conditions and Limitations
|
|
# (A) No Trademark License- This license does not grant you
|
|
# rights to use any contributor's name, logo, or trademarks.
|
|
# (B) If you bring a patent claim against any contributor over
|
|
# patents that you claim are infringed by the software, your
|
|
# patent license from such contributor to the software ends
|
|
# automatically.
|
|
# (C) If you distribute any portion of the software, you must
|
|
# retain all copyright, patent, trademark, and attribution
|
|
# notices that are present in the software.
|
|
# (D) If you distribute any portion of the software in source
|
|
# code form, you may do so only under this license by including a
|
|
# complete copy of this license with your distribution. If you
|
|
# distribute any portion of the software in compiled or object
|
|
# code form, you may only do so under a license that complies
|
|
# with this license.
|
|
# (E) The software is licensed "as-is." You bear the risk of
|
|
# using it. The contributors give no express warranties,
|
|
# guarantees or conditions. You may have additional consumer
|
|
# rights under your local laws which this license cannot change.
|
|
# To the extent permitted under your local laws, the contributors
|
|
# exclude the implied warranties of merchantability, fitness for
|
|
# a particular purpose and non-infringement.
|
|
#
|
|
#
|
|
|
|
#-------------------------------------------------------------------------------
|
|
include_directories(
|
|
${DXSDK_INCLUDE_DIR}
|
|
${PROJECT_SOURCE_DIR}/opensubdiv
|
|
)
|
|
|
|
if( OPENGL_FOUND )
|
|
include_directories(
|
|
${OPENGL_INCLUDE_DIR}
|
|
${GLEW_INCLUDE_DIR}
|
|
)
|
|
elseif( OPENGLES_FOUND )
|
|
include_directories(
|
|
${OPENGLES_INCLUDE_DIR}
|
|
)
|
|
endif()
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# source & headers
|
|
set(CPU_SOURCE_FILES
|
|
cpuKernel.cpp
|
|
cpuComputeController.cpp
|
|
cpuComputeContext.cpp
|
|
cpuEvalLimitContext.cpp
|
|
cpuEvalLimitController.cpp
|
|
cpuEvalLimitKernel.cpp
|
|
cpuVertexBuffer.cpp
|
|
error.cpp
|
|
evalLimitContext.cpp
|
|
drawContext.cpp
|
|
drawRegistry.cpp
|
|
)
|
|
|
|
set(GPU_SOURCE_FILES
|
|
)
|
|
|
|
set(KERNEL_FILES
|
|
)
|
|
|
|
set(INC_FILES
|
|
)
|
|
|
|
set(PRIVATE_HEADER_FILES
|
|
debug.h
|
|
cpuKernel.h
|
|
cpuEvalLimitKernel.h
|
|
)
|
|
|
|
set(PUBLIC_HEADER_FILES
|
|
computeController.h
|
|
cpuComputeContext.h
|
|
cpuComputeController.h
|
|
cpuEvalLimitContext.h
|
|
cpuEvalLimitController.h
|
|
cpuVertexBuffer.h
|
|
error.h
|
|
evalLimitContext.h
|
|
mesh.h
|
|
nonCopyable.h
|
|
opengl.h
|
|
drawContext.h
|
|
drawRegistry.h
|
|
vertex.h
|
|
vertexDescriptor.h
|
|
)
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# platform dependent tweaks
|
|
if(APPLE OR UNIX)
|
|
set(PLATFORM_COMPILE_FLAGS
|
|
-fPIC
|
|
)
|
|
elseif(WIN32)
|
|
|
|
endif()
|
|
|
|
add_definitions(
|
|
${PLATFORM_COMPILE_FLAGS}
|
|
)
|
|
|
|
set(DOXY_HEADER_FILES ${PUBLIC_HEADER_FILES})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
set(GL_PTEX_PUBLIC_HEADERS glPtexTexture.h)
|
|
set(DX_PTEX_PUBLIC_HEADERS d3d11PtexTexture.h)
|
|
|
|
if( PTEX_FOUND )
|
|
list(APPEND CPU_SOURCE_FILES
|
|
ptexTextureLoader.cpp
|
|
)
|
|
if( OPENGL_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
glPtexTexture.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES
|
|
${GL_PTEX_PUBLIC_HEADERS}
|
|
)
|
|
endif()
|
|
if( DXSDK_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
d3d11PtexTexture.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES
|
|
${DX_PTEX_PUBLIC_HEADERS}
|
|
)
|
|
endif()
|
|
include_directories( ${PTEX_INCLUDE_DIR} )
|
|
list(APPEND PLATFORM_LIBRARIES
|
|
${PTEX_LIBRARY}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES
|
|
${GL_PTEX_PUBLIC_HEADERS}
|
|
${DX_PTEX_PUBLIC_HEADERS}
|
|
)
|
|
|
|
#-------------------------------------------------------------------------------
|
|
set(OPENMP_PUBLIC_HEADERS
|
|
ompKernel.h
|
|
ompComputeController.h
|
|
)
|
|
|
|
if( OPENMP_FOUND )
|
|
list(APPEND CPU_SOURCE_FILES
|
|
ompKernel.cpp
|
|
ompComputeController.cpp
|
|
)
|
|
|
|
list(APPEND PUBLIC_HEADER_FILES ${OPENMP_PUBLIC_HEADERS})
|
|
|
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
|
list(APPEND PLATFORM_LIBRARIES
|
|
gomp
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${OPENMP_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
set(GCD_PUBLIC_HEADERS
|
|
gcdKernel.h
|
|
gcdComputeController.h
|
|
)
|
|
|
|
if( GCD_FOUND )
|
|
list(APPEND CPU_SOURCE_FILES
|
|
gcdKernel.cpp
|
|
gcdComputeController.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${GCD_PUBLIC_HEADERS})
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${GCD_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# GL code & dependencies
|
|
set(GL_PUBLIC_HEADERS
|
|
cpuGLVertexBuffer.h
|
|
glDrawContext.h
|
|
glDrawRegistry.h
|
|
glVertexBuffer.h
|
|
glMesh.h
|
|
)
|
|
|
|
if( OPENGL_FOUND OR OPENGLES_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cpuGLVertexBuffer.cpp
|
|
glDrawContext.cpp
|
|
glDrawRegistry.cpp
|
|
glVertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${GL_PUBLIC_HEADERS})
|
|
if ( OPENGL_FOUND )
|
|
list(APPEND KERNEL_FILES
|
|
glslPatchCommon.glsl
|
|
glslPatchBSpline.glsl
|
|
glslPatchGregory.glsl
|
|
glslPatchTransition.glsl
|
|
)
|
|
endif()
|
|
list(APPEND PLATFORM_LIBRARIES
|
|
${OPENGL_LIBRARY}
|
|
${OPENGLES_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${GL_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# OpenGL 4.2 dependencies
|
|
# note : (GLSL transform feedback kernels require GL 4.2)
|
|
set(GL_4_2_PUBLIC_HEADERS
|
|
glslTransformFeedbackComputeContext.h
|
|
glslTransformFeedbackComputeController.h
|
|
glslTransformFeedbackKernelBundle.h
|
|
)
|
|
|
|
if( OPENGL_4_2_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
glslTransformFeedbackComputeController.cpp
|
|
glslTransformFeedbackComputeContext.cpp
|
|
glslTransformFeedbackKernelBundle.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${GL_4_2_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
glslTransformFeedbackKernel.glsl
|
|
)
|
|
list(APPEND PLATFORM_LIBRARIES
|
|
${GLEW_LIBRARY}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${GL_4_2_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# OpenGL 4.3 dependencies
|
|
# note : (GLSL compute shader kernels require GL 4.3)
|
|
set(GL_4_3_PUBLIC_HEADERS
|
|
glslComputeContext.h
|
|
glslComputeController.h
|
|
glslKernelBundle.h
|
|
)
|
|
|
|
if( OPENGL_4_3_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
glslComputeController.cpp
|
|
glslComputeContext.cpp
|
|
glslKernelBundle.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${GL_4_3_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
glslComputeKernel.glsl
|
|
)
|
|
list(APPEND PLATFORM_LIBRARIES
|
|
${GLEW_LIBRARY}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${GL_4_3_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# DX11 code & dependencies
|
|
set(DXSDK_PUBLIC_HEADERS
|
|
cpuD3D11VertexBuffer.h
|
|
d3d11ComputeContext.h
|
|
d3d11ComputeController.h
|
|
d3d11DrawContext.h
|
|
d3d11DrawRegistry.h
|
|
d3d11KernelBundle.h
|
|
d3d11VertexBuffer.h
|
|
d3d11Mesh.h
|
|
)
|
|
if( DXSDK_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cpuD3D11VertexBuffer.cpp
|
|
d3d11ComputeContext.cpp
|
|
d3d11ComputeController.cpp
|
|
d3d11DrawContext.cpp
|
|
d3d11DrawRegistry.cpp
|
|
d3d11KernelBundle.cpp
|
|
d3d11VertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${DXSDK_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
hlslComputeKernel.hlsl
|
|
hlslPatchCommon.hlsl
|
|
hlslPatchBSpline.hlsl
|
|
hlslPatchGregory.hlsl
|
|
hlslPatchTransition.hlsl
|
|
)
|
|
list(APPEND PLATFORM_LIBRARIES
|
|
${DXSDK_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${DXSDK_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# OpenCL code & dependencies
|
|
set(OPENCL_PUBLIC_HEADERS
|
|
clComputeContext.h
|
|
clComputeController.h
|
|
clVertexBuffer.h
|
|
)
|
|
if ( OPENCL_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
clComputeController.cpp
|
|
clComputeContext.cpp
|
|
clKernelBundle.cpp
|
|
clVertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${OPENCL_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
clKernel.cl
|
|
)
|
|
list(APPEND PLATFORM_LIBRARIES
|
|
${OPENCL_LIBRARIES}
|
|
)
|
|
include_directories( ${OPENCL_INCLUDE_DIRS} )
|
|
if ( OPENGL_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
clGLVertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES
|
|
clGLVertexBuffer.h
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${OPENCL_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# CUDA code & dependencies
|
|
set(CUDA_PUBLIC_HEADERS
|
|
cudaComputeContext.h
|
|
cudaComputeController.h
|
|
cudaVertexBuffer.h
|
|
)
|
|
if( CUDA_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cudaComputeController.cpp
|
|
cudaComputeContext.cpp
|
|
cudaVertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${CUDA_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
cudaKernel.cu
|
|
)
|
|
if ( OPENGL_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cudaGLVertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES
|
|
cudaGLVertexBuffer.h
|
|
)
|
|
endif()
|
|
|
|
if( DXSDK_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cudaD3D11VertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES
|
|
cudaD3D11VertexBuffer.h
|
|
)
|
|
endif()
|
|
|
|
if (UNIX)
|
|
list( APPEND CUDA_NVCC_FLAGS -Xcompiler -fPIC --gpu-architecture compute_11 )
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${CUDA_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Kernel Stringification
|
|
# We want to use preprocessor include directives to include GLSL and OpenCL
|
|
# kernel source files in cpp files, but since the sources contain newline
|
|
# characters we would need raw string literals from C++11 to do this directly.
|
|
# To avoid depending on C++11 we instead use a small tool called "line_quote"
|
|
# to generate source files that are suitable for direct inclusion.
|
|
foreach(kernel_file ${KERNEL_FILES})
|
|
|
|
string(REGEX REPLACE ".*[.](.*)" "\\1" extension ${kernel_file})
|
|
|
|
if(NOT ${extension} STREQUAL "cu")
|
|
|
|
string(REGEX REPLACE "(.*)[.].*" "\\1.inc" inc_file ${kernel_file})
|
|
list(APPEND INC_FILES ${inc_file})
|
|
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${inc_file}
|
|
COMMAND stringify ${CMAKE_CURRENT_SOURCE_DIR}/${kernel_file}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/${inc_file}
|
|
DEPENDS stringify ${CMAKE_CURRENT_SOURCE_DIR}/${kernel_file}
|
|
)
|
|
|
|
endif()
|
|
endforeach()
|
|
|
|
#-------------------------------------------------------------------------------
|
|
source_group("Kernels" FILES ${KERNEL_FILES})
|
|
|
|
source_group("Inc" FILES ${INC_FILES})
|
|
|
|
_add_possibly_cuda_library(osd_static_cpu STATIC
|
|
${CPU_SOURCE_FILES}
|
|
${PRIVATE_HEADER_FILES}
|
|
${PUBLIC_HEADER_FILES}
|
|
)
|
|
set_target_properties(osd_static_cpu PROPERTIES OUTPUT_NAME osdCPU CLEAN_DIRECT_OUTPUT 1)
|
|
|
|
target_link_libraries(osd_static_cpu
|
|
${PLATFORM_LIBRARIES}
|
|
)
|
|
|
|
_add_possibly_cuda_library(osd_static_gpu STATIC
|
|
${GPU_SOURCE_FILES}
|
|
${PRIVATE_HEADER_FILES}
|
|
${PUBLIC_HEADER_FILES}
|
|
${KERNEL_FILES}
|
|
${INC_FILES}
|
|
)
|
|
set_target_properties(osd_static_gpu PROPERTIES OUTPUT_NAME osdGPU CLEAN_DIRECT_OUTPUT 1)
|
|
|
|
target_link_libraries(osd_static_gpu
|
|
${PLATFORM_LIBRARIES}
|
|
)
|
|
|
|
install( TARGETS osd_static_cpu DESTINATION ${CMAKE_LIBDIR_BASE} )
|
|
install( TARGETS osd_static_gpu DESTINATION ${CMAKE_LIBDIR_BASE} )
|
|
|
|
if (NOT WIN32 AND NOT IOS)
|
|
_add_possibly_cuda_library(osd_dynamic_cpu SHARED
|
|
${CPU_SOURCE_FILES}
|
|
${PRIVATE_HEADER_FILES}
|
|
${PUBLIC_HEADER_FILES}
|
|
)
|
|
|
|
set_target_properties(osd_dynamic_cpu PROPERTIES OUTPUT_NAME osdCPU CLEAN_DIRECT_OUTPUT 1)
|
|
|
|
target_link_libraries(osd_dynamic_cpu
|
|
${PLATFORM_LIBRARIES}
|
|
)
|
|
|
|
_add_possibly_cuda_library(osd_dynamic_gpu SHARED
|
|
${GPU_SOURCE_FILES}
|
|
${PRIVATE_HEADER_FILES}
|
|
${PUBLIC_HEADER_FILES}
|
|
${KERNEL_FILES}
|
|
${INC_FILES}
|
|
)
|
|
|
|
set_target_properties(osd_dynamic_gpu PROPERTIES OUTPUT_NAME osdGPU CLEAN_DIRECT_OUTPUT 1)
|
|
|
|
target_link_libraries(osd_dynamic_gpu
|
|
osd_dynamic_cpu
|
|
${PLATFORM_LIBRARIES}
|
|
)
|
|
|
|
install( TARGETS osd_dynamic_cpu DESTINATION ${CMAKE_LIBDIR_BASE} )
|
|
install( TARGETS osd_dynamic_gpu DESTINATION ${CMAKE_LIBDIR_BASE} )
|
|
endif()
|
|
|
|
_add_doxy_headers( "${DOXY_HEADER_FILES}" )
|
|
|
|
install( FILES ${PUBLIC_HEADER_FILES}
|
|
DESTINATION ${CMAKE_INCDIR_BASE}/osd
|
|
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ )
|
|
|
|
|
|
if (ANDROID)
|
|
install( FILES Android.mk
|
|
DESTINATION ${LIBRARY_OUTPUT_PATH_ROOT}
|
|
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ )
|
|
endif()
|
|
|
|
#-------------------------------------------------------------------------------
|