BIN = checkrt
LIB = exec.so
EXEC_TEST = exec_test
ENV_TEST = env_test
CHECKRT_TEST = checkrt_test

CFLAGS := -Wall -O3
LDFLAGS := -s


all: $(BIN) $(LIB)

clean:
	-rm -f *.o *.gz res.h $(BIN) $(LIB) $(EXEC_TEST) $(ENV_TEST) $(CHECKRT_TEST)

distclean: clean
	-rm -rf cxx gcc

$(BIN): checkrt.o
	$(CC) -o $@ $^ $(LDFLAGS) -ldl

checkrt.c: res.h

res.h:
	gzip -k -f COPYING.RUNTIME COPYING3 && \
  xxd -i COPYING.RUNTIME.gz > $@ && \
  xxd -i COPYING3.gz >> $@ && \
  xxd -i COPYING.libgcc >> $@ && \
  xxd -i COPYING.libstdc++ >> $@

exec.o env.o: CFLAGS += -fPIC

$(LIB): exec.o env.o
	$(CC) -o $@ $^ -shared $(LDFLAGS) -ldl

$(CHECKRT_TEST): checkrt.c
	$(CC) -o $@ $(CFLAGS) -DCHECKRT_TEST $^ -ldl

$(EXEC_TEST): exec.c env.o
	$(CC) -o $@ $(CFLAGS) -DEXEC_TEST $^ -ldl

$(ENV_TEST): env.c
	$(CC) -o $@ $(CFLAGS) -DENV_TEST $^

run_tests: $(BIN) $(EXEC_TEST) $(ENV_TEST) $(CHECKRT_TEST)
	./$(ENV_TEST)
	./$(EXEC_TEST)
	./$(CHECKRT_TEST)
	./patch_libs.sh && ./$(BIN) -v

.PHONY: $(BIN) all clean

