###############################################################################
##
##           FlightSafety International Simulation Systems Division
##                    Broken Arrow, OK  USA  918-259-4000
##
##                      JPATS T-6A Flight Training Device
##
##
##  Engineer:  Ted E. Dennison
##
##
## DISTRIBUTION "D":  Distribution authorized to Department of Defense (DOD),
## Raytheon Aircraft Company (RAC), and DOD subcontractors only to protect
## technical or operational data or information from automatic dissemination
## under the International Exchange Program or by other means.  This protection
## covers information required solely for administrative or operational
## purposes, date of document as shown hereon 3 April 1998 ASC/YTK.
##
## WARNING:  This document contains technical data whose export is restricted
## by the Arms Export Control Act (Title 22, U. S. C. 2751 et seq) or
## Executive Order 12470.  Violation of these export control laws is subject
## to severe criminal penalties.  Dissemination of this document is controlled
## under DOD Directive 5230.25
##
###############################################################################

###############################################################################
# The master make file for the JPATS system.
#
# The following targets are explicitly supported:
#   
#   default        - Build a tarfile containing the JPATS host software.
#   kernel         - The vxWorks kernel
#   all            - Build both the kernel and host software tarfiles
#   installfloppy  - Build a set of vxWorks Host installation disks.
#   boot           - The vxWorks bootrom file and bootrom installer routine
#   datafiles      - The table object files and other runtime data files
#   JPATS          - The vxWorks simulation executable
#   clean          - Delete all target and intermediate files 
#   jpatsclean     - "clean", but don't delete the Tornado config files.
#   kernelclean    - Delete all files that are used in making a kernel
#   bootclean      - Remove all files created for a bootable floppy.
###############################################################################

# The location of the directory containing the jpats ftd revision controlled
# files. If its left blank the current working directory is used. This variable
# is meant to be overridden at the command line.
jpatsdir = 

# The data files which need to be read in at runtime
ICD_Files = hostfdk.icd hostecl.icd hostacs.icd
Main_Data_Files = sim.cfg $(ICD_Files)
Data_Files += $(Main_Data_Files)

ICD_Dir = $(jpatsdir)src/subsystem_if_cat/tables/

Table_Objects = 
C_Objects = 

# Revision-Controlled source files that are compiled into the kernel
Kernel_Config_Files = if_zxeRlk.h if_zxeRlk.c if_zxepci.h if_zxepci.c configZxe.h configZxe.c \
                      dosfsdt.c config.h syslib.c
Floppy_Kernel_Config_Files = config.h vxinstall.c

# Non-Revision-Controlled object files that are linked into the kernel and bootrom.
Extra_Project_Modules = if_zxe.obj configZxe.o if_zxeRlk.o dosfsdt.o zxe_apps.obj

# Revision-Controlled object files (yuck!) that are linked into the kernel and bootrom.
Kernel_Extra_Objects = if_zxe.obj zxe_apps.obj

# Revision-Controlled project files that are used by Tornado II to configure the kernel.
Kernel_Project_Files = usrAppInit.c PProProject.wpj Makefile prjObjs.lst
Floppy_Kernel_Project_Files = bootfloppy.wpj Makefile prjObjs.lst
#PRJ_OBJS = sysALib.o sysLib.o usrAppInit.o prjConfig.o linkSyms.o

# Revision controlled files that are used to create the vxWorks bootrom
Kernel_Bootrom_Files = Makefile

# Tornado Directory definitions. Change theese to change the locations of the kernel files
Tornado_Root_Dir = $(WIND_BASE)/
Kernel_BSP = pcPentiumPro
Kernel_Project = Host_Kernel
Floppy_Project = BootFloppy
Tornado_Config_Dir      = $(Tornado_Root_Dir)target/config/$(Kernel_BSP)/
Tornado_Project_Dir     = $(Tornado_Root_Dir)target/proj/$(Kernel_Project)/
Floppy_Project_Dir      = $(Tornado_Root_Dir)target/proj/$(Floppy_Project)/
Tornado_Target_Dir      = $(Tornado_Project_Dir)default/
Floppy_Target_Dir       = $(Floppy_Project_Dir)BootFloppy/
CM_Tornado_Config_Dir   = $(jpatsdir)kernel/Configuration/
CM_Tornado_Project_Dir  = $(jpatsdir)kernel/Project/
CM_Floppy_Config_Dir    = $(jpatsdir)installfloppy/Configuration/
CM_Floppy_Project_Dir   = $(jpatsdir)installfloppy/Project/
CM_Floppy_Data_Dir      = $(jpatsdir)installfloppy/Data/

