Skip to content

Commit 33a90d1

Browse files
committed
Fix vita build
1 parent 6356b6d commit 33a90d1

File tree

4 files changed

+54
-36
lines changed

4 files changed

+54
-36
lines changed

build.rs

+46-29
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ fn main() {
1616
File::create(build_profile_name_file).unwrap().write_all(build_profile_name.as_bytes()).unwrap();
1717

1818
let target = env::var("TARGET").unwrap();
19-
if target != "armv7-sony-vita-newlibeabihf" {
19+
let is_target_vita = target == "armv7-sony-vita-newlibeabihf";
20+
if !is_target_vita {
2021
println!("cargo:rerun-if-env-changed=SYSROOT");
2122
if let Ok(sysroot) = env::var("SYSROOT") {
2223
println!("cargo:rustc-link-arg=--sysroot={sysroot}");
@@ -33,35 +34,46 @@ fn main() {
3334
println!("cargo:rerun-if-env-changed=VITASDK");
3435

3536
{
36-
let vixl_flags: &[&str] = &[
37-
"-Wall",
38-
"-fdiagnostics-show-option",
39-
"-Wextra",
40-
"-Wredundant-decls",
41-
"-pedantic",
42-
"-Wwrite-strings",
43-
"-Wunused",
44-
"-Wshadow",
45-
"-Wno-missing-noreturn",
46-
"-DVIXL_CODE_BUFFER_MALLOC=1",
47-
"-DVIXL_INCLUDE_TARGET_A32=1",
48-
"-DVIXL_INCLUDE_TARGET_T32=1",
49-
if build_profile_name == "release" { "" } else { "-DVIXL_DEBUG=1" },
50-
"-std=c++17",
51-
"--target=armv7-unknown-linux-gnueabihf",
52-
if let Ok(vitasdk_path) = &vitasdk_path {
53-
&format!("--sysroot={}", vitasdk_path.join("arm-vita-eabi").to_str().unwrap())
54-
} else {
55-
""
56-
},
37+
let mut vixl_flags = vec![
38+
"-Wall".to_string(),
39+
"-fdiagnostics-show-option".to_string(),
40+
"-Wextra".to_string(),
41+
"-Wredundant-decls".to_string(),
42+
"-pedantic".to_string(),
43+
"-Wwrite-strings".to_string(),
44+
"-Wunused".to_string(),
45+
"-Wshadow".to_string(),
46+
"-Wno-missing-noreturn".to_string(),
47+
"-DVIXL_CODE_BUFFER_MALLOC=1".to_string(),
48+
"-DVIXL_INCLUDE_TARGET_A32=1".to_string(),
49+
"-DVIXL_INCLUDE_TARGET_T32=1".to_string(),
50+
"-std=c++17".to_string(),
5751
];
52+
if build_profile_name != "release" {
53+
vixl_flags.push("-DVIXL_DEBUG=1".to_string());
54+
}
55+
if !is_target_vita {
56+
vixl_flags.push("--target=armv7-unknown-linux-gnueabihf".to_string());
57+
}
58+
if let Ok(vitasdk_path) = &vitasdk_path {
59+
vixl_flags.push(format!("--sysroot={}", vitasdk_path.join("arm-vita-eabi").to_str().unwrap()));
60+
}
5861

5962
let vixl_path = Path::new("vixl");
6063
println!("cargo:rerun-if-changed={}", vixl_path.to_str().unwrap());
6164

6265
let create_vixl_build = |src_files: &[&str]| {
6366
let mut vixl_build = cc::Build::new();
64-
vixl_build.include(vixl_path.join("src")).compiler("clang").cpp(true);
67+
vixl_build.include(vixl_path.join("src")).cpp(true);
68+
if is_target_vita {
69+
vixl_build
70+
.compiler(vitasdk_path.as_ref().unwrap().join("bin").join("arm-vita-eabi-g++"))
71+
.archiver(vitasdk_path.as_ref().unwrap().join("bin").join("arm-vita-eabi-gcc-ar"))
72+
.ranlib(vitasdk_path.as_ref().unwrap().join("bin").join("arm-vita-eabi-gcc-ranlib"))
73+
.pic(false);
74+
} else {
75+
vixl_build.compiler("clang++");
76+
}
6577

6678
if let Ok(vitasdk_path) = &vitasdk_path {
6779
let cpp_include_path = vitasdk_path.join("arm-vita-eabi").join("include/c++");
@@ -72,7 +84,7 @@ fn main() {
7284
vixl_build.include(cpp_include_path.to_str().unwrap()).include(cpp_include_path.join("arm-vita-eabi").to_str().unwrap());
7385
}
7486

75-
for flag in vixl_flags {
87+
for flag in &vixl_flags {
7688
vixl_build.flag(flag);
7789
}
7890

@@ -181,11 +193,12 @@ fn main() {
181193
let mut bindings = bindgen::Builder::default()
182194
.clang_args(["-x", "c++"])
183195
.clang_args(["-I", vixl_path.join("src").to_str().unwrap()])
196+
.clang_args(["-target", "armv7-unknown-linux-gnueabihf"])
184197
.formatter(Formatter::Prettyplease)
185198
.header(vixl_bindings_header_path.to_str().unwrap());
186199

187-
for flag in vixl_flags {
188-
bindings = bindings.clang_arg(*flag);
200+
for flag in &vixl_flags {
201+
bindings = bindings.clang_arg(flag);
189202
}
190203

191204
bindings.rust_target(bindgen::RustTarget::nightly()).generate().unwrap().write_to_file(bindings_file).unwrap();
@@ -378,7 +391,7 @@ fn main() {
378391
bindings.rust_target(bindgen::RustTarget::nightly()).generate().unwrap().write_to_file(bindings_file).unwrap();
379392

380393
println!("cargo:rustc-link-search=native={}", vitasdk_lib_path.to_str().unwrap());
381-
if target == "armv7-sony-vita-newlibeabihf" {
394+
if is_target_vita {
382395
println!("cargo:rustc-link-lib=static=imgui");
383396
}
384397
}
@@ -402,7 +415,7 @@ fn main() {
402415
bindings.rust_target(bindgen::RustTarget::nightly()).generate().unwrap().write_to_file(bindings_file).unwrap();
403416
}
404417

405-
if target != "armv7-sony-vita-newlibeabihf" {
418+
if !is_target_vita {
406419
return;
407420
}
408421

@@ -434,7 +447,11 @@ fn main() {
434447
}
435448

436449
{
437-
let kubridge_dst_path = cmake::Config::new(&kubridge_path).build_target("libkubridge_stub.a").build().join("build");
450+
let kubridge_dst_path = cmake::Config::new(&kubridge_path)
451+
.configure_arg("-DCMAKE_POLICY_VERSION_MINIMUM=3.5")
452+
.build_target("libkubridge_stub.a")
453+
.build()
454+
.join("build");
438455
let kubridge_lib_path = kubridge_dst_path.join("libkubridge_stub.a");
439456
let kubridge_lib_new_path = kubridge_dst_path.join("libkubridge_stub_dsvita.a");
440457
fs::rename(kubridge_lib_path, kubridge_lib_new_path).unwrap();

src/jit/emitter/emit_branch.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::jit::assembler::vixl::{Label, MasmB2, MasmB3, MasmBic5, MasmBlx1, Mas
66
use crate::jit::inst_branch_handler::{branch_imm, branch_lr, branch_reg, handle_idle_loop, handle_interrupt, pre_branch};
77
use crate::jit::jit_asm::{JitAsm, JitRuntimeData};
88
use crate::jit::jit_asm_common_funs::{get_max_loop_cycle_count, JitAsmCommonFuns};
9-
use crate::jit::reg::{reg_reserve, Reg, RegReserve};
9+
use crate::jit::reg::{reg_reserve, Reg};
1010
use crate::jit::{inst_branch_handler, Cond};
1111
use crate::logging::branch_println;
1212
use crate::settings::Arm7Emu;

src/mmap/vita.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::mmap::platform::kubridge::{
22
kuKernelAllocMemBlock, kuKernelFlushCaches, kuKernelMemCommit, kuKernelMemDecommit, kuKernelMemProtect, kuKernelMemReserve, kuKernelRegisterAbortHandler, KuKernelAbortContext,
33
KuKernelAbortHandler, KuKernelMemCommitOpt, KU_KERNEL_MEM_COMMIT_ATTR_HAS_BASE, KU_KERNEL_PROT_EXEC, KU_KERNEL_PROT_NONE, KU_KERNEL_PROT_READ, KU_KERNEL_PROT_WRITE,
44
};
5-
use crate::mmap::{MemRegion, VirtualMemMap, PAGE_SIZE};
5+
use crate::mmap::{ArmContext, MemRegion, VirtualMemMap, PAGE_SIZE};
66
use crate::utils;
77
use std::ffi::CString;
88
use std::io::{Error, ErrorKind};
@@ -340,15 +340,16 @@ impl AsMut<[u8]> for VirtualMem {
340340
}
341341
}
342342

343-
static mut DELEGATE_FUN: *const fn(usize, &mut usize) -> bool = ptr::null();
343+
static mut DELEGATE_FUN: *const fn(usize, &mut usize, &ArmContext) -> bool = ptr::null();
344344
static mut NEXT_ABORT_HANDLER: KuKernelAbortHandler = None;
345345

346346
unsafe extern "C" fn abort_handler(abort_context: *mut KuKernelAbortContext) {
347347
let context = &mut (*abort_context);
348348

349-
let delegate_fun: fn(usize, &mut usize) -> bool = mem::transmute(DELEGATE_FUN);
349+
let delegate_fun: fn(usize, &mut usize, &ArmContext) -> bool = mem::transmute(DELEGATE_FUN);
350+
let arm_context: &ArmContext = unsafe { mem::transmute(&context.r0) };
350351
let mut pc = context.pc as usize;
351-
if delegate_fun(context.FAR as usize, &mut pc) {
352+
if delegate_fun(context.FAR as usize, &mut pc, arm_context) {
352353
context.pc = pc as _;
353354
return;
354355
}
@@ -360,7 +361,7 @@ unsafe extern "C" fn abort_handler(abort_context: *mut KuKernelAbortContext) {
360361
}
361362
}
362363

363-
pub unsafe fn register_abort_handler(delegate: fn(usize, &mut usize) -> bool) -> io::Result<()> {
364+
pub unsafe fn register_abort_handler(delegate: fn(usize, &mut usize, &ArmContext) -> bool) -> io::Result<()> {
364365
DELEGATE_FUN = delegate as *const _;
365366
if kuKernelRegisterAbortHandler(Some(abort_handler), ptr::addr_of_mut!(NEXT_ABORT_HANDLER), ptr::null_mut()) != 0 {
366367
Err(Error::from(ErrorKind::Other))

vixl

0 commit comments

Comments
 (0)