initial scikit build
This commit is contained in:
parent
d76b978242
commit
2ad2c7b706
11 changed files with 31 additions and 1289 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -43,3 +43,8 @@ uni_libs/
|
|||
samples/
|
||||
src/libfiles/
|
||||
src/test/*
|
||||
|
||||
old_dynemu/
|
||||
|
||||
# Wheels
|
||||
*.whl
|
||||
12
.vscode/cmake-variants.json
vendored
12
.vscode/cmake-variants.json
vendored
|
|
@ -8,7 +8,8 @@
|
|||
"long": "Build with no optimizations and debugging information",
|
||||
"buildType": "Debug",
|
||||
"settings": {
|
||||
"BUILD_SHARED_LIBS": "ON"
|
||||
"BUILD_SHARED_LIBS": "ON",
|
||||
"DYNEMU_PYTHON": "ON"
|
||||
}
|
||||
},
|
||||
"Release": {
|
||||
|
|
@ -16,7 +17,8 @@
|
|||
"long": "Build with optimizations and some debuging information",
|
||||
"buildType": "Release",
|
||||
"settings": {
|
||||
"BUILD_SHARED_LIBS": "ON"
|
||||
"BUILD_SHARED_LIBS": "ON",
|
||||
"DYNEMU_PYTHON": "ON"
|
||||
}
|
||||
},
|
||||
"DebugStatic": {
|
||||
|
|
@ -24,7 +26,8 @@
|
|||
"long": "Build with no optimizations and debugging information",
|
||||
"buildType": "Debug",
|
||||
"settings": {
|
||||
"BUILD_SHARED_LIBS": "OFF"
|
||||
"BUILD_SHARED_LIBS": "OFF",
|
||||
"DYNEMU_PYTHON": "ON"
|
||||
}
|
||||
},
|
||||
"ReleaseStatic": {
|
||||
|
|
@ -32,7 +35,8 @@
|
|||
"long": "Build with optimizations and some debuging information",
|
||||
"buildType": "Release",
|
||||
"settings": {
|
||||
"BUILD_SHARED_LIBS": "OFF"
|
||||
"BUILD_SHARED_LIBS": "OFF",
|
||||
"DYNEMU_PYTHON": "ON"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.10.0)
|
|||
project(Dynemu VERSION 0.2.0 LANGUAGES C CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
if (NOT DEFINED CMAKE_CXX_VISIBILITY_PRESET AND
|
||||
NOT DEFINED CMAKE_VISIBILITY_INLINES_HIDDEN)
|
||||
|
|
@ -18,7 +19,7 @@ if (DEFINED Dynemu_SHARED_LIBS)
|
|||
set(BUILD_SHARED_LIBS "${Dynemu_SHARED_LIBS}")
|
||||
endif ()
|
||||
|
||||
option(DYNEMU_PYTHON "Python support" ON)
|
||||
option(DYNEMU_PYTHON "Python support" OFF)
|
||||
|
||||
# 01 - Boost first
|
||||
set(BOOST_INCLUDEDIR "${PROJECT_SOURCE_DIR}/externals/dynarmic/externals/ext-boost")
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
1
bindings/python/dynemu/__init__.py
Normal file
1
bindings/python/dynemu/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
|||
# Placeholder
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
#include <stdint.h>
|
||||
|
||||
typedef uint8_t u8;
|
||||
typedef uint16_t u16;
|
||||
typedef uint32_t u32;
|
||||
typedef uint64_t u64;
|
||||
typedef void Emulator;
|
||||
|
||||
Emulator *dynemu_open();
|
||||
void dynemu_delete(Emulator *e);
|
||||
void dynemu_mmap(Emulator *e, u32 vaddr, u32 size);
|
||||
size_t dynemu_upload_file(Emulator *e, const char *filename, int64_t dest, u32 size);
|
||||
u8 dynemu_upload_fls_memory(Emulator *e, const u8 *fls);
|
||||
void dynemu_upload_memstub(Emulator *e, u32 dest, u32 mem_start, u32 mem_size, u8 is_big);
|
||||
void dynemu_upload_memstub_nooffset(Emulator *e, u32 mem_start, u32 mem_size, u8 is_big);
|
||||
u8 dynemu_read_u8(Emulator *e, u32 vaddr);
|
||||
u16 dynemu_read_u16(Emulator *e, u32 vaddr, u8 is_big);
|
||||
u32 dynemu_read_u32(Emulator *e, u32 vaddr, u8 is_big);
|
||||
u64 dynemu_read_u64(Emulator *e, u32 vaddr, u8 is_big);
|
||||
void dynemu_write_u8(Emulator *e, u32 vaddr, u8 value);
|
||||
void dynemu_write_u16(Emulator *e, u32 vaddr, u16 value, u8 is_big);
|
||||
void dynemu_write_u32(Emulator *e, u32 vaddr, u32 value, u8 is_big);
|
||||
void dynemu_write_u64(Emulator *e, u32 vaddr, u64 value, u8 is_big);
|
||||
void dynemu_read_bytes(Emulator *e, u32 vaddr, u8 *output, u32 size);
|
||||
void dynemu_write_bytes(Emulator *e, u32 vaddr, const u8 *input, u32 size);
|
||||
u32 dynemu_execute(Emulator *e, u32 pc, u8 is_big);
|
||||
u32 dynemu_read_reg(Emulator *e, u8 reg);
|
||||
void dynemu_write_reg(Emulator *e, u8 reg, u32 value);
|
||||
|
|
@ -1,88 +0,0 @@
|
|||
from ctypes import *
|
||||
import enum
|
||||
|
||||
class Regs(enum.IntEnum):
|
||||
R0 = 0
|
||||
R1 = 1
|
||||
R2 = 2
|
||||
R3 = 3
|
||||
R4 = 4
|
||||
R5 = 5
|
||||
R6 = 6
|
||||
R7 = 7
|
||||
R8 = 8
|
||||
R9 = 9
|
||||
R10 = 10
|
||||
R11 = 11
|
||||
IP = 12
|
||||
SP = 13
|
||||
LR = 14
|
||||
PC = 15
|
||||
|
||||
class Dynemu():
|
||||
def __init__(self):
|
||||
self._dynemu = dynemu_open()
|
||||
|
||||
def __del__(self):
|
||||
dynemu_delete(self._dynemu)
|
||||
|
||||
def memory_map(self, vaddr: int, size: int):
|
||||
dynemu_mmap(self._dynemu, vaddr, size)
|
||||
|
||||
def upload_file(self, filename: str, dest: int, size: int):
|
||||
return dynemu_upload_file(self._dynemu, filename, dest, size)
|
||||
|
||||
def upload_fls_memory(self, data: bytes|bytearray):
|
||||
temp = (c_ubyte * len(data)).from_buffer(bytearray(data))
|
||||
return dynemu_upload_fls_memory(self._dynemu, temp)
|
||||
|
||||
def upload_memstub(self, dest: int=-1, mem_start: int=0xa0000000, mem_size: int=0x2000000, is_big: bool=False):
|
||||
if dest == -1:
|
||||
dynemu_upload_memstub_nooffset(self._dynemu, mem_start, mem_size, is_big)
|
||||
|
||||
else:
|
||||
dynemu_upload_memstub(self._dynemu, dest, mem_start, mem_size, is_big)
|
||||
|
||||
def read_u8(self, vaddr: int):
|
||||
return dynemu_read_u8(self._dynemu, vaddr)
|
||||
|
||||
def read_u16(self, vaddr: int, is_big: bool=False):
|
||||
return dynemu_read_u16(self._dynemu, vaddr, is_big)
|
||||
|
||||
def read_u32(self, vaddr: int, is_big: bool=False):
|
||||
return dynemu_read_u32(self._dynemu, vaddr, is_big)
|
||||
|
||||
def read_u64(self, vaddr: int, is_big: bool=False):
|
||||
return dynemu_read_u64(self._dynemu, vaddr, is_big)
|
||||
|
||||
def write_u8(self, vaddr: int, value: int):
|
||||
return dynemu_write_u8(self._dynemu, vaddr, value)
|
||||
|
||||
def write_u16(self, vaddr: int, value: int, is_big: bool=False):
|
||||
return dynemu_write_u16(self._dynemu, vaddr, value, is_big)
|
||||
|
||||
def write_u32(self, vaddr: int, value: int, is_big: bool=False):
|
||||
return dynemu_write_u32(self._dynemu, vaddr, value, is_big)
|
||||
|
||||
def write_u64(self, vaddr: int, value: int, is_big: bool=False):
|
||||
return dynemu_write_u64(self._dynemu, vaddr, value, is_big)
|
||||
|
||||
def read_bytes(self, vaddr: int, size: int):
|
||||
temp = (c_ubyte * size)()
|
||||
dynemu_read_bytes(self._dynemu, vaddr, temp, size)
|
||||
return bytes(temp)
|
||||
|
||||
def write_bytes(self, vaddr: int, data: bytes|bytearray):
|
||||
temp = (c_ubyte * len(data)).from_buffer(bytearray(data))
|
||||
dynemu_write_bytes(self._dynemu, vaddr, temp, len(data))
|
||||
|
||||
def execute(self, pc: int, is_big: bool=False):
|
||||
return dynemu_execute(self._dynemu, pc, is_big)
|
||||
|
||||
def get_reg(self, reg: int):
|
||||
return dynemu_read_reg(self._dynemu, reg)
|
||||
|
||||
def set_reg(self, reg: int, value: int):
|
||||
dynemu_write_reg(self._dynemu, reg, value)
|
||||
|
||||
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
@echo off
|
||||
ctypesgen --cpp="clang -E" -ldynemu bindings.h -o ..\dynemu.py --insert-file=bindings.py
|
||||
14
pyproject.toml
Normal file
14
pyproject.toml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[build-system]
|
||||
requires = ["scikit-build-core", "pybind11"]
|
||||
build-backend = "scikit_build_core.build"
|
||||
|
||||
[project]
|
||||
name = "dynemu"
|
||||
version = "0.2.0"
|
||||
|
||||
[tool.scikit-build]
|
||||
wheel.packages = ["bindings/python/dynemu/"]
|
||||
wheel.exclude = ["lib/**", "include/**"]
|
||||
|
||||
[tool.scikit-build.cmake.define]
|
||||
DYNEMU_PYTHON = true
|
||||
|
|
@ -3,4 +3,4 @@ pybind11_add_module(dynemup dynemu.cpp)
|
|||
add_dependencies(dynemup dynemu)
|
||||
target_link_libraries(dynemup PUBLIC dynemu)
|
||||
|
||||
install(TARGETS dynemup LIBRARY DESTINATION ./dynemup)
|
||||
install(TARGETS dynemup LIBRARY DESTINATION ./dynemu)
|
||||
Loading…
Add table
Add a link
Reference in a new issue