Skip to content

Commit fc99074

Browse files
committed
Downgrade ar_archiver to meet rust 1.63 requirements
1 parent 4ce4ff2 commit fc99074

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

psm/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ readme = "README.mkd"
1515

1616
[build-dependencies]
1717
cc = "1.1.22"
18-
ar_archive_writer = "0.4.2"
18+
ar_archive_writer = "0.2.0"

psm/build.rs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,33 +110,52 @@ fn main() {
110110
// directly to `ar` to assemble an archive. Otherwise we're actually
111111
// compiling the source assembly file.
112112
if asm.ends_with(".o") {
113-
use ar_archive_writer::{write_archive_to_stream, NewArchiveMember, ArchiveKind, DEFAULT_OBJECT_READER};
114-
use std::fs::read;
113+
use ar_archive_writer::{write_archive_to_stream, NewArchiveMember, ArchiveKind};
114+
use std::fs::{read, metadata};
115115
use std::path::PathBuf;
116116
use std::io::Cursor;
117117

118118
let out_dir = std::env::var("OUT_DIR").expect("OUT_DIR environment variable not set");
119119
let output_path = PathBuf::from(&out_dir).join("libpsm_s.a");
120120

121121
let object_data = read(asm).expect("Failed to read object file");
122+
let file_metadata = metadata(asm).expect("Failed to read file metadata");
123+
124+
// Extract file metadata
125+
let mtime = file_metadata.modified().ok()
126+
.and_then(|time| time.duration_since(std::time::UNIX_EPOCH).ok())
127+
.map(|duration| duration.as_secs())
128+
.unwrap_or(0);
129+
130+
#[cfg(unix)]
131+
let (uid, gid, perms) = {
132+
use std::os::unix::fs::MetadataExt;
133+
(file_metadata.uid(), file_metadata.gid(), file_metadata.mode())
134+
};
135+
136+
#[cfg(not(unix))]
137+
let (uid, gid, perms) = (0, 0, 0o644);
122138

123139
let filename = asm.rsplit('/').next().unwrap_or(asm);
124-
let member = NewArchiveMember::new(
125-
object_data,
126-
&DEFAULT_OBJECT_READER,
127-
filename.to_string(),
128-
);
140+
let member = NewArchiveMember {
141+
buf: Box::new(object_data),
142+
get_symbols: |_data: &[u8], _callback: &mut dyn FnMut(&[u8]) -> Result<(), std::io::Error>| Ok(true),
143+
member_name: filename.to_string(),
144+
mtime,
145+
uid,
146+
gid,
147+
perms,
148+
};
129149

130150
let mut output_bytes = Cursor::new(Vec::new());
131151
write_archive_to_stream(
132152
&mut output_bytes,
133153
&[member],
134-
// Unfortunately, getDefaultKind() is not available in ar_archive_writer 0.4.2
154+
// Unfortunately, getDefaultKind() is not available in ar_archive_writer
135155
// however looking at the llvm-ar source it looks like for wasm32-any-any
136156
// it falls through to Gnu https://llvm.org/doxygen/Object_2Archive_8cpp_source.html
137157
ArchiveKind::Gnu,
138158
false,
139-
false,
140159
).expect("Failed to write archive");
141160

142161
std::fs::write(&output_path, output_bytes.into_inner()).expect("Failed to write archive file");

0 commit comments

Comments
 (0)