# project LaserBoy
# James Lehman
# laserboy.org

RM       = rm -f
STRIP    = strip -s -v
CPP      = g++
LIBS     = -L/usr/local/lib -lSDL -lboost_filesystem -lboost_system -lpthread

CPPFLAGS = -std=c++17 \
           -O3 \
           -msse2 \
           -mfpmath=sse \
           -Wall \
           -Wextra \
           -frounding-math \
           -fsignaling-nans \
           -Wno-unused-parameter \
           -Wno-implicit-fallthrough \
           -Wno-missing-field-initializers \
           -Wno-misleading-indentation \
           -Wno-unused-but-set-variable \
           -Wno-mismatched-new-delete \
           -fexpensive-optimizations \
           -static \
           $(INC) \
           $(LIB) \
           $(LIBS)

HEADERS   = LaserBoy_includes.hpp \
            LaserBoy_macros.hpp \
            LaserBoy_common.hpp \
            LaserBoy_oscillator.hpp \
            LaserBoy_utility.hpp \
            LaserBoy_font.hpp \
            LaserBoy_bmp.hpp \
            LaserBoy_3D_short.hpp \
            LaserBoy_color.hpp \
            LaserBoy_vertex.hpp \
            LaserBoy_segment.hpp \
            LaserBoy_3D_double.hpp \
            LaserBoy_real_vertex.hpp \
            LaserBoy_real_segment.hpp \
            LaserBoy_real_segment_set.hpp \
            LaserBoy_ild_header.hpp \
            LaserBoy_frame.hpp \
            LaserBoy_frame_set.hpp \
            LaserBoy_palette.hpp \
            LaserBoy_palette_set.hpp \
            LaserBoy_wav.hpp \
            LaserBoy_SDL_GUI.hpp \
            LaserBoy_space.hpp \
            LaserBoy_TUI.hpp

OBJ      = ../build/LaserBoy.obj \
           ../build/LaserBoy_common.obj \
           ../build/LaserBoy_oscillator.obj \
           ../build/LaserBoy_frame.obj \
           ../build/LaserBoy_effects_frame.obj \
           ../build/LaserBoy_effects_selected_frames.obj \
           ../build/LaserBoy_frame_set.obj \
           ../build/LaserBoy_effects_frame_set.obj \
           ../build/LaserBoy_ild_header.obj \
           ../build/LaserBoy_segment.obj \
           ../build/LaserBoy_palette.obj \
           ../build/LaserBoy_palette_set.obj \
           ../build/LaserBoy_real_segment.obj \
           ../build/LaserBoy_real_segment_set.obj \
           ../build/LaserBoy_wav.obj \
           ../build/LaserBoy_space.obj \
           ../build/LaserBoy_TUI.obj \
           ../build/LaserBoy_SDL_GUI.obj \
           ../build/LaserBoy_bmp.obj \
           ../build/LaserBoy_font.obj

BIN      = ../LaserBoy_sdl1

all: $(BIN) strip

strip:
	$(STRIP) $(BIN)

clean:
	$(RM) $(OBJ) $(BIN)

$(BIN): $(OBJ)
	$(CPP) $(OBJ) -o $(BIN) $(LIB) $(LIBS)

../build/LaserBoy.obj: LaserBoy.cpp $(HEADERS)
	$(CPP) -c LaserBoy.cpp -o ../build/LaserBoy.obj $(CPPFLAGS)

../build/LaserBoy_SDL_GUI.obj: LaserBoy_SDL_GUI.cpp $(HEADERS)
	$(CPP) -c LaserBoy_SDL_GUI.cpp -o ../build/LaserBoy_SDL_GUI.obj $(CPPFLAGS)

../build/LaserBoy_TUI.obj: LaserBoy_TUI.cpp $(HEADERS)
	$(CPP) -c LaserBoy_TUI.cpp -o ../build/LaserBoy_TUI.obj $(CPPFLAGS)

../build/LaserBoy_space.obj: LaserBoy_space.cpp $(HEADERS)
	$(CPP) -c LaserBoy_space.cpp -o ../build/LaserBoy_space.obj $(CPPFLAGS)

../build/LaserBoy_effects_frame_set.obj: LaserBoy_effects_frame_set.cpp $(HEADERS)
	$(CPP) -c LaserBoy_effects_frame_set.cpp -o ../build/LaserBoy_effects_frame_set.obj $(CPPFLAGS)

