https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0f723105c69c2cfd912fe…
commit 0f723105c69c2cfd912fe0ea82b585a4addc0d0e
Author: Jérôme Gardou <jerome.gardou(a)reactos.org>
AuthorDate: Wed May 19 14:13:51 2021 +0200
Commit: Jérôme Gardou <jerome.gardou(a)reactos.org>
CommitDate: Wed May 19 14:13:51 2021 +0200
[CMAKE] Allow compiling amd64 port with GCC on Windows
Dedicated to Daniel
---
sdk/cmake/host-tools.cmake | 3 +++
sdk/lib/pseh/CMakeLists.txt | 8 +++++++-
sdk/tools/gcc_plugin_seh/CMakeLists.txt | 8 ++++++++
sdk/tools/gcc_plugin_seh/main.cpp | 2 +-
4 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/sdk/cmake/host-tools.cmake b/sdk/cmake/host-tools.cmake
index fe9b449fa84..8e9158227c8 100644
--- a/sdk/cmake/host-tools.cmake
+++ b/sdk/cmake/host-tools.cmake
@@ -13,6 +13,9 @@ function(setup_host_tools)
string(STRIP ${GCC_PLUGIN_DIR} GCC_PLUGIN_DIR)
list(APPEND CMAKE_HOST_TOOLS_EXTRA_ARGS -DGCC_PLUGIN_DIR=${GCC_PLUGIN_DIR})
list(APPEND HOST_MODULES gcc_plugin_seh)
+ if (CMAKE_HOST_WIN32)
+ list(APPEND HOST_MODULES g++_plugin_seh)
+ endif()
endif()
list(TRANSFORM HOST_TOOLS PREPEND "${REACTOS_BINARY_DIR}/host-tools/bin/"
OUTPUT_VARIABLE HOST_TOOLS_OUTPUT)
if (CMAKE_HOST_WIN32)
diff --git a/sdk/lib/pseh/CMakeLists.txt b/sdk/lib/pseh/CMakeLists.txt
index 604e56614ed..9777f55c930 100644
--- a/sdk/lib/pseh/CMakeLists.txt
+++ b/sdk/lib/pseh/CMakeLists.txt
@@ -20,7 +20,13 @@ if(MSVC OR ((CMAKE_C_COMPILER_ID STREQUAL "Clang") AND (ARCH
STREQUAL "amd64")))
elseif((CMAKE_C_COMPILER_ID STREQUAL "GNU") AND (ARCH STREQUAL
"amd64"))
# for GCC amd64 this is just an interface library, with our home-made plugin
add_library(pseh INTERFACE)
- target_compile_options(pseh INTERFACE
-fplugin=$<TARGET_FILE:native-gcc_plugin_seh>)
+ if (CMAKE_HOST_WIN32)
+ target_compile_options(pseh INTERFACE
+
$<$<COMPILE_LANGUAGE:C>:-fplugin=$<TARGET_FILE:native-gcc_plugin_seh>>
+
$<$<COMPILE_LANGUAGE:CXX>:-fplugin=$<TARGET_FILE:native-g++_plugin_seh>>)
+ else()
+ target_compile_options(pseh INTERFACE
$<$<COMPILE_LANGUAGE:C,CXX>:-fplugin=$<TARGET_FILE:native-gcc_plugin_seh>>)
+ endif()
else()
if(USE_PSEH3)
diff --git a/sdk/tools/gcc_plugin_seh/CMakeLists.txt
b/sdk/tools/gcc_plugin_seh/CMakeLists.txt
index b96571f7fbe..d2d56ee5a8b 100644
--- a/sdk/tools/gcc_plugin_seh/CMakeLists.txt
+++ b/sdk/tools/gcc_plugin_seh/CMakeLists.txt
@@ -2,3 +2,11 @@
add_host_module(gcc_plugin_seh main.cpp)
target_include_directories(gcc_plugin_seh PRIVATE ${GCC_PLUGIN_DIR}/include)
set_target_properties(gcc_plugin_seh PROPERTIES POSITION_INDEPENDENT_CODE ON)
+
+if (CMAKE_HOST_SYSTEM MATCHES "Windows")
+ # On windows, GCC plugins need to be linked to the main executable
+ # This means that there must be a plugin for both GCC & G++
+ target_link_libraries(gcc_plugin_seh PRIVATE ${GCC_PLUGIN_DIR}/cc1.exe.a)
+ add_host_module(g++_plugin_seh $<TARGET_OBJECTS:gcc_plugin_seh>)
+ target_link_libraries(g++_plugin_seh PRIVATE ${GCC_PLUGIN_DIR}/cc1plus.exe.a)
+endif()
diff --git a/sdk/tools/gcc_plugin_seh/main.cpp b/sdk/tools/gcc_plugin_seh/main.cpp
index 22df978e0c6..7383192da71 100644
--- a/sdk/tools/gcc_plugin_seh/main.cpp
+++ b/sdk/tools/gcc_plugin_seh/main.cpp
@@ -20,7 +20,7 @@
#define is_alpha(c) (((c)>64 && (c)<91) || ((c)>96 &&
(c)<123))
#if defined(_WIN32) || defined(WIN32)
-#define VISIBLE __decspec(dllexport)
+#define VISIBLE __declspec(dllexport)
#else
#define VISIBLE __attribute__((__visibility__("default")))
#endif