Tornado_Root_Source_Dir = $(jpatsdir)kernel/


adamake = c:/green/build
AR = $(WIND_BASE)/host/x86-win32/bin/ar386

Jpats_Tar_Contents = $(Data_Files) JPATS JPATS.sym $(Table_Objects)
Jpats_Test_Tar_Contents = $(Data_Files) JPATS_test JPATS_test.sym $(Table_Objects)
Kernel_Tar_Contents = vxWorks vxWorks.sym startup.scr


#
# Derived Variables
#
# This section should not be user-edited. It contains definitions for variables that
# are derived from variables in the section above.
#
srcdir = $(jpatsdir)src/
datadir = $(jpatsdir)data/
configdir = $(jpatsdir)src/reusable_cat/

#Tornado_Bootrom_Files    = $(addprefix $(Tornado_Config_Dir),     $(Kernel_Bootrom_Files))
Tornado_Config_Files     = $(addprefix $(Tornado_Config_Dir),     $(Kernel_Config_Files) \
$(Kernel_Extra_Objects) $(Kernel_Bootrom_Files))
Tornado_Project_Files    = $(addprefix $(Tornado_Project_Dir),    $(Kernel_Project_Files))
Tornado_Extra_Objects    = $(addprefix $(Tornado_Target_Dir),     $(Kernel_Extra_Objects))
Floppy_Config_Files      = $(addprefix $(Tornado_Config_Dir),     $(Floppy_Kernel_Config_Files) \
$(Kernel_Bootrom_Files))
Floppy_Project_Files     = $(addprefix $(Floppy_Project_Dir),     $(Floppy_Kernel_Project_Files))
#Bootrom_Extra_Objects    = $(addprefix $(Tornado_Config_Dir),     $(Kernel_Extra_Objects))
CM_Tornado_Config_Files  = $(addprefix $(CM_Tornado_Config_Dir),  $(Kernel_Config_Files) \
$(Kernel_Extra_Objects) $(Kernel_Bootrom_Files))
CM_Tornado_Project_Files = $(addprefix $(CM_Tornado_Project_Dir), $(Kernel_Project_Files))
CM_Floppy_Config_Files  = $(addprefix $(CM_Floppy_Config_Dir),  $(Floppy_Kernel_Config_Files) \
$(Kernel_Bootrom_Files))
CM_Floppy_Project_Files = $(addprefix $(CM_Floppy_Project_Dir), $(Floppy_Kernel_Project_Files))

# Theese are required in pattern rules due to undocumented oddities (bugs)
# in Gnu make's file path colon handling.
#ESC_Tornado_Bootrom_Files := $(subst :,\:, $(Tornado_Bootrom_Files))
ESC_Tornado_Config_Files  := $(subst :,\:, $(Tornado_Config_Files))
ESC_Tornado_Config_Dir    := $(subst :,\:, $(Tornado_Config_Dir))
ESC_Tornado_Project_Files := $(subst :,\:, $(Tornado_Project_Files))
ESC_Tornado_Project_Dir   := $(subst :,\:, $(Tornado_Project_Dir))
ESC_Tornado_Extra_Objects := $(subst :,\:, $(Tornado_Extra_Objects))
#ESC_Bootrom_Extra_Objects := $(subst :,\:, $(Bootrom_Extra_Objects))
ESC_Tornado_Target_Dir    := $(subst :,\:, $(Tornado_Target_Dir))

# Work around a bug in this version of make
ifndef $(CURDIR)
CURDIR = $(shell cd)
endif

# Startup script variables. 
FTD_ID = 1
ifeq ($(Visual), no)
Visual_Character = \# No Visual System    \#
else
Visual_Character =
endif

# Build configuration selection
configtype = distrib
ifeq ($(configtype), test)
altconfig = distrib
Extra_Project_Modules += ../../../lib/ipentiumvx5.4/libutilsip.so ../../../lib/ipentiumvx5.4/libscope.so ../../../lib/ipentiumvx5.4/profile.so ../../../lib/ipentiumvx5.4/rtitools.so
else
altconfig = test
configtype = distrib
endif

.PHONY : all clean datafiles force kernel bootfloppy installfloppy bootclean default \
         installdisk1 installdisk2 installdisk3 blankdisk insertdisk1 insertdisk2 insertdisk3\
         installkernelfiles undofloppykernel

