From 8dc05e71593e014a5112384ca05aceef5fc8009a Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Tue, 18 May 2021 13:24:08 +0200
Subject: [PATCH] [#18] Fixed execution paths, GCC on Windows support and
 example module

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 CMakeLists.txt                                |  4 ++++
 config/Libraries.cmake                        |  4 ++--
 modules/CMakeLists.txt                        |  3 +++
 modules/testing/CMakeLists.txt                | 20 +++++++++++++++++++
 modules/testing/include/vkcv/testing/Test.hpp | 12 +++++++++++
 modules/testing/src/vkcv/testing/Test.cpp     | 10 ++++++++++
 projects/first_triangle/.gitignore            |  1 +
 projects/first_triangle/CMakeLists.txt        | 14 +++++++++----
 8 files changed, 62 insertions(+), 6 deletions(-)
 create mode 100644 modules/CMakeLists.txt
 create mode 100644 modules/testing/CMakeLists.txt
 create mode 100644 modules/testing/include/vkcv/testing/Test.hpp
 create mode 100644 modules/testing/src/vkcv/testing/Test.cpp
 create mode 100644 projects/first_triangle/.gitignore

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 58669d66..b18bdd33 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,7 @@ if (CMAKE_BUILD_TYPE)
 endif()
 
 message("-- Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]")
+message("-- Compiler: [ " ${CMAKE_CXX_COMPILER_ID} " " ${CMAKE_CXX_COMPILER_VERSION} " ]")
 
 # setting up different paths
 set(vkcv_config ${PROJECT_SOURCE_DIR}/config)
@@ -36,6 +37,9 @@ if (vkcv_build_debug)
 	endif()
 endif()
 
+# add modules as targets
+add_subdirectory(modules)
+
 # add source files for compilation
 include(${vkcv_config}/Sources.cmake)
 
diff --git a/config/Libraries.cmake b/config/Libraries.cmake
index ef199df6..16b1db39 100644
--- a/config/Libraries.cmake
+++ b/config/Libraries.cmake
@@ -2,8 +2,8 @@
 set(vkcv_config_lib ${vkcv_config}/lib)
 set(vkcv_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_lib})
 
-if(NOT WIN32)
-	set(vkcv_libraries stdc++fs)
+if(NOT MSVC)
+	set(vkcv_libraries  stdc++fs)
 	
 	# optimization for loading times
 	list(APPEND vkcv_flags -pthread)
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
new file mode 100644
index 00000000..3309d860
--- /dev/null
+++ b/modules/CMakeLists.txt
@@ -0,0 +1,3 @@
+
+# Add new modules here:
+add_subdirectory(testing)
diff --git a/modules/testing/CMakeLists.txt b/modules/testing/CMakeLists.txt
new file mode 100644
index 00000000..e869c797
--- /dev/null
+++ b/modules/testing/CMakeLists.txt
@@ -0,0 +1,20 @@
+cmake_minimum_required(VERSION 3.16)
+project(vkcv_testing)
+
+# setting c++ standard for the project
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+set(vkcv_testing_source ${PROJECT_SOURCE_DIR}/src)
+set(vkcv_testing_include ${PROJECT_SOURCE_DIR}/include)
+
+set(vkcv_testing_sources
+		${vkcv_testing_include}/vkcv/testing/Test.hpp
+		${vkcv_testing_source}/vkcv/testing/Test.cpp
+)
+
+# adding source files to the project
+add_library(vkcv_testing STATIC ${vkcv_testing_sources})
+
+# add the own include directory for public headers
+target_include_directories(vkcv_testing BEFORE PUBLIC ${vkcv_testing_include})
diff --git a/modules/testing/include/vkcv/testing/Test.hpp b/modules/testing/include/vkcv/testing/Test.hpp
new file mode 100644
index 00000000..7f020ce4
--- /dev/null
+++ b/modules/testing/include/vkcv/testing/Test.hpp
@@ -0,0 +1,12 @@
+#pragma once
+
+namespace vkcv::testing {
+	
+	class Test {
+	private:
+	public:
+		void test(int test_value);
+		
+	};
+	
+}
diff --git a/modules/testing/src/vkcv/testing/Test.cpp b/modules/testing/src/vkcv/testing/Test.cpp
new file mode 100644
index 00000000..302fe986
--- /dev/null
+++ b/modules/testing/src/vkcv/testing/Test.cpp
@@ -0,0 +1,10 @@
+
+#include "vkcv/testing/Test.hpp"
+
+namespace vkcv::testing {
+	
+	void Test::test(int test_value) {
+		// TODO: this is an example
+	}
+
+}
diff --git a/projects/first_triangle/.gitignore b/projects/first_triangle/.gitignore
new file mode 100644
index 00000000..7e24fd7b
--- /dev/null
+++ b/projects/first_triangle/.gitignore
@@ -0,0 +1 @@
+first_triangle
\ No newline at end of file
diff --git a/projects/first_triangle/CMakeLists.txt b/projects/first_triangle/CMakeLists.txt
index b7a2b52f..78c40f99 100644
--- a/projects/first_triangle/CMakeLists.txt
+++ b/projects/first_triangle/CMakeLists.txt
@@ -5,14 +5,20 @@ project(first_triangle)
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/shaders/vert.spv DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/shaders)
-file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/shaders/frag.spv DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/shaders)
+# this should fix the execution path to load local files from the project
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
 
 # adding source files to the project
 add_executable(first_triangle src/main.cpp)
 
+# this should fix the execution path to load local files from the project (for MSVC)
+if(MSVC)
+	set_target_properties(first_triangle PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+	set_target_properties(first_triangle PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+endif()
+
 # including headers of dependencies and the VkCV framework
-target_include_directories(first_triangle SYSTEM BEFORE PRIVATE ${vkcv_include} ${vkcv_includes})
+target_include_directories(first_triangle SYSTEM BEFORE PRIVATE ${vkcv_include} ${vkcv_includes} ${vkcv_testing_include})
 
 # linking with libraries from all dependencies and the VkCV framework
-target_link_libraries(first_triangle vkcv ${vkcv_libraries})
+target_link_libraries(first_triangle vkcv ${vkcv_libraries} vkcv_testing)
-- 
GitLab