1+ option (NBL_BUILD_WITH_NGFX "Enable NGFX build" OFF )
2+
3+ # NOTE: on windows default installation path is:
4+ # "C:/Program Files/NVIDIA Corporation/Nsight Graphics <version>/SDKs/NsightGraphicsSDK" <- define as "NGFX_SDK" environment variable
5+ # then you can pick SDK version with "NGFX_SDK_VERSION" cache variable (CMake GUI list supported)
6+
7+ if (NBL_BUILD_WITH_NGFX)
8+ if (NOT DEFINED NGFX_SDK)
9+ if (NOT DEFINED ENV{NGFX_SDK})
10+ message (FATAL_ERROR "\" NGFX_SDK\" environment variable must be defined to build with NBL_BUILD_WITH_NGFX enabled!" )
11+ endif ()
12+ set (NGFX_SDK "$ENV{NGFX_SDK} " )
13+ endif ()
14+ cmake_path (NORMAL_PATH NGFX_SDK OUTPUT_VARIABLE NGFX_SDK )
15+
16+ if (NOT EXISTS "${NGFX_SDK} " )
17+ message (FATAL_ERROR "Found \" NGFX_SDK\" environment variable but it is invalid, env:NGFX_SDK=\" ${NGFX_SDK} \" doesn't exist!" )
18+ endif ()
19+
20+ file (GLOB ENTRIES "${NGFX_SDK} /*" )
21+
22+ set (NGFX_VERSIONS "" )
23+ foreach (ENTRY ${ENTRIES} )
24+ if (IS_DIRECTORY ${ENTRY} )
25+ list (APPEND NGFX_VERSIONS ${ENTRY} )
26+ endif ()
27+ endforeach ()
28+
29+ if (NOT NGFX_VERSIONS)
30+ message (FATAL_ERROR "Could not find any NGFX SDK Version!" )
31+ endif ()
32+
33+ list (TRANSFORM NGFX_VERSIONS REPLACE "${NGFX_SDK} /" "" )
34+ list (SORT NGFX_VERSIONS)
35+ list (GET NGFX_VERSIONS -1 LATEST_NGFX_VERSION)
36+
37+ # on the cache variable init pick the latest version, then let user pick from list
38+ set (NGFX_SDK_VERSION "${LATEST_NGFX_VERSION} " CACHE STRING "NGFX SDK Version" )
39+ set_property (CACHE NGFX_SDK_VERSION PROPERTY STRINGS ${NGFX_VERSIONS} )
40+
41+ set (NGFX_SDK_VERSION "$CACHE{NGFX_SDK_VERSION} " )
42+ set (NGFX_SDK_BASE "${NGFX_SDK} /${NGFX_SDK_VERSION} " )
43+
44+ # TODO: wanna support more *host* platforms? (*)
45+ # NOTE: also I'm hardcoding windows x64 library requests till I know the answer for (*)
46+ find_file (NBL_NGFX_INJECTION_HEADER NGFX_Injection.h PATHS ${NGFX_SDK_BASE} /include )
47+ find_file (NBL_NGFX_INJECTION_DLL NGFX_Injection.dll PATHS ${NGFX_SDK_BASE} /lib/x64 )
48+ find_file (NBL_NGFX_INJECTION_IMPORT_LIBRARY NGFX_Injection.lib PATHS ${NGFX_SDK_BASE} /lib/x64 )
49+
50+ if (NBL_NGFX_INJECTION_HEADER AND NBL_NGFX_INJECTION_DLL AND NBL_NGFX_INJECTION_IMPORT_LIBRARY)
51+ message (STATUS "Enabled build with NVIDIA Nsight Graphics SDK ${NGFX_SDK_VERSION} \n located in: \" ${NGFX_SDK_BASE} \" " )
52+ else ()
53+ message (STATUS "Could not enable build with NVIDIA Nsight Graphics SDK ${NGFX_SDK_VERSION} - invalid components!" )
54+ message (STATUS "Located in: \" ${NGFX_SDK_BASE} \" " )
55+ message (STATUS "NBL_NGFX_INJECTION_HEADER=\" ${NBL_NGFX_INJECTION_HEADER} \" " )
56+ message (STATUS "NBL_NGFX_INJECTION_DLL=\" ${NBL_NGFX_INJECTION_DLL} \" " )
57+ message (STATUS "NBL_NGFX_INJECTION_IMPORT_LIBRARY=\" ${NBL_NGFX_INJECTION_IMPORT_LIBRARY} \" " )
58+ message (FATAL_ERROR "You installation may be corupted, please fix it and re-run CMake or disable NBL_BUILD_WITH_NGFX!" )
59+ endif ()
60+
61+ add_library (ngfx INTERFACE )
62+ target_sources (ngfx INTERFACE "${NBL_NGFX_INJECTION_HEADER} " )
63+ target_include_directories (ngfx INTERFACE "${NGFX_SDK_BASE} /include" )
64+ target_link_libraries (ngfx INTERFACE "${NBL_NGFX_INJECTION_IMPORT_LIBRARY} " )
65+ target_link_options (ngfx INTERFACE "/DELAYLOAD:NGFX_Injection.dll" )
66+ target_compile_definitions (ngfx INTERFACE NGFX_INJECTION_DLL_DIR= "${NGFX_SDK_BASE} /lib/x64" )
67+ target_compile_definitions (ngfx INTERFACE NGFX_VERSION= "${NGFX_SDK_VERSION} " )
68+ endif ()
0 commit comments