default : JPATS.zip

all : JPATS.taz VXWORKS.taz

kernel : VXWORKS.taz

# Textually include submake files for the various categories' data files
include $(datadir)aircraft_body_cat.mak
include $(datadir)atmosphere_cat.mak
include $(datadir)auto_driver_cat.mak
include $(datadir)control_loading_if_cat.mak
include $(datadir)environmental_system_cat.mak
include $(datadir)electrical_cat.mak
include $(datadir)flight_instruments_cat.mak
include $(datadir)fuel_systems_cat.mak
include $(datadir)ios_cat.mak
include $(datadir)ios_pilot_cat.mak
include $(datadir)secondary_flight_controls_cat.mak
include $(datadir)landing_gear_system_cat.mak
include $(datadir)powerplant_cat.mak
include $(datadir)propeller_cat.mak
include $(datadir)radio_db_if_cat.mak
include $(datadir)simulated_aircraft_cat.mak
include $(datadir)visual_airport_cat.mak


# Textually include submake files for building extra C objects into the application.
include $(srcdir)ios_cat.mak
include $(srcdir)/reusable_cat/radio_db.mak



JPATS.taz : $(Jpats_Tar_Contents)
	tar -czvf JPATS.taz $(subst \,/,$^)

VXWORKS.taz : $(Kernel_Tar_Contents)
	tar -czvf VXWORKS.taz $(subst \,/,$^)

JPATS.zip VXWORKS.zip : %.zip : %.taz
	wzzip -P $@ $^

datafiles : data $(Data_Files)


data : 
	mkdir data

debug :
#	echo $(Jpats_Tar_Contents)
#	echo $(FRED)
#	echo $(Tornado_Config_Source_Dir)
#	echo $(Electrical_Data_Files)
#	echo $(C_Objects)
#	echo $(Ios_Hostcomms_Objs)
#	echo $(AR)
#	echo $(CURDIR)/cachearchlib.o
	echo $(Data_Files) done

########################################
# Rule to display all supported targets
help :
	@echo
	@echo '               Supported Targets:'
	@echo
	@echo 'default...... Build a tarfile containing the JPATS host software.'
	@echo 'kernel....... Build a tarfile containing the VxWorks kernel.'
	@echo 'all.......... Build both the kernel and host software tarfiles.'
	@echo 'installfloppy Build a set of vxWorks Host install disks.'
	@echo 'bootfloppy... Create a VxWorks bootable floppy.'
	@echo 'datafiles.... Build all the runtime data files used by the host.'
	@echo 'kernelconfig. Copy over all CMed kernel configuration files.'
	@echo 'JPATS........ Build the JPATS host software.'
	@echo 'clean........ Remove all built files and intermediate files.'
	@echo 'jpatsclean... Remove all files created for JPATS.taz.'
	@echo 'kernelclean.. Remove all files created for the VxWorks kernel.'
	@echo 'bootclean.... Remove all files created for a bootable floppy.'
	@echo 'help......... Display this message.'
	@echo ' '
	@echo '               Supported Configurations'
	@echo
	@echo 'configtype=distrib. A build that may be distributed to other systems. (default)'
	@echo 'configtype=test.... Stethescope and profiler libs linked in for testing.'

jpats_c_libraries = libioshostcomms.a libradiodb.a

libioshostcomms.a : $(Ios_Hostcomms_Objs)
	$(AR) -rcv $@ $?

libradiodb.a : $(Radio_DB_Objects)
	$(AR) -rcv $@ $?


# Rules to set the configuration for the JPATS build
$(configdir)$(configtype).stamp : $(configdir)$(altconfig).stamp
	-del *.o *.dbg *.xref *.info ada.lib unit.map
	copy $(subst /,\,$(configdir)test_packages_$(configtype).bld) \
$(subst /,\,$(configdir)test_packages.bld)
	touch $(subst /,\,$(configdir)test_packages.bld)
	touch $@

$(configdir)$(altconfig).stamp :
	touch $@

JPATS : $(srcdir)jpats.bld $(jpats_c_libraries) $(configdir)$(configtype).stamp force
	$(adamake) $<

# Pattern rule for making interpolation table object files from csv's
%.ito : %.csv
	itac -v $?

clean : kernelclean jpatsclean

