##############################################################################
# makefile
#
# University of Minnesota 
# Aerospace Engineering and Mechanics 
# Copyright 2011 Regents of the University of Minnesota. All rights reserved.
#
# $Id: Makefile 1030 2014-05-21 20:23:20Z brtaylor $
# 
##############################################################################

##### SOFTWARE CONFIGURATION #####

##### AIRCRAFT SELECTION #####
# Select the desired aircraft configuration file here
#AIRCRAFT = HIL_SIM
AIRCRAFT = THOR
#AIRCRAFT = TYR
#AIRCRAFT = FASER
#AIRCRAFT = IBIS
#AIRCRAFT = LOKI
#AIRCRAFT = miniMUTT

##### GUIDANCE LAW #####
# Point to the desired guidance code here
GUIDANCE = guidance/straight_level.c
#GUIDANCE = guidance/waypoint_guidance.c

##### NAVIGATION #####
# Point to the desired navigation code here
#NAVIGATION = navigation/EKF_15state.c
#NAVIGATION = navigation/micronav_ahrs.c
NAVIGATION = navigation/EKF_15state_quat.c

##### FLIGHT CONTROL LAW #####
# Point to the desired flight control law code here
CONTROL =  control/baseline_control.c
#CONTROL =  control/waypoint_tracker.c
#CONTROL =  control/empty_control.c
#CONTROL = control/heading_tracker.c
#CONTROL = control/manual_control.c
#CONTROL =  control/statespace_control.c
#CONTROL = control/rtw_grt_control.c
#CONTROL = control/student_control.c


##### MATLAB RTW AUTOCODE #####
# Make sure #include "simstruc.h" and #include "fixedpoint.h" are commented out in the <modelname>.h file
# Specify the path to the autogenerated code, e.g. /<modelname>_grt_rtw/
#RTW_ROOT = ../../Simulation/Controllers/baseline_control_grt_rtw/
RTW_ROOT = 

# Specify the main code to be compiled <modelname>.c, along with any utility source files
#CONTROL = $(RTW_ROOT)baseline_control.c \
$(RTW_ROOT)rtGetInf.c \
$(RTW_ROOT)rtGetNaN.c \
$(RTW_ROOT)rt_nonfinite.c 


##### SYSTEM ID SELECTION #####
# Point to the desired system ID code here
#SYSTEM_ID = system_id/chirp_sysid.c
SYSTEM_ID = system_id/systemid_none.c

##### SURFACE FAULT MODE SELECTION #####
# Point to the desired fault code here
#SURFACE_FAULT = faults/surffault_upsets.c
#SURFACE_FAULT = faults/fault_onesurf.c
SURFACE_FAULT = faults/surffault_none.c
#SURFACE_FAULT = faults/fault_onesurf.c

##### SENSOR FAULT MODE SELECTION #####
# Point to the desired fault code here
SENSOR_FAULT = faults/sensfault_none.c
#SENSOR_FAULT = faults/fault_onerate.c


#### Determine which aircraft config file, data logging, actuator, and sensor files to compile
ifeq ($(strip $(AIRCRAFT)),HIL_SIM)
AIRCRAFT_CONFIG = aircraft/hil_config.h
DATALOG_CONFIG = datalog/standard_datalog.h
SENSORS = sensors/sensors_hil.c
ACTUATORS = actuators/actuator_serial.c
endif

ifeq ($(strip $(AIRCRAFT)),miniMUTT)
AIRCRAFT_CONFIG = aircraft/miniMUTT_config.h
DATALOG_CONFIG = datalog/miniMUTT_datalog.h
SENSORS = sensors/AirData/AMS_pressure.c sensors/GPS/gps_crescent.c sensors/IMU/IMU_iSensor.c sensors/PWM/ATMEGA328_PWM.c sensors/GPIO/gpio.c
ACTUATORS = actuators/actuator_PWM.c
endif

ifeq ($(strip $(AIRCRAFT)),THOR)
AIRCRAFT_CONFIG = aircraft/thor_config.h
DATALOG_CONFIG = datalog/thor_datalog.h
SENSORS = sensors/AirData/AMS_pressure.c sensors/GPS/gps_crescent.c sensors/IMU/IMU_iSensor.c sensors/PWM/ATMEGA328_PWM.c sensors/GPIO/gpio.c 
ACTUATORS = actuators/actuator_PWM.c
endif

