#======================
#Headers
#======================
header = my_header.h
prot = aux_prot.h

#======================
#Program dependencies
#======================

nn_init_dep = nn_init_generator.o \
 rand_gen.o \
 coin_toss.o \
 dice_toss.o \
 calloc_neuron.o \
 copy_neuron.o \
 free_neuron.o \
 calloc_connection.o \
 append_neuron.o \
 copy_neural_net.o \
 free_neural_net.o \
 is_above.o \
 is_connected.o \
 sort_neuron_array.o \
 sort_neuron_connections.o \
 fwrite_neural_net.o \
 load_nn_init_config.o \
 load_int_vector.o \
 load_num_values_vector.o

nn_exec_dep = nn.o \
 load_nn_config.o \
 load_input.o \
 load_output.o \
 fread_neural_net.o \
 sort_neuron_array.o \
 sort_neuron_connections.o \
 forward_propagation.o \
 output_layer_error.o \
 back_propagation.o \
 weight_update.o \
 fwrite_neural_net.o \
 dwrite_neural_net.o \
 rwn.o \
 clean_char_buffer.o \
 calloc_neuron.o \
 calloc_connection.o \
 free_neuron.o \
 copy_neuron.o \
 load_vector.o \
 load_connection.o \
 is_above.o \
 is_connected.o \
 threshold.o \
 derive.o

nn_agr_dep = nn_agr.o \
 load_nn_init_config.o \
 fread_neural_net.o \
 coin_toss.o \
 dice_toss.o \
 rand_gen.o \
 calloc_neuron.o \
 append_neuron.o \
 free_neuron.o \
 fwrite_neural_net.o \
 load_vector.o \
 calloc_connection.o \
 copy_neural_net.o \
 free_neural_net.o \
 copy_neuron.o \
 is_above.o \
 is_connected.o \
 sort_neuron_array.o \
 sort_neuron_connections.o \
 load_connection.o 


#======================
# Funtions
#======================

fread_neural_net_dep = fread_neural_net.o \
 load_vector.o \
 load_connection.o

calloc_neuron_dep = calloc_neuron.o \
 calloc_connection.o \

append_neuron_dep = append_neuron.o \
 copy_neural_net.o \
 free_neural_net.o \
 copy_neuron.o \
 is_above.o \
 is_connected.o \
 sort_neuron_array.o \
 sort_neuron_connections.o
 
#======================
#Programs
#======================

all : ga_server ga_client ga_server_remote nn_exec nn_init nn_agr

ga_server : $(ga_server_dep) $(header) $(prot) sig_usr1.h sig_alarm.h sig_chld.h
	gcc -lm -o ga_server $(ga_server_dep)

ga_client : $(ga_client_dep) $(header) $(prot)
	gcc -lm -o ga_client $(ga_client_dep)

ga_server_remote : $(ga_server_remote_dep) $(header) $(prot)
	gcc -lm -o ga_server_remote $(ga_server_remote_dep)

nn_exec : $(nn_exec_dep) $(header) $(prot)
	gcc -lm -o nn_exec $(nn_exec_dep)

nn_init : $(nn_init_dep) $(header) $(prot)
	gcc -lm -o nn_init $(nn_init_dep)

nn_agr : $(nn_agr_dep) $(header) $(prot)
	gcc -lm -o nn_agr $(nn_agr_dep)

clean : 
	-@rm *.o


