diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-04-15 22:50:58 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-15 16:50:58 +0200 |
| commit | 4695a4ff3c2132edea634305850b4653c2f0fd1a (patch) | |
| tree | b8069c3b15d6d1e2eaeb5af7bcc23c5b0d59b9cc | |
| parent | 8f3018e10ce4e77053c839758f8e2bc42b6bfb11 (diff) | |
| download | box64-4695a4ff3c2132edea634305850b4653c2f0fd1a.tar.gz box64-4695a4ff3c2132edea634305850b4653c2f0fd1a.zip | |
[WOW64] Added PE build to the build system (#2537)
| -rw-r--r-- | CMakeLists.txt | 21 | ||||
| -rw-r--r-- | wow64/CMakeLists.txt | 132 | ||||
| -rw-r--r-- | wow64/toolchain_mingw.cmake | 5 |
3 files changed, 43 insertions, 115 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index ff9f3a6d..b618764c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ option(BOX32 "Set to ON to add Linux 32bits support (experimental, do not use)" option(BOX32_BINFMT "Also setup binfmt integration for box32" ${BOX32_BINFMT}) option(LARCH64_ABI_1 "Set to ON if building for Loongarch64 ABI 1.0 system" ${LARCH64_ABI_1}) option(GDBJIT "Set to ON to enable GDB JIT support" ${GDBJIT}) +option(WOW64 "Set to ON if you want a WOW64 PE build in addition") if(TERMUX) set(TERMUX_PATH "/data/data/com.termux/files") @@ -1316,6 +1317,26 @@ if(NOT TARGET uninstall) COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() +string(REPLACE ";" "," DYNAREC_ASM_STR "${DYNAREC_ASM}") +string(REPLACE ";" "," DYNAREC_PASS_STR "${DYNAREC_PASS}") +string(REPLACE ";" "," INTERPRETER_STR "${INTERPRETER}") + +if(WOW64 AND ARM_DYNAREC) + include(ExternalProject) + ExternalProject_Add( + wowbox64 + SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/wow64" + CMAKE_ARGS + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/wow64/toolchain_mingw.cmake + -DDYNAREC_PASS_STR=${DYNAREC_PASS_STR} + -DDYNAREC_ASM_STR=${DYNAREC_ASM_STR} + -DINTERPRETER_STR=${INTERPRETER_STR} + INSTALL_COMMAND "" + TEST_COMMAND "" + BUILD_ALWAYS ON + ) +endif() + set(CPACK_GENERATOR "DEB") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ptitSeb") set(CPACK_PACKAGE_CONTACT "ptitSeb@box86.org") diff --git a/wow64/CMakeLists.txt b/wow64/CMakeLists.txt index 1af8ccb4..5ca2f651 100644 --- a/wow64/CMakeLists.txt +++ b/wow64/CMakeLists.txt @@ -1,125 +1,27 @@ cmake_minimum_required(VERSION 3.13) - -set(CMAKE_C_COMPILER aarch64-w64-mingw32-clang) -set(CMAKE_ASM_COMPILER aarch64-w64-mingw32-as) - -set(CMAKE_SYSTEM_NAME Windows) -set(CMAKE_SYSTEM_PROCESSOR aarch64) - project(wowbox64 C ASM) set(BOX64_ROOT "${CMAKE_SOURCE_DIR}/..") -set(MAIN_SRC - "${BOX64_ROOT}/wow64/wowbox64.c" -) +string(REPLACE "," ";" DYNAREC_ASM "${DYNAREC_ASM_STR}") +string(REPLACE "," ";" DYNAREC_PASS "${DYNAREC_PASS_STR}") +string(REPLACE "," ";" INTERPRETER "${INTERPRETER_STR}") -set(DYNAREC_ASM_SRC - "${BOX64_ROOT}/src/dynarec/arm64/arm64_prolog.S" - "${BOX64_ROOT}/src/dynarec/arm64/arm64_epilog.S" - "${BOX64_ROOT}/src/dynarec/arm64/arm64_next.S" - "${BOX64_ROOT}/src/dynarec/arm64/arm64_lock.S" +set(WOW64_MAIN_SRC + "${BOX64_ROOT}/wow64/wowbox64.c" ) -set_source_files_properties(${DYNAREC_ASM_SRC} PROPERTIES COMPILE_OPTIONS "-mcpu=cortex-a76") - -set(DYNAREC_PASS_SRC - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_00.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_0f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_64.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_66.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_660f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_6664.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_66f0.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_66f20f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_66f30f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_67_32.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_67_avx.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_67.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_6764_32.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_0f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_0f38.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_f2_0f38.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_f2_0f3a.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_f3_0f38.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_d8.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_d9.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_da.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_db.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_dc.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_dd.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_de.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_df.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_emit_logic.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_emit_math.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_emit_shift.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_emit_tests.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_f0.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_f20f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_f30f.c" - "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_helper.c" - "${BOX64_ROOT}/src/dynarec/dynarec_native_pass.c" -) +set_source_files_properties(${DYNAREC_ASM} PROPERTIES COMPILE_OPTIONS "-mcpu=cortex-a76") foreach(STEP_VALUE RANGE 3) - add_library(dynarec_pass${STEP_VALUE} OBJECT ${DYNAREC_PASS_SRC}) - target_compile_definitions(dynarec_pass${STEP_VALUE} PRIVATE STEP=${STEP_VALUE}) + add_library(wow64_dynarec_pass${STEP_VALUE} OBJECT ${DYNAREC_PASS}) + target_compile_definitions(wow64_dynarec_pass${STEP_VALUE} PRIVATE STEP=${STEP_VALUE}) endforeach() -set(INTERPRETER_SRC - "${BOX64_ROOT}/src/emu/x64run.c" - "${BOX64_ROOT}/src/emu/x64run0f.c" - "${BOX64_ROOT}/src/emu/x64run64.c" - "${BOX64_ROOT}/src/emu/x64run66.c" - "${BOX64_ROOT}/src/emu/x64run660f.c" - "${BOX64_ROOT}/src/emu/x64run66f20f.c" - "${BOX64_ROOT}/src/emu/x64run66f30f.c" - "${BOX64_ROOT}/src/emu/x64run6664.c" - "${BOX64_ROOT}/src/emu/x64run66d9.c" - "${BOX64_ROOT}/src/emu/x64run66dd.c" - "${BOX64_ROOT}/src/emu/x64run66f0.c" - "${BOX64_ROOT}/src/emu/x64run67.c" - "${BOX64_ROOT}/src/emu/x64run67avx.c" - "${BOX64_ROOT}/src/emu/x64run67_32.c" - "${BOX64_ROOT}/src/emu/x64run6764_32.c" - "${BOX64_ROOT}/src/emu/x64run670f.c" - "${BOX64_ROOT}/src/emu/x64run6766.c" - "${BOX64_ROOT}/src/emu/x64run67660f.c" - "${BOX64_ROOT}/src/emu/x64rund8.c" - "${BOX64_ROOT}/src/emu/x64rund9.c" - "${BOX64_ROOT}/src/emu/x64runda.c" - "${BOX64_ROOT}/src/emu/x64rundb.c" - "${BOX64_ROOT}/src/emu/x64rundc.c" - "${BOX64_ROOT}/src/emu/x64rundd.c" - "${BOX64_ROOT}/src/emu/x64runde.c" - "${BOX64_ROOT}/src/emu/x64rundf.c" - "${BOX64_ROOT}/src/emu/x64runf0.c" - "${BOX64_ROOT}/src/emu/x64runf20f.c" - "${BOX64_ROOT}/src/emu/x64runf30f.c" - "${BOX64_ROOT}/src/emu/x64runavx.c" - "${BOX64_ROOT}/src/emu/x64runavx0f.c" - "${BOX64_ROOT}/src/emu/x64runavx0f38.c" - "${BOX64_ROOT}/src/emu/x64runavx660f.c" - "${BOX64_ROOT}/src/emu/x64runavxf20f.c" - "${BOX64_ROOT}/src/emu/x64runavxf30f.c" - "${BOX64_ROOT}/src/emu/x64runavx660f38.c" - "${BOX64_ROOT}/src/emu/x64runavx660f3a.c" - "${BOX64_ROOT}/src/emu/x64runavxf20f38.c" - "${BOX64_ROOT}/src/emu/x64runavxf30f38.c" - "${BOX64_ROOT}/src/emu/x64runavxf20f3a.c" - "${BOX64_ROOT}/src/emu/x64runavxf30f3a.c" -) - -add_library(test_interpreter OBJECT ${INTERPRETER_SRC}) -set_target_properties(test_interpreter PROPERTIES COMPILE_DEFINITIONS "TEST_INTERPRETER") +add_library(wow64_test_interpreter OBJECT ${INTERPRETER}) +set_target_properties(wow64_test_interpreter PROPERTIES COMPILE_DEFINITIONS "TEST_INTERPRETER") -set(BOX64CPU_SRC +set(WOW64_BOX64CPU_SRC "${BOX64_ROOT}/src/custommem.c" "${BOX64_ROOT}/src/dynarec/arm64/arm64_immenc.c" "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_arch.c" @@ -148,12 +50,12 @@ set(BOX64CPU_SRC "${BOX64_ROOT}/src/tools/rbtree.c" ) -add_library(wowbox64 SHARED ${MAIN_SRC} ${BOX64CPU_SRC} ${INTERPRETER_SRC} ${DYNAREC_ASM_SRC} - $<TARGET_OBJECTS:dynarec_pass0> - $<TARGET_OBJECTS:dynarec_pass1> - $<TARGET_OBJECTS:dynarec_pass2> - $<TARGET_OBJECTS:dynarec_pass3> - $<TARGET_OBJECTS:test_interpreter>) +add_library(wowbox64 SHARED ${WOW64_MAIN_SRC} ${WOW64_BOX64CPU_SRC} ${INTERPRETER} ${DYNAREC_ASM} + $<TARGET_OBJECTS:wow64_dynarec_pass0> + $<TARGET_OBJECTS:wow64_dynarec_pass1> + $<TARGET_OBJECTS:wow64_dynarec_pass2> + $<TARGET_OBJECTS:wow64_dynarec_pass3> + $<TARGET_OBJECTS:wow64_test_interpreter>) include_directories( "${BOX64_ROOT}/src/include" diff --git a/wow64/toolchain_mingw.cmake b/wow64/toolchain_mingw.cmake new file mode 100644 index 00000000..544289da --- /dev/null +++ b/wow64/toolchain_mingw.cmake @@ -0,0 +1,5 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +set(CMAKE_C_COMPILER /home/ksco/llvm-mingw/bin/aarch64-w64-mingw32-clang) +set(CMAKE_ASM_COMPILER /home/ksco/llvm-mingw/bin/aarch64-w64-mingw32-as) \ No newline at end of file |