Skip to content

Commit 4c8b666

Browse files
committed
Correct manifest generation and add application config generation for each example pointing to an assembly in order to load Nabla dynamic library - but because of microsoft probing restriction it won't work anyway XD, we cannot probe with 2 or more directories relative backwards
1 parent a18bb57 commit 4c8b666

File tree

7 files changed

+77
-14
lines changed

7 files changed

+77
-14
lines changed

cmake/common.cmake

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,25 @@ macro(nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDE
3939
if(ANDROID)
4040
add_library(${EXECUTABLE_NAME} SHARED main.cpp ${_EXTRA_SOURCES})
4141
else()
42-
set(NBL_EXAMPLE_SOURCES
42+
if(NOT NBL_STATIC_BUILD)
43+
set(NBL_CONFIG_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin")
44+
set(NBL_CONFIG_OUTPUT_FILE ${NBL_CONFIG_OUTPUT_DIRECTORY}/${EXECUTABLE_NAME}$<IF:$<CONFIG:Release>,,$<IF:$<CONFIG:Debug>,_d,_rwdi>>.exe.config)
45+
46+
add_custom_command(OUTPUT "${NBL_CONFIG_OUTPUT_FILE}"
47+
COMMAND ${CMAKE_COMMAND} -DNBL_ROOT_PATH:PATH=${NBL_ROOT_PATH} -DNBL_GEN_DIRECTORY:PATH=${NBL_CONFIG_OUTPUT_DIRECTORY} -DNBL_DLL_PATH:FILEPATH=$<TARGET_FILE:Nabla> -DNBL_TARGET_PATH:FILEPATH=$<TARGET_FILE:${EXECUTABLE_NAME}> -P ${NBL_ROOT_PATH}/cmake/scripts/nbl/applicationMSVCConfig.cmake
48+
COMMENT "Launching ${EXECUTABLE_NAME}.exe.config generation script!"
49+
VERBATIM
50+
)
51+
52+
add_custom_target(${EXECUTABLE_NAME}_config ALL DEPENDS ${NBL_CONFIG_OUTPUT_FILE} ${NBL_ROOT_PATH}/cmake/scripts/nbl/applicationMSVCConfig.cmake)
53+
endif()
54+
55+
set(NBL_EXECUTABLE_SOURCES
4356
main.cpp
44-
${NBL_ASSEMBLIES_MANIFEST_FILEPATH}
4557
${_EXTRA_SOURCES}
4658
)
4759

48-
add_executable(${EXECUTABLE_NAME} ${NBL_EXAMPLE_SOURCES})
60+
add_executable(${EXECUTABLE_NAME} ${NBL_EXECUTABLE_SOURCES})
4961
add_dependencies(${EXECUTABLE_NAME} Nabla_manifest)
5062

5163
if(NBL_DYNAMIC_MSVC_RUNTIME)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<configuration>
2+
<windows>
3+
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
4+
<probing privatePath="@NBL_ASSEMLBY_RELATIVE_PATH@"/>
5+
</assemblyBinding>
6+
</windows>
7+
</configuration>

cmake/manifest/msvc/cmake.nabla.manifest

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
2+
<assemblyIdentity name="devshgraphicsprogramming.nabla" version="1.2.3.4" processorArchitecture="x86" type="win32"/>
3+
<file name="@NABLA_DLL@"/>
4+
</assembly>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Copyright (c) 2022 DevSH Graphics Programming Sp. z O.O.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
# CMake script for generating msvc manifest during build time
16+
17+
if(DEFINED NBL_ROOT_PATH)
18+
if(NOT EXISTS ${NBL_ROOT_PATH})
19+
message(FATAL_ERROR "NBL_ROOT_PATH as '${NBL_ROOT_PATH}' is invalid!")
20+
endif()
21+
else()
22+
message(FATAL_ERROR "NBL_ROOT_PATH variable must be specified for this script!")
23+
endif()
24+
25+
if(NOT DEFINED NBL_GEN_DIRECTORY)
26+
message(FATAL_ERROR "NBL_GEN_DIRECTORY variable must be specified for this script!")
27+
endif()
28+
29+
if(NOT DEFINED NBL_DLL_PATH)
30+
message(FATAL_ERROR "NABLA_DLL_PATH variable must be specified for this script!")
31+
endif()
32+
33+
if(NOT DEFINED NBL_TARGET_PATH)
34+
message(FATAL_ERROR "NBL_TARGET_PATH variable must be specified for this script!")
35+
endif()
36+
37+
cmake_path(GET NBL_TARGET_PATH FILENAME NBL_TARGET_NAME)
38+
39+
set(NBL_INPUT_MSVC_CONFIG_FILE ${NBL_ROOT_PATH}/cmake/config/msvc/application.exe.config)
40+
41+
file(RELATIVE_PATH NBL_DLL_RELATIVE_PATH "${NBL_GEN_DIRECTORY}" "${NBL_DLL_PATH}")
42+
cmake_path(GET NBL_DLL_RELATIVE_PATH PARENT_PATH NBL_ASSEMLBY_RELATIVE_PATH)
43+
44+
message(STATUS "Generating ${NBL_GEN_DIRECTORY}/${NBL_TARGET_NAME}.config")
45+
configure_file("${NBL_INPUT_MSVC_CONFIG_FILE}" "${NBL_GEN_DIRECTORY}/${NBL_TARGET_NAME}.config")

cmake/scripts/nbl/nablaMSVCManifest.cmake

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ endif()
3232

3333
cmake_path(GET NABLA_DLL_PATH FILENAME NABLA_DLL)
3434

35-
set(NBL_INPUT_MSVC_MANIFEST_FILE ${NBL_ROOT_PATH}/cmake/manifest/msvc/cmake.nabla.manifest)
36-
set(NBL_OUTPUT_MSVC_MANIFEST_FILE ${NBL_GEN_DIRECTORY}/nabla.manifest)
35+
set(NBL_INPUT_MSVC_MANIFEST_FILE ${NBL_ROOT_PATH}/cmake/manifest/msvc/devshgraphicsprogramming.nabla.manifest)
3736

38-
message(STATUS "Generating ${NBL_OUTPUT_MSVC_MANIFEST_FILE}")
39-
configure_file("${NBL_INPUT_MSVC_MANIFEST_FILE}" "${NBL_OUTPUT_MSVC_MANIFEST_FILE}")
37+
message(STATUS "Generating ${NBL_GEN_DIRECTORY}/devshgraphicsprogramming.nabla.manifest")
38+
configure_file("${NBL_INPUT_MSVC_MANIFEST_FILE}" "${NBL_GEN_DIRECTORY}")

src/nbl/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -456,15 +456,15 @@ if (ANDROID)
456456
endif()
457457

458458
if(NOT NBL_STATIC_BUILD)
459-
set(NBL_ASSEMBLIES_MANIFEST_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/nabla.manifest)
460-
set(NBL_ASSEMBLIES_MANIFEST_FILEPATH ${NBL_ASSEMBLIES_MANIFEST_DIRECTORY}/nabla.manifest CACHE INTERNAL "" FORCE)
459+
set(NBL_ASSEMBLY_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/devshgraphicsprogramming.nabla" CACHE INTERNAL "" FORCE)
461460
add_custom_command(OUTPUT "${NBL_ASSEMBLIES_MANIFEST_FILEPATH}"
462-
COMMAND ${CMAKE_COMMAND} -DNBL_ROOT_PATH:PATH=${NBL_ROOT_PATH} -DNBL_GEN_DIRECTORY:PATH=${NBL_ASSEMBLIES_MANIFEST_DIRECTORY} -DNABLA_DLL_PATH:FILEPATH=$<TARGET_FILE:Nabla> -P ${NBL_ROOT_PATH}/cmake/scripts/nbl/nablaMSVCManifest.cmake
461+
COMMAND ${CMAKE_COMMAND} -DNBL_ROOT_PATH:PATH=${NBL_ROOT_PATH} -DNBL_GEN_DIRECTORY:PATH=${NBL_ASSEMBLY_DIRECTORY} -DNABLA_DLL_PATH:FILEPATH=$<TARGET_FILE:Nabla> -P ${NBL_ROOT_PATH}/cmake/scripts/nbl/nablaMSVCManifest.cmake
463462
COMMENT "Launching nabla.manifest generation script!"
464463
VERBATIM
465464
)
466465

467466
add_custom_target(Nabla_manifest ALL DEPENDS ${NBL_ASSEMBLIES_MANIFEST_FILEPATH} ${NBL_ROOT_PATH}/cmake/scripts/nbl/nablaMSVCManifest.cmake)
467+
set_target_properties(Nabla PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${NBL_ASSEMBLY_DIRECTORY})
468468
endif()
469469

470470
## Set up 3rdparty deps

0 commit comments

Comments
 (0)