.PHONY: all c sanitize rust clean merge

all: c sanitize rust merge

c1: c/test1.c
	clang c/test1.c -c -o c/test1.o

c2: c/test2.c
	clang c/test2.c -c -o c/test2.o

link: c/test1.o c/test2.o
	ld c/test1.o c/test2.o -o c/test.o

transpile:
	compiledb make c1
	c2rust transpile compile_commands.json -o rust_test1/
	rm compile_commands.json
	compiledb make c2
	c2rust transpile compile_commands.json -o rust_test2/

rust: rust_test1/src/test1.rs rust_test2/src/test2.rs rust_test_mangle1/src/test1.rs rust_test_mangle2/src/test2.rs
	cd rust_test1 && cargo build
	cd rust_test2 && cargo build
	cd rust_test_mangle1 && cargo build
	cd rust_test_mangle2 && cargo build

merge: merge/main.rs
	cd merge && rustc main.rs -L ../rust_test1/target/debug -L ../rust_test2/target/debug -L ../rust_test1/target/debug/deps -o conflict
	cd merge && rustc main.rs -L ../rust_test_mangle1/target/debug -L ../rust_test_mangle2/target/debug -L ../rust_test_mangle1/target/debug/deps -o no_conflict

clean:
	cd rust_test1 && cargo clean
	cd rust_test2 && cargo clean
	cd rust_test_mangle1 && cargo clean
	cd rust_test_mangle2 && cargo clean
	rm -f c/*.o compile_commands.json rust_test1/src/test1.rs rust_test2/src/test2.rs merge/conflict merge/no_conflict