ifeq ($(strip $(AIRCRAFT)),TYR)
AIRCRAFT_CONFIG = aircraft/tyr_config.h
DATALOG_CONFIG = datalog/tyr_datalog.h
SENSORS = sensors/AirData/AMS_pressure.c sensors/GPS/gps_crescent.c sensors/IMU/IMU_iSensor.c sensors/PWM/ATMEGA328_PWM.c sensors/GPIO/gpio.c 
ACTUATORS = actuators/actuator_PWM.c
endif

ifeq ($(strip $(AIRCRAFT)),FASER)
AIRCRAFT_CONFIG = aircraft/faser_config.h
DATALOG_CONFIG = datalog/faser_datalog.h
SENSORS = sensors/AirData/AMS_pressure.c sensors/GPS/gps_oemstar.c sensors/IMU/IMU_iSensor.c sensors/ADC/SX8724C_ADC.c sensors/PWM/ATMEGA328_PWM.c sensors/GPIO/gpio.c 
ACTUATORS = actuators/actuator_PWM.c
endif

ifeq ($(strip $(AIRCRAFT)),IBIS)
AIRCRAFT_CONFIG = aircraft/ibis_config.h
DATALOG_CONFIG = datalog/ibis_datalog.h
SENSORS = sensors/AirData/AMS_pressure.c sensors/GPS/gps_oemstar.c sensors/IMU/IMU_iSensor.c sensors/ADC/SX8724C_ADC.c sensors/PWM/ATMEGA328_PWM.c sensors/GPIO/gpio.c
ACTUATORS = actuators/actuator_PWM.c
endif

ifeq ($(strip $(AIRCRAFT)),LOKI)
AIRCRAFT_CONFIG = aircraft/loki_config.h
DATALOG_CONFIG = datalog/standard_datalog.h
SENSORS = sensors/AirData/AMS_pressure.c sensors/GPS/gps_sirf.c sensors/IMU/IMU_iSensor.c sensors/GPIO/gpio.c
ACTUATORS = actuators/actuator_PWM.c
endif
#########################################################################

# Code to be compiled
ifeq ($(strip $(AIRCRAFT)),miniMUTT)
OBJ =\
utils/serial_mpc5200.c \
utils/matrix.c \
utils/misc.c \
utils/scheduling.c \
system_id/systemid_functions.c \
faults/fault_functions.c \
control/control_functions.c \
navigation/nav_functions.c \
sensors/AirData/airdata_bias.c \
telemetry/telemetry.c \
datalog/datalogger.c \
sensors/daq.c \
$(NAVIGATION) \
$(SENSORS) \
$(ACTUATORS) \
threads/thread1.c\
threads/threads.c\
main_datalog.c 

else
OBJ =\
utils/serial_mpc5200.c \
utils/matrix.c \
utils/misc.c \
utils/scheduling.c \
system_id/systemid_functions.c \
faults/fault_functions.c \
control/control_functions.c \
navigation/nav_functions.c \
sensors/AirData/airdata_bias.c \
telemetry/telemetry.c \
datalog/datalogger.c \
sensors/daq.c \
$(GUIDANCE) \
$(NAVIGATION) \
$(CONTROL) \
$(SYSTEM_ID) \
$(SURFACE_FAULT) \
$(SENSOR_FAULT) \
$(SENSORS) \
$(ACTUATORS) \
threads/thread1.c\
threads/threads.c\
main.c 
endif

##### DIRECTORY SETUP #################################################
# Edit this section to set paths for your computer

##### MATLAB RTW ######################################################
# Path to your MATLAB directory for RTW files. 
# Cannot have any spaces in the names!
# Use /cygdrive/c/ instead of C:/
MATLAB_ROOT = /cygdrive/c/PROGRA~1/MATLAB/R2012b

#MATLAB_INCLUDES = \
	-I$(MATLAB_ROOT)/simulink/include \
	-I$(MATLAB_ROOT)/extern/include \
	-I$(MATLAB_ROOT)/rtw/c/src 

MATLAB_INCLUDES = -I

##### MPC 5200 PARAMETERS ###############################################
# eCos PowerPC files. Should be located in the cygwin folder
CC=/opt/ecos/gnutools/powerpc-eabi/bin/powerpc-eabi-gcc
#CP=/opt/ecos/gnutools/powerpc-eabi/bin/powerpc-eabi-objcopy
#OD=/opt/ecos/gnutools/powerpc-eabi/bin/powerpc-eabi-objdump

