From 6fe7b5980116a67ce75cf3021b2f730ab63fef06 Mon Sep 17 00:00:00 2001 From: kestred Date: Sun, 8 Dec 2013 20:59:17 -0700 Subject: [PATCH] CMake: Configure: Add cross-platform (openGL) Nvidia Cg support. --- cmake/modules/FindCg.cmake | 185 +++++++++++++++++++++++++++++++++++++ dtool/Configure.cmake | 64 ++----------- 2 files changed, 192 insertions(+), 57 deletions(-) create mode 100644 cmake/modules/FindCg.cmake diff --git a/cmake/modules/FindCg.cmake b/cmake/modules/FindCg.cmake new file mode 100644 index 0000000000..e8546b6cc9 --- /dev/null +++ b/cmake/modules/FindCg.cmake @@ -0,0 +1,185 @@ +# Filename: FindCg.cmake +# +# Usage: +# find_package(Cg [REQUIRED] [QUIET]) +# +# It sets the following variables: +# FOUND_CG - system has NvidiaCg +# CG_IPATH - the NvidiaCg include directory +# CG_LPATH - the NvidiaCg library directory +# CG_LIBS - the Cg components found +# +# FOUND_CGGL - system has CgGL +# CGGL_IPATH - the CgGL include directory +# CGGL_LPATH - the CgGL library directory +# CGGL_LIBS - the CgGL components found +# + + +### Define macros to find each sublibrary ### + +# Find Cg for OpenGL +macro(find_cggl) + if(CGGL_LPATH AND CGGL_IPATH) + # If its cached, we don't need to refind it + set(FOUND_CGGL TRUE) + if(WIN32) + set(CGGL_LIBS cgGL.lib) + else() + set(CGGL_LIBS CgGL) + endif() + else() + # Find the include directory + find_path(CGGL_IPATH + NAMES "cgGL.h" + PATHS "C:/Program Files/Cg" + "C:/Program Files/NVIDIA Corporation/Cg/include" + "/usr/include" + "/usr/local/include" + "/opt/Cg" + "/opt/nvidia-cg-toolkit/include" # Gentoo + PATH_SUFFIXES "" "Cg" + DOC "The path to NvidiaCg's include directory." + ) + + # Find the library directory + find_library(CGGL_LIBRARY + NAMES "CgGL" "libCgGL" + PATHS "C:/Program Files/Cg" + "C:/Program Files/NVIDIA Corporation/Cg" + "/usr" + "/usr/local" + "/opt/Cg" + "/opt/nvidia-cg-toolkit" # Gentoo + PATH_SUFFIXES "" "lib" "lib32" "lib64" + ) + get_filename_component(CGGL_LIBRARY_DIR "${CGGL_LIBRARY}" PATH) + set(CGGL_LPATH "${CGGL_LIBRARY_DIR}" CACHE PATH "The path to the CgGL library directory.") # Library path + + unset(CGGL_LIBRARY_DIR) + unset(CGGL_LIBRARY CACHE) + + + # Check if we have everything we need + if(CGGL_IPATH AND CGGL_LPATH) + set(CGGL_FOUND TRUE) + if(WIN32) + set(CGGL_LIBS cgGL.lib) + else() + set(CGGL_LIBS CgGL) + endif() + endif() + + mark_as_advanced(CGGL_IPATH) + mark_as_advanced(CGGL_LPATH) + endif() +endmacro() + + +# Find Cg for DirectX 8 +macro(find_cgdx8) +endmacro() + + +# Find Cg for DirectX 9 +macro(find_cgdx9) +endmacro() + + +# Find Cg for DirectX 10 +macro(find_cgdx10) +endmacro() + + + +# Find base Nvidia Cg +if(CG_LPATH AND CG_IPATH) + # If its cached, we don't need to refind it + set(FOUND_CG TRUE) + if(WIN32) + set(CG_LIBS cg.lib) + else() + set(CG_LIBS Cg) + endif() + + find_cggl() + find_cgdx8() + find_cgdx9() + find_cgdx10() + +else() + # On OSX default to using the framework version of Cg. + if(APPLE) + include(${CMAKE_ROOT}/Modules/CMakeFindFrameworks.cmake) + set(CG_INCLUDES) + + cmake_find_frameworks(Cg) + if(Cg_FRAMEWORKS) + foreach(dir ${Cg_FRAMEWORKS}) + set(CG_INCLUDES ${CG_INCLUDES} ${dir}/Headers ${dir}/PrivateHeaders) + endforeach(dir) + unset(Cg_FRAMEWORKS) + + # Find the include dir + find_path(CG_IPATH + NAMES "cg.h" + PATHS ${CG_INCLUDES} + DOC "The path to NvidiaCg's include directory." + ) + unset(CG_INCLUDES) + + # Set the library dir (TODO: Check the correctness on Mac OS X) + set(CG_LPATH "/Library/Frameworks/Cg.framework" CACHE PATH "The path to NvidiaCg's library directory.") + endif() + + else() + # Find the include directory + find_path(CG_IPATH + NAMES "cg.h" + PATHS "C:/Program Files/Cg" + "C:/Program Files/NVIDIA Corporation/Cg/include" + "/usr/include" + "/usr/local/include" + "/opt/Cg" + "/opt/nvidia-cg-toolkit/include" # Gentoo + PATH_SUFFIXES "" "Cg" + DOC "The path to NvidiaCg's include directory." + ) + + # Find the library directory + find_library(CG_LIBRARY + NAMES "Cg" "libCg" + PATHS "C:/Program Files/Cg" + "C:/Program Files/NVIDIA Corporation/Cg" + "/usr" + "/usr/local" + "/opt/Cg" + "/opt/nvidia-cg-toolkit" # Gentoo + PATH_SUFFIXES "" "lib" "lib32" "lib64" + ) + get_filename_component(CG_LIBRARY_DIR "${CG_LIBRARY}" PATH) + set(CG_LPATH "${CG_LIBRARY_DIR}" CACHE PATH "The path to NvidiaCG's library directory.") # Library path + + unset(CG_LIBRARY_DIR) + unset(CG_LIBRARY CACHE) + endif() + + # Check if we have everything we need + if(CG_IPATH AND CG_LPATH) + set(CG_FOUND TRUE) + if(WIN32) + set(CG_LIBS cg.lib) + else() + set(CG_LIBS Cg) + endif() + + find_cggl() + find_cgdx8() + find_cgdx9() + find_cgdx10() + + endif() + + mark_as_advanced(CG_IPATH) + mark_as_advanced(CG_LPATH) +endif() diff --git a/dtool/Configure.cmake b/dtool/Configure.cmake index d121c76060..e608fd54f8 100644 --- a/dtool/Configure.cmake +++ b/dtool/Configure.cmake @@ -62,66 +62,16 @@ config_package(FFTW COMMENT "fftw") find_package(Squish) config_package(SQUISH COMMENT "squish") +# Find and configure Cg library +find_package(Cg) +config_package(CG COMMENT "Nvidia Cg Shading Langauge") +config_package(CGGL COMMENT "Cg OpenGL API") +config_package(CGDX8 COMMENT "Cg DX8 API") +config_package(CGDX9 COMMENT "Cg DX9 API") +config_package(CGDX10 COMMENT "Cg DX10 API") -if(FOUND_CG) - set(USE_CG TRUE CACHE BOOL "If true, compile Panda3D with Nvidia Cg") - if(USE_CG) - set(HAVE_CG TRUE) - endif() -endif() -if(HAVE_CG) - message(STATUS "+ Nvidia Cg High Level Shading Language") -else() - message(STATUS "- Did not find Nvidia Cg High Level Shading Language") -endif() -if(FOUND_CGGL) - set(USE_CGGL TRUE CACHE BOOL "If true, compile Panda3D with Cg OpenGL API") - if(USE_CGGL) - set(HAVE_CGGL TRUE) - endif() -endif() -if(HAVE_CGGL) - message(STATUS "+ Cg OpenGL API") -else() - message(STATUS "- Did not find Cg OpenGL API") -endif() -if(FOUND_CGDX8) - set(USE_CGDX8 TRUE CACHE BOOL "If true, compile Panda3D with Cg DX8 API") - if(USE_CGDX8) - set(HAVE_CGDX8 TRUE) - endif() -endif() -if(HAVE_CGDX8) - message(STATUS "+ Cg DX8 API") -else() - message(STATUS "- Did not find Cg DX8 API") -endif() - -if(FOUND_CGDX9) - set(USE_CGDX9 TRUE CACHE BOOL "If true, compile Panda3D with Cg DX9 API") - if(USE_CGDX9) - set(HAVE_CGDX9 TRUE) - endif() -endif() -if(HAVE_CGDX9) - message(STATUS "+ Cg DX9 API") -else() - message(STATUS "- Did not find Cg DX9 API") -endif() - -if(FOUND_CGDX10) - set(USE_CGDX10 TRUE CACHE BOOL "If true, compile Panda3D with Cg DX10 API") - if(USE_CGDX10) - set(HAVE_CGDX10 TRUE) - endif() -endif() -if(HAVE_CGDX10) - message(STATUS "+ Cg DX10 API") -else() - message(STATUS "- Did not find Cg DX10 API") -endif() if(FOUND_VRPN) set(USE_VRPN TRUE CACHE BOOL "If true, compile Panda3D with VRPN")