https://git.reactos.org/?p=reactos.git;a=commitdiff;h=81b8d07acd653c2a14a13cd8e1aac3dcf4ec20c6
commit 81b8d07acd653c2a14a13cd8e1aac3dcf4ec20c6 Author: Timo Kreuzer <timo.kreu...@reactos.org> AuthorDate: Sat Oct 19 13:57:29 2024 +0300 Commit: Timo Kreuzer <timo.kreu...@reactos.org> CommitDate: Thu Oct 24 18:39:50 2024 +0300 [CPPRT] Add cpprt for GCC, tool - Link it to libsup++ - Add __cxa_pure_virtual --- sdk/cmake/gcc.cmake | 1 - sdk/lib/CMakeLists.txt | 2 +- sdk/lib/cpprt/CMakeLists.txt | 34 ++++++++++++++++++++++------------ sdk/lib/cpprt/__cxa_pure_virtual.cpp | 13 +++++++++++++ 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/sdk/cmake/gcc.cmake b/sdk/cmake/gcc.cmake index cecbd895cd4..1cac600cf6f 100644 --- a/sdk/cmake/gcc.cmake +++ b/sdk/cmake/gcc.cmake @@ -601,5 +601,4 @@ target_compile_definitions(libstdc++ INTERFACE "$<$<COMPILE_LANGUAGE:CXX>:PAL_ST # Create our alias libraries add_library(cppstl ALIAS libstdc++) -add_library(cpprt ALIAS libsupc++) diff --git a/sdk/lib/CMakeLists.txt b/sdk/lib/CMakeLists.txt index 7c751ab8976..34dc04870fd 100644 --- a/sdk/lib/CMakeLists.txt +++ b/sdk/lib/CMakeLists.txt @@ -13,9 +13,9 @@ add_subdirectory(conutils) add_subdirectory(cportlib) add_subdirectory(crt) add_subdirectory(cryptlib) +add_subdirectory(cpprt) if(MSVC) - add_subdirectory(cpprt) add_subdirectory(RunTmChk) else() add_subdirectory(gcc-compat) diff --git a/sdk/lib/cpprt/CMakeLists.txt b/sdk/lib/cpprt/CMakeLists.txt index 94632d39ea5..ab3a0251338 100644 --- a/sdk/lib/cpprt/CMakeLists.txt +++ b/sdk/lib/cpprt/CMakeLists.txt @@ -3,20 +3,30 @@ include_directories( ${REACTOS_SOURCE_DIR}/sdk/lib/crt/include ${REACTOS_SOURCE_DIR}/sdk/include/c++) -list(APPEND SOURCE - ehvec.cpp - new_nothrow.cpp - terminate.cpp - typeinfo.cpp) - -if(ARCH STREQUAL "i386") - add_asm_files(cpprt_asm i386/cpprt.s) -elseif(ARCH STREQUAL "amd64") - add_asm_files(cpprt_asm amd64/cpprt.s) -elseif(ARCH STREQUAL "arm") - add_asm_files(cpprt_asm arm/cpprt.s) +# We need different things, depending on the compiler +if(MSVC) + list(APPEND SOURCE + ehvec.cpp + new_nothrow.cpp + terminate.cpp + typeinfo.cpp) + if(ARCH STREQUAL "i386") + add_asm_files(cpprt_asm i386/cpprt.s) + elseif(ARCH STREQUAL "amd64") + add_asm_files(cpprt_asm amd64/cpprt.s) + elseif(ARCH STREQUAL "arm") + add_asm_files(cpprt_asm arm/cpprt.s) + endif() +else() + list(APPEND SOURCE + __cxa_pure_virtual.cpp) endif() add_library(cpprt ${SOURCE} ${cpprt_asm}) set_target_cpp_properties(cpprt WITH_EXCEPTIONS) add_dependencies(cpprt xdk) + +# On GCC builds, we need to link against libsupc++ +if(NOT MSVC) + target_link_libraries(cpprt libsupc++) +endif() diff --git a/sdk/lib/cpprt/__cxa_pure_virtual.cpp b/sdk/lib/cpprt/__cxa_pure_virtual.cpp new file mode 100644 index 00000000000..229690d9431 --- /dev/null +++ b/sdk/lib/cpprt/__cxa_pure_virtual.cpp @@ -0,0 +1,13 @@ +/* + * PROJECT: ReactOS C++ runtime library + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: __cxa_pure_virtual implementation + * COPYRIGHT: Copyright 2024 Timo Kreuzer <timo.kreu...@reactos.org> + */ + +#include <intrin.h> + +extern "C" void __cxa_pure_virtual(void) +{ + __debugbreak(); +}