Upgrade to Slang v2024.1.29
This commit is contained in:
parent
3419fb03d9
commit
e0f5e523b7
@ -5,8 +5,7 @@ use std::path::{Path, PathBuf};
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let slang_dir = env::var("SLANG_DIR").map(PathBuf::from).expect(
|
let slang_dir = env::var("SLANG_DIR").map(PathBuf::from).expect(
|
||||||
"Environment variable `SLANG_DIR` should be set to the directory of a Slang installation. \
|
"Environment variable `SLANG_DIR` should be set to the directory of a Slang installation.",
|
||||||
This directory should contain `slang.h` and a `bin` subdirectory.",
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let out_dir = env::var("OUT_DIR")
|
let out_dir = env::var("OUT_DIR")
|
||||||
@ -16,7 +15,7 @@ fn main() {
|
|||||||
link_libraries(&slang_dir);
|
link_libraries(&slang_dir);
|
||||||
|
|
||||||
bindgen::builder()
|
bindgen::builder()
|
||||||
.header(slang_dir.join("slang.h").to_str().unwrap())
|
.header(slang_dir.join("include/slang.h").to_str().unwrap())
|
||||||
.clang_arg("-v")
|
.clang_arg("-v")
|
||||||
.clang_arg("-xc++")
|
.clang_arg("-xc++")
|
||||||
.clang_arg("-std=c++14")
|
.clang_arg("-std=c++14")
|
||||||
@ -44,34 +43,13 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn link_libraries(slang_dir: &Path) {
|
fn link_libraries(slang_dir: &Path) {
|
||||||
let target_os = env::var("CARGO_CFG_TARGET_OS").expect("Couldn't determine target OS.");
|
let lib_dir = slang_dir.join("lib");
|
||||||
|
|
||||||
let target_arch =
|
if !lib_dir.is_dir() {
|
||||||
env::var("CARGO_CFG_TARGET_ARCH").expect("Couldn't determine target architecture.");
|
panic!("Couldn't find the `lib` subdirectory in the Slang installation directory.")
|
||||||
|
|
||||||
let target = match (&*target_os, &*target_arch) {
|
|
||||||
("windows", "x86") => "windows-x86",
|
|
||||||
("windows", "x86_64") => "windows-x64",
|
|
||||||
("windows", "aarch64") => "windows-aarch64",
|
|
||||||
("linux", "x86_64") => "linux-x64",
|
|
||||||
("linux", "aarch64") => "linux-aarch64",
|
|
||||||
("macos", "x86_64") => "macosx-x64",
|
|
||||||
|
|
||||||
(os, arch) => panic!("Unsupported OS or architecture: {os} {arch}"),
|
|
||||||
};
|
|
||||||
|
|
||||||
let bin_dir = slang_dir.join(format!("bin/{target}/release"));
|
|
||||||
|
|
||||||
if !bin_dir.is_dir() {
|
|
||||||
panic!(
|
|
||||||
"
|
|
||||||
Could not find the target-specific `bin` subdirectory (bin/{target}/release) in the Slang installation directory. \
|
|
||||||
The Slang installation may not match the target this crate is being compiled for.
|
|
||||||
"
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("cargo:rustc-link-search=native={}", bin_dir.display());
|
println!("cargo:rustc-link-search=native={}", lib_dir.display());
|
||||||
println!("cargo:rustc-link-lib=dylib=slang");
|
println!("cargo:rustc-link-lib=dylib=slang");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
|
|||||||
|
|
||||||
use std::ffi::{c_char, c_int, c_void};
|
use std::ffi::{c_char, c_int, c_void};
|
||||||
|
|
||||||
// Based on Slang version 2024.1.6
|
// Based on Slang version 2024.1.29
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct IBlobVtable {
|
pub struct IBlobVtable {
|
||||||
@ -87,6 +87,7 @@ pub struct IComponentTypeVtable {
|
|||||||
pub getEntryPointHostCallable: unsafe extern "stdcall" fn(*mut c_void, entryPointIndex: c_int, targetIndex: c_int, outSharedLibrary: *mut *mut ISlangSharedLibrary, outDiagnostics: *mut *mut ISlangBlob) -> SlangResult,
|
pub getEntryPointHostCallable: unsafe extern "stdcall" fn(*mut c_void, entryPointIndex: c_int, targetIndex: c_int, outSharedLibrary: *mut *mut ISlangSharedLibrary, outDiagnostics: *mut *mut ISlangBlob) -> SlangResult,
|
||||||
pub renameEntryPoint: unsafe extern "stdcall" fn(*mut c_void, newName: *const c_char, outEntryPoint: *mut *mut slang_IComponentType) -> SlangResult,
|
pub renameEntryPoint: unsafe extern "stdcall" fn(*mut c_void, newName: *const c_char, outEntryPoint: *mut *mut slang_IComponentType) -> SlangResult,
|
||||||
pub linkWithOptions: unsafe extern "stdcall" fn(*mut c_void, outLinkedComponentType: *mut *mut slang_IComponentType, compilerOptionEntryCount: u32, compilerOptionEntries: *mut slang_CompilerOptionEntry, outDiagnostics: *mut *mut ISlangBlob) -> SlangResult,
|
pub linkWithOptions: unsafe extern "stdcall" fn(*mut c_void, outLinkedComponentType: *mut *mut slang_IComponentType, compilerOptionEntryCount: u32, compilerOptionEntries: *mut slang_CompilerOptionEntry, outDiagnostics: *mut *mut ISlangBlob) -> SlangResult,
|
||||||
|
pub getTargetCode: unsafe extern "stdcall" fn(*mut c_void, targetIndex: SlangInt, outCode: *mut *mut ISlangBlob, outDiagnostics: *mut *mut ISlangBlob) -> SlangResult,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
@ -111,4 +112,7 @@ pub struct IModuleVtable {
|
|||||||
pub getName: unsafe extern "stdcall" fn(*mut c_void) -> *const c_char,
|
pub getName: unsafe extern "stdcall" fn(*mut c_void) -> *const c_char,
|
||||||
pub getFilePath: unsafe extern "stdcall" fn(*mut c_void) -> *const c_char,
|
pub getFilePath: unsafe extern "stdcall" fn(*mut c_void) -> *const c_char,
|
||||||
pub getUniqueIdentity: unsafe extern "stdcall" fn(*mut c_void) -> *const c_char,
|
pub getUniqueIdentity: unsafe extern "stdcall" fn(*mut c_void) -> *const c_char,
|
||||||
|
pub findAndCheckEntryPoint: unsafe extern "stdcall" fn(*mut c_void, name: *const c_char, stage: SlangStage, outEntryPoint: *mut *mut slang_IEntryPoint, outDiagnostics: *mut *mut ISlangBlob) -> SlangResult,
|
||||||
|
pub getDependencyFileCount: unsafe extern "stdcall" fn(*mut c_void) -> SlangInt32,
|
||||||
|
pub getDependencyFilePath: unsafe extern "stdcall" fn(*mut c_void, index: SlangInt32) -> *const c_char,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user