prefix := $(shell rtai-config --prefix)

ifeq ($(prefix),)
$(error Please add <rtai-install>/./bin to your PATH variable)
endif

CC = $(shell rtai-config --cc)
LXRT_CFLAGS = $(shell rtai-config --lxrt-cflags)
LXRT_LDFLAGS = $(shell rtai-config --lxrt-ldflags)
INCLUDE = -I ./src/include/ -I /usr/realtime/include

all: master_modltq manager master_modbus slave_modbus master_modTCP slave_modTCP master_generator master_modUDP slave_modUDP master_modbusip slave_modbusip confcgi master_hart master_logfile rebootme warmstart

manager: ./src/manager.c
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

master_modbus: ./src/master_modbus.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

master_logfile: ./src/master_logfile.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

master_hart: ./src/master_hart.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

slave_modbus: ./src/slave_modbus.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

master_generator: ./src/master_generator.c
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt -lm

master_modTCP: ./src/master_modTCP.c ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

slave_modTCP: ./src/slave_modTCP.c ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

master_modUDP: ./src/master_modUDP.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

slave_modUDP: ./src/slave_modUDP.c ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

master_modbusip: ./src/master_modbusip.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

slave_modbusip: ./src/slave_modbusip.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

master_modltq: ./src/master_modltq.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

master_modloglife: ./src/master_logfile.c crc16.o ioctl.o
	$(CC) $(LXRT_CFLAGS) -o ./bin/$@ $< ./bin/ioctl.o ./bin/crc16.o $(LXRT_LDFLAGS) $(INCLUDE) -llxrt -lrt

confcgi: ./src/confcgi.c
	$(CC) $(LXRT_CFLAGS) -o ./cgi-bin/$@ $< $(INCLUDE)
	chmod a+rxs ./cgi-bin/confcgi

warmstart: ./src/warmstart.c
	$(CC) -o ./bin/$@ $< $(INCLUDE)
	chmod a+rxs ./bin/warmstart

rebootme: ./src/rebootme.c
	$(CC) -o ./bin/$@ $< $(INCLUDE)
	chmod a+rxs ./bin/rebootme

ioctl.o: ./src/ioctl.c
	gcc -c ./src/ioctl.c -o ./bin/ioctl.o $(INCLUDE)	

crc16.o: ./src/crc16.c
	gcc -c ./src/crc16.c -o ./bin/crc16.o $(INCLUDE)	

clean:
	rm -f ./cgi-bin/* ./bin/master* ./bin/manager ./bin/sla* ./bin/re* ./bin/warm*


.PHONY: clean
