Browse Source

CMake: Configure: Add cross-platform (openGL) Nvidia Cg support.

kestred 12 years ago
parent
commit
6fe7b59801
2 changed files with 192 additions and 57 deletions
  1. 185 0
      cmake/modules/FindCg.cmake
  2. 7 57
      dtool/Configure.cmake

+ 185 - 0
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()

+ 7 - 57
dtool/Configure.cmake

@@ -62,66 +62,16 @@ config_package(FFTW COMMENT "fftw")
 find_package(Squish)
 find_package(Squish)
 config_package(SQUISH COMMENT "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)
 if(FOUND_VRPN)
 	set(USE_VRPN TRUE CACHE BOOL "If true, compile Panda3D with VRPN")
 	set(USE_VRPN TRUE CACHE BOOL "If true, compile Panda3D with VRPN")