../build/LaserBoy_effects_selected_frames.obj: LaserBoy_effects_selected_frames.cpp $(HEADERS)
	$(CPP) -c LaserBoy_effects_selected_frames.cpp -o ../build/LaserBoy_effects_selected_frames.obj $(CPPFLAGS)

../build/LaserBoy_effects_frame.obj: LaserBoy_effects_frame.cpp $(HEADERS)
	$(CPP) -c LaserBoy_effects_frame.cpp -o ../build/LaserBoy_effects_frame.obj $(CPPFLAGS)

../build/LaserBoy_palette_set.obj: LaserBoy_palette_set.cpp $(HEADERS)
	$(CPP) -c LaserBoy_palette_set.cpp -o ../build/LaserBoy_palette_set.obj $(CPPFLAGS)

../build/LaserBoy_palette.obj: LaserBoy_palette.cpp $(HEADERS)
	$(CPP) -c LaserBoy_palette.cpp -o ../build/LaserBoy_palette.obj $(CPPFLAGS)

../build/LaserBoy_frame_set.obj: LaserBoy_frame_set.cpp $(HEADERS)
	$(CPP) -c LaserBoy_frame_set.cpp -o ../build/LaserBoy_frame_set.obj $(CPPFLAGS)

../build/LaserBoy_frame.obj: LaserBoy_frame.cpp $(HEADERS)
	$(CPP) -c LaserBoy_frame.cpp -o ../build/LaserBoy_frame.obj $(CPPFLAGS)

../build/LaserBoy_ild_header.obj: LaserBoy_ild_header.cpp LaserBoy_ild_header.hpp LaserBoy_common.hpp LaserBoy_macros.hpp LaserBoy_includes.hpp
	$(CPP) -c LaserBoy_ild_header.cpp -o ../build/LaserBoy_ild_header.obj $(CPPFLAGS)

../build/LaserBoy_bmp.obj: LaserBoy_bmp.cpp LaserBoy_bmp.hpp LaserBoy_font.hpp LaserBoy_color.hpp LaserBoy_common.hpp LaserBoy_macros.hpp LaserBoy_includes.hpp
	$(CPP) -c LaserBoy_bmp.cpp -o ../build/LaserBoy_bmp.obj $(CPPFLAGS)

../build/LaserBoy_font.obj: LaserBoy_font.cpp LaserBoy_font.hpp
	$(CPP) -c LaserBoy_font.cpp -o ../build/LaserBoy_font.obj $(CPPFLAGS)

../build/LaserBoy_segment.obj: LaserBoy_segment.cpp $(HEADERS)
	$(CPP) -c LaserBoy_segment.cpp -o ../build/LaserBoy_segment.obj $(CPPFLAGS)

../build/LaserBoy_real_segment.obj: LaserBoy_real_segment.cpp $(HEADERS)
	$(CPP) -c LaserBoy_real_segment.cpp -o ../build/LaserBoy_real_segment.obj $(CPPFLAGS)

../build/LaserBoy_real_segment_set.obj: LaserBoy_real_segment_set.cpp $(HEADERS)
	$(CPP) -c LaserBoy_real_segment_set.cpp -o ../build/LaserBoy_real_segment_set.obj $(CPPFLAGS)

../build/LaserBoy_wav.obj: LaserBoy_wav.cpp LaserBoy_wav.hpp LaserBoy_common.hpp LaserBoy_macros.hpp LaserBoy_includes.hpp
	$(CPP) -c LaserBoy_wav.cpp -o ../build/LaserBoy_wav.obj $(CPPFLAGS)

../build/LaserBoy_oscillator.obj: LaserBoy_oscillator.cpp LaserBoy_oscillator.hpp LaserBoy_common.hpp LaserBoy_includes.hpp
	$(CPP) -c LaserBoy_oscillator.cpp -o ../build/LaserBoy_oscillator.obj $(CPPFLAGS)

../build/LaserBoy_common.obj: LaserBoy_common.cpp LaserBoy_common.hpp LaserBoy_macros.hpp LaserBoy_includes.hpp
	$(CPP) -c LaserBoy_common.cpp -o ../build/LaserBoy_common.obj $(CPPFLAGS)
