mirror of
https://github.com/Vita3K/unicorn.git
synced 2024-11-26 23:00:37 +00:00
add CMakeList.txt. build windows binary by using vs2019. (#1134)
* add CMakeList.txt. build windows binary by using vs2019. * remove macro redefinition warning. * add nmake.bat. * update CMakeLists.txt. build successfully on Ubuntu-1804-amd64. * add CMakeList.txt. build windows binary by using vs2019. * remove macro redefinition warning. * add nmake.bat. * update CMakeLists.txt. build successfully on Ubuntu-1804-amd64. * Add build specific arch option. * fix old MSVC inline and mipsel macro. * add install target and option of embeded MSVCRT lib. * add cmake.sh and document. * add xwings and chenhuitao as programmer. * fix COMPILE-CMAKE. rename txt to md.
This commit is contained in:
parent
8987ad0fff
commit
60896de9f4
890
CMakeLists.txt
Normal file
890
CMakeLists.txt
Normal file
@ -0,0 +1,890 @@
|
||||
# Tested on window10(x64) with vs2019.
|
||||
# Open the "x86 Native Tools Command Prompt for VS 2019",
|
||||
# cd ${UNICORN_SOURCE_DIR}
|
||||
# mkdir build
|
||||
# cd build
|
||||
# cmake -G "NMake Makefiles" ..
|
||||
# nmake
|
||||
# Or Open "x64 Native Tools Command Prompt for VS 2019" for 64bit binary.
|
||||
# Tested on Ubuntu-1804-amd64 with gcc.
|
||||
# cd ${UNICORN_SOURCE_DIR}
|
||||
# mkdir build
|
||||
# cd build
|
||||
# cmake ..
|
||||
# make
|
||||
# By Huitao Chen, 2019
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
project(unicorn C)
|
||||
|
||||
set(UNICORN_VERSION_MAJOR 1)
|
||||
set(UNICORN_VERSION_MINOR 0)
|
||||
set(UNICORN_VERSION_PATCH 2)
|
||||
|
||||
if(NOT UNICORN_ARCH)
|
||||
set(UNICORN_ARCH "x86 arm aarch64 m68k mips sparc")
|
||||
endif()
|
||||
|
||||
string(TOUPPER ${UNICORN_ARCH} UNICORN_ARCH)
|
||||
string(REPLACE " " ";" UNICORN_ARCH_LIST ${UNICORN_ARCH})
|
||||
|
||||
foreach(ARCH_LOOP ${UNICORN_ARCH_LIST})
|
||||
set(UNICORN_HAS_${ARCH_LOOP} TRUE)
|
||||
endforeach(ARCH_LOOP)
|
||||
|
||||
# qemu uses assert(). It is not recommended to define NDEBUG if using assert()
|
||||
# to detect error conditions since the software may behave
|
||||
# non-deterministically. Remove the NDEBUG macro.
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn
|
||||
)
|
||||
else()
|
||||
include_directories(
|
||||
${CMAKE_BINARY_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
qemu
|
||||
qemu/include
|
||||
qemu/tcg
|
||||
include
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(MSVC_FLAG -D__x86_64__)
|
||||
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
set(MSVC_FLAG -D__i386__)
|
||||
else()
|
||||
message(FATAL_ERROR "Neither WIN64 or WIN32!")
|
||||
endif()
|
||||
add_compile_options(
|
||||
-Dinline=__inline
|
||||
-D__func__=__FUNCTION__
|
||||
-D_CRT_SECURE_NO_WARNINGS
|
||||
-DWIN32_LEAN_AND_MEAN
|
||||
${MSVC_FLAG}
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/tcg/i386
|
||||
/wd4018 /wd4244 /wd4267
|
||||
)
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
string(REPLACE "/ZI" "/Zi" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
|
||||
endif()
|
||||
# default use the multithread, static version of the run-time library.
|
||||
option(UNICORN_STATIC_MSVCRT "Embed static runtime library" ON)
|
||||
if (UNICORN_STATIC_MSVCRT)
|
||||
string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
|
||||
string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
|
||||
endif()
|
||||
else()
|
||||
# check python
|
||||
find_program(PYTHON_CMD python)
|
||||
if (NOT PYTHON_CMD)
|
||||
message(FATAL_ERROR "Please install python.")
|
||||
endif()
|
||||
|
||||
set(EXTRA_CFLAGS "--extra-cflags=")
|
||||
if (UNICORN_HAS_X86)
|
||||
set (EXTRA_CFLAGS "${EXTRA_CFLAGS}-DUNICORN_HAS_X86 ")
|
||||
endif()
|
||||
if (UNICORN_HAS_ARM)
|
||||
set (EXTRA_CFLAGS "${EXTRA_CFLAGS}-DUNICORN_HAS_ARM -DUNICORN_HAS_ARMEB ")
|
||||
endif()
|
||||
if (UNICORN_HAS_AARCH64)
|
||||
set (EXTRA_CFLAGS "${EXTRA_CFLAGS}-DUNICORN_HAS_ARM64 -DUNICORN_HAS_ARM64EB ")
|
||||
endif()
|
||||
if (UNICORN_HAS_M68K)
|
||||
set (EXTRA_CFLAGS "${EXTRA_CFLAGS}-DUNICORN_HAS_M68K ")
|
||||
endif()
|
||||
if (UNICORN_HAS_MIPS)
|
||||
set (EXTRA_CFLAGS "${EXTRA_CFLAGS}-DUNICORN_HAS_MIPS -DUNICORN_HAS_MIPSEL -DUNICORN_HAS_MIPS64 -DUNICORN_HAS_MIPS64EL ")
|
||||
endif()
|
||||
if (UNICORN_HAS_SPARC)
|
||||
set (EXTRA_CFLAGS "${EXTRA_CFLAGS}-DUNICORN_HAS_SPARC ")
|
||||
endif()
|
||||
set (EXTRA_CFLAGS "${EXTRA_CFLAGS}-fPIC -fvisibility=hidden")
|
||||
|
||||
set(TARGET_LIST "--target-list=")
|
||||
if (UNICORN_HAS_X86)
|
||||
set (TARGET_LIST "${TARGET_LIST}x86_64-softmmu, ")
|
||||
endif()
|
||||
if (UNICORN_HAS_ARM)
|
||||
set (TARGET_LIST "${TARGET_LIST}arm-softmmu, armeb-softmmu, ")
|
||||
endif()
|
||||
if (UNICORN_HAS_AARCH64)
|
||||
set (TARGET_LIST "${TARGET_LIST}aarch64-softmmu, aarch64eb-softmmu, ")
|
||||
endif()
|
||||
if (UNICORN_HAS_M68K)
|
||||
set (TARGET_LIST "${TARGET_LIST}m68k-softmmu, ")
|
||||
endif()
|
||||
if (UNICORN_HAS_MIPS)
|
||||
set (TARGET_LIST "${TARGET_LIST}mips-softmmu, mipsel-softmmu, mips64-softmmu, mips64el-softmmu, ")
|
||||
endif()
|
||||
if (UNICORN_HAS_SPARC)
|
||||
set (TARGET_LIST "${TARGET_LIST}sparc-softmmu, sparc64-softmmu, ")
|
||||
endif()
|
||||
set (TARGET_LIST "${TARGET_LIST} ")
|
||||
|
||||
# GEN dynamic source files
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/configure
|
||||
${EXTRA_CFLAGS}
|
||||
${TARGET_LIST}
|
||||
)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/config-host.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/config-host.h
|
||||
)
|
||||
if (UNICORN_HAS_X86)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/x86_64-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/x86_64-softmmu/config-target.h
|
||||
)
|
||||
endif()
|
||||
if (UNICORN_HAS_ARM)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/arm-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/arm-softmmu/config-target.h
|
||||
)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/armeb-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/armeb-softmmu/config-target.h
|
||||
)
|
||||
endif()
|
||||
if (UNICORN_HAS_AARCH64)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/aarch64-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/aarch64-softmmu/config-target.h
|
||||
)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/aarch64eb-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/aarch64eb-softmmu/config-target.h
|
||||
)
|
||||
endif()
|
||||
if (UNICORN_HAS_M68K)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/m68k-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/m68k-softmmu/config-target.h
|
||||
)
|
||||
endif()
|
||||
if (UNICORN_HAS_MIPS)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/mips-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/mips-softmmu/config-target.h
|
||||
)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/mipsel-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/mipsel-softmmu/config-target.h
|
||||
)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/mips64-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/mips64-softmmu/config-target.h
|
||||
)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/mips64el-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/mips64el-softmmu/config-target.h
|
||||
)
|
||||
endif()
|
||||
if (UNICORN_HAS_SPARC)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/sparc-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/sparc-softmmu/config-target.h
|
||||
)
|
||||
execute_process(COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/create_config
|
||||
INPUT_FILE ${CMAKE_BINARY_DIR}/sparc64-softmmu/config-target.mak
|
||||
OUTPUT_FILE ${CMAKE_BINARY_DIR}/sparc64-softmmu/config-target.h
|
||||
)
|
||||
endif()
|
||||
execute_process(COMMAND python -B ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/qapi-types.py
|
||||
-h -o ${CMAKE_BINARY_DIR} -b -i ${CMAKE_CURRENT_SOURCE_DIR}/qemu/qapi-schema.json
|
||||
)
|
||||
execute_process(COMMAND python -B ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/qapi-types.py
|
||||
-c -o ${CMAKE_BINARY_DIR} -b -i ${CMAKE_CURRENT_SOURCE_DIR}/qemu/qapi-schema.json
|
||||
)
|
||||
execute_process(COMMAND python -B ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/qapi-visit.py
|
||||
-h -o ${CMAKE_BINARY_DIR} -b -i ${CMAKE_CURRENT_SOURCE_DIR}/qemu/qapi-schema.json
|
||||
)
|
||||
execute_process(COMMAND python -B ${CMAKE_CURRENT_SOURCE_DIR}/qemu/scripts/qapi-visit.py
|
||||
-c -o ${CMAKE_BINARY_DIR} -b -i ${CMAKE_CURRENT_SOURCE_DIR}/qemu/qapi-schema.json
|
||||
)
|
||||
add_compile_options(
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/tcg/i386
|
||||
-D_GNU_SOURCE
|
||||
-D_FILE_OFFSET_BITS=64
|
||||
-D_LARGEFILE_SOURCE
|
||||
-Wall -O2
|
||||
-fPIC -fpic -fvisibility=hidden
|
||||
)
|
||||
endif()
|
||||
|
||||
if (UNICORN_HAS_X86)
|
||||
add_library(x86_64-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/i386/pc.c
|
||||
qemu/hw/i386/pc_piix.c
|
||||
qemu/hw/intc/apic.c
|
||||
qemu/hw/intc/apic_common.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-i386/arch_memory_mapping.c
|
||||
qemu/target-i386/cc_helper.c
|
||||
qemu/target-i386/cpu.c
|
||||
qemu/target-i386/excp_helper.c
|
||||
qemu/target-i386/fpu_helper.c
|
||||
qemu/target-i386/helper.c
|
||||
qemu/target-i386/int_helper.c
|
||||
qemu/target-i386/mem_helper.c
|
||||
qemu/target-i386/misc_helper.c
|
||||
qemu/target-i386/seg_helper.c
|
||||
qemu/target-i386/smm_helper.c
|
||||
qemu/target-i386/svm_helper.c
|
||||
qemu/target-i386/translate.c
|
||||
qemu/target-i386/unicorn.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(x86_64-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI x86_64.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/x86_64-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-i386
|
||||
)
|
||||
else()
|
||||
target_compile_options(x86_64-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include x86_64.h
|
||||
-I${CMAKE_BINARY_DIR}/x86_64-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-i386
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (UNICORN_HAS_ARM)
|
||||
add_library(arm-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/arm/tosa.c
|
||||
qemu/hw/arm/virt.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-arm/cpu.c
|
||||
qemu/target-arm/crypto_helper.c
|
||||
qemu/target-arm/helper.c
|
||||
qemu/target-arm/iwmmxt_helper.c
|
||||
qemu/target-arm/neon_helper.c
|
||||
qemu/target-arm/op_helper.c
|
||||
qemu/target-arm/psci.c
|
||||
qemu/target-arm/translate.c
|
||||
qemu/target-arm/unicorn_arm.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(arm-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI arm.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/arm-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-arm
|
||||
)
|
||||
else()
|
||||
target_compile_options(arm-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include arm.h
|
||||
-I${CMAKE_BINARY_DIR}/arm-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-arm
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(armeb-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/arm/tosa.c
|
||||
qemu/hw/arm/virt.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-arm/cpu.c
|
||||
qemu/target-arm/crypto_helper.c
|
||||
qemu/target-arm/helper.c
|
||||
qemu/target-arm/iwmmxt_helper.c
|
||||
qemu/target-arm/neon_helper.c
|
||||
qemu/target-arm/op_helper.c
|
||||
qemu/target-arm/psci.c
|
||||
qemu/target-arm/translate.c
|
||||
qemu/target-arm/unicorn_arm.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(armeb-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI armeb.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/armeb-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-arm
|
||||
)
|
||||
else()
|
||||
target_compile_options(armeb-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include armeb.h
|
||||
-I${CMAKE_BINARY_DIR}/armeb-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-arm
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (UNICORN_HAS_AARCH64)
|
||||
add_library(aarch64-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/arm/tosa.c
|
||||
qemu/hw/arm/virt.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-arm/cpu.c
|
||||
qemu/target-arm/cpu64.c
|
||||
qemu/target-arm/crypto_helper.c
|
||||
qemu/target-arm/helper-a64.c
|
||||
qemu/target-arm/helper.c
|
||||
qemu/target-arm/iwmmxt_helper.c
|
||||
qemu/target-arm/neon_helper.c
|
||||
qemu/target-arm/op_helper.c
|
||||
qemu/target-arm/psci.c
|
||||
qemu/target-arm/translate-a64.c
|
||||
qemu/target-arm/translate.c
|
||||
qemu/target-arm/unicorn_aarch64.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(aarch64-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI aarch64.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/aarch64-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-arm
|
||||
)
|
||||
else()
|
||||
target_compile_options(aarch64-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include aarch64.h
|
||||
-I${CMAKE_BINARY_DIR}/aarch64-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-arm
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(aarch64eb-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/arm/tosa.c
|
||||
qemu/hw/arm/virt.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-arm/cpu.c
|
||||
qemu/target-arm/cpu64.c
|
||||
qemu/target-arm/crypto_helper.c
|
||||
qemu/target-arm/helper-a64.c
|
||||
qemu/target-arm/helper.c
|
||||
qemu/target-arm/iwmmxt_helper.c
|
||||
qemu/target-arm/neon_helper.c
|
||||
qemu/target-arm/op_helper.c
|
||||
qemu/target-arm/psci.c
|
||||
qemu/target-arm/translate-a64.c
|
||||
qemu/target-arm/translate.c
|
||||
qemu/target-arm/unicorn_aarch64.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(aarch64eb-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI aarch64eb.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/aarch64eb-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-arm
|
||||
)
|
||||
else()
|
||||
target_compile_options(aarch64eb-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include aarch64eb.h
|
||||
-I${CMAKE_BINARY_DIR}/aarch64eb-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-arm
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (UNICORN_HAS_M68K)
|
||||
add_library(m68k-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/m68k/dummy_m68k.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-m68k/cpu.c
|
||||
qemu/target-m68k/helper.c
|
||||
qemu/target-m68k/op_helper.c
|
||||
qemu/target-m68k/translate.c
|
||||
qemu/target-m68k/unicorn.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(m68k-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI m68k.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/m68k-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-m68k
|
||||
)
|
||||
else()
|
||||
target_compile_options(m68k-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include m68k.h
|
||||
-I${CMAKE_BINARY_DIR}/m68k-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-m68k
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (UNICORN_HAS_MIPS)
|
||||
add_library(mips-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/mips/addr.c
|
||||
qemu/hw/mips/cputimer.c
|
||||
qemu/hw/mips/mips_r4k.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-mips/cpu.c
|
||||
qemu/target-mips/dsp_helper.c
|
||||
qemu/target-mips/helper.c
|
||||
qemu/target-mips/lmi_helper.c
|
||||
qemu/target-mips/msa_helper.c
|
||||
qemu/target-mips/op_helper.c
|
||||
qemu/target-mips/translate.c
|
||||
qemu/target-mips/unicorn.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(mips-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI mips.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/mips-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-mips
|
||||
)
|
||||
else()
|
||||
target_compile_options(mips-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include mips.h
|
||||
-I${CMAKE_BINARY_DIR}/mips-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-mips
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(mipsel-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/mips/addr.c
|
||||
qemu/hw/mips/cputimer.c
|
||||
qemu/hw/mips/mips_r4k.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-mips/cpu.c
|
||||
qemu/target-mips/dsp_helper.c
|
||||
qemu/target-mips/helper.c
|
||||
qemu/target-mips/lmi_helper.c
|
||||
qemu/target-mips/msa_helper.c
|
||||
qemu/target-mips/op_helper.c
|
||||
qemu/target-mips/translate.c
|
||||
qemu/target-mips/unicorn.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(mipsel-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI mipsel.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/mipsel-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-mips
|
||||
)
|
||||
else()
|
||||
target_compile_options(mipsel-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include mipsel.h
|
||||
-I${CMAKE_BINARY_DIR}/mipsel-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-mips
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(mips64-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/mips/addr.c
|
||||
qemu/hw/mips/cputimer.c
|
||||
qemu/hw/mips/mips_r4k.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-mips/cpu.c
|
||||
qemu/target-mips/dsp_helper.c
|
||||
qemu/target-mips/helper.c
|
||||
qemu/target-mips/lmi_helper.c
|
||||
qemu/target-mips/msa_helper.c
|
||||
qemu/target-mips/op_helper.c
|
||||
qemu/target-mips/translate.c
|
||||
qemu/target-mips/unicorn.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(mips64-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI mips64.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/mips64-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-mips
|
||||
)
|
||||
else()
|
||||
target_compile_options(mips64-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include mips64.h
|
||||
-I${CMAKE_BINARY_DIR}/mips64-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-mips
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(mips64el-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/mips/addr.c
|
||||
qemu/hw/mips/cputimer.c
|
||||
qemu/hw/mips/mips_r4k.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-mips/cpu.c
|
||||
qemu/target-mips/dsp_helper.c
|
||||
qemu/target-mips/helper.c
|
||||
qemu/target-mips/lmi_helper.c
|
||||
qemu/target-mips/msa_helper.c
|
||||
qemu/target-mips/op_helper.c
|
||||
qemu/target-mips/translate.c
|
||||
qemu/target-mips/unicorn.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(mips64el-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI mips64el.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/mips64el-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-mips
|
||||
)
|
||||
else()
|
||||
target_compile_options(mips64el-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include mips64el.h
|
||||
-I${CMAKE_BINARY_DIR}/mips64el-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-mips
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (UNICORN_HAS_SPARC)
|
||||
add_library(sparc-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/sparc/leon3.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-sparc/cc_helper.c
|
||||
qemu/target-sparc/cpu.c
|
||||
qemu/target-sparc/fop_helper.c
|
||||
qemu/target-sparc/helper.c
|
||||
qemu/target-sparc/int32_helper.c
|
||||
qemu/target-sparc/ldst_helper.c
|
||||
qemu/target-sparc/mmu_helper.c
|
||||
qemu/target-sparc/translate.c
|
||||
qemu/target-sparc/unicorn.c
|
||||
qemu/target-sparc/win_helper.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(sparc-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI sparc.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/sparc-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-sparc
|
||||
)
|
||||
else()
|
||||
target_compile_options(sparc-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include sparc.h
|
||||
-I${CMAKE_BINARY_DIR}/sparc-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-sparc
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(sparc64-softmmu
|
||||
qemu/cpu-exec.c
|
||||
qemu/cpus.c
|
||||
qemu/cputlb.c
|
||||
qemu/exec.c
|
||||
qemu/fpu/softfloat.c
|
||||
qemu/hw/sparc64/sun4u.c
|
||||
qemu/ioport.c
|
||||
qemu/memory.c
|
||||
qemu/memory_mapping.c
|
||||
qemu/target-sparc/cc_helper.c
|
||||
qemu/target-sparc/cpu.c
|
||||
qemu/target-sparc/fop_helper.c
|
||||
qemu/target-sparc/helper.c
|
||||
qemu/target-sparc/int64_helper.c
|
||||
qemu/target-sparc/ldst_helper.c
|
||||
qemu/target-sparc/mmu_helper.c
|
||||
qemu/target-sparc/translate.c
|
||||
qemu/target-sparc/unicorn64.c
|
||||
qemu/target-sparc/vis_helper.c
|
||||
qemu/target-sparc/win_helper.c
|
||||
qemu/tcg/optimize.c
|
||||
qemu/tcg/tcg.c
|
||||
qemu/translate-all.c
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(sparc64-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
/FI sparc64.h
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/sparc64-softmmu
|
||||
/I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-sparc
|
||||
)
|
||||
else()
|
||||
target_compile_options(sparc64-softmmu PRIVATE
|
||||
-DNEED_CPU_H
|
||||
-include sparc64.h
|
||||
-I${CMAKE_BINARY_DIR}/sparc64-softmmu
|
||||
-I${CMAKE_CURRENT_SOURCE_DIR}/qemu/target-sparc
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(UNICORN_SRCS_COMMON
|
||||
list.c
|
||||
qemu/accel.c
|
||||
qemu/glib_compat.c
|
||||
qemu/hw/core/machine.c
|
||||
qemu/hw/core/qdev.c
|
||||
qemu/qapi/qapi-dealloc-visitor.c
|
||||
qemu/qapi/qapi-visit-core.c
|
||||
qemu/qapi/qmp-input-visitor.c
|
||||
qemu/qapi/qmp-output-visitor.c
|
||||
qemu/qapi/string-input-visitor.c
|
||||
qemu/qemu-log.c
|
||||
qemu/qemu-timer.c
|
||||
qemu/qobject/qbool.c
|
||||
qemu/qobject/qdict.c
|
||||
qemu/qobject/qerror.c
|
||||
qemu/qobject/qfloat.c
|
||||
qemu/qobject/qint.c
|
||||
qemu/qobject/qlist.c
|
||||
qemu/qobject/qstring.c
|
||||
qemu/qom/container.c
|
||||
qemu/qom/cpu.c
|
||||
qemu/qom/object.c
|
||||
qemu/qom/qom-qobject.c
|
||||
qemu/tcg-runtime.c
|
||||
qemu/util/aes.c
|
||||
qemu/util/bitmap.c
|
||||
qemu/util/bitops.c
|
||||
qemu/util/crc32c.c
|
||||
qemu/util/cutils.c
|
||||
qemu/util/error.c
|
||||
qemu/util/getauxval.c
|
||||
qemu/util/host-utils.c
|
||||
qemu/util/module.c
|
||||
qemu/util/qemu-timer-common.c
|
||||
qemu/vl.c
|
||||
uc.c
|
||||
)
|
||||
|
||||
if (MSVC)
|
||||
set(UNICORN_SRCS
|
||||
${UNICORN_SRCS_COMMON}
|
||||
qemu/util/oslib-win32.c
|
||||
qemu/util/qemu-thread-win32.c
|
||||
qemu/util/qemu-error.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/qapi-types.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/msvc/unicorn/qapi-visit.c
|
||||
)
|
||||
else()
|
||||
set(UNICORN_SRCS
|
||||
${UNICORN_SRCS_COMMON}
|
||||
qemu/util/oslib-posix.c
|
||||
qemu/util/qemu-thread-posix.c
|
||||
${CMAKE_BINARY_DIR}/qapi-types.c
|
||||
${CMAKE_BINARY_DIR}/qapi-visit.c
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(unicorn SHARED
|
||||
${UNICORN_SRCS}
|
||||
)
|
||||
|
||||
if (UNICORN_HAS_X86)
|
||||
set(UNICRON_COMPILE_OPTIONS ${UNICRON_COMPILE_OPTIONS} -DUNICORN_HAS_X86)
|
||||
set(UNICRON_LINK_LIBRARIES ${UNICRON_LINK_LIBRARIES} x86_64-softmmu)
|
||||
set(UNICRON_SAMPLE_FILE ${UNICRON_SAMPLE_FILE} sample_x86 sample_x86_32_gdt_and_seg_regs sample_batch_reg mem_apis shellcode)
|
||||
endif()
|
||||
if (UNICORN_HAS_ARM)
|
||||
set(UNICRON_COMPILE_OPTIONS ${UNICRON_COMPILE_OPTIONS} -DUNICORN_HAS_ARM)
|
||||
set(UNICRON_LINK_LIBRARIES ${UNICRON_LINK_LIBRARIES} arm-softmmu armeb-softmmu)
|
||||
set(UNICRON_SAMPLE_FILE ${UNICRON_SAMPLE_FILE} sample_arm sample_armeb)
|
||||
endif()
|
||||
if (UNICORN_HAS_AARCH64)
|
||||
set(UNICRON_COMPILE_OPTIONS ${UNICRON_COMPILE_OPTIONS} -DUNICORN_HAS_ARM64)
|
||||
set(UNICRON_LINK_LIBRARIES ${UNICRON_LINK_LIBRARIES} aarch64-softmmu aarch64eb-softmmu)
|
||||
set(UNICRON_SAMPLE_FILE ${UNICRON_SAMPLE_FILE} sample_arm64 sample_arm64eb)
|
||||
endif()
|
||||
if (UNICORN_HAS_M68K)
|
||||
set(UNICRON_COMPILE_OPTIONS ${UNICRON_COMPILE_OPTIONS} -DUNICORN_HAS_M68K)
|
||||
set(UNICRON_LINK_LIBRARIES ${UNICRON_LINK_LIBRARIES} m68k-softmmu)
|
||||
set(UNICRON_SAMPLE_FILE ${UNICRON_SAMPLE_FILE} sample_m68k)
|
||||
endif()
|
||||
if (UNICORN_HAS_MIPS)
|
||||
set(UNICRON_COMPILE_OPTIONS ${UNICRON_COMPILE_OPTIONS} -DUNICORN_HAS_MIPS -DUNICORN_HAS_MIPSEL -DUNICORN_HAS_MIPS64 -DUNICORN_HAS_MIPS64EL)
|
||||
set(UNICRON_LINK_LIBRARIES ${UNICRON_LINK_LIBRARIES} mips-softmmu mipsel-softmmu mips64-softmmu mips64el-softmmu)
|
||||
set(UNICRON_SAMPLE_FILE ${UNICRON_SAMPLE_FILE} sample_mips)
|
||||
endif()
|
||||
if (UNICORN_HAS_SPARC)
|
||||
set(UNICRON_COMPILE_OPTIONS ${UNICRON_COMPILE_OPTIONS} -DUNICORN_HAS_SPARC)
|
||||
set(UNICRON_LINK_LIBRARIES ${UNICRON_LINK_LIBRARIES} sparc-softmmu sparc64-softmmu)
|
||||
set(UNICRON_SAMPLE_FILE ${UNICRON_SAMPLE_FILE} sample_sparc)
|
||||
endif()
|
||||
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(unicorn PRIVATE
|
||||
${UNICRON_COMPILE_OPTIONS}
|
||||
-DUNICORN_SHARED
|
||||
)
|
||||
target_link_libraries(unicorn
|
||||
${UNICRON_LINK_LIBRARIES}
|
||||
)
|
||||
else()
|
||||
target_compile_options(unicorn PRIVATE
|
||||
${UNICRON_COMPILE_OPTIONS}
|
||||
)
|
||||
target_link_libraries(unicorn
|
||||
${UNICRON_LINK_LIBRARIES}
|
||||
m
|
||||
)
|
||||
set_target_properties(unicorn PROPERTIES
|
||||
VERSION ${UNICORN_VERSION_MAJOR}
|
||||
SOVERSION ${UNICORN_VERSION_MAJOR}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
set(SAMPLES_LIB
|
||||
unicorn
|
||||
)
|
||||
else()
|
||||
set(SAMPLES_LIB
|
||||
unicorn
|
||||
pthread
|
||||
)
|
||||
endif()
|
||||
|
||||
foreach(SAMPLE_FILE ${UNICRON_SAMPLE_FILE})
|
||||
add_executable(${SAMPLE_FILE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/samples/${SAMPLE_FILE}.c
|
||||
)
|
||||
target_link_libraries(${SAMPLE_FILE}
|
||||
${SAMPLES_LIB}
|
||||
)
|
||||
endforeach(SAMPLE_FILE)
|
||||
|
||||
if(NOT MSVC)
|
||||
include("GNUInstallDirs")
|
||||
file(GLOB UNICORN_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/unicorn/*.h)
|
||||
install(TARGETS unicorn
|
||||
RUNTIME DESTINATION bin
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
install(FILES ${UNICORN_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/unicorn)
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/unicorn.pc "Name: unicorn\n\
|
||||
Description: Unicorn emulator engine\n\
|
||||
Version: ${UNICORN_VERSION_MAJOR}.${UNICORN_VERSION_MINOR}.${UNICORN_VERSION_PATCH}\n\
|
||||
libdir=${CMAKE_INSTALL_FULL_LIBDIR}\n\
|
||||
includedir=${CMAKE_INSTALL_FULL_INCLUDEDIR}\n\
|
||||
Libs: -L\$\{libdir\} -lunicorn\n\
|
||||
Cflags: -I\$\{includedir\}\n"
|
||||
)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/unicorn.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
endif()
|
@ -69,3 +69,5 @@ David Zimmer: VB6 binding.
|
||||
zhangwm: ARM & ARM64 big endian.
|
||||
Mohamed Osama: FreePascal/Delphi binding.
|
||||
Philippe Antoine (Catena cyber): fuzzing
|
||||
KaiJern Lau (xwings): programmer
|
||||
Huitao Chen (chenhuitao): programmer
|
||||
|
17
cmake.sh
Executable file
17
cmake.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Unicorn Emulator Engine (www.unicorn-engine.org)
|
||||
# Usage: cmake.sh [x86] [arm] [aarch64] [m68k] [mips] [sparc]
|
||||
# By chenhuitao 2019
|
||||
|
||||
FLAGS="-DCMAKE_BUILD_TYPE=Release"
|
||||
|
||||
UNICORN_ARCH="${*}"
|
||||
|
||||
if [ -z "${UNICORN_ARCH}" ]; then
|
||||
cmake "${FLAGS}" ..
|
||||
else
|
||||
cmake "${FLAGS}" "-DUNICORN_ARCH=${UNICORN_ARCH}" ..
|
||||
fi
|
||||
|
||||
make -j8
|
83
docs/COMPILE-CMAKE.md
Normal file
83
docs/COMPILE-CMAKE.md
Normal file
@ -0,0 +1,83 @@
|
||||
This documentation explains how to compile Unicorn with CMake on Windows or
|
||||
*nix.
|
||||
|
||||
----
|
||||
|
||||
Requirements:
|
||||
Windows: MicroSoft Visual Studio(>=2013).
|
||||
*nix: GNU gcc. Python CLI to generate dynamic source files.
|
||||
|
||||
Get CMake for free from http://www.cmake.org.
|
||||
|
||||
|
||||
[1] Tailor Unicorn to your need.
|
||||
|
||||
Out of archtitectures supported by Unicorn, if you just need several selected archs,
|
||||
set the 'UNICORN_ARCH' in CMake. e.g.:
|
||||
|
||||
cmake -DUNICORN_ARCH="x86 mips" ..
|
||||
|
||||
By default, all architectures(x86 arm aarch64 m68k mips sparc) are compiled in.
|
||||
|
||||
Besides, Unicorn also allows some more customization via following macros.
|
||||
|
||||
- UNICORN_STATIC_MSVCRT: change this to OFF to use dynamic MSVCRT lib, Only on Windows.
|
||||
|
||||
[2] CMake allows you to generate different generators to build Unicorn. Below is
|
||||
some examples on how to build Unicorn on Windows with CMake.
|
||||
|
||||
- You can let CMake select a generator for you. Do:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
|
||||
This last command is also where you can pass additional CMake configuration flags
|
||||
using `-D<key>=<value>`. Then to build use:
|
||||
|
||||
cmake --build . --config Release
|
||||
|
||||
|
||||
- To build Unicorn using Nmake of Windows SDK, do:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
..\nmake.bat
|
||||
|
||||
After this, find the samples test*.exe, unicorn.lib & unicorn.dll
|
||||
in the same directory.
|
||||
|
||||
|
||||
|
||||
- To build Unicorn using Visual Studio, choose the generator accordingly to the
|
||||
version of Visual Studio on your machine. For example, with Visual Studio 2013, do:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -G "Visual Studio 12" ..
|
||||
|
||||
After this, find unicorn.sln in the same directory. Open it with Visual Studio
|
||||
and build the solution including libraries & all test as usual.
|
||||
|
||||
|
||||
|
||||
[3] You can make sure the prior steps successfully worked by launching one of the
|
||||
sample binary (sample_*.exe).
|
||||
|
||||
[4] You can also enable just one specific architecture by passing the architecture name
|
||||
to either the cmake.sh or nmake.bat scripts. e.g.:
|
||||
|
||||
../cmake.sh x86
|
||||
|
||||
Will just target the x86 architecture. The list of available architectures is:
|
||||
X86 ARM AARCH64 M68K MIPS SPARC.
|
||||
|
||||
[5] You can also create an installation image with cmake, by using the 'install' target.
|
||||
Use:
|
||||
|
||||
cmake --build . --config Release --target install
|
||||
|
||||
This will normally install an image in a default location (NOT SUPPORT Windows),
|
||||
so it's good to explicitly set this location when configuring CMake. Use: `-DCMAKE_INSTALL_PREFIX=image`
|
||||
for instance, to put the installation in the 'image' subdirectory of the build directory.
|
||||
Default value of 'CMAKE_INSTALL_PREFIX' on *nix is '/usr/local'.
|
@ -3,6 +3,9 @@ see [COMPILE-NIX.md](COMPILE-NIX.md)
|
||||
|
||||
To compile Unicorn on Windows, see [COMPILE-WINDOWS.md](COMPILE-WINDOWS.md)
|
||||
|
||||
To compile Unicorn with CMake on Windows or *nix, see
|
||||
[COMPILE-CMAKE.md](COMPILE-CMAKE.md)
|
||||
|
||||
Then learn more on how to code your own tools with our samples.
|
||||
|
||||
- For C sample code, see code in directory samples/sample*.c
|
||||
|
@ -205,7 +205,9 @@ typedef signed __int64 ssize_t;
|
||||
typedef _W64 signed int ssize_t;
|
||||
#endif
|
||||
|
||||
#ifndef va_copy
|
||||
#define va_copy(d,s) ((d) = (s))
|
||||
#endif
|
||||
#define strcasecmp _stricmp
|
||||
#if (_MSC_VER < MSC_VER_VS2015)
|
||||
#define snprintf _snprintf
|
||||
|
40
nmake.bat
Normal file
40
nmake.bat
Normal file
@ -0,0 +1,40 @@
|
||||
:: Unicorn Emulator Engine
|
||||
:: Build Unicorn libs on Windows with CMake & Nmake
|
||||
:: Usage: nmake.bat [x86 arm aarch64 m68k mips sparc], default build all.
|
||||
:: By Huitao Chen, 2019
|
||||
|
||||
@echo off
|
||||
|
||||
set flags="-DCMAKE_BUILD_TYPE=Release"
|
||||
|
||||
set allparams=
|
||||
|
||||
:loop
|
||||
set str=%1
|
||||
if "%str%"=="" (
|
||||
goto end
|
||||
)
|
||||
set allparams=%allparams% %str%
|
||||
shift /0
|
||||
goto loop
|
||||
|
||||
:end
|
||||
if "%allparams%"=="" (
|
||||
goto eof
|
||||
)
|
||||
:: remove left, right blank
|
||||
:intercept_left
|
||||
if "%allparams:~0,1%"==" " set "allparams=%allparams:~1%" & goto intercept_left
|
||||
|
||||
:intercept_right
|
||||
if "%allparams:~-1%"==" " set "allparams=%allparams:~0,-1%" & goto intercept_right
|
||||
|
||||
:eof
|
||||
|
||||
if "%allparams%"=="" (
|
||||
cmake "%flags%" -G "NMake Makefiles" ..
|
||||
) else (
|
||||
cmake "%flags%" "-DUNICORN_ARCH=%allparams%" -G "NMake Makefiles" ..
|
||||
)
|
||||
|
||||
nmake
|
@ -24,8 +24,15 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* gcc __builtin___clear_cache() */
|
||||
static inline void __builtin___clear_cache(void *beg, void *e)
|
||||
{
|
||||
unsigned char *start = beg;
|
||||
unsigned char *end = e;
|
||||
FlushInstructionCache(GetCurrentProcess(), start, end - start);
|
||||
}
|
||||
|
||||
static double rint( double x )
|
||||
static inline double rint( double x )
|
||||
{
|
||||
return floor(x < 0 ? x - 0.5 : x + 0.5);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user