jpatsclean : $(Clean_Targets)
	-del *.o *.dbg *.xref *.info ada.lib unit.map
	-del $(jpats_c_libraries)
	-del $(filter-out $(Data_Files),$(Jpats_Tar_Contents))
	-del $(Main_Data_Files)
	-rmdir data
	-del JPATS.taz
	-del $(subst /,\,$(configdir)$(configtype).stamp $(configdir)$(altconfig).stamp)
	-del $(subst /,\,$(configdir)test_packages.bld)

kernelclean : $(Kernel_Clean_Targets) bootclean
	-make -C $(Tornado_Target_Dir) -f $(Tornado_Project_Dir)Makefile clean
	-del $(subst /,\,$(Tornado_Extra_Objects))
	-del $(subst /,\,$(Tornado_Config_Files))
	-del $(subst /,\,$(Tornado_Project_Files))
	-del $(filter-out $(Data_Files),$(Kernel_Tar_Contents))
	-del VXWORKS.taz

kernelconfig : $(Tornado_Config_Files)

#
# Rules to create the vxWorks kernel
#

vxWorks_Files = vxWorks vxWorks.sym


# Copy vxWorks kernel files 
$(vxWorks_Files) : % : $(Tornado_Target_Dir)%
	copy $(subst /,\,$<) $(subst /,\,$@)

# Build the vxWorks kernel files
$(Tornado_Target_Dir)vxWorks $(Tornado_Target_Dir)vxWorks.sym : $(Tornado_Config_Files) \
$(Tornado_Project_Files) $(Tornado_Extra_Objects)
	make -C $(Tornado_Target_Dir) -f $(Tornado_Project_Dir)Makefile vxWorks \
EXTRA_MODULES="$(Extra_Project_Modules)"

# Copy latest tornado configuration files into their directories
$(ESC_Tornado_Config_Files) : $(ESC_Tornado_Config_Dir)% : $(CM_Tornado_Config_Dir)%
	copy $(subst /,\,$<) $(subst /,\,$@)

$(ESC_Tornado_Extra_Objects) : $(ESC_Tornado_Target_Dir)% : $(CM_Tornado_Config_Dir)%
	copy $(subst /,\,$<) $(subst /,\,$@)

$(ESC_Tornado_Project_Files) : $(ESC_Tornado_Project_Dir)% : $(CM_Tornado_Project_Dir)%
	copy $(subst /,\,$<) $(subst /,\,$@)

$(ESC_Tornado_Root_Dir)% :: $(Tornado_Root_Source_Dir)%
	copy $(subst /,\,$<) $(subst /,\,$@)

#
# Rule to copy needed data files over into the appropriate directories in the
# build area.
startup.scr : $(Tornado_Root_Source_Dir)startup.scr force
	@echo Building startup.scr for FTD $(FTD_ID) with $(Visual) visual.
	sed -e "s/@VISUAL@/$(Visual_Character)/g" -e "s/@FTDDES@/$(FTD_ID)/g" $(subst /,\,$<) \
> $(subst /,\,$@)

sim.cfg : $(jpatsdir)sim.cfg
	copy $(subst /,\,$<) $(subst /,\,$@)

$(ICD_Files) : % : $(ICD_Dir)%
	copy $(subst /,\,$<) $(subst /,\,$@)

###############################################
# Rules to make boot images and boot floppies
# 
###############################################
Floppy_Drive = a:
ESC_Floppy   = a\:
Boot_Files = boot.dat mkboot.o

bootfloppy : $(addprefix $(Floppy_Drive)/, bootrom.sys)
boot : $(Boot_Files)

$(Floppy_Drive)/bootrom.sys : boot.dat
	mkboot $(Floppy_Drive) $<

boot.dat : $(Tornado_Config_Dir)bootrom_uncmp
	copy $(subst /,\,$<) $(subst /,\,$@)

$(Tornado_Config_Dir)bootrom_uncmp : $(Tornado_Config_Files)
	make -C $(Tornado_Config_Dir) bootrom_uncmp

#$(ESC_Tornado_Bootrom_Files) : $(ESC_Tornado_Config_Dir)% : $(CM_Tornado_Config_Dir)%
#	copy $(subst /,\,$<) $(subst /,\,$@)

mkboot.o : $(Tornado_Config_Dir)mkboot.o
	copy $(subst /,\,$<) $(subst /,\,$@)

$(Tornado_Config_Dir)mkboot.o : $(Tornado_Config_Files) $(Tornado_Config_Dir)mkboot.c
	make -C $(Tornado_Config_Dir) $(notdir $@)

