From 990ee3972c387b03903040db08f753b9b0f10a25 Mon Sep 17 00:00:00 2001
From: Markus Schmidl <markus.schmidl@mailbox.tu-dresden.de>
Date: Wed, 22 Jan 2025 17:52:33 +0100
Subject: [PATCH 1/6] fix cmake for roco2

---
 cmake/InstallHwloc.cmake | 2 +-
 src/CMakeLists.txt       | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/cmake/InstallHwloc.cmake b/cmake/InstallHwloc.cmake
index a292d8fb..98123b13 100644
--- a/cmake/InstallHwloc.cmake
+++ b/cmake/InstallHwloc.cmake
@@ -68,6 +68,6 @@ if (FIRESTARTER_BUILD_HWLOC)
 		endif()
 	endif()
 
-	include_directories(${HWLOC_INCLUDE_DIR}/include)
 	add_dependencies(hwloc HwlocInstall)
+	target_include_directories(hwloc INTERFACE ${HWLOC_INCLUDE_DIR}/include)
 endif()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 928ef7f3..35dc000b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -30,6 +30,8 @@ add_library(firestartercore STATIC
 	firestarter/X86/Payload/SSE2Payload.cpp
 	)
 
+target_include_directories(firestartercore PUBLIC ${PROJECT_SOURCE_DIR}/include)
+
 target_link_libraries(firestartercore
 	hwloc
 	AsmJit::AsmJit
@@ -53,6 +55,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
 		firestarter/Optimizer/Util/MultiObjective.cpp
 		firestarter/Optimizer/Algorithm/NSGA2.cpp
 		)
