box64/wow64/CMakeLists.txt
Yang Liu 882d933d84
[WOW64] Finished skeleton code for PE build (#2542)
* [WOW64] Finished skeleton code for PE build

* move musl to external
2025-04-17 12:30:59 +02:00

121 lines
4.4 KiB
CMake

cmake_minimum_required(VERSION 3.13)
project(wowbox64 C ASM)
set(BOX64_ROOT "${CMAKE_SOURCE_DIR}/..")
string(REPLACE "," ";" DYNAREC_ASM "${DYNAREC_ASM_STR}")
string(REPLACE "," ";" DYNAREC_PASS "${DYNAREC_PASS_STR}")
string(REPLACE "," ";" INTERPRETER "${INTERPRETER_STR}")
set(WOW64_MAIN_SRC
"${BOX64_ROOT}/wow64/crt.c"
"${BOX64_ROOT}/wow64/wowbox64.c"
)
set(MUSL_SRC
"${BOX64_ROOT}/external/musl/__cos.c"
"${BOX64_ROOT}/external/musl/__math_divzero.c"
"${BOX64_ROOT}/external/musl/__math_invalid.c"
"${BOX64_ROOT}/external/musl/__rem_pio2_large.c"
"${BOX64_ROOT}/external/musl/__rem_pio2.c"
"${BOX64_ROOT}/external/musl/__sin.c"
"${BOX64_ROOT}/external/musl/cos.c"
"${BOX64_ROOT}/external/musl/exp_data.c"
"${BOX64_ROOT}/external/musl/exp2.c"
"${BOX64_ROOT}/external/musl/expm1.c"
"${BOX64_ROOT}/external/musl/frexp.c"
"${BOX64_ROOT}/external/musl/ldexp.c"
"${BOX64_ROOT}/external/musl/log1p.c"
"${BOX64_ROOT}/external/musl/log2_data.c"
"${BOX64_ROOT}/external/musl/log2.c"
"${BOX64_ROOT}/external/musl/scalbn.c"
"${BOX64_ROOT}/external/musl/sin.c"
"${BOX64_ROOT}/external/musl/sincos.c"
"${BOX64_ROOT}/external/musl/sqrt_data.c"
"${BOX64_ROOT}/external/musl/sqrt.c"
"${BOX64_ROOT}/external/musl/sqrtf.c"
)
set_source_files_properties(${DYNAREC_ASM} PROPERTIES COMPILE_OPTIONS "-mcpu=cortex-a76")
foreach(STEP_VALUE RANGE 3)
add_library(wow64_dynarec_pass${STEP_VALUE} OBJECT ${DYNAREC_PASS})
target_compile_definitions(wow64_dynarec_pass${STEP_VALUE} PRIVATE STEP=${STEP_VALUE})
endforeach()
add_library(wow64_test_interpreter OBJECT ${INTERPRETER})
set_target_properties(wow64_test_interpreter PROPERTIES COMPILE_DEFINITIONS "TEST_INTERPRETER")
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"
"${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_functions.c"
"${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_jmpnext.c"
"${BOX64_ROOT}/src/dynarec/dynablock.c"
"${BOX64_ROOT}/src/dynarec/dynarec_native_functions.c"
"${BOX64_ROOT}/src/dynarec/dynarec_native.c"
"${BOX64_ROOT}/src/dynarec/dynarec.c"
"${BOX64_ROOT}/src/emu/x64compstrings.c"
"${BOX64_ROOT}/src/emu/x64emu.c"
"${BOX64_ROOT}/src/emu/x64primop.c"
"${BOX64_ROOT}/src/emu/x64shaext.c"
"${BOX64_ROOT}/src/emu/x64test.c"
"${BOX64_ROOT}/src/emu/x64trace.c"
"${BOX64_ROOT}/src/emu/x64run_private.c"
"${BOX64_ROOT}/src/emu/x87emu_private.c"
"${BOX64_ROOT}/src/os/backtrace.c"
"${BOX64_ROOT}/src/os/os_wine.c"
"${BOX64_ROOT}/src/os/freq_wine.c"
"${BOX64_ROOT}/src/os/symbolfuncs_wine.c"
"${BOX64_ROOT}/src/os/emit_signal_wine.c"
"${BOX64_ROOT}/src/os/perfmap.c"
"${BOX64_ROOT}/src/os/my_cpuid_wine.c"
"${BOX64_ROOT}/src/tools/alternate.c"
"${BOX64_ROOT}/src/tools/rbtree.c"
)
add_library(wowbox64 SHARED ${WOW64_MAIN_SRC} ${MUSL_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>
"${BOX64_ROOT}/wow64/wowbox64.def")
include_directories(
"${BOX64_ROOT}/src/include"
"${BOX64_ROOT}/src"
"${BOX64_ROOT}/wow64/include"
"${BOX64_ROOT}/external/musl"
"${BOX64_ROOT}/external/musl/internal"
)
set(DLLTOOL aarch64-w64-mingw32-dlltool)
function(import_dll name)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}.a
COMMAND ${DLLTOOL}
-D ${name}.dll
-d ${BOX64_ROOT}/wow64/${name}.def
-l ${CMAKE_CURRENT_BINARY_DIR}/${name}.a
-k
DEPENDS ${BOX64_ROOT}/wow64/${name}.def
COMMENT "Generating import library ${name}.a from ${name}.def"
)
add_custom_target(generate_${name}_import_lib DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name}.a)
add_dependencies(wowbox64 generate_${name}_import_lib)
target_link_libraries(wowbox64 PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${name}.a)
endfunction()
import_dll(ntdll)
import_dll(wow64)
# always enable DynaRec, only supports ARM64 for now.
add_compile_definitions(DYNAREC ARM64)
target_link_options(wowbox64 PRIVATE -nostdlib -nodefaultlibs -lclang_rt.builtins-aarch64)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)