ifeq ($(shell uname),Darwin)
        SED=sed -i .todel
else
        SED=sed -i
endif

CC 		= gcc
TARGETS = test1 test2 test3
CFLAGS	= -m64 -fomit-frame-pointer -fno-stack-protector -g -no-pie -O0

all: $(TARGETS)
	nasm -g -f elf64 -o nops.o nops.s
	gcc -c $(CFLAGS) test1.c
	gcc -o test1 $(CFLAGS) test1.o nops.o
	objdump -d test1 > test1.objdump.txt
	hexdump -C test1 > test1.hexdump.txt
	readelf -e test1 > test1.readelf.txt
	gcc -c $(CFLAGS) test2.c
	gcc -o test2 $(CFLAGS) test2.o nops.o
	objdump -d test2 > test2.objdump.txt
	hexdump -C test2 > test2.hexdump.txt
	readelf -e test2 > test2.readelf.txt
	gcc -c $(CFLAGS) test3.c
	gcc -o test3 $(CFLAGS) test3.o nops.o
	objdump -d test3 > test3.objdump.txt
	hexdump -C test3 > test3.hexdump.txt
	readelf -e test3 > test3.readelf.txt
	gcc -c $(CFLAGS) test4.c
	gcc -o test4 $(CFLAGS) test4.o nops.o
	objdump -d test4 > test4.objdump.txt
	hexdump -C test4 > test4.hexdump.txt
	readelf -e test4 > test4.readelf.txt
	g++ -c $(CFLAGS) test5.cpp
	g++ -o test5 $(CFLAGS) test5.o nops.o
	objdump -d test5 > test5.objdump.txt
	hexdump -C test5 > test5.hexdump.txt
	readelf -e test5 > test5.readelf.txt
	$(SED) s/"<html>"/"<html lang='en'>"/g *.c.html *.s.html *.cpp.html Makefile.html
	/bin/rm -f *.todel
	/bin/rm -f *.o
	make source

source:
	source-highlight -d *.c *.s *.cpp Makefile
	$(SED) s/"<html>"/"<html lang='en'>"/ *.c.html *.s.html *.cpp.html Makefile.html
	$(SED) s/"<pre>"/"<main><pre>"/ *.c.html *.s.html *.cpp.html Makefile.html
	$(SED) s_"</pre>"_"</pre></main>"_ *.c.html *.s.html *.cpp.html Makefile.html
	/bin/rm -f *.todel