Compile an integer to an exectuable that exits with the given number

This commit is contained in:
Rui Ueyama 2019-08-03 11:29:50 +09:00
commit 0522e2d77e
4 changed files with 56 additions and 0 deletions

7
.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
**/*~
**/\#*
**/*.o
**/*.s
**/a.out
/tmp*
/chibicc

12
Makefile Normal file
View 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
View 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
View 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