build assembly true/false with cargo
This commit is contained in:
		
							parent
							
								
									799e96e267
								
							
						
					
					
						commit
						a1cb1175d4
					
				@ -13,11 +13,3 @@ authors = [
 | 
			
		||||
[[bin]]
 | 
			
		||||
name = "cat"
 | 
			
		||||
path = "src/bin/cat.rs"
 | 
			
		||||
 | 
			
		||||
[[bin]]
 | 
			
		||||
name = "false"
 | 
			
		||||
path = "src/bin/false.rs"
 | 
			
		||||
 | 
			
		||||
[[bin]]
 | 
			
		||||
name = "true"
 | 
			
		||||
path = "src/bin/true.rs"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										49
									
								
								build.rs
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								build.rs
									
									
									
									
									
								
							@ -1,4 +1,47 @@
 | 
			
		||||
fn main() {
 | 
			
		||||
	println!("cargo:rustc-link-arg-bin=true=-nostartfiles");
 | 
			
		||||
	println!("cargo:rustc-link-arg-bin=false=-nostartfiles");
 | 
			
		||||
use std::env;
 | 
			
		||||
use std::process::{Command, exit};
 | 
			
		||||
 | 
			
		||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
 | 
			
		||||
	let out_dir = env::var("OUT_DIR")?;
 | 
			
		||||
 | 
			
		||||
	let mut handler_nasm_true = Command::new("nasm").args([
 | 
			
		||||
		"-f", "elf",
 | 
			
		||||
		"src/asm/true.asm",
 | 
			
		||||
		"-o", &(out_dir.clone() + "/true.o")
 | 
			
		||||
	]).spawn()?;
 | 
			
		||||
 | 
			
		||||
	let mut handler_nasm_false = Command::new("nasm").args([
 | 
			
		||||
		"-f", "elf",
 | 
			
		||||
		"src/asm/false.asm",
 | 
			
		||||
		"-o", &(out_dir.clone() + "/false.o")
 | 
			
		||||
	]).spawn()?;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if !handler_nasm_true.wait_with_output()?.stderr.is_empty() {
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
	let mut handler_ld_true = Command::new("ld").args([
 | 
			
		||||
		"-m", "elf_i386",
 | 
			
		||||
		"src/asm/true.asm",
 | 
			
		||||
		"-s",
 | 
			
		||||
		&(out_dir.clone() + "/true.o"),
 | 
			
		||||
		"-o", &(out_dir.clone() + "/true"),
 | 
			
		||||
	]).spawn()?;
 | 
			
		||||
 | 
			
		||||
	if !handler_nasm_false.wait_with_output()?.stderr.is_empty() {
 | 
			
		||||
		exit(1)
 | 
			
		||||
	}
 | 
			
		||||
	let mut handler_ld_false = Command::new("ld").args([
 | 
			
		||||
		"-m", "elf_i386",
 | 
			
		||||
		"src/asm/false.asm",
 | 
			
		||||
		"-s",
 | 
			
		||||
		&(out_dir.clone() + "/false.o"),
 | 
			
		||||
		"-o", &(out_dir.clone() + "/false"),
 | 
			
		||||
	]).spawn()?;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	handler_ld_true.wait();
 | 
			
		||||
	handler_ld_false.wait();
 | 
			
		||||
 | 
			
		||||
	Ok(())
 | 
			
		||||
}
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
// Copyright (c) 2022 silt <silt@tebibyte.media>
 | 
			
		||||
// SPDX-License-Identifier: AGPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
#![feature(lang_items, start)]
 | 
			
		||||
#![no_main]
 | 
			
		||||
#![no_std]
 | 
			
		||||
 | 
			
		||||
use core::panic::PanicInfo;
 | 
			
		||||
use core::arch::asm;
 | 
			
		||||
 | 
			
		||||
#[lang = "eh_personality"] extern fn rust_eh_personality() {}
 | 
			
		||||
#[lang = "panic_impl"] extern fn rust_begin_panic(_: &PanicInfo) -> ! { loop {} }
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
pub unsafe fn _start() -> ! {
 | 
			
		||||
	asm!(
 | 
			
		||||
	"syscall",
 | 
			
		||||
	in("rax") 60,  // Syscall number
 | 
			
		||||
	in("rdi") 1,   // Exit code
 | 
			
		||||
	options(noreturn)
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
// Copyright (c) 2022 silt <silt@tebibyte.media>
 | 
			
		||||
// SPDX-License-Identifier: AGPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
#![feature(lang_items, start)]
 | 
			
		||||
#![no_main]
 | 
			
		||||
#![no_std]
 | 
			
		||||
 | 
			
		||||
use core::panic::PanicInfo;
 | 
			
		||||
use core::arch::asm;
 | 
			
		||||
 | 
			
		||||
#[lang = "eh_personality"] extern fn rust_eh_personality() {}
 | 
			
		||||
#[lang = "panic_impl"] extern fn rust_begin_panic(_: &PanicInfo) -> ! { loop {} }
 | 
			
		||||
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
pub unsafe fn _start() -> ! {
 | 
			
		||||
	asm!(
 | 
			
		||||
	"syscall",
 | 
			
		||||
	in("rax") 60,  // Syscall number
 | 
			
		||||
	in("rdi") 0,   // Exit code
 | 
			
		||||
	options(noreturn)
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user