add nasm and nasm64

This commit is contained in:
Dan Vargas 2022-02-07 10:56:17 -07:00
parent bc80269ce2
commit d258bed574
10 changed files with 108 additions and 99 deletions

View File

@ -1,21 +0,0 @@
#!/usr/bin/env bash
# Put instructions to build your package in here
PREFIX=$(realpath $(dirname $0))
mkdir -p build
cd build
curl -L "https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.gz" -o nasm.tar.gz
tar xzf nasm.tar.gz --strip-components=1
# === autoconf based ===
./configure --prefix "$PREFIX"
make -j$(nproc)
make install -j$(nproc)
cd ../
rm -rf build

View File

@ -1,21 +0,0 @@
#!/usr/bin/env bash
# Put instructions to compile source code, remove this file if the language does not require this stage
case "${PISTON_LANGUAGE}" in
nasm)
nasm -f elf32 -o binary.o "$@"
ld -m elf_i386 binary.o -o binary
;;
nasm64)
nasm -f elf64 -o binary.o "$@"
ld -m elf_x86_64 binary.o -o binary
;;
*)
echo "How did you get here? (${PISTON_LANGUAGE})"
exit 1
;;
esac
chmod +x ./binary

View File

@ -1,4 +0,0 @@
#!/usr/bin/env bash
# Put 'export' statements here for environment variables
export PATH=$PWD/bin:$PATH

View File

@ -1,14 +0,0 @@
{
"language": "nasm",
"version": "2.15.5",
"provides": [
{
"language": "nasm",
"aliases": ["asm", "nasm32"]
},
{
"language": "nasm64",
"aliases": ["asm64"]
}
]
}

View File

@ -1,5 +0,0 @@
#!/usr/bin/env bash
# Put instructions to run the runtime
shift
./binary "$@"

View File

@ -1,16 +0,0 @@
SECTION .DATA
good: db 'OK',10
txtlen: equ $-good
SECTION .TEXT
GLOBAL _start
_start:
mov eax,4
mov ebx,1
mov ecx,good
mov edx,txtlen
int 80h
mov eax,1
mov ebx,0
int 80h

View File

@ -1,18 +0,0 @@
SECTION .data
good: db "OK", 0x0
txtlen: equ $ - good
SECTION .text
GLOBAL _start
_start:
;sys_write
mov rax, 1
mov rdi, 1
mov rsi, good
mov rdx, txtlen
syscall
;sys_exit
mov rax, 60
mov rdi, 0
syscall

View File

@ -31,4 +31,6 @@ args: {
"octave" = import ./octave.nix args; "octave" = import ./octave.nix args;
"ocaml" = import ./ocaml.nix args; "ocaml" = import ./ocaml.nix args;
"nim" = import ./nim.nix args; "nim" = import ./nim.nix args;
"nasm" = import ./nasm.nix args;
"nasm-nasm64" = import ./nasm-nasm64.nix args;
} }

54
runtimes/nasm-nasm64.nix Normal file
View File

@ -0,0 +1,54 @@
{pkgs, piston, ...}:
let
pkg = pkgs.nasm;
binutils = pkgs.binutils;
in piston.mkRuntime {
language = "nasm64";
version = pkg.version;
runtime = "nasm";
aliases = [
"asm64"
];
compile = ''
${pkg}/bin/nasm -f elf64 -o binary.o "$@"
${binutils}/bin/ld -m elf_x86_64 binary.o -o binary
'';
run = ''
shift
./binary "$@"
'';
tests = [
(piston.mkTest {
files = {
"test.asm64" = ''
SECTION .data
good: db "OK", 10
txtlen: equ $ - good
SECTION .text
GLOBAL _start
_start:
;sys_write
mov rax, 1
mov rdi, 1
mov rsi, good
mov rdx, txtlen
syscall
;sys_exit
mov rax, 60
mov rdi, 0
syscall
'';
};
args = [];
stdin = "";
packages = [];
main = "test.asm64";
})
];
}

52
runtimes/nasm.nix Normal file
View File

@ -0,0 +1,52 @@
{pkgs, piston, ...}:
let
pkg = pkgs.nasm;
binutils = pkgs.binutils;
in piston.mkRuntime {
language = "nasm";
version = pkg.version;
aliases = [
"nasm32"
"asm"
];
compile = ''
${pkg}/bin/nasm -f elf32 -o binary.o "$@"
${binutils}/bin/ld -m elf_i386 binary.o -o binary
'';
run = ''
shift
./binary "$@"
'';
tests = [
(piston.mkTest {
files = {
"test.asm" = ''
SECTION .DATA
good: db 'OK',10
txtlen: equ $-good
SECTION .TEXT
GLOBAL _start
_start:
mov eax,4
mov ebx,1
mov ecx,good
mov edx,txtlen
int 80h
mov eax,1
mov ebx,0
int 80h
'';
};
args = [];
stdin = "";
packages = [];
main = "test.asm";
})
];
}