# Compiler
CC = gcc

# RPC include path (for libtirpc)
INC = -I/usr/include/tirpc

# Libraries
LIBS = -ltirpc

# Source files
RPC_X = square.x

# Generated files from rpcgen
GEN_C_FILES = square_clnt.c square_svc.c square_xdr.c
GEN_H_FILE = square.h

# Object files for client and server
CLIENT_OBJ = square_clnt.o square_xdr.o client.o
SERVER_OBJ = square_svc.o square_xdr.o server.o

# Default target: build both client and server
all: client server

# Rule to generate .h and .c files from .x using rpcgen
$(GEN_C_FILES) $(GEN_H_FILE): $(RPC_X)
	@echo "Running rpcgen on $(RPC_X)..."
	@rpcgen -C $(RPC_X)

# Compile client
client: $(CLIENT_OBJ)
	$(CC) -o client $(CLIENT_OBJ) $(LIBS)

# Compile server
server: $(SERVER_OBJ)
	$(CC) -o server $(SERVER_OBJ) $(LIBS)

# Compile object files (from the generated .c files)
%.o: %.c $(GEN_H_FILE)
	$(CC) $(INC) -c $< -o $@

# Clean up generated files and object files
clean:
	@echo "Cleaning up..."
	rm -f *.o client server $(GEN_C_FILES) $(GEN_H_FILE)

.PHONY: all clean
