
WILDMIDI ?= 1
SDL ?= 2

ifeq ($(RELEASE),1)
  CFLAGS=-O2 -s -DNDEBUG
else
  CFLAGS=-ggdb3 -Og -fsanitize=address -fwrapv
endif

CFLAGS_ALL=-Wall -Wextra -Wpedantic -Wshift-overflow=2 $(CFLAGS)
LIBS=

ifeq ($(WILDMIDI),1)
  CFLAGS_ALL+=$(shell pkg-config --cflags wildmidi) -DWILDMIDI
  LIBS+=$(shell pkg-config --libs wildmidi)
endif

# subdirectory for objects
O=linux

# not too sophisticated dependency
OBJS= \
  $(O)/doomdef.o \
  $(O)/doomstat.o \
  $(O)/dstrings.o \
  $(O)/i_sound.o \
  $(O)/i_system.o \
  $(O)/i_video.o \
  $(O)/i_main.o \
  $(O)/i_net.o \
  $(O)/tables.o \
  $(O)/f_finale.o \
  $(O)/f_wipe.o \
  $(O)/d_main.o \
  $(O)/d_net.o \
  $(O)/d_items.o \
  $(O)/g_game.o \
  $(O)/m_menu.o \
  $(O)/m_misc.o \
  $(O)/m_argv.o \
  $(O)/m_bbox.o \
  $(O)/m_fixed.o \
  $(O)/m_swap.o \
  $(O)/m_cheat.o \
  $(O)/m_random.o \
  $(O)/am_map.o \
  $(O)/p_ceilng.o \
  $(O)/p_doors.o \
  $(O)/p_enemy.o \
  $(O)/p_floor.o \
  $(O)/p_inter.o \
  $(O)/p_lights.o \
  $(O)/p_map.o \
  $(O)/p_maputl.o \
  $(O)/p_plats.o \
  $(O)/p_pspr.o \
  $(O)/p_setup.o \
  $(O)/p_sight.o \
  $(O)/p_spec.o \
  $(O)/p_switch.o \
  $(O)/p_mobj.o \
  $(O)/p_telept.o \
  $(O)/p_tick.o \
  $(O)/p_saveg.o \
  $(O)/p_user.o \
  $(O)/r_bsp.o \
  $(O)/r_data.o \
  $(O)/r_draw.o \
  $(O)/r_main.o \
  $(O)/r_plane.o \
  $(O)/r_segs.o \
  $(O)/r_sky.o \
  $(O)/r_things.o \
  $(O)/w_wad.o \
  $(O)/wi_stuff.o \
  $(O)/v_video.o \
  $(O)/st_lib.o \
  $(O)/st_stuff.o \
  $(O)/hu_stuff.o \
  $(O)/hu_lib.o \
  $(O)/s_sound.o \
  $(O)/z_zone.o \
  $(O)/info.o \
  $(O)/sounds.o

ifeq ($(SDL),2)
  OBJS+= \
    $(O)/ib_sound/sdl.o \
    $(O)/ib_system/sdl.o \
    $(O)/ib_video/sdl.o

  CFLAGS_ALL+=$(shell pkg-config --cflags sdl2)
  LIBS+=$(shell pkg-config --libs sdl2)
else
  ifeq ($(SDL),1)
    OBJS+= \
      $(O)/ib_sound/sdl.o \
      $(O)/ib_system/sdl.o \
      $(O)/ib_video/sdl.o

    CFLAGS_ALL+=$(shell pkg-config --cflags sdl)
    LIBS+=$(shell pkg-config --libs sdl)
  else
    OBJS+= \
      $(O)/ib_sound/miniaudio.o \
      $(O)/ib_system/posix.o \
      $(O)/ib_video/xlib.o

    LIBS+=-lXext -lX11 -lnsl -lm -ldl -lpthread
  endif
endif

all: $(O)/linuxxdoom

clean:
	rm -f *.o *~ *.flc
	rm -f linux/*

$(O)/linuxxdoom: $(OBJS)
	$(CC) $(CFLAGS_ALL) $(LDFLAGS) $(OBJS) -o $(O)/linuxxdoom $(LIBS)

$(O)/%.o: %.c
	mkdir -p $(@D)
	$(CC) $(CFLAGS_ALL) -c $< -o $@
