CLIBS=
CINCLUDES=
CFLAGS=-g -Wall -std=c++98
CC=c++
OBJS=asm.o

default:
	make progs

all:
	make clean
	make progs

progs:
	make asm
	make run
	make disasm 
	make debug
	make link 
	make gen_code 
	make script
	make gen_if
	make gen_asm_if

dis2:
	./asm hello.asm hello.o 
	./disasm hello.o hello2.asm 
	cat hello2.asm
	./asm hello2.asm hello2.o
	./run hello2.o

dis:
	./asm test.asm test.o 
	./disasm test.o test.asm 
	./asm test2.asm test2.o
	./run test2.o
	cat test2.asm

gen_asm_if:gen_asm_if.o
	${CC} ${CFLAGS} gen_asm_if.o -o gen_asm_if ${CLIBS} ${CINCLUDES}

gen_asm_if.o:gen_asm_if.cpp
	${CC} ${CFLAGS} gen_asm_if.cpp -c ${CLIBS} ${CINCLUDES}

runscript:
	./script hello.asm

script.o:script.cpp asm.h
	${CC} ${CFLAGS} script.cpp -c ${CLIBS} ${CINCLUDES}

script:script.o 
	${CC} ${CFLAGS} script.o -o script ${CLIBS} ${CINCLUDES}

bytes.o:bytes.cpp asm.h
	${CC} ${CFLAGS} bytes.cpp -c ${CLIBS} ${CINCLUDES}

bytes:bytes.o
	${CC} ${CFLAGS} bytes.o -o bytes ${CLIBS} ${CINCLUDES}

getbytes:
	make bytes
	rm -f nil.bin
	nasm -f bin nil.asm -o nil.bin
	./bytes nil.bin

link.o:link.cpp asm.h
	${CC} ${CFLAGS} link.cpp -c ${CLIBS} ${CINCLUDES}

link:link.o
	${CC} ${CFLAGS} link.o -o link ${CLIBS} ${CINCLUDES}

disasm.o:disasm.cpp asm.h findif.h
	${CC} ${CFLAGS} disasm.cpp -c ${CLIBS} ${CINCLUDES}

disasm:disasm.o
	${CC} ${CFLAGS} disasm.o -o disasm ${CLIBS} ${CINCLUDES}

gen_if.o:gen_if.cpp
	${CC} ${CFLAGS} gen_if.cpp -c ${LIBS} ${CINCLUDES}

gen_if:gen_if.o
	${CC} ${CFLAGS} gen_if.o -o gen_if ${CLIBS} ${CINCLUDES}

if:
	./gen_if

debug.o:debug.cpp asm.h
	${CC} ${CFLAGS} debug.cpp -c ${CLIBS} ${CINCLUDES}

debug:debug.o
	${CC} ${CFLAGS} debug.o -o debug ${CLIBS} ${CINCLUDES}
	
run.o:run.cpp asm.h
	${CC} ${CFLAGS} run.cpp -c ${CLIBS} ${CINCLUDES}

run:run.o
	${CC} ${CFLAGS} run.o -o run ${CLIBS} ${CINCLUDES}

asm.o:asm.cpp asm.h
	${CC} asm.cpp -c ${CFLAGS} ${CLIBS} ${CINCLUDES}

asm:${OBJS}
	${CC} -o asm ${OBJS} ${CFLAGS} ${CLIBS} ${CINCLUDES}

test:
	rm -f hello.o
	./asm hello.asm hello.o

hello:
	rm -f hello.o
	nasm -f elf hello.asm -o hello.o
	cc hello.o -o hello2
	./hello2

gen_code.o:gen_code.cpp
	${CC} ${CFLAGS} gen_code.cpp -c

gen_code:gen_code.o
	${CC} ${CFLAGS} gen_code.o -o gen_code
	strip ./gen_code

gen:
	./gen_code

clean:
	rm -f *.o
	rm -f *.core
	rm -f asm
	rm -f run 
	rm -f gen_code
	rm -f hello
	rm -f gen_if
	rm -f script
	rm -f link

