mirror of
https://github.com/rui314/chibicc
synced 2024-11-21 22:01:40 +03:00
Compile an integer to an exectuable that exits with the given number
This commit is contained in:
commit
0522e2d77e
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
**/*~
|
||||
**/\#*
|
||||
**/*.o
|
||||
**/*.s
|
||||
**/a.out
|
||||
/tmp*
|
||||
/chibicc
|
12
Makefile
Normal file
12
Makefile
Normal file
@ -0,0 +1,12 @@
|
||||
CFLAGS=-std=c11 -g -fno-common
|
||||
|
||||
chibicc: main.o
|
||||
$(CC) -o chibicc main.o $(LDFLAGS)
|
||||
|
||||
test: chibicc
|
||||
./test.sh
|
||||
|
||||
clean:
|
||||
rm -f chibicc *.o *~ tmp*
|
||||
|
||||
.PHONY: test clean
|
15
main.c
Normal file
15
main.c
Normal file
@ -0,0 +1,15 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "%s: invalid number of arguments\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf(" .globl main\n");
|
||||
printf("main:\n");
|
||||
printf(" mov $%d, %%rax\n", atoi(argv[1]));
|
||||
printf(" ret\n");
|
||||
return 0;
|
||||
}
|
22
test.sh
Executable file
22
test.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
assert() {
|
||||
expected="$1"
|
||||
input="$2"
|
||||
|
||||
./chibicc "$input" > tmp.s || exit
|
||||
gcc -static -o tmp tmp.s
|
||||
./tmp
|
||||
actual="$?"
|
||||
|
||||
if [ "$actual" = "$expected" ]; then
|
||||
echo "$input => $actual"
|
||||
else
|
||||
echo "$input => $expected expected, but got $actual"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
assert 0 0
|
||||
assert 42 42
|
||||
|
||||
echo OK
|
Loading…
Reference in New Issue
Block a user