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

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

nn_agr_dep = nn_agr.o \
 n_calloc_connection.o \
 n_calloc_neuron.o \
 n_copy_neuron.o \
 n_free_neuron.o \
 n_is_above.o \
 n_is_connected.o \
 n_load_connection.o \
 n_load_vector.o \
 n_sort_neuron_connections.o \
 nn_append_neuron.o \
 nn_copy_neural_net.o \
 nn_dread_neural_net.o \
 nn_dwrite_neural_net.o \
 nn_fread_neural_net.o \
 nn_free_neural_net.o \
 nn_fwrite_neural_net.o \
 nn_load_nn_init_config.o \
 nn_sort_neuron_array.o \
 va_calloc_io_block.o \
 va_coin_toss.o \
 va_dice_toss.o \
 va_dwrite_io_block.o \
 va_dread_io_block.o \
 va_free_io_block.o \
 va_rand_gen.o \
 va_rwn.o

nn_init_dep = nn_init_generator.o \
 n_calloc_connection.o \
 n_calloc_neuron.o \
 n_copy_neuron.o \
 n_free_neuron.o \
 n_is_above.o \
 n_is_connected.o \
 n_load_int_vector.o \
 n_load_num_values_vector.o \
 n_sort_neuron_connections.o \
 nn_append_neuron.o \
 nn_copy_neural_net.o \
 nn_free_neural_net.o \
 nn_fwrite_neural_net.o \
 nn_load_nn_init_config.o \
 nn_sort_neuron_array.o \
 nn_dwrite_neural_net.o \
 va_coin_toss.o \
 va_calloc_io_block.o \
 va_dice_toss.o \
 va_dread_io_block.o \
 va_dwrite_io_block.o \
 va_free_io_block.o \
 va_rand_gen.o \
 va_rwn.o
 
nn_exec_dep = nn.o \
 n_calloc_connection.o \
 n_calloc_neuron.o \
 n_copy_neuron.o \
 n_derive.o \
 n_free_neuron.o \
 n_is_above.o \
 n_is_connected.o \
 n_load_vector.o \
 n_load_connection.o \
 n_sort_neuron_connections.o \
 n_threshold.o \
 nn_back_propagation.o \
 nn_dread_neural_net.o \
 nn_dwrite_neural_net.o \
 nn_fread_neural_net.o \
 nn_forward_propagation.o \
 nn_fwrite_neural_net.o \
 nn_load_nn_config.o \
 nn_load_input.o \
 nn_load_output.o \
 nn_read_neural_net.o \
 nn_output_layer_error.o \
 nn_sort_neuron_array.o \
 nn_weight_update.o \
 nn_write_neural_net.o \
 va_clean_char_buffer.o \
 va_calloc_io_block.o \
 va_dread_io_block.o \
 va_dwrite_io_block.o \
 va_free_io_block.o \
 va_io_connect.o \
 va_io_close.o \
 va_rwn.o



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

fread_neural_net_dep = fread_neural_net.o \
 n_load_vector.o \
 n_load_connection.o

calloc_neuron_dep = calloc_neuron.o \
 n_calloc_connection.o \

append_neuron_dep = append_neuron.o \
 n_sort_neuron_connections.o \
 n_copy_neuron.o \
 n_is_above.o \
 n_is_connected.o \
 nn_copy_neural_net.o \
 nn_free_neural_net.o \
 nn_sort_neuron_array.o
 
nn_dwrite_neural_net_dep = nn_dwrite_neural_net.o \
 va_calloc_io_block.o \
 va_free_io_block.o
 
nn_dread_neural_net = nn_dread_neural_net.o \
 va_dread_io_block.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


