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=$) + if (CMAKE_HOST_WIN32) + target_compile_options(pseh INTERFACE + $<$:-fplugin=$> + $<$:-fplugin=$>) + else() + target_compile_options(pseh INTERFACE $<$:-fplugin=$>) + 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_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