ifeq ($(ARCH),)
ifeq ($(filter everything .cross clean reallyclean,$(MAKECMDGOALS)),)
$(error You must set ARCH (e.g. x64, mips) $(MAKECMDGOALS) or "make everything")
endif
else ifeq ($(ARCH),x64)
CROSS=podman run --rm -e ARCH=x64 -v `pwd`:/work -it mqtt-client cross /bin/bash -c
else ifeq ($(ARCH),mips32)
CROSS=podman run --rm -e ARCH=mips32 -v `pwd`:/work -it mqtt-client cross /bin/bash -c
else ifeq ($(ARCH),arm32)
CROSS=podman run --rm -e ARCH=arm32 -v `pwd`:/work -it mqtt-client cross /bin/bash -c
else ifeq ($(ARCH),arm64)
CROSS=podman run --rm -e ARCH=arm64 -v `pwd`:/work -it mqtt-client cross /bin/bash -c
else
$(error Do not know how to support $(ARCH) yet.)
endif

all:	$(ARCH)/mqtt-client

everything:
	$(MAKE) ARCH=x64
	$(MAKE) ARCH=mips32
	$(MAKE) ARCH=arm32
	$(MAKE) ARCH=arm64
	@echo '******************************************************'
	@echo '******************************************************'
	@echo "Build of all architectures complete.  Resulting files:"
	@echo ""
	@podman run --rm -v `pwd`:/work -it mqtt-client /bin/bash -c 'file */mqtt-client'
	@echo ""
	@ls -lh */mqtt-client
	@echo ""

$(ARCH)/mqtt-client:	.cross $(ARCH)/lib/libmqttc.a $(ARCH)/lib/libjson-c.so.5.5.0 $(ARCH)/main.o $(ARCH)/command.o $(ARCH)/command.o $(ARCH)/ts-queue.o $(ARCH)/log.o
	$(CROSS) '$${CROSS_COMPILE}gcc -static -L /work/$(ARCH)/lib -o $@ $(filter %.o,$^) -lmqttc -ljson-c -lpthread'
	$(CROSS) '$${CROSS_COMPILE}strip $@'

$(ARCH)/%.o:	%.c .cross $(ARCH)/lib/libmqttc.a $(ARCH)/lib/libjson-c.so.5.5.0
	mkdir -p $(ARCH)
	$(CROSS) '$${CROSS_COMPILE}gcc -c -I /work/$(ARCH)/include -o $@ $<'

$(ARCH)/ts-queue.o:	.cross ts-queue.c ts-queue.h
	mkdir -p $(ARCH)
	$(CROSS) '$${CROSS_COMPILE}gcc -c -I /work/$(ARCH)/include -o $@ ts-queue.c'

$(ARCH)/log.o:	.cross log.c log.h
	mkdir -p $(ARCH)
	$(CROSS) '$${CROSS_COMPILE}gcc -c -I /work/$(ARCH)/include -o $@ log.c'

$(ARCH)/lib/libjson-c.so.5.5.0:	.cross
	rm -rf json-c
	git clone https://github.com/json-c/json-c
	$(CROSS) 'cd json-c; cmake -DCMAKE_INSTALL_PREFIX=/work/$(ARCH) && cmake --build . && cmake --install .'
	rm -rf json-c

$(ARCH)/lib/libmqttc.a:	.cross $(ARCH)/lib/libcmocka.so
	rm -rf MQTT-C
	git clone https://github.com/LiamBindle/MQTT-C.git
	$(CROSS) 'cd MQTT-C; cmake -DCMAKE_INSTALL_PREFIX=/work/$(ARCH) && cmake --build . && cmake --install .'
	rm -rf MQTT-C

$(ARCH)/lib/libcmocka.so:	.cross
	rm -rf cmocka
	git clone https://github.com/clibs/cmocka
	$(CROSS) 'cd cmocka; cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/work/$(ARCH) && cmake --build build && cmake --install build'
	rm -rf cmocka

.cross:	$(wildcard build)
	podman build -t mqtt-client build
	touch $@

clean:
	rm -rf MQTT-C cmocka json-c */*.o */mqtt-client

reallyclean:	clean
	rm -rf x64 mips32 arm32 arm64 .cross
