## FreeBASIC compiler #####################################

    FBC := fbc

###########################################################################################


## flags  
#################################################################################


llflags += -d ll_main=-1
llflags += -maxerr inf  



## REMOVE THIS IF YOU HAVE A COMPILER VERSION LESS THAN .17

  llflags += -lang deprecated

###########################################################

ifdef full

    ll_audio = 1

endif

ifdef linux

    llflags += -target linux

endif

ifdef dos

    llflags += -target dos -r

endif

ifdef fulldebug

    debug = 1
    exx_err = 1
    
    -d LL_OBJECTLOADPROGRESS=-1
    -d LL_LOGMAPLOADPROGRESS=-1
    -d LL_LOGROOMCHANGE=-1
    -d LL_LOGRoomEnemySetup=-1

endif

ifdef err

    llflags += -e

endif

ifdef ex_err

    llflags += -ex

endif

ifdef exx_err

    llflags += -exx

endif

ifdef debug

    llflags += -g

endif

ifdef trace

    llflags += -d __trace__=-1

endif

ifdef profile

    llflags += -profile

endif
    
ifdef ll_audio

    llflags += -d ll_audio=-1

endif
    
ifndef console

  ifndef debug

    ifndef exx_err

      ifndef ex_err

        ifndef err

          ifndef linux
            
            ifndef dos
              
              llflags += -s gui
              
            endif
            
          endif
          
        endif
      
      endif
      
    endif
    
  endif

endif
    

###########################################################################################


## headers...
###########################################################################################

ll_headers += inc/audio.bi
ll_headers += inc/constants.bi
ll_headers += inc/engine.bi
ll_headers += inc/gfx.bi
ll_headers += inc/ll.bi
ll_headers += inc/lynn.bi
ll_headers += inc/macros.bi
ll_headers += inc/map.bi
ll_headers += inc/object.bi
ll_headers += inc/sequence.bi

ifdef ll_audio
  ll_headers += inc/bass_ll.bi
  
endif

all_headers += $(ll_headers)

###########################################################################################


## set up targets
###########################################################################################
    
ifdef linux

  target_exe := ll
  resource_file := 
  
else

  target_exe := ll.exe
  
  ifndef dos
    
    resource_file := ll.rc
    
  endif
  
endif

obj_path := obj

ll_sources += engine--audio.bas
ll_sources += engine--controls.bas      
ll_sources += engine--debug.bas      
ll_sources += engine--gfx.bas           
  ll_sources += engine--gfx--box.bas           
  ll_sources += engine--gfx--object.bas           
ll_sources += engine--ll.bas            
ll_sources += engine--lynn.bas            
ll_sources += engine--obj.bas            
ll_sources += engine--obj--load.bas            
ll_sources += engine--seq.bas            

ll_sources += object--boss.bas          
ll_sources += object--etc.bas           
ll_sources += object--gfx.bas           
  ll_sources += object--gfx--animation.bas 
  ll_sources += object--gfx--palette.bas   
ll_sources += object--modification.bas  
ll_sources += object--move.bas          
ll_sources += object--sound.bas         
ll_sources += object--states.bas        
ll_sources += object--time.bas          

ll_sources += store--image.bas          
ll_sources += store--object.bas          

ll_sources += struct--box.bas            
ll_sources += struct--engine.bas         
ll_sources += struct--image.bas          
ll_sources += struct--lynn.bas           
ll_sources += struct--map.bas            
ll_sources += struct--object.bas         
ll_sources += struct--seq.bas            




ll_objects := $(patsubst %.bas,$(obj_path)/%.o,$(ll_sources)) 


#########################################################################################


lib_sources += err.bas

lib_sources += event.bas

lib_sources += global.bas

lib_sources += list_mem.bas 
lib_sources += list_file.bas 
lib_sources += list_integer.bas 
lib_sources += list_string.bas 
lib_sources += list_anyptr.bas

lib_sources += vector.bas

lib_sources += util.bas

lib_sources += vfile.bas

lib_sources += xml.bas

lib_sources += zfb.bas
lib_sources += lzw.bas


lib_objects := $(patsubst %.bas,$(obj_path)/%.o,$(lib_sources)) 

###########################################################################################


## compile
###########################################################################################

$(target_exe): src/ll.bas $(ll_objects) $(lib_objects) $(ll_headers)
	$(FBC) $(llflags) -l z src/ll.bas $(lib_objects) $(ll_objects) -x $(target_exe) etc/$(resource_file)


$(obj_path)/err.o : ../err/err.bas 
	$(FBC) $(llflags) -c $< -o $@ 

$(obj_path)/event.o : ../event/event.bas 
	$(FBC) $(llflags) -c $< -o $@ 

$(obj_path)/global.o : ../global/global.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/list_mem.o : ../list/list_mem.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/list_file.o : ../list/list_file.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/list_integer.o : ../list/list_integer.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/list_string.o : ../list/list_string.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/list_anyptr.o : ../list/list_anyptr.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/vector.o : ../math/vector.bas 
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/util.o : ../util/util.bas 
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/vfile.o : ../vfile/vfile.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/xml.o : ../xml/xml.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/lzw.o : ../lzw/lzw.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
 $(obj_path)/zfb.o : ../zlib/zfb.bas
	$(FBC) $(llflags) -c $< -o $@ 
    
$(obj_path)/%.o : src/%.bas $(ll_headers)
	$(FBC) $(llflags) -c $< -o $@ 

###########################################################################################

## Clean up
###########################################################################################

.PHONY : mostlyclean
mostlyclean:
	rm -f $(ll_objects) $(patsubst %.o,%.asm,$(ll_objects)) $(lib_objects) $(patsubst %.o,%.asm,$(lib_objects)) 

.PHONY : clean
clean: mostlyclean
	rm -f $(target_exe)     

