mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-27 07:11:01 +00:00
NEW: Add cross compile support on X86_64 Linux with MinGW toolchain.
This commit is contained in:
@@ -14,6 +14,10 @@ if(NOT MOMO_ENABLE_CLANG_TIDY)
|
||||
target_precompile_headers(analyzer PRIVATE std_include.hpp)
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_options(analyzer PRIVATE -static-libstdc++ -static -lwinpthread)
|
||||
endif()
|
||||
|
||||
target_link_libraries(analyzer PRIVATE
|
||||
reflect
|
||||
debugger
|
||||
|
||||
@@ -16,5 +16,9 @@ endif()
|
||||
|
||||
target_include_directories(icicle-emulator INTERFACE "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_options(icicle-emulator PRIVATE -static-libstdc++ -static -lwinpthread)
|
||||
endif()
|
||||
|
||||
target_link_libraries(icicle-emulator PUBLIC emulator)
|
||||
target_link_libraries(icicle-emulator PRIVATE emulator-common icicle-bridge)
|
||||
|
||||
@@ -14,6 +14,10 @@ endif()
|
||||
|
||||
target_include_directories(unicorn-emulator INTERFACE "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_options(unicorn-emulator PRIVATE -static-libstdc++ -static -lwinpthread)
|
||||
endif()
|
||||
|
||||
target_link_libraries(unicorn-emulator PUBLIC emulator)
|
||||
target_link_libraries(unicorn-emulator PRIVATE unicorn emulator-common)
|
||||
|
||||
|
||||
@@ -11,7 +11,16 @@ target_include_directories(emulator-common INTERFACE "${CMAKE_CURRENT_LIST_DIR}"
|
||||
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(emulator-common PUBLIC
|
||||
Threads::Threads
|
||||
zlibstatic
|
||||
)
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_libraries(emulator-common PUBLIC
|
||||
Threads::Threads
|
||||
zlibstatic
|
||||
ws2_32
|
||||
)
|
||||
else()
|
||||
target_link_libraries(emulator-common PUBLIC
|
||||
Threads::Threads
|
||||
zlibstatic
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -2,8 +2,14 @@
|
||||
|
||||
#if _WIN32
|
||||
#include "../utils/win.hpp"
|
||||
#ifdef __MINGW64__
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#include <WinSock2.h>
|
||||
#include <WS2tcpip.h>
|
||||
#endif
|
||||
#else
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -18,6 +18,10 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
#ifdef __MINGW64__
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -14,6 +14,10 @@ if(NOT MOMO_ENABLE_CLANG_TIDY)
|
||||
target_precompile_headers(fuzzer PRIVATE std_include.hpp)
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_options(fuzzer PRIVATE -static-libstdc++ -static -lwinpthread)
|
||||
endif()
|
||||
|
||||
target_link_libraries(fuzzer PRIVATE
|
||||
fuzzing-engine
|
||||
windows-emulator
|
||||
|
||||
@@ -8,4 +8,9 @@ list(SORT SRC_FILES)
|
||||
|
||||
add_executable(test-sample ${SRC_FILES})
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_options(test-sample PRIVATE -static-libstdc++ -static -lwinpthread)
|
||||
target_link_libraries(test-sample PRIVATE ws2_32)
|
||||
endif()
|
||||
|
||||
momo_assign_source_group(${SRC_FILES})
|
||||
|
||||
@@ -12,9 +12,16 @@
|
||||
#define NOMINMAX
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <intrin.h>
|
||||
|
||||
#ifdef __MINGW64__
|
||||
#include <windows.h>
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#else
|
||||
#include <Windows.h>
|
||||
#include <WinSock2.h>
|
||||
#include <WS2tcpip.h>
|
||||
#endif
|
||||
|
||||
#pragma comment(lib, "ws2_32.lib")
|
||||
|
||||
@@ -594,6 +601,7 @@ namespace
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __MINGW64__
|
||||
bool test_access_violation_exception()
|
||||
{
|
||||
__try
|
||||
@@ -641,6 +649,7 @@ namespace
|
||||
{
|
||||
return test_access_violation_exception() && test_illegal_instruction_exception();
|
||||
}
|
||||
#endif
|
||||
|
||||
bool trap_flag_cleared = false;
|
||||
constexpr DWORD TRAP_FLAG_MASK = 0x100;
|
||||
@@ -665,7 +674,11 @@ namespace
|
||||
|
||||
__writeeflags(__readeflags() | TRAP_FLAG_MASK);
|
||||
|
||||
#ifdef __MINGW64__
|
||||
asm("nop");
|
||||
#else
|
||||
__nop();
|
||||
#endif
|
||||
|
||||
RemoveVectoredExceptionHandler(veh_handle);
|
||||
|
||||
@@ -736,7 +749,9 @@ int main(const int argc, const char* argv[])
|
||||
RUN_TEST(test_threads, "Threads")
|
||||
RUN_TEST(test_env, "Environment")
|
||||
RUN_TEST(test_exceptions, "Exceptions")
|
||||
#ifndef __MINGW64__
|
||||
RUN_TEST(test_native_exceptions, "Native Exceptions")
|
||||
#endif
|
||||
if (!getenv("EMULATOR_ICICLE"))
|
||||
{
|
||||
RUN_TEST(test_interrupts, "Interrupts")
|
||||
|
||||
@@ -10,6 +10,10 @@ add_executable(dump-apiset ${SRC_FILES})
|
||||
|
||||
momo_assign_source_group(${SRC_FILES})
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_options(dump-apiset PRIVATE -static-libstdc++ -static -lwinpthread)
|
||||
endif()
|
||||
|
||||
target_link_libraries(dump-apiset PRIVATE
|
||||
emulator-common
|
||||
)
|
||||
|
||||
@@ -10,6 +10,14 @@ add_executable(windows-emulator-test ${SRC_FILES})
|
||||
|
||||
momo_assign_source_group(${SRC_FILES})
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_options(windows-emulator-test PRIVATE -static-libstdc++ -static -lwinpthread)
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER MATCHES "/.*/x86_64-w64-mingw32-gcc$")
|
||||
target_link_options(windows-emulator-test PRIVATE -static-libstdc++ -static -lwinpthread)
|
||||
endif()
|
||||
|
||||
target_link_libraries(windows-emulator-test PRIVATE
|
||||
gtest
|
||||
gtest_main
|
||||
|
||||
Reference in New Issue
Block a user