#------------------------------------------------------------------------------
# Platform to build against [Choices: posix, winnt]:
#------------------------------------------------------------------------------

PLATFORM ?= posix

#------------------------------------------------------------------------------
# Dynamic link library extension [Choices: .so, .dll, .sl, ...]:
#------------------------------------------------------------------------------

DLLEXT = .so

#------------------------------------------------------------------------------
# Compiler configuration:
#------------------------------------------------------------------------------

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# For UNIX-like platforms:
# Uncomment TSYS_POSIX if your platform is not listed in include/tek/config.h
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

CC = $(CROSS_COMPILE)gcc -fpic # -DTSYS_POSIX

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# For Windows using MinGW:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# CC = $(CROSS_COMPILE)gcc -DWIN32 -DWINVER=0x0400 -D_WIN32_WINNT=0x0400
# CC += -DHAL_USE_ATOMICS # leave commented with very old versions of MinGW

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Cross compilation:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# CROSS_COMPILE =
# CROSS_COMPILE = i586-mingw32-
# CROSS_COMPILE = i686-pc-mingw32-
# CROSS_COMPILE = i686-w64-mingw32-
# EXECUTE = wine

#------------------------------------------------------------------------------
# Platform libraries:
# If you link any libraries from directories not in the system run-time
# search path, you may need to uncomment the $(CC_LD_RT) flags for those
# libraries below.
#------------------------------------------------------------------------------

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# POSIX:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

PLATFORM_LIBS = -pthread
CC_LD_RT = -Wl,-rpath,

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# HPPA, IA64 HPUX: Note that DLLEXT (see above) must be .sl
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# PLATFORM_LIBS = -D_POSIX_C_SOURCE=199506L -lpthread
# CC_LD_RT = -Wl,+s,+b,
# for IA64:
# CC_LD_RT = -Wl,+b,

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Solaris:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# CC_LD_RT = -R

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Mac OS X: See also below MODCFLAGS
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# PLATFORM_LIBS =
# CC_LD_RT = -Wl,-rpath,

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# NetBSD:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# CC_LD_RT = -Wl,-rpath=/usr/X11R7/lib:

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Windows:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# PLATFORM_LIBS = -lwinmm
# LUA_LIBS = -L$(BASEDIR) -llua51 # -llua5.2

#------------------------------------------------------------------------------
# TEKlib features:
# ENABLE_LAZY_SINGLETON - multithreaded lazy creation of a TEKlib singleton,
# allowing thread rendezvous (this breaks 100% ROM-ability)
#------------------------------------------------------------------------------

TEKLIB_DEFS = -DENABLE_LAZY_SINGLETON

#------------------------------------------------------------------------------
# Lua version, prefix, include and installation paths:
# Installation is not always required, e.g. x11 and windows can do without.
# When adjusting the Lua version, see also below for include paths
#------------------------------------------------------------------------------

PREFIX ?= /usr/local
LUAVER ?= 5.1

LUA_DIR = $(PREFIX)
LUA_INCDIR = $(LUA_DIR)/include
LUA_DEFS = -I$(LUA_INCDIR)
# other known paths - better comment out what is inappropriate:
LUA_DEFS += -I/usr/include/lua$(LUAVER)
LUA_DEFS += -I/usr/local/include/lua51

LUA_LIB = $(PREFIX)/lib/lua/$(LUAVER)
LUA_SHARE = $(PREFIX)/share/lua/$(LUAVER)
SYS_LUA_LIB = $(PREFIX)/lib/lua/$(LUAVER)
SYS_LUA_SHARE = $(PREFIX)/share/lua/$(LUAVER)

#------------------------------------------------------------------------------
# Build paths:
#------------------------------------------------------------------------------

BASEDIR ?= .
INCDIR = $(BASEDIR)/include
LIBDIR = $(BASEDIR)/lib/$(PLATFORM)
OBJDIR = build/$(PLATFORM)
BINDIR = $(BASEDIR)/bin
MODDIR = $(BINDIR)/mod

#------------------------------------------------------------------------------
# Compiler flags:
#------------------------------------------------------------------------------

DEBUG = -DTDEBUG=5 -g # TDEBUG: the lower, the more verbose. 5 = WARN
WARN = -Wall -Wextra -Wno-unused-parameter -Wno-unused-function -Wno-long-long
OPT = -O2 -fno-strict-aliasing
INCL = -I. -Iinclude -I$(INCDIR)
LIBCFLAGS = $(DEBUG) $(WARN) $(OPT) $(INCL) $(EXTRADEFS) $(CPPFLAGS) $(CFLAGS)
MODCFLAGS = -shared -L $(LIBDIR) $(LDFLAGS)
# For Mac OS X:
# MODCFLAGS = -bundle -undefined dynamic_lookup -L $(LIBDIR) $(LDFLAGS)
BINCFLAGS = $(DEBUG) $(WARN) $(OPT) $(INCL) $(EXTRADEFS) $(LDFLAGS)

#------------------------------------------------------------------------------
# Build tools:
#------------------------------------------------------------------------------

AR = $(CROSS_COMPILE)ar rcu
RM = rm -f
RMDIR = rm -rf
MKDIR = mkdir -p
ECHO = echo
INSTALL_B = install
INSTALL_F = install
INSTALL_D = install -d
INSTALL_S = install -s
STRIP = $(CROSS_COMPILE)strip

#------------------------------------------------------------------------------
# Predefined targets:
#------------------------------------------------------------------------------

default-help:
	@echo "==============================================================================="
	@echo "Default build targets:"
	@echo "-------------------------------------------------------------------------------"
	@echo "all ..................... build everything that is needed"
	@echo "libs .................... build libraries"
	@echo "modules ................. build shared objects"
	@echo "install ................. install modules globally"
	@echo "clean ................... delete temporary files"
	@echo "help .................... show these and all extra targets for this Makefile"
	@echo "==============================================================================="

FORCE:

$(BINDIR):
	-$(MKDIR) $@
$(MODDIR):
	-$(MKDIR) $@
$(LIBDIR):
	-$(MKDIR) $@
$(OBJDIR):
	-$(MKDIR) $@

#------------------------------------------------------------------------------
# Tests:
#------------------------------------------------------------------------------

run:
	lua bin/webserver.lua localhost:8080