+	
+	target_include_directories(firestarterlinux PUBLIC ${PROJECT_SOURCE_DIR}/include)
 
 	target_link_libraries(firestarterlinux
 		Nitro::log

From e5c63baae8e29f90eb57fe4aeac66dc869377258 Mon Sep 17 00:00:00 2001
From: Markus Schmidl <markus.schmidl@mailbox.tu-dresden.de>
Date: Wed, 22 Jan 2025 18:26:02 +0100
Subject: [PATCH 2/6] cmake: wworkaround for including a non exsistant
 directory

---
 cmake/InstallHwloc.cmake | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/cmake/InstallHwloc.cmake b/cmake/InstallHwloc.cmake
index 98123b13..635f1f76 100644
--- a/cmake/InstallHwloc.cmake
+++ b/cmake/InstallHwloc.cmake
@@ -69,5 +69,9 @@ if (FIRESTARTER_BUILD_HWLOC)
 	endif()
 
 	add_dependencies(hwloc HwlocInstall)
-	target_include_directories(hwloc INTERFACE ${HWLOC_INCLUDE_DIR}/include)
+
+	# Including a non exsistant directory is not allowed. This is the case when configuring and hwloc is not yet installed.
+	# See https://gitlab.kitware.com/cmake/cmake/-/issues/15052
+	file(MAKE_DIRECTORY "${HWLOC_INCLUDE_DIR}/include")
+	target_include_directories(hwloc INTERFACE "${HWLOC_INCLUDE_DIR}/include")
 endif()

From 1725ece6059bea6f05ca0c7b6ca4c9f01160f4be Mon Sep 17 00:00:00 2001
From: Markus Schmidl <markus.schmidl@mailbox.tu-dresden.de>
Date: Fri, 24 Jan 2025 18:39:33 +0100
Subject: [PATCH 3/6] cmake: do not use set for options

---
 cmake/BuildOptions.cmake | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cmake/BuildOptions.cmake b/cmake/BuildOptions.cmake
index 59766f90..a92551c5 100644
--- a/cmake/BuildOptions.cmake
+++ b/cmake/BuildOptions.cmake
@@ -6,7 +6,7 @@ set_property(CACHE FIRESTARTER_BUILD_TYPE PROPERTY STRINGS FIRESTARTER FIRESTART
 
 # Static linking is not supported with GPU devices or MacOS.
 if(${FIRESTARTER_BUILD_TYPE} STREQUAL "FIRESTARTER" AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
-	set(FIRESTARTER_LINK_STATIC "Link FIRESTARTER as a static binary. Note, dlopen is not supported in static binaries. This option is not available on macOS or with CUDA, OneAPI or HIP enabled." ON)
+	option(FIRESTARTER_LINK_STATIC "Link FIRESTARTER as a static binary. Note, dlopen is not supported in static binaries. This option is not available on macOS or with CUDA, OneAPI or HIP enabled." ON)
 endif()
 
 
@@ -22,5 +22,5 @@ option(FIRESTARTER_FETCH_GOOGLETEST "Fetch the Google Test dependency." ON)
 
 # Debug feature are enabled on linux per default.
 if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
-	set(FIRESTARTER_DEBUG_FEATURES "Enable debug features" ON)
+	option(FIRESTARTER_DEBUG_FEATURES "Enable debug features" ON)
 endif()
\ No newline at end of file

From f669a1c25851a03ff764e765ad12d8f4a25ffe21 Mon Sep 17 00:00:00 2001
From: Markus Schmidl <markus.schmidl@mailbox.tu-dresden.de>
Date: Fri, 24 Jan 2025 19:43:38 +0100
Subject: [PATCH 4/6] create combined firestarter library

---
 src/CMakeLists.txt | 52 ++++++++++++++++++----------------------------
 1 file changed, 20 insertions(+), 32 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 35dc000b..c09a3298 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -64,13 +64,25 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
 		)
 endif()
 
-
-SET(FIRESTARTER_FILES
-	firestarter/Main.cpp
-
+add_library(firestartercombined STATIC
 	# IpcEstimateMetricData::insertValue is accesses which is part of the firestarterlinux library.
 	# This reference should be removed there and the file moved back to the firestartercore library.
 	firestarter/LoadWorker.cpp
+)
+
+target_link_libraries(firestartercombined
+	firestartercore
+	)
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+	target_link_libraries(firestartercombined
+		firestarterlinux
+		)
+endif()
+
+
+SET(FIRESTARTER_FILES
+	firestarter/Main.cpp
 	)
 
 if ("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_CUDA")
@@ -80,15 +92,9 @@ if ("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_CUDA")
 		)
 
 	target_link_libraries(FIRESTARTER_CUDA
-		firestartercore
+		firestartercombined
 	)
 
-	if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-		target_link_libraries(FIRESTARTER_CUDA
-			firestarterlinux
-		)
-	endif()
-
 	target_link_libraries(FIRESTARTER_CUDA
 		CUDA::cuda_driver
 		CUDA::cudart
@@ -114,15 +120,9 @@ elseif ("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_ONEAPI")
 		)
 
 	target_link_libraries(FIRESTARTER_ONEAPI
-		firestartercore
+		firestartercombined
 	)
 
-	if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-		target_link_libraries(FIRESTARTER_ONEAPI
-			firestarterlinux
-		)
-	endif()
-
 	target_link_libraries(FIRESTARTER_ONEAPI
 		mkl_sycl
 		mkl_intel_ilp64
@@ -140,15 +140,9 @@ elseif("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_HIP")
 		)
 
 	target_link_libraries(FIRESTARTER_HIP
-		firestartercore
+		firestartercombined
 	)
 
-	if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-		target_link_libraries(FIRESTARTER_HIP
-			firestarterlinux
-		)
-	endif()
-
 	target_link_libraries(FIRESTARTER_HIP
 		hip::host
 		hip::hiprand
@@ -168,15 +162,9 @@ elseif(${FIRESTARTER_BUILD_TYPE} STREQUAL "FIRESTARTER")
 		)
 
 	target_link_libraries(FIRESTARTER
-		firestartercore
+		firestartercombined
 	)
 
-	if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-		target_link_libraries(FIRESTARTER
-			firestarterlinux
-		)
-	endif()
-
 	target_link_libraries_darwin(NAME FIRESTARTER)
 
 	# static linking is not supported on Darwin, see Apple Technical QA1118

From 80f9e2ec5517603649e342739f1bf2129d34ac5e Mon Sep 17 00:00:00 2001
From: Markus Schmidl <markus.schmidl@mailbox.tu-dresden.de>
Date: Fri, 24 Jan 2025 19:54:34 +0100
Subject: [PATCH 5/6] fix linking

---
 src/CMakeLists.txt | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c09a3298..545a1c9a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -92,7 +92,9 @@ if ("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_CUDA")
 		)
 
 	target_link_libraries(FIRESTARTER_CUDA
+		"-Wl,--whole-archive"
 		firestartercombined
+		"-Wl,--no-whole-archive"
 	)
 
 	target_link_libraries(FIRESTARTER_CUDA
@@ -120,7 +122,9 @@ elseif ("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_ONEAPI")
 		)
 
 	target_link_libraries(FIRESTARTER_ONEAPI
+		"-Wl,--whole-archive"
 		firestartercombined
+		"-Wl,--no-whole-archive"
 	)
 
 	target_link_libraries(FIRESTARTER_ONEAPI
@@ -140,7 +144,9 @@ elseif("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_HIP")
 		)
 
 	target_link_libraries(FIRESTARTER_HIP
+		"-Wl,--whole-archive"
 		firestartercombined
+		"-Wl,--no-whole-archive"
 	)
 
 	target_link_libraries(FIRESTARTER_HIP
@@ -162,7 +168,9 @@ elseif(${FIRESTARTER_BUILD_TYPE} STREQUAL "FIRESTARTER")
 		)
 
 	target_link_libraries(FIRESTARTER
+		"-Wl,--whole-archive"
 		firestartercombined
+		"-Wl,--no-whole-archive"
 	)
 
 	target_link_libraries_darwin(NAME FIRESTARTER)

From ebdbd0415989cc443391fd249a3f3ebbf5f7b6c6 Mon Sep 17 00:00:00 2001
From: Markus Schmidl <markus.schmidl@mailbox.tu-dresden.de>
Date: Thu, 30 Jan 2025 16:11:43 +0100
Subject: [PATCH 6/6] cmake: fix macos build

---
 src/CMakeLists.txt | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 545a1c9a..4ed17efe 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -80,11 +80,22 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
 		)
 endif()
 
