initial scikit build

This commit is contained in:
wrapper 2026-03-29 13:47:18 +07:00
parent d76b978242
commit 2ad2c7b706
11 changed files with 31 additions and 1289 deletions

5
.gitignore vendored
View file

@ -43,3 +43,8 @@ uni_libs/
samples/
src/libfiles/
src/test/*
old_dynemu/
# Wheels
*.whl

View file

@ -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"
}
}
}

View file

@ -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

View file

@ -0,0 +1 @@
# Placeholder

View file

@ -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);

View file

@ -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)

View file

@ -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
View 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

View file

@ -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)