#$(ESC_Bootrom_Extra_Objects) : $(ESC_Tornado_Config_Dir)% : $(CM_Tornado_Config_Dir)%
#	copy $(subst /,\,$<) $(subst /,\,$@)

bootclean : 
	-del boot.dat
	make -C $(Tornado_Config_Dir) clean


################################################
# Rules to make the system installation disks. #
################################################
disk1files = $(addprefix $(Floppy_Drive)/, bootrom.sys flopkrnl flopkrnl.sym install.scr install.vxi)
disk2files = $(addprefix $(Floppy_Drive)/, boot.dat vxWorks.sym startup.scr)
disk3files = $(addprefix $(Floppy_Drive)/, vxWorks)
installconfigfiles = makefile config.h vxinstall.c
installprojectfiles = makefile bootfloppy.wpj 

CM_installconfigfiles = $(addprefix $(CM_Floppy_Config_Dir), $(installconfigfiles))

# Make the floppies. Since a lot of the same targets are reused, 
# multiple "make" runs are required.
installfloppy : 
	make -f $(jpatsdir)makefile jpatsdir=$(jpatsdir) installdisk1
	make -f $(jpatsdir)makefile jpatsdir=$(jpatsdir) installdisk2
	make -f $(jpatsdir)makefile jpatsdir=$(jpatsdir) installdisk3

installkernelfiles :
	-make -C $(Tornado_Config_Dir) -f $(Tornado_Config_Dir)Makefile clean
	for %f in ($(subst /,\,$(CM_installconfigfiles))) do copy %f \
$(subst /,\,$(Tornado_Config_Dir))
#	-del $(subst /,\,$(Tornado_Config_Dir)bootrom_uncmp)

$(ESC_Floppy)/install.scr : $(CM_Floppy_Data_Dir)install.scr
	copy $(subst /,\,$<) $(subst /,\,$@)

$(ESC_Floppy)/install.vxi : $(CM_Floppy_Data_Dir)install.vxi
	copy $(subst /,\,$<) $(subst /,\,$@)

# Copy over the bootfloppy's kernel files
$(ESC_Floppy)/flopkrnl : $(Floppy_Target_Dir)vxworks
	copy $(subst /,\,$<) $(subst /,\,$@)
$(ESC_Floppy)/flopkrnl.sym : $(Floppy_Target_Dir)vxworks.sym
	copy $(subst /,\,$<) $(subst /,\,$@)

# Build the vxWorks bootfloppy kernel files
$(Floppy_Target_Dir)vxworks $(Floppy_Target_Dir)vxworks.sym : $(Floppy_Config_Files) \
$(Floppy_Project_Files)
	make -C $(Floppy_Target_Dir) -f $(Floppy_Project_Dir)Makefile vxWorks

# Copy over the jpats bootrom
$(ESC_Floppy)/boot.dat : $(Tornado_Config_Dir)bootrom_uncmp
	copy $(subst /,\,$<) $(subst /,\,$@)

# Copy over JPATS's kernel files
$(ESC_Floppy)/vxWorks $(ESC_Floppy)/vxWorks.sym : $(ESC_Floppy)/% : $(Tornado_Target_Dir)%
	copy $(subst /,\,$<) $(subst /,\,$@)

# Copy over the JPATS startup script
$(ESC_Floppy)/startup.scr : startup.scr
	copy $(subst /,\,$<) $(subst /,\,$@)



undofloppykernel :
	-make -C $(Tornado_Config_Dir) -f $(Tornado_Config_Dir)Makefile clean
	-del $(subst /,\,$(addprefix $(Tornado_Config_Dir), $(installconfigfiles)))


installdisk1 : installkernelfiles insertdisk1 blankdisk $(disk1files) undofloppykernel


installdisk2 : insertdisk2 blankdisk $(disk2files)

installdisk3 : insertdisk3 blankdisk $(disk3files)


blankdisk :
	@format /Q a:

insertdisk1 :
	@echo #########################################################################
	@echo #                                                                       
	@echo # Insert a disk labeled "JPATS Host Install Disk 1" (will be formatted)
	@echo #                                                                      

insertdisk2 :
	@echo #########################################################################
	@echo #                                                                       
	@echo # Insert a disk labeled "JPATS Host Install Disk 2" (will be formatted)
	@echo #                                                                      

insertdisk3 :
	@echo #########################################################################
	@echo #                                                                       
	@echo # Insert a disk labeled "JPATS Host Install Disk 3" (will be formatted)
	@echo #                                                                      