-
 SET(FIRESTARTER_FILES
 	firestarter/Main.cpp
 	)
 
+if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+	SET(FIRESTARTER_LIBRARIES
+		firestartercombined
+	)
+else()
+	SET(FIRESTARTER_LIBRARIES
+		"-Wl,--whole-archive"
+		firestartercombined
+		"-Wl,--no-whole-archive"
+	)
+endif()
+
 if ("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_CUDA")
 	add_executable(FIRESTARTER_CUDA
 		${FIRESTARTER_FILES}
@@ -92,9 +103,7 @@ if ("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_CUDA")
 		)
 
 	target_link_libraries(FIRESTARTER_CUDA
-		"-Wl,--whole-archive"
-		firestartercombined
-		"-Wl,--no-whole-archive"
+		${FIRESTARTER_LIBRARIES}
 	)
 
 	target_link_libraries(FIRESTARTER_CUDA
@@ -122,9 +131,7 @@ elseif ("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_ONEAPI")
 		)
 
 	target_link_libraries(FIRESTARTER_ONEAPI
-		"-Wl,--whole-archive"
-		firestartercombined
-		"-Wl,--no-whole-archive"
+		${FIRESTARTER_LIBRARIES}
 	)
 
 	target_link_libraries(FIRESTARTER_ONEAPI
@@ -144,9 +151,7 @@ elseif("${FIRESTARTER_BUILD_TYPE}" STREQUAL "FIRESTARTER_HIP")
 		)
 
 	target_link_libraries(FIRESTARTER_HIP
-		"-Wl,--whole-archive"
-		firestartercombined
-		"-Wl,--no-whole-archive"
+		${FIRESTARTER_LIBRARIES}
 	)
 
 	target_link_libraries(FIRESTARTER_HIP
@@ -168,9 +173,7 @@ elseif(${FIRESTARTER_BUILD_TYPE} STREQUAL "FIRESTARTER")
 		)
 
 	target_link_libraries(FIRESTARTER
-		"-Wl,--whole-archive"
-		firestartercombined
-		"-Wl,--no-whole-archive"
+		${FIRESTARTER_LIBRARIES}
 	)
 
 	target_link_libraries_darwin(NAME FIRESTARTER)