# Uncomment the following two lines if these variables are not set in your cygwin .bash_profile or you use Eclipse IDE
# You may also need to edit the path to point to the appropriate directory.

# Use the following two paths for C code based control laws
ECOS_LIB_PATH_MPC5200=/cygdrive/c/Users/brtaylor/Desktop/UAV_Lab_Infrastructure/Software/eCos_C/build/lib
ECOS_INCLUDE_PATH_MPC5200=/cygdrive/c/Users/brtaylor/Desktop/UAV_Lab_Infrastructure/Software/eCos_C/build/include

# Use the following two paths for autocode based control laws
#ECOS_LIB_PATH_MPC5200=/cygdrive/c/Users/brtaylor/Desktop/UAV_Lab_Infrastructure/Software/eCos_Autocode/build/lib
#ECOS_INCLUDE_PATH_MPC5200=/cygdrive/c/Users/brtaylor/Desktop/UAV_Lab_Infrastructure/Software/eCos_Autocode/build/include

##########################################################################
# Use the following two includes for C code based control laws
CFLAGS=-g -O2 -Wall -mcpu=603e -I$(ECOS_INCLUDE_PATH_MPC5200) $(MATLAB_INCLUDES) -I$(RTW_ROOT)
LFLAGS	=-Wl,--gc-sections -Wl,-static -Ttarget.ld -nostdlib -L$(ECOS_LIB_PATH_MPC5200) -Lsrc -D'AIRCRAFT="$(AIRCRAFT_CONFIG)"' -D'AIRCRAFT_UP1DIR="../$(AIRCRAFT_CONFIG)"' -D'DATALOG_CONFIG="$(DATALOG_CONFIG)"'

# Use the following two includes for autocode based control laws
#CFLAGS=-g -O2 -Wall -mcpu=603e -I$(ECOS_INCLUDE_PATH_MPC5200) $(MATLAB_INCLUDES) -I$(RTW_ROOT)
#LFLAGS	=-Wl,--gc-sections -Wl,-static -Ttarget.ld -nostdlib -L$(ECOS_LIB_PATH_MPC5200) -Lsrc -D'AIRCRAFT="$(AIRCRAFT_CONFIG)"' -D'AIRCRAFT_UP1DIR="../$(AIRCRAFT_CONFIG)"' -D'DATALOG_CONFIG="$(DATALOG_CONFIG)"' -D'RT'

#### RULES ####
all: clean output display

output: $(OBJ)
	@ echo "Building..."	
	$(CC) -o $@ $^ $(LFLAGS) $(CFLAGS)
		
clean:
	-rm output

ifeq ($(strip $(AIRCRAFT)),miniMUTT)

display: 
	@ echo
	@ echo "#################### UMN UAV Software ######################"
	@ echo "Successful build with the following configuration:"
	@ echo "AIRCRAFT = $(AIRCRAFT_CONFIG)"
	@ echo "DATALOG = $(DATALOG_CONFIG)"
	@ echo "NAVIGATION = $(NAVIGATION)"
	@ echo ""
	@ echo "University of Minnesota"
	@ echo "Aerospace Engineering and Mechanics"
	@ echo "Copyright 2011 Regents of the University of Minnesota. All rights reserved."
	@ echo "www.uav.aem.umn.edu" 

else

display: 
	@ echo
	@ echo "#################### UMN UAV Software ######################"
	@ echo "Successful build with the following configuration:"
	@ echo "AIRCRAFT = $(AIRCRAFT_CONFIG)"
	@ echo "DATALOG = $(DATALOG_CONFIG)"
	@ echo "GUIDANCE = $(GUIDANCE)"
	@ echo "NAVIGATION = $(NAVIGATION)"
	@ echo "CONTROL = $(CONTROL)"
	@ echo "SYSTEM_ID = $(SYSTEM_ID)"
	@ echo "SURFACE_FAULT = $(SURFACE_FAULT)"
	@ echo "SENSOR_FAULT = $(SENSOR_FAULT)"
	@ echo ""
	@ echo "University of Minnesota"
	@ echo "Aerospace Engineering and Mechanics"
	@ echo "Copyright 2011 Regents of the University of Minnesota. All rights reserved."
	@ echo "www.uav.aem.umn.edu" 
	
endif
	
	
	
