#
# Makefile to create all other makefiles for the project.
#
# CAREFUL: This file has to remain portable across Unix make and Windows nmake!
#

# The vars ROOT, MAKEMAKE and EXT have to be specified externally, on the 
# 'make' command line.

#ROOT=d:/home/IPv6SuiteWithINET
#MAKEMAKE=opp_nmakemake
#EXT=.vc

# for compiled-in NED files, remove -N from OPTS, and switch to the longer 
# version of ALL_MODEL_OPTS below with omnetpp-3.2 or newer, if you want to 
# build windows dlls, add this to OPTS below: -PINET_API
ROOT=$(OVROOT)/../INET-20061020-OverSim-2
OPTS=-N -f -b $(OVROOT) -c $(ROOT)/inetconfig$(EXT) -I. -ltkenv -lcmdenv -lgmp

# OPTS for Nokia 770 with compiled-in NED files
#OPTS=-f -b $(OVROOT) -c $(ROOT)/inetconfig$(EXT) -I. -lcmdenv -lgmp


PARSIM_INCLUDES=\
  -I$(OVROOT)/../omnetpp-3.3/src/sim/parsim

CONTRACT_INCLUDES=\
  -I$(ROOT)/Transport/Contract \
  -I$(ROOT)/Network/Contract \
  -I$(ROOT)/NetworkInterfaces/Contract \
  -I$(ROOT)/Base \
  -I$(ROOT)/Util \
  -I$(ROOT)/World

ALL_INET_INCLUDES= \
  -I$(ROOT)/Network/IPv4 \
  -I$(ROOT)/Network/AutoRouting \
  -I$(ROOT)/Network/Queue \
  -I$(ROOT)/Transport/TCP \
  -I$(ROOT)/Transport/TCP/flavours \
  -I$(ROOT)/Transport/TCP/queues \
  -I$(ROOT)/Transport/UDP \
  -I$(ROOT)/NetworkInterfaces \
  -I$(ROOT)/Network/ARP \
  -I$(ROOT)/NetworkInterfaces/Ethernet \
  -I$(ROOT)/NetworkInterfaces/EtherSwitch \
  -I$(ROOT)/NetworkInterfaces/PPP \
  -I$(ROOT)/Applications/Generic \
  -I$(ROOT)/Applications/Ethernet \
  -I$(ROOT)/Applications/TCPApp \
  -I$(ROOT)/Applications/UDPApp \
  -I$(ROOT)/Applications/PingApp \
  -I$(ROOT)/Network/TED \
  -I$(ROOT)/Nodes/INET 
# -I$(ROOT)/Applications/BRModel

ALL_MPLS_INCLUDES=\
  -I$(ROOT)/Network/MPLS \
  -I$(ROOT)/Network/LDP \
  -I$(ROOT)/Network/RSVP_TE \
  -I$(ROOT)/Nodes/MPLS

ALL_IPv6_INCLUDES=\
  -I$(ROOT)/Network/IPv6 \
  -I$(ROOT)/Network/ICMPv6 \
  -I$(ROOT)/Nodes/IPv6 
#  -I$(ROOT)/Network/MIPv6 
#  -I$(ROOT)/Network/HMIPv6 
#  -I$(ROOT)/PHY 
#  -I$(ROOT)/Mobility 
#  -I$(ROOT)/Mobility/adHocSim
#  -I$(ROOT)/NetworkInterfaces/Ethernet6 
#  -I$(ROOT)/NetworkInterfaces/PPP6 
#  -I$(ROOT)/NetworkInterfaces/Wireless 
#  -I$(ROOT)/NetworkInterfaces/DualWireless 
#  -I$(ROOT)/Util/XML

ALL_MF_INCLUDES=\
#  -I$(ROOT)/Mobility \
  -I$(ROOT)/NetworkInterfaces/MFCore \
  -I$(ROOT)/NetworkInterfaces/MF80211 \
  -I$(ROOT)/NetworkInterfaces/MF80211/macLayer \
  -I$(ROOT)/NetworkInterfaces/MF80211/phyLayer \
  -I$(ROOT)/NetworkInterfaces/MF80211/phyLayer/decider \
  -I$(ROOT)/NetworkInterfaces/MF80211/phyLayer/snrEval 

ALL_OVERSIM_INCLUDES=\
  -I$(OVROOT)/Common \
  -I$(OVROOT)/Underlay \
  -I$(OVROOT)/Underlay/IPv4Underlay \
  -I$(OVROOT)/Underlay/SimpleUnderlay \
  -I$(OVROOT)/Underlay/SingleHostUnderlay \
  -I$(OVROOT)/Overlay \
  -I$(OVROOT)/Overlay/Chord \
  -I$(OVROOT)/Overlay/Gia \
  -I$(OVROOT)/Applications \
  -I$(OVROOT)/Applications/KBRTestApp \
  -I$(OVROOT)/Applications/RealWorldTestApp
 
ALL_INCLUDES=\
  $(CONTRACT_INCLUDES) \
  $(ALL_INET_INCLUDES) \
  $(ALL_MPLS_INCLUDES) \
  $(ALL_IPv6_INCLUDES) \
  $(ALL_MF_INCLUDES)   \
  $(ALL_OVERSIM_INCLUDES)

all:
	$(MAKEMAKE) $(OPTS) -n -r -X docs -X Simulations -X Tests -X Tier2

	cd bin && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -w -o OverSim

	cd Common && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) $(PARSIM_INCLUDES) -n

	cd Underlay && $(MAKEMAKE) $(OPTS) -n -r
	cd Underlay/IPv4Underlay && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n
	cd Underlay/SimpleUnderlay && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n
	cd Underlay/SingleHostUnderlay && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n
  
	cd Overlay && $(MAKEMAKE) $(OPTS) -X Vast -n -r
	cd Overlay/Chord && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n
	cd Overlay/Gia && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n
#	cd Overlay/Kademlia && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n
	
	cd Applications && $(MAKEMAKE) $(OPTS) -X SimpleClient -n -r
	cd Applications/KBRTestApp && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n 
#	cd Applications/DHT && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n
	cd Applications/GIASearchApp && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n
	cd Applications/RealWorldTestApp && $(MAKEMAKE) $(OPTS) $(ALL_INCLUDES) -n

