iup-stack/im/tecmakewin.mak

1939 lines
41 KiB
Makefile
Raw Normal View History

2023-02-20 16:44:45 +00:00
#-------------------------------------------------------------------------#
#- Tecmake (Windows Version) -#
#- Generic Makefile to build applications and libraries at TeCGraf -#
#- The user makefile usually has the name "config.mak". -#
#-------------------------------------------------------------------------#
#---------------------------------#
# Tecmake Version
VERSION = 4.21
#---------------------------------#
# First target
.PHONY: build
build: tecmake
#---------------------------------#
# Location of this file
TECMAKE = $(TECMAKE_HOME)/tecmakewin.mak
#---------------------------------#
# System Variables Definitions
# If tecmake.bat is not used,
# then at least define main system variables.
WIN32UNAMES = vc16 vc15 vc14 vc12 vc11 vc10 vc9 vc8 vc7 vc6 owc1 bc55 bc56 bc6 gcc3 gcc4 gcc7 mingw3 mingw4 mingw6 dllw4 dllw6 dllg4 dllg7 dll dll7 dll8 dll9 dll10 dll11 dll12 dll14 dll15 dll16
WIN64UNAMES = vc16_64 vc15_64 vc14_64 vc12_64 vc11_64 vc10_64 vc9_64 vc8_64 dll8_64 dll9_64 dll10_64 dll11_64 dll12_64 dll14_64 dll15_64 dll16_64 gcc4_64 gcc7_64 mingw4_64 dllw4_64 mingw6_64 dllw6_64 dllg4_64 dllg7_64
ifdef TEC_UNAME
ifneq ($(findstring $(TEC_UNAME), $(WIN32UNAMES)), )
TEC_WIN32 = Yes
else
ifneq ($(findstring $(TEC_UNAME), $(WIN64UNAMES)), )
TEC_WIN64 = Yes
endif
endif
endif
ifdef TEC_WIN64
TEC_SYSNAME=Win64
TEC_SYSARCH=x64
# This is not working, because make from Cygwin returns x86 even when running in AMD64.
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
# Define this if compiling for 64-bits in a 32bits environment
#USE_X86_CL64=XXX
endif
else
TEC_SYSNAME=Win32
TEC_SYSARCH=x86
endif
#---------------------------------#
# System Info
.PHONY: sysinfo
sysinfo:
@echo ''; echo 'Tecmake: System Info'
@echo 'TEC_SYSNAME = $(TEC_SYSNAME)'
@echo 'TEC_SYSARCH = $(TEC_SYSARCH)'
@echo 'TEC_UNAME = $(TEC_UNAME)'
@echo 'TEC_CC = $(TEC_CC)'; echo ''
#---------------------------------#
# Known platforms
UNAMES = $(WIN32UNAMES) $(WIN64UNAMES)
#---------------------------------#
# Directories Definitions
PROJDIR = ..
SRCDIR = .
OBJROOT = $(PROJDIR)/obj
# ---------------------------------------------------------
# Byte Order and Word Size
ifneq ($(findstring x86, $(TEC_SYSARCH)), )
TEC_BYTEORDER = TEC_LITTLEENDIAN
else
ifeq ($(TEC_SYSARCH), arm)
TEC_BYTEORDER = TEC_LITTLEENDIAN
else
TEC_BYTEORDER = TEC_BIGENDIAN
endif
endif
ifeq ($(TEC_SYSARCH), x64)
TEC_BYTEORDER = TEC_LITTLEENDIAN
TEC_WORDSIZE = TEC_64
else
TEC_WORDSIZE = TEC_32
endif
# Itanium Exception
ifeq ($(TEC_SYSARCH), ia64)
TEC_BYTEORDER = TEC_LITTLEENDIAN
TEC_WORDSIZE = TEC_64
endif
#---------------------------------#
# Tools
SHELL = bash
SLASH = slash_parser
# Packed Lua script
LUAPRE = "$(TECMAKE_PATH)"/luapre.lua
#---------------------------------#
# Defaults
APPTYPE = windows
INCLUDES =
LIBS =
LIB =
#---------------------------------#
# User Configuration File
# Everything before this point can be overwritten
# in the configuration file
MAKENAME = config.mak
ifdef MF
MAKENAME = $(MF).mak
endif
###################
include $(MAKENAME)
###################
#---------------------------------#
# Definitions of public variables
ifdef LIBNAME
TARGETNAME = $(LIBNAME)
MAKETYPE = LIB
else
TARGETNAME = $(APPNAME)
MAKETYPE = APP
endif
ifndef TARGETNAME
$(error LIBNAME nor APPNAME defined in $(MAKENAME))
endif
PROJNAME ?= $(TARGETNAME)
ifneq ($(PROJNAME), $(TARGETNAME))
OBJROOT := $(OBJROOT)/$(TARGETNAME)
endif
ifneq ($(findstring dll, $(TEC_UNAME)), )
ifneq ($(MAKETYPE), APP)
MAKETYPE = DLL
DEF_FILE ?= $(TARGETNAME).def
DEF_FILE := $(SRCDIR)/$(DEF_FILE)
endif
endif
DEPEND := $(TARGETNAME).wdep
ifdef DEPENDDIR
DEPEND := $(DEPENDDIR)/$(TARGETNAME).wdep
endif
# ---------------------------------------------------------
# LO, LOH and LH folders
SRCLUADIR ?= $(SRCDIR)
ifdef NO_LUAOBJECT
LHDIR ?= $(SRCLUADIR)
else
LOHDIR ?= $(SRCLUADIR)
endif
ifdef USE_LOH_SUBDIR
ifeq ($(TEC_BYTEORDER), TEC_BIGENDIAN)
ifeq ($(TEC_WORDSIZE), TEC_64)
LOH_SUBDIR ?= be64
else
LOH_SUBDIR ?= be32
endif
else
ifeq ($(TEC_WORDSIZE), TEC_64)
# longs in 64-bits Windows are 32 bits!!!
LOH_SUBDIR ?= le64w
else
LOH_SUBDIR ?= le32
endif
endif
LOHDIR := $(LOHDIR)/$(LOH_SUBDIR)
INCLUDES += $(LOHDIR)
else
ifeq ($(TEC_BYTEORDER), TEC_BIGENDIAN)
ifeq ($(TEC_WORDSIZE), TEC_64)
LO_SUFFIX ?= _be64
else
LO_SUFFIX ?= _be32
endif
else
ifeq ($(TEC_WORDSIZE), TEC_64)
# longs in 64-bits Windows are 32 bits!!!
LO_SUFFIX ?= _le64w
else
LO_SUFFIX ?=
endif
endif
endif
ifdef USE_LH_SUBDIR
INCLUDES += $(LHDIR)
endif
#---------------------------------#
# Main Rule - Build Everything that it is necessary
.PHONY: tecmake
ifeq ($(MAKETYPE), APP)
tecmake: print-start system-check directories application scripts
else
ifeq ($(MAKETYPE), DLL)
tecmake: print-start system-check directories dynamic-lib
else
tecmake: print-start system-check directories static-lib
endif
endif
.PHONY: print-start
print-start:
@echo ''; echo 'Tecmake: Starting [ $(TARGETNAME):$(TEC_UNAME) ]'
#---------------------------------#
# Definitions of public variables
ifeq ($(MAKETYPE), APP)
TARGETROOT ?= $(PROJDIR)/bin
else
TARGETROOT ?= $(PROJDIR)/lib
endif
ifeq ($(MAKETYPE), APP)
TEC_UNAME_DIR ?= $(TEC_SYSNAME)
else
TEC_UNAME_DIR ?= $(TEC_UNAME)
endif
TEC_UNAME_LIB_DIR ?= $(TEC_UNAME)
ifdef DBG
OPT:=
ifdef DBG_LIB_DIR
TEC_UNAME_LIB_DIR := $(TEC_UNAME_LIB_DIR)d
endif
ifdef DBG_DIR
TEC_UNAME_DIR := $(TEC_UNAME_DIR)d
endif
endif
# Suffix for Lua modules
ifdef USE_LUA
LIBLUA_SFX := 3
endif
ifdef USE_LUA4
LIBLUA_SFX := 4
endif
ifdef USE_LUA5
LIBLUA_SFX := 5
endif
ifdef USE_LUA50
LIBLUA_SFX := 5
endif
ifdef USE_LUA51
LIBLUA_SFX := 51
endif
ifdef USE_LUA52
LIBLUA_SFX := 52
endif
ifdef USE_LUA53
LIBLUA_SFX := 53
endif
ifdef USE_LUA54
LIBLUA_SFX := 54
endif
ifdef USE_OLDLIBLUA
TEC_UNAME_LIBLUA_DIR ?= $(TEC_UNAME_LIB_DIR)
else
TEC_UNAME_LIBLUA_DIR ?= $(TEC_UNAME_LIB_DIR)/Lua$(LIBLUA_SFX)
endif
# Subfolder for Lua Modules
ifdef LUAMOD_DIR
TEC_UNAME_DIR := $(TEC_UNAME_DIR)/Lua$(LIBLUA_SFX)
endif
OBJDIR := $(OBJROOT)/$(TEC_UNAME_DIR)
TARGETDIR := $(TARGETROOT)/$(TEC_UNAME_DIR)
TARGETEXE := $(TARGETDIR)/$(TARGETNAME).exe
TARGETDLL := $(TARGETDIR)/$(TARGETNAME).dll
TARGETLIB := $(TARGETDIR)/$(TARGETNAME).lib
ifneq ($(findstring gcc, $(TEC_UNAME)), )
TARGETLIB := $(TARGETDIR)/lib$(TARGETNAME).a
endif
ifneq ($(findstring mingw, $(TEC_UNAME)), )
TARGETLIB := $(TARGETDIR)/lib$(TARGETNAME).a
endif
ifneq ($(findstring dllg, $(TEC_UNAME)), )
TARGETLIB := $(TARGETDIR)/lib$(TARGETNAME).dll.a
endif
ifneq ($(findstring dllw, $(TEC_UNAME)), )
TARGETLIB := $(TARGETDIR)/lib$(TARGETNAME).a
endif
ifdef NO_ECHO
ECHO:=@
endif
#---------------------------------#
# Platform/Compiler dependend parameters
STDDEFS = -DTEC_UNAME=$(TEC_UNAME) -DTEC_SYSNAME=$(TEC_SYSNAME) -D$(TEC_BYTEORDER) -D$(TEC_WORDSIZE) -DWIN32
STDLIB = kernel32 user32 gdi32 winspool comdlg32 advapi32 shell32 uuid oleaut32 ole32 comctl32
#Compilers
VC6 ?= x:/lng/vc6
VC7 ?= x:/lng/vc7
VC8 ?= x:/lng/vc8
VC9 ?= x:/lng/vc9
VC10 ?= x:/lng/vc10
VC11 ?= x:/lng/vc11
VC12 ?= x:/lng/vc12
VC14 ?= x:/lng/vc14
VC15 ?= x:/lng/vc15
VC16 ?= x:/lng/vc16
OWC1 ?= x:/lng/owc1
BC55 ?= x:/lng/bc55
BC56 ?= x:/lng/cbuilderx
BC6 ?= x:/lng/bc6
MINGW3 ?= x:/lng/mingw3
MINGW4 ?= x:/lng/mingw4
MINGW4_64 ?= x:/lng/mingw4_64
MINGW6 ?= x:/lng/mingw6
MINGW6_64 ?= x:/lng/mingw6_64
# The default location is in the PATH
#GCC3 ?= x:/lng/gcc3
#GCC4 ?= x:/lng/gcc4
#Tools
QT ?= x:/lng/qt
ifdef USE_GTK3
GTKSFX:=3
GTK3 ?= x:/lng/gtk3
GTK := $(GTK3)
else
GTKSFX:=2
GTK ?= x:/lng/gtk
endif
ifdef USE_IUPWEB
override USE_ATL = Yes
endif
GLUT ?= x:/lng/glut
GLUT_LIB ?= $(GLUT)/lib
GLUT_INC ?= $(GLUT)/include
OBJEXT = obj
LIBEXT = lib
ifneq ($(findstring _64, $(TEC_UNAME)), )
BUILD64 = Yes
endif
ifneq ($(findstring dll, $(TEC_UNAME)), )
USE_DLL = Yes
endif
##########################################################################
ifeq "$(TEC_UNAME)" "vc6"
COMPILER = $(VC6)
endif
ifeq "$(TEC_UNAME)" "vc7"
COMPILER = $(VC7)
endif
ifeq "$(TEC_UNAME)" "vc8"
COMPILER = $(VC8)
endif
ifeq "$(TEC_UNAME)" "vc8_64"
COMPILER = $(VC8)
SDKLIBBIN = /amd64
endif
ifneq ($(findstring vc9, $(TEC_UNAME)), )
COMPILER = $(VC9)
endif
ifneq ($(findstring vc10, $(TEC_UNAME)), )
COMPILER = $(VC10)
endif
ifneq ($(findstring vc11, $(TEC_UNAME)), )
COMPILER = $(VC11)
endif
ifneq ($(findstring vc12, $(TEC_UNAME)), )
COMPILER = $(VC12)
endif
ifneq ($(findstring vc14, $(TEC_UNAME)), )
COMPILER = $(VC14)
endif
ifneq ($(findstring vc15, $(TEC_UNAME)), )
COMPILER = $(VC15)
endif
ifneq ($(findstring vc16, $(TEC_UNAME)), )
COMPILER = $(VC16)
endif
ifeq "$(TEC_UNAME)" "dll"
COMPILER = $(VC6)
endif
ifeq "$(TEC_UNAME)" "dll7"
COMPILER = $(VC7)
endif
ifeq "$(TEC_UNAME)" "dll8"
COMPILER = $(VC8)
ifdef DBG
#debug info not working for dll8 linker
define DBG
endef
endif
endif
ifeq "$(TEC_UNAME)" "dll8_64"
COMPILER = $(VC8)
SDKLIBBIN = /amd64
endif
ifneq ($(findstring dll9, $(TEC_UNAME)), )
COMPILER = $(VC9)
endif
ifneq ($(findstring dll10, $(TEC_UNAME)), )
COMPILER = $(VC10)
endif
ifneq ($(findstring dll11, $(TEC_UNAME)), )
COMPILER = $(VC11)
endif
ifneq ($(findstring dll12, $(TEC_UNAME)), )
COMPILER = $(VC12)
endif
ifneq ($(findstring dll14, $(TEC_UNAME)), )
COMPILER = $(VC14)
endif
ifneq ($(findstring dll15, $(TEC_UNAME)), )
COMPILER = $(VC15)
endif
ifneq ($(findstring dll16, $(TEC_UNAME)), )
COMPILER = $(VC16)
endif
ifeq "$(COMPILER)" "$(VC6)"
TEC_CC = vc
# Use the VC7 Platform SDK, no harm if VC7 is not installed
PLATSDK ?= $(VC7)/PlatformSDK
OLD_OPENGL = Yes
endif
ifeq "$(COMPILER)" "$(VC7)"
TEC_CC = vc
PLATSDK ?= $(VC7)/PlatformSDK
OLD_OPENGL = Yes
endif
ifeq "$(COMPILER)" "$(VC8)"
NEW_VC_COMPILER = Yes
TEC_CC = vc
STDDEFS += -DMSVC8
PLATSDK ?= $(VC8)/PlatformSDK
OLD_OPENGL = Yes
ifdef USE_DLL
GEN_MANIFEST ?= Yes
else
#there is no single thread RTL in VC8
USE_MT = Yes
endif
endif
ifeq "$(COMPILER)" "$(VC9)"
NEW_VC_COMPILER = Yes
TEC_CC = vc
STDDEFS += -DMSVC9
ifdef USE_DLL
GEN_MANIFEST ?= Yes
else
#there is no single thread RTL in VC9
USE_MT = Yes
endif
ifdef VC9SDK
PLATSDK ?= $(VC9SDK)
else
# Not the real folder, we copied from "C:\Program Files\Microsoft SDKs\Windows\v6.0A"
PLATSDK ?= $(VC9)/WinSDK
endif
RESBIN := $(PLATSDK)/bin
ifdef BUILD64
RESBIN := $(RESBIN)/x64
endif
endif
ifeq "$(COMPILER)" "$(VC10)"
NEW_VC_COMPILER = Yes
TEC_CC = vc
STDDEFS += -DMSVC10
ifndef USE_DLL
#there is no single thread RTL in VC10
USE_MT = Yes
endif
ifdef VC10SDK
PLATSDK ?= $(VC10SDK)
else
# Not the real folder, we copied from "C:\Program Files\Microsoft SDKs\Windows\v7.1"
PLATSDK ?= $(VC10)/WinSDK
endif
RESBIN := $(PLATSDK)/bin
ifdef BUILD64
RESBIN := $(RESBIN)/x64
endif
endif
ifeq "$(COMPILER)" "$(VC11)"
NEW_VC_COMPILER = Yes
NEW_SDK_UM = Yes
TEC_CC = vc
STDDEFS += -DMSVC11
ifndef USE_DLL
#there is no single thread RTL in VC11
USE_MT = Yes
endif
ifdef VC11SDK
PLATSDK ?= $(VC11SDK)
else
# Not the real folder, we copied from "C:\Program Files (x86)\Windows Kits\8.0"
PLATSDK ?= $(VC11)/WinSDK
endif
ifdef BUILD64
SDKLIBBIN := x64
else
SDKLIBBIN := x86
endif
RESBIN := $(PLATSDK)/bin/$(SDKLIBBIN)
WINSDKVERNUM := win8
PLATSDK_INC := $(PLATSDK)/include/shared $(PLATSDK)/include/um
PLATSDK_LIB := $(PLATSDK)/lib/$(WINSDKVERNUM)/um/$(SDKLIBBIN)
endif
ifeq "$(COMPILER)" "$(VC12)"
NEW_VC_COMPILER = Yes
NEW_SDK_UM = Yes
TEC_CC = vc
STDDEFS += -DMSVC12
ifndef USE_DLL
#there is no single thread RTL in VC12
USE_MT = Yes
endif
ifdef VC12SDK
PLATSDK ?= $(VC12SDK)
else
# Not the real folder, we copied from "C:\Program Files (x86)\Windows Kits\8.1"
PLATSDK ?= $(VC12)/WinSDK
endif
ifdef BUILD64
SDKLIBBIN := x64
else
SDKLIBBIN := x86
endif
RESBIN := $(PLATSDK)/bin/$(SDKLIBBIN)
WINSDKVERNUM := winv6.3
PLATSDK_INC := $(PLATSDK)/include/shared $(PLATSDK)/include/um
PLATSDK_LIB := $(PLATSDK)/lib/$(WINSDKVERNUM)/um/$(SDKLIBBIN)
endif
ifeq "$(COMPILER)" "$(VC14)"
NEW_VC_COMPILER = Yes
NEW_SDK_UM = Yes
TEC_CC = vc
STDDEFS += -DMSVC14
ifndef USE_DLL
#there is no single thread RTL in VC14
USE_MT = Yes
endif
ifdef VC14SDK
PLATSDK ?= $(VC14SDK)
else
# Not the real folder, we copied from "C:\Program Files (x86)\Windows Kits\10"
PLATSDK ?= $(VC14)/WinSDK
endif
ifdef BUILD64
SDKLIBBIN := x64
else
SDKLIBBIN := x86
endif
RESBIN := $(PLATSDK)/bin/$(SDKLIBBIN)
WINSDKVERNUM ?= 10.0.10240.0
WINSDKBASEINC := $(PLATSDK)/include/$(WINSDKVERNUM)
WINSDKBASELIB := $(PLATSDK)/lib/$(WINSDKVERNUM)
PLATSDK_INC := $(WINSDKBASEINC)/ucrt $(WINSDKBASEINC)/shared $(WINSDKBASEINC)/um
PLATSDK_LIB := $(WINSDKBASELIB)/ucrt/$(SDKLIBBIN) $(WINSDKBASELIB)/um/$(SDKLIBBIN)
endif
ifeq "$(COMPILER)" "$(VC15)"
NEW_VC_COMPILER = Yes
NEW_SDK_UM = Yes
NEW_VC_PATH = Yes
TEC_CC = vc
STDDEFS += -DMSVC15
ifndef USE_DLL
#there is no single thread RTL in VC15
USE_MT = Yes
endif
ifdef VC15SDK
PLATSDK ?= $(VC15SDK)
else
# Not the real folder, we copied from "C:\Program Files (x86)\Windows Kits\10"
PLATSDK ?= $(VC15)/WinSDK
endif
ifdef BUILD64
SDKLIBBIN := x64
else
SDKLIBBIN := x86
endif
WINSDKVERNUM ?= 10.0.17134.0
RESBIN := $(PLATSDK)/bin/$(WINSDKVERNUM)/$(SDKLIBBIN)
WINSDKBASEINC := $(PLATSDK)/include/$(WINSDKVERNUM)
WINSDKBASELIB := $(PLATSDK)/lib/$(WINSDKVERNUM)
PLATSDK_INC := $(WINSDKBASEINC)/ucrt $(WINSDKBASEINC)/shared $(WINSDKBASEINC)/um
PLATSDK_LIB := $(WINSDKBASELIB)/ucrt/$(SDKLIBBIN) $(WINSDKBASELIB)/um/$(SDKLIBBIN)
endif
ifeq "$(COMPILER)" "$(VC16)"
NEW_VC_COMPILER = Yes
NEW_SDK_UM = Yes
NEW_VC_PATH = Yes
TEC_CC = vc
STDDEFS += -DMSVC16
ifndef USE_DLL
#there is no single thread RTL in VC16
USE_MT = Yes
endif
ifdef VC16SDK
PLATSDK ?= $(VC16SDK)
else
# Not the real folder, we copied from "C:\Program Files (x86)\Windows Kits\10"
PLATSDK ?= $(VC16)/WinSDK
endif
ifdef BUILD64
SDKLIBBIN := x64
else
SDKLIBBIN := x86
endif
WINSDKVERNUM ?= 10.0.18362.0
RESBIN := $(PLATSDK)/bin/$(WINSDKVERNUM)/$(SDKLIBBIN)
WINSDKBASEINC := $(PLATSDK)/include/$(WINSDKVERNUM)
WINSDKBASELIB := $(PLATSDK)/lib/$(WINSDKVERNUM)
PLATSDK_INC := $(WINSDKBASEINC)/ucrt $(WINSDKBASEINC)/shared $(WINSDKBASEINC)/um
PLATSDK_LIB := $(WINSDKBASELIB)/ucrt/$(SDKLIBBIN) $(WINSDKBASELIB)/um/$(SDKLIBBIN)
endif
ifeq "$(TEC_CC)" "vc"
ifdef BUILD64
STDDEFS += -DWIN64
MACHINE = X64
GTK := $(GTK)_x64
ifdef NEW_VC_PATH
VCLIBBIN = /x64
else
VCLIBBIN = /amd64
endif
ifdef USE_X86_CL64
# Compiling for 64-bits in a 32bits environment
ifdef NEW_VC_PATH
BIN = $(COMPILER)/bin/Hostx86/x64
else
BIN = $(COMPILER)/bin/x86_amd64
endif
else
ifdef NEW_VC_PATH
BIN = $(COMPILER)/bin/Hostx64/x64
else
BIN = $(COMPILER)/bin/amd64
endif
endif
else
MACHINE = X86
ifdef NEW_VC_PATH
VCLIBBIN = /x86
BIN = $(COMPILER)/bin/Hostx86/x86
else
VCLIBBIN =
BIN = $(COMPILER)/bin
endif
endif
RESBIN ?= $(COMPILER)/bin
CC = $(BIN)/cl -nologo
CPPC = $(BIN)/cl -nologo
LIBC = $(BIN)/link -lib -nologo
LINKER = $(BIN)/link -nologo
MT = $(RESBIN)/mt -nologo
RCC = $(RESBIN)/rc -fo
ifndef NEW_SDK_UM
ifdef BUILD64
SDKLIBBIN := /x64
else
SDKLIBBIN :=
endif
PLATSDK_LIB = $(PLATSDK)/lib$(SDKLIBBIN)
PLATSDK_INC = $(PLATSDK)/include
endif
STDINCS = $(PLATSDK_INC) $(COMPILER)/include
STDFLAGS = -c -Fo$(OBJDIR)/ -W3
STDLFLAGS =
DEPDEFS = -D_WIN32 -D_M_IX86 -D_STDCALL_SUPPORTED
STDLIBDIR = $(PLATSDK_LIB) $(COMPILER)/lib$(VCLIBBIN)
OPTFLAGS := -O2
DEBUGFLAGS := -Z7 -Od -GZ
ifdef USE_ATL
STDINCS += $(COMPILER)/atlmfc/include
STDLIBDIR += $(COMPILER)/atlmfc/lib$(VCLIBBIN)
endif
STDLIBDIR := $(addprefix -LIBPATH:, $(STDLIBDIR))
ifdef NEW_VC_COMPILER
DEBUGFLAGS := -Z7 -Od -RTC1
STDDEFS += -D_CRT_SECURE_NO_DEPRECATE
ifndef CPP_NARROW_INLINES
STDDEFS += -D_CPP_NARROW_INLINES_DEFINED
endif
ifdef USE_CLR
STDFLAGS += -clr
else
STDFLAGS += -EHsc
endif
ifdef USE_OPENMP
STDFLAGS += -openmp
LIBS += vcomp
endif
else # Exception Handling Model
STDFLAGS += -GX
endif
ifneq ($(MAKETYPE), LIB)
ifeq "$(COMPILER)" "$(VC6)"
STDLFLAGS += -pdb:none -incremental:no -machine:$(MACHINE)
else
STDLFLAGS += -incremental:no -machine:$(MACHINE)
endif
ifdef DBG
STDLFLAGS += -debug
endif
ifdef NEW_VC_COMPILER
ifndef GEN_MANIFEST
STDLFLAGS += -MANIFEST:NO
else
ifeq ($(GEN_MANIFEST), No)
STDLFLAGS += -MANIFEST:NO
else
STDLFLAGS += -MANIFEST
endif
endif
endif
endif
ifeq ($(MAKETYPE), APP)
ifeq "$(COMPILER)" "$(VC6)"
STDFLAGS += -GA
else
OPTFLAGS += -GL
ifdef OPT
STDLFLAGS += -LTCG
endif
endif
STDLFLAGS += -subsystem:$(APPTYPE) -out:$(TARGETEXE)
else
ifeq ($(MAKETYPE), DLL)
ifeq "$(COMPILER)" "$(VC6)"
STDFLAGS += -GD
else
OPTFLAGS += -GL
ifdef OPT
STDLFLAGS += -LTCG
endif
endif
STDLFLAGS += -dll -subsystem:$(APPTYPE) -out:$(TARGETDLL) -implib:$(TARGETLIB) -def:$(DEF_FILE)
else
STDLFLAGS += -out:$(TARGETLIB)
endif
endif
ifdef USE_DLL
ifdef DBG
STDFLAGS += -MDd
else
STDFLAGS += -MD
endif
else
ifdef USE_MT
ifdef DBG
STDFLAGS += -MTd
else
STDFLAGS += -MT
endif
else
ifdef DBG
STDFLAGS += -MLd
else
STDFLAGS += -ML
endif
endif
endif
endif
##########################################################################
ifeq "$(TEC_UNAME)" "owc1"
COMPILER = $(OWC1)
TEC_CC = wc
STDLFLAGS =
endif
ifeq "$(TEC_CC)" "wc"
WIN_OTHER = YES
BIN = $(COMPILER)/binnt
CC = $(SLASH) $(BIN)/wcc386
CPPC = $(SLASH) $(BIN)/wpp386
LIBC = $(SLASH) $(BIN)/wlib
LINKER = $(SLASH) $(BIN)/wlink
RCC = $(SLASH) $(BIN)/rc -fo
STDINCS = $(COMPILER)/h $(COMPILER)/h/nt
STDFLAGS += -od -w4 -5r -bt=nt -mf -e25 -zq -fo$(OBJDIR)/
STDLIBDIR = LIBP $(COMPILER)/lib386 LIBP $(COMPILER)/lib386/nt
DEBUGFLAGS := -d2
OPTFLAGS := -ot
ifeq ($(MAKETYPE), APP)
STDLFLAGS = OP maxe=25 OP quiet FORM windows nt NAME $(TARGETEXE)
ifeq ($(APPTYPE), console)
STDLFLAGS += RU con
endif
else
STDLFLAGS += -b -c -n -q -p=512 $(TARGETLIB)
endif
ifdef USE_DLL
STDFLAGS += -bm -br
endif
endif
##########################################################################
ifeq "$(TEC_UNAME)" "bc55"
COMPILER = $(BC55)
TEC_CC = bc
OLD_OPENGL = Yes
endif
ifeq "$(TEC_UNAME)" "bc56"
COMPILER = $(BC56)
TEC_CC = bc
OLD_OPENGL = Yes
endif
ifeq "$(TEC_UNAME)" "bc6"
COMPILER = $(BC6)
TEC_CC = bc
OLD_OPENGL = Yes
endif
ifeq "$(TEC_CC)" "bc"
WIN_OTHER = YES
TEC_CC = bc
BIN = $(COMPILER)/bin
CC = $(BIN)/bcc32
CPPC = $(BIN)/bcc32
LIBC = $(BIN)/tlib /P32
RCC = $(BIN)/brc32 -r -fo
LINKER = $(SLASH) $(BIN)/ilink32
STDINCS = $(COMPILER)/include $(COMPILER)/include/dinkumware
STDLIBDIR = -L$(COMPILER)/lib -L$(COMPILER)/lib/PSDK
STDFLAGS = -c -n$(OBJDIR)/
STDLIB := cw32 import32 $(STDLIB)
ifeq ($(MAKETYPE), APP)
STDLFLAGS = -Tpe #-x -c -Gn
ifeq ($(APPTYPE), console)
STARTUP = c0x32.obj
STDLFLAGS += -ap
else
STARTUP = c0w32.obj
STDLFLAGS += -aa
endif
else
STDLFLAGS = $(TARGETLIB)
endif
OPTFLAGS := -O2
DEBUGFLAGS := -v -x -xp
ifdef USE_DLL
STDFLAGS += -tWDMR
endif
endif
##########################################################################
ifneq ($(findstring gcc, $(TEC_UNAME)), )
TEC_CC = gcc
endif
ifneq ($(findstring mingw, $(TEC_UNAME)), )
TEC_CC = gcc
endif
ifeq "$(TEC_UNAME)" "gcc3"
COMPILER = $(GCC3)
ifdef USE_OPENGL
STDDEFS += -DUSE_OPENGL32
endif
endif
ifeq "$(TEC_UNAME)" "mingw3"
COMPILER = $(MINGW3)
OLD_OPENGL = Yes
endif
ifneq ($(findstring gcc4, $(TEC_UNAME)), )
COMPILER = $(GCC4)
endif
ifneq ($(findstring gcc7, $(TEC_UNAME)), )
COMPILER = $(GCC7)
endif
ifeq "$(TEC_UNAME)" "mingw4"
COMPILER = $(MINGW4)
OLD_OPENGL = Yes
endif
ifeq "$(TEC_UNAME)" "mingw4_64"
COMPILER = $(MINGW4_64)
BUILD64 = Yes
endif
ifeq "$(TEC_UNAME)" "mingw6"
COMPILER = $(MINGW6)
endif
ifeq "$(TEC_UNAME)" "mingw6_64"
COMPILER = $(MINGW6_64)
BUILD64 = Yes
endif
ifneq ($(findstring dllg4, $(TEC_UNAME)), )
COMPILER = $(GCC4)
TEC_CC = gcc
endif
ifneq ($(findstring dllg7, $(TEC_UNAME)), )
COMPILER = $(GCC7)
TEC_CC = gcc
endif
ifeq "$(TEC_UNAME)" "dllw4"
COMPILER = $(MINGW4)
TEC_CC = gcc
OLD_OPENGL = Yes
endif
ifeq "$(TEC_UNAME)" "dllw4_64"
COMPILER = $(MINGW4_64)
TEC_CC = gcc
BUILD64 = Yes
endif
ifeq "$(TEC_UNAME)" "dllw6"
COMPILER = $(MINGW6)
TEC_CC = gcc
endif
ifeq "$(TEC_UNAME)" "dllw6_64"
COMPILER = $(MINGW6_64)
TEC_CC = gcc
BUILD64 = Yes
endif
ifeq "$(COMPILER)" "$(GCC4)"
ifdef USE_OPENGL
STDDEFS += -DUSE_OPENGL32
endif
endif
ifeq "$(COMPILER)" "$(GCC7)"
ifdef USE_OPENGL
STDDEFS += -DUSE_OPENGL32
endif
endif
ifeq "$(TEC_CC)" "gcc"
WIN_OTHER = YES
ifneq ($(findstring w4, $(TEC_UNAME)), )
WIN_OTHER :=
endif
ifneq ($(findstring w6, $(TEC_UNAME)), )
WIN_OTHER :=
endif
ifdef BUILD64
STDDEFS += -DWIN64
GTK := $(GTK)_x64
endif
ifneq "$(findstring mingw, $(COMPILER))" ""
BIN = $(COMPILER)/bin/
endif
CC = $(BIN)gcc
CPPC = $(BIN)g++
LIBC = $(BIN)ar
RCC = $(BIN)windres -O coff -o
ifndef LINKER
ifneq "$(findstring .cpp, $(SRC))" ""
LINKER := $(CPPC)
else
LINKER := $(CC)
endif
endif
RANLIB = $(BIN)ranlib
ifneq "$(findstring mingw, $(COMPILER))" ""
STDINCS = $(COMPILER)/include
STDLIBDIR = -L$(COMPILER)/lib
endif
STDFLAGS += -Wall
DEBUGFLAGS := -g
OPTFLAGS := -O2
OBJEXT=o
LIBEXT=a
ifdef USE_OPENMP
STDFLAGS += -fopenmp
LIBS += gomp
endif
ifdef USE_CPP11
STDFLAGS += -std=c++11
endif
ifeq ($(MAKETYPE), APP)
STDLFLAGS = -Wl,-subsystem,$(APPTYPE)
else
ifeq ($(MAKETYPE), DLL)
ifneq ($(findstring w4, $(TEC_UNAME)), )
STDLFLAGS = -static-libgcc
ifneq "$(findstring .cpp, $(SRC))" ""
STDLFLAGS += -static-libstdc++
endif
else
ifneq ($(findstring w6, $(TEC_UNAME)), )
STDLFLAGS = -static-libgcc
ifneq "$(findstring .cpp, $(SRC))" ""
STDLFLAGS += -static-libstdc++
endif
else
STDLFLAGS =
endif
endif
else
STDLFLAGS = r
endif
endif
endif
##########################################################################
ifdef DBG
STDFLAGS += $(DEBUGFLAGS)
STDDEFS += -DDEBUG
else
STDDEFS += -DNDEBUG
ifdef OPT
STDFLAGS += $(OPTFLAGS)
endif
endif
# allows an extra configuration file.
ifdef EXTRA_CONFIG
include $(EXTRA_CONFIG)
endif
.PHONY: system-check
system-check:
ifndef TEC_UNAME
@echo ''; echo 'Tecmake: check failed, TEC_UNAME not defined.'; echo '';
@exit 1;
endif
ifndef TEC_WIN32
ifndef TEC_WIN64
@echo ''; echo 'Tecmake: check failed, TEC_UNAME not recognized.'; echo '';
@exit 1;
endif
endif
ifdef CHECK_GDIPLUS
ifdef WIN_OTHER
@echo ''; echo 'Tecmake: check failed, GDI+ NOT available in this system.'; echo '';
@exit 1;
endif
endif
#---------------------------------#
# Tecgraf Libraries Location
TECTOOLS_HOME ?= ../..
IUP ?= $(TECTOOLS_HOME)/iup
CD ?= $(TECTOOLS_HOME)/cd
IM ?= $(TECTOOLS_HOME)/im
LUA ?= $(TECTOOLS_HOME)/lua
LUA51 ?= $(TECTOOLS_HOME)/lua5.1
LUA52 ?= $(TECTOOLS_HOME)/lua52
LUA53 ?= $(TECTOOLS_HOME)/lua53
LUA54 ?= $(TECTOOLS_HOME)/lua54
ZLIB ?= $(TECTOOLS_HOME)/zlib
FREETYPE ?= $(TECTOOLS_HOME)/freetype
FTGL ?= $(TECTOOLS_HOME)/ftgl
#---------------------------------#
# Pre-defined libraries
# Library order:
# user + iupcd + cd + iup + motif + X
# Library path order is reversed
ifdef USE_LUA
LUA_SFX :=
endif
ifdef USE_LUA4
LUA_SFX := 4
override USE_LUA = Yes
LUA := $(LUA4)
endif
ifdef USE_LUA5
LUA_SFX := 5
override USE_LUA = Yes
LUA := $(LUA5)
endif
ifdef USE_LUA50
LUA_SFX := 50
override USE_LUA = Yes
LUA := $(LUA50)
NO_LUALIB := Yes
endif
ifdef USE_LUA51
LUA_SFX := 5.1
override USE_LUA = Yes
LUA := $(LUA51)
NO_LUALIB := Yes
endif
ifdef USE_LUA52
LUA_SFX := 52
override USE_LUA = Yes
LUA := $(LUA52)
NO_LUALIB := Yes
endif
ifdef USE_LUA53
LUA_SFX := 53
override USE_LUA = Yes
LUA := $(LUA53)
NO_LUALIB := Yes
endif
ifdef USE_LUA54
LUA_SFX := 54
override USE_LUA = Yes
LUA := $(LUA54)
NO_LUALIB := Yes
endif
ifdef LUA_SUFFIX
LUA_SFX := $(LUA_SUFFIX)
endif
ifdef USE_IUP
override USE_IUP3 = Yes
endif
ifdef USE_IUP3
override USE_IUP = Yes
endif
ifdef USE_IUP2
override USE_IUP = Yes
IUP := $(IUP)2
endif
ifdef USE_IUPBETA
IUP := $(IUP)/beta
endif
ifdef USE_CDBETA
CD := $(CD)/beta
endif
ifdef USE_IMBETA
IM := $(IM)/beta
endif
ifdef USE_GLUT
override USE_OPENGL = Yes
LIBS += glut32
LDIR += $(GLUT_INC)
STDINCS += $(GLUT_LIB)
endif
ifdef USE_GDK
override USE_GTK = Yes
endif
ifdef USE_IUPCONTROLS
override USE_CD = Yes
override USE_IUP = Yes
ifdef USE_IUPLUA
LIBS += iupluacontrols$(LIBLUA_SFX)
override USE_CDLUA = Yes
endif
LIBS += iupcontrols
endif
ifdef USE_IUPGLCONTROLS
override USE_OPENGL = Yes
override USE_IUP = Yes
override LINK_FTGL = Yes
ifdef USE_IUPLUA
LIBS += iupluaglcontrols$(LIBLUA_SFX)
endif
LIBS += iupglcontrols
endif
ifdef USE_IUPWEB
override USE_IUP = Yes
ifdef USE_IUPLUA
LIBS += iupluaweb$(LIBLUA_SFX)
endif
LIBS += iupweb iupole comsuppw
endif
ifdef USE_IMLUA
override USE_IM = Yes
LIBS += imlua$(LIBLUA_SFX)
IMLUA_LIB ?= $(IM)/lib/$(TEC_UNAME_LIBLUA_DIR)
LDIR += $(IMLUA_LIB)
endif
ifdef USE_CDLUA
override USE_CD = Yes
LIBS += cdlua$(LIBLUA_SFX)
CDLUA_LIB ?= $(CD)/lib/$(TEC_UNAME_LIBLUA_DIR)
LDIR += $(CDLUA_LIB)
endif
ifdef USE_IUPLUA
override USE_IUP = Yes
ifdef USE_CD
ifeq ($(findstring iupluacd, $(LIBNAME)), )
LIBS += iupluacd$(LIBLUA_SFX)
endif
endif
ifdef USE_OPENGL
ifeq ($(findstring iupluagl, $(LIBNAME)), )
LIBS += iupluagl$(LIBLUA_SFX)
endif
endif
LIBS += iuplua$(LIBLUA_SFX)
IUPLUA_LIB ?= $(IUP)/lib/$(TEC_UNAME_LIBLUA_DIR)
LDIR += $(IUPLUA_LIB)
endif
ifdef USE_LUA
ifndef NO_LUALIB
LIBS += lualib$(LUA_SFX)
endif
LIBS += lua$(LUA_SFX)
LUA_LIB ?= $(LUA)/lib/$(TEC_UNAME)
LDIR += $(LUA_LIB)
LUA_INC ?= $(LUA)/include
INCLUDES += $(LUA_INC)
LUA_BIN ?= $(LUA)/bin/$(TEC_SYSNAME)
ifdef USE_BIN2C_LUA
BIN2C := $(LUA_BIN)/lua$(LUA_SFX) $(BIN2C_PATH)bin2c.lua
else
BIN2C := $(LUA_BIN)/bin2c$(LUA_SFX)
endif
LUAC := $(LUA_BIN)/luac$(LUA_SFX)
LUABIN := $(LUA_BIN)/lua$(LUA_SFX)
endif
ifdef USE_IUP
ifdef USE_CD
LIBS += iupcd
endif
ifdef USE_GTK
LIBS += iupgtk
else
LIBS += iup
endif
IUP_LIB ?= $(IUP)/lib/$(TEC_UNAME)
LDIR += $(IUP_LIB)
ifdef USE_OPENGL
LIBS += iupgl
endif
ifdef USE_DLL
ifeq ($(MAKETYPE), APP)
LIBS += iupstub
endif
endif
IUP_INC ?= $(IUP)/include
INCLUDES += $(IUP_INC)
endif
ifdef USE_CD
ifdef USE_GDIPLUS
CHECK_GDIPLUS = Yes
LIBS += cdcontextplus gdiplus
endif
ifdef USE_CAIRO
# To use Cairo with Win32 base driver (NOT for GDK)
# Can NOT be used together with GDI+
LIBS += cdcairo pangocairo-1.0 cairo
endif
ifdef USE_GDK
LIBS += cdgdk
else
LIBS += cd
endif
LINK_FREETYPE = Yes
CD_LIB ?= $(CD)/lib/$(TEC_UNAME)
LDIR += $(CD_LIB)
CD_INC ?= $(CD)/include
INCLUDES += $(CD_INC)
endif
ifdef USE_IM
LIBS += im
ifndef NO_ZLIB
LINK_ZLIB = Yes
endif
IM_LIB ?= $(IM)/lib/$(TEC_UNAME)
LDIR += $(IM_LIB)
IM_INC ?= $(IM)/include
INCLUDES += $(IM_INC)
endif
ifdef USE_FTGL
LINK_FTGL = Yes
USE_FREETYPE = Yes
FTGL_INC ?= $(FTGL)/include
INCLUDES += $(FTGL_INC)
endif
ifdef LINK_FTGL
LIBS += ftgl
LINK_FREETYPE = Yes
FTGL_LIB ?= $(FTGL)/lib/$(TEC_UNAME)
LDIR += $(FTGL_LIB)
endif
ifdef USE_FREETYPE
LINK_FREETYPE = Yes
FREETYPE_INC ?= $(FREETYPE)/include
INCLUDES += $(FREETYPE_INC)
endif
ifdef LINK_FREETYPE
LIBS += freetype6
ifeq ($(findstring dll, $(TEC_UNAME)), )
ifndef NO_ZLIB
LINK_ZLIB = Yes
endif
endif
FREETYPE_LIB ?= $(FREETYPE)/lib/$(TEC_UNAME)
LDIR += $(FREETYPE_LIB)
endif
ifdef LINK_PDFLIB
LIBS += pdflib
ifeq ($(findstring dll, $(TEC_UNAME)), )
ifndef NO_ZLIB
LINK_ZLIB = Yes
endif
endif
PDFLIB_LIB ?= $(PDFLIB)/lib/$(TEC_UNAME)
LDIR += $(PDFLIB_LIB)
endif
ifdef USE_ZLIB
LINK_ZLIB = Yes
ZLIB_INC ?= $(ZLIB)/include
INCLUDES += $(ZLIB_INC)
endif
ifdef LINK_ZLIB
ifndef ZLIB_NAME
ZLIB_NAME = zlib1
ifneq ($(findstring gcc, $(TEC_UNAME)), )
ZLIB_NAME = z
endif
ifneq ($(findstring mingw, $(TEC_UNAME)), )
ZLIB_NAME = z
endif
endif
LIBS += $(ZLIB_NAME)
ZLIB_LIB ?= $(ZLIB)/lib/$(TEC_UNAME)
LDIR += $(ZLIB_LIB)
endif
ifdef USE_OPENGL
ifdef OLD_OPENGL
LIBS += glaux glu32 opengl32
else
LIBS += glu32 opengl32
endif
endif
ifdef USE_GTK
STDINCS += $(GTK)/include/atk-1.0 $(GTK)/include/gtk-$(GTKSFX).0 $(GTK)/include/gdk-pixbuf-2.0
STDINCS += $(GTK)/include/cairo $(GTK)/include/pango-1.0 $(GTK)/include/glib-2.0
STDINCS += $(GTK)/lib/glib-2.0/include
ifndef USE_GTK3
STDINCS += $(GTK)/lib/gtk-2.0/include
endif
ifeq "$(TEC_CC)" "gcc"
STDFLAGS += -mms-bitfields
endif
LDIR += $(GTK)/lib
ifdef USE_GTK3
LIBS += gtk-3 gdk-3
else
LIBS += gtk-win32-2.0 gdk-win32-2.0
endif
LIBS += gdk_pixbuf-2.0 pango-1.0 pangowin32-1.0 gobject-2.0 gmodule-2.0 glib-2.0
endif
ifdef USE_QT
#STDFLAGS += -Zm200 -w34100 -w34189 -Zm200 -w34100 -w34189 -w34100 -w34189
STDINCS += $(QT)/include $(QT)/include/QtCore $(QT)/include/QtGui $(QT)/include/ActiveQt $(QT)/mkspecs/win32-msvc2005
STDDEFS += -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT
LDIR += $(QT)/lib
LIBS += QtMain QtGui4 QtCore4
endif
#---------------------------------#
# Building compilation flags that are sets
DEPINCS := $(INCLUDES) $(EXTRAINCS)
# INCLUDES for dependencies, remove references to "c:" and similars
DEPINCS := $(patsubst c:%, /cygdrive/c%, $(DEPINCS))
DEPINCS := $(patsubst d:%, /cygdrive/d%, $(DEPINCS))
DEPINCS := $(patsubst x:%, /cygdrive/x%, $(DEPINCS))
DEPINCS := $(patsubst t:%, /cygdrive/t%, $(DEPINCS))
DEPINCS := $(addprefix -I, $(DEPINCS))
INCLUDES := $(addprefix -I, $(INCLUDES))
STDINCS := $(addprefix -I, $(STDINCS))
EXTRAINCS := $(addprefix -I, $(EXTRAINCS))
DEFINES := $(addprefix -D, $(DEFINES))
ifdef USE_CPP11
DEPFLAGS += -std=c++11
endif
# For aplications and DLLs
ifneq ($(MAKETYPE), LIB)
LIBS += $(STDLIB)
LIBS := $(addsuffix .$(LIBEXT), $(LIBS))
ifeq ($(TEC_CC), vc)
ifdef LDIR
LDIR := $(addprefix -LIBPATH:, $(LDIR))
endif
STDLFLAGS += $(LDIR) $(STDLIBDIR) $(LIBS)
endif
ifeq ($(TEC_CC), bc)
ifdef LDIR
LDIR := $(addprefix -L, $(LDIR))
endif
endif
ifeq ($(TEC_CC), wc)
ifdef LDIR
LDIR := $(addprefix LIBP , $(LDIR))
endif
LIBS := $(addprefix LIB , $(LIBS))
STDLFLAGS += $(LDIR) $(STDLIBDIR) $(LIBS)
endif
ifeq ($(TEC_CC), gcc)
LIBS := $(addprefix -l, $(LIBS))
LIBS := $(LIBS:.a=)
ifdef LDIR
LDIR := $(addprefix -L, $(LDIR))
endif
STDLFLAGS += $(LDIR) $(STDLIBDIR) $(LIBS)
endif
endif
#---------------------------------#
# Definitions of private variables
# C, C++ and RC compiler flags
CFLAGS = $(FLAGS) $(STDFLAGS) $(INCLUDES) $(STDINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS)
CXXFLAGS = $(CPPFLAGS) $(STDFLAGS) $(INCLUDES) $(STDINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS)
RCFLAGS = $(INCLUDES) $(STDINCS) $(EXTRAINCS) $(DEFINES) $(STDDEFS)
# Sources with relative path
SOURCES = $(addprefix $(SRCDIR)/, $(SRC))
# Target for applications or libraries
ifeq ($(MAKETYPE), APP)
TARGET := $(TARGETEXE)
else
ifeq ($(MAKETYPE), DLL)
TARGET := $(TARGETDLL) $(TARGETLIB) $(TARGETDIR)/$(TARGETNAME).exp
else
TARGET := $(TARGETLIB)
endif
endif
# OBJ: list of .o, without path
# OBJS: list of .o with relative path
OBJ = $(notdir $(SRC))
OBJ := $(OBJ:.c=.$(OBJEXT))
OBJ := $(OBJ:.cpp=.$(OBJEXT))
OBJ := $(OBJ:.cxx=.$(OBJEXT))
OBJ := $(OBJ:.cc=.$(OBJEXT))
OBJ := $(OBJ:.rc=.res)
OBJS = $(addprefix $(OBJDIR)/, $(OBJ))
# Construct VPATH variable
P-SRC = $(dir $(SRC))
P-SRC += $(dir $(SRCLUA))
VPATH = .:$(foreach dir,$(P-SRC),$(if $(dir)="./",:$(dir)))
#---------------------------------#
ifdef LOHPACK
# Pacote LOH unificado com todos scripts Lua precompilados
LOHS := $(LOHDIR)/$(LOHPACK)
LOHDIRS :=
else
ifdef NO_LUAOBJECT
LH = $(notdir $(SRCLUA))
LH := $(LH:.lua=.lh)
LHS = $(addprefix $(LHDIR)/, $(LH))
LUAS := $(LHS)
else
# LOH: lista dos arquivos .loh, sem path
# LOHS: lista dos arquivos .loh, com path relativo
LO = $(notdir $(SRCLUA))
LO := $(LO:.lua=$(LO_SUFFIX).lo)
LOS = $(addprefix $(OBJROOT)/, $(LO))
LOH = $(notdir $(SRCLUA))
LOH := $(LOH:.lua=$(LO_SUFFIX).loh)
LOHS = $(addprefix $(LOHDIR)/, $(LOH))
LUAS := $(LOHS)
endif
endif
#---------------------------------#
# Compiler depedent adjusts
# CFLAGS: parametros passados ao linker e librarian
LINKFLAGS := $(LFLAGS) $(STDLFLAGS) $(OBJS) $(SLIB)
LIBFLAGS := $(LCFLAGS) $(STDLFLAGS) $(OBJS) $(SLIB)
ifeq ($(TEC_CC), bc)
ifeq ($(MAKETYPE), APP)
LINKFLAGS = $(LFLAGS) $(STDLFLAGS) $(LDIR) $(STDLIBDIR) $(STARTUP) $(OBJS), $(TARGETEXE), , $(LIBS) $(SLIB),
else
LIBFLAGS = $(LCFLAGS) $(subst /,\\, $(STDLFLAGS) $(addprefix +,$(OBJS) $(SLIB)))
endif
endif
ifeq ($(TEC_CC), wc)
ifeq ($(MAKETYPE), APP)
LINKFLAGS = $(LFLAGS) $(STDLFLAGS) $(addprefix F , $(OBJS) $(SLIB))
else
#wlib adds files using "+" as an option
LIBFLAGS := $(LCFLAGS) $(STDLFLAGS) $(addprefix +, $(OBJS) $(SLIB))
endif
endif
ifeq ($(TEC_CC), gcc)
ifeq ($(MAKETYPE), APP)
LINKFLAGS = -o $(TARGETEXE) $(OBJS) $(SLIB) $(LFLAGS) $(STDLFLAGS)
endif
ifeq ($(MAKETYPE), DLL)
LINKFLAGS = -shared -o $(TARGETDLL) -Wl,--out-implib=$(TARGETLIB) $(OBJS) $(DEF_FILE) $(SLIB) $(LFLAGS) $(STDLFLAGS)
endif
endif
#---------------------------------#
# Dynamic Library Build
.PHONY: dynamic-lib
dynamic-lib: $(TARGETDLL) addmanifest
$(TARGETDLL) : $(LUAS) $(OBJS) $(EXTRADEPS) $(DEF_FILE)
@echo ''; echo Tecmake: linking $(@F) ...
$(ECHO)$(LINKER) $(LINKFLAGS)
@echo ''; echo 'Tecmake: Dynamic Library ($@) Done'; echo ''
#---------------------------------#
# Static Library Build
.PHONY: static-lib
static-lib: $(TARGETLIB)
$(TARGETDIR)/$(TARGETNAME).lib : $(LUAS) $(OBJS) $(EXTRADEPS)
@echo ''; echo Tecmake: librarian $(@F) ...
$(ECHO)$(LIBC) $(LIBFLAGS)
@echo ''; echo 'Tecmake: Static Library ($@) Done'; echo ''
$(TARGETDIR)/lib$(TARGETNAME).a : $(LUAS) $(OBJS) $(EXTRADEPS)
@echo ''; echo Tecmake: librarian $(@F) ...
$(ECHO)$(LIBC) $(ARFLAGS) $@ $(OBJS) $(SLIB)
@echo ''; echo Tecmake: updating lib TOC $(@F) ...
$(ECHO)-$(RANLIB) $@
@echo ''; echo 'Tecmake: Static Library ($@) Done'; echo ''
#---------------------------------#
# Application Build
.PHONY: application
application: $(TARGETEXE) addmanifest
$(TARGETEXE) : $(LUAS) $(OBJS) $(EXTRADEPS)
@echo ''; echo Tecmake: linking $(@F) ...
$(ECHO)$(LINKER) $(LINKFLAGS)
@echo ''; echo 'Tecmake: Application ($@) Done.'; echo ''
#---------------------------------#
# Application Scripts
# Nomes dos scripts
SRELEASE = $(SRCDIR)/$(TARGETNAME).bat
EXEC := $(subst /,\,$(TARGETEXE))
.PHONY: scripts
ifdef NO_SCRIPTS
scripts: ;
else
scripts: $(SRELEASE) ;
endif
$(SRELEASE): $(TARGETEXE)
@echo ''; echo 'Tecmake: generating script $(@F)'
@echo '@echo off' > $@
@echo 'REM Script generated automatically by tecmake v$(VERSION)' >> $@
@echo '$(EXEC) %*' >> $@
#---------------------------------#
# Directories Creation
.PHONY: directories
directories: $(OBJDIR) $(TARGETDIR) $(EXTRADIR) $(LOHDIR) $(LHDIR) $(DEPENDDIR)
$(OBJDIR) $(TARGETDIR):
if [ ! -d $@ ] ; then mkdir -p $@ ; fi
ifdef EXTRADIR
$(EXTRADIR):
if [ ! -d $@ ] ; then mkdir -p $@ ; fi
else
$(EXTRADIR): ;
endif
ifdef LOHDIR
$(LOHDIR):
if [ ! -d $@ ] ; then mkdir -p $@ ; fi
else
$(LOHDIR): ;
endif
ifdef LHDIR
$(LHDIR):
if [ ! -d $@ ] ; then mkdir -p $@ ; fi
else
$(LHDIR): ;
endif
ifdef DEPENDDIR
$(DEPENDDIR):
if [ ! -d $@ ] ; then mkdir -p $@ ; fi
else
$(DEPENDDIR): ;
endif
#---------------------------------#
# Compilation Rules
$(OBJDIR)/%.o: $(SRCDIR)/%.c
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(CC) -c $(CFLAGS) -o $@ $<
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(CPPC) -c $(CXXFLAGS) -o $@ $<
$(OBJDIR)/%.o: $(SRCDIR)/%.cxx
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(CPPC) -c $(CXXFLAGS) -o $@ $<
$(OBJDIR)/%.o: $(SRCDIR)/%.cc
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(CPPC) -c $(CXXFLAGS) -o $@ $<
$(OBJDIR)/%.obj: $(SRCDIR)/%.c
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(CC) $(CFLAGS) $<
$(OBJDIR)/%.obj: $(SRCDIR)/%.cpp
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(CPPC) $(CXXFLAGS) $<
$(OBJDIR)/%.obj: $(SRCDIR)/%.cxx
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(CPPC) $(CXXFLAGS) $<
$(OBJDIR)/%.obj: $(SRCDIR)/%.cc
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(CPPC) $(CXXFLAGS) $<
$(OBJDIR)/%.res: $(SRCDIR)/%.rc
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(RCC) $@ $(RCFLAGS) $<
$(LHDIR)/%.lh: $(SRCLUADIR)/%.lua
@echo ''; echo Tecmake: generating $(<F) ...
$(ECHO)$(BIN2C) $< > $@
$(LOHDIR)/%.loh: $(OBJROOT)/%.lo
@echo ''; echo Tecmake: generating $(<F) ...
$(ECHO)$(BIN2C) $< > $@
$(OBJROOT)/%$(LO_SUFFIX).lo: $(SRCLUADIR)/%.lua
@echo ''; echo Tecmake: compiling $(<F) ...
$(ECHO)$(LUAC) -o $@ $<
ifdef LOHPACK
$(LOHDIR)/$(LOHPACK): $(SRCLUA)
@echo ''; echo Tecmake: Generating $(<F) ...
$(ECHO)$(LUABIN) $(LUAPRE) $(LUAPREFLAGS) -l $(SRCLUADIR) -o $@ $(SRCLUA)
endif
#---------------------------------#
# Rule to add a manifest file to the generated binary
.PHONY: addmanifest
addmanifest:
ifdef NEW_VC_COMPILER
ifeq ($(GEN_MANIFEST), Yes)
@echo ''; echo Tecmake: adding Manifest ...
ifeq ($(MAKETYPE), DLL)
$(ECHO)$(MT) -manifest $(TARGETDLL).manifest "-outputresource:$(TARGETDLL);2"
endif
ifeq ($(MAKETYPE), APP)
$(ECHO)$(MT) -manifest $(TARGETEXE).manifest "-outputresource:$(TARGETEXE);1"
endif
endif
endif
#---------------------------------#
# Dependencies
.PHONY: depend
depend: $(DEPEND)
$(DEPEND): $(MAKENAME)
ifdef SRC
@echo "" > $(DEPEND)
@which gcc 2> /dev/null 1>&2 ;\
if [ $$? -eq 0 ]; then \
echo "Tecmake: Building Dependencies ... (can be slow)" ;\
g++ $(DEPFLAGS) $(DEPINCS) $(DEFINES) $(STDDEFS) $(DEPDEFS) -MM $(SOURCES) | \
sed -e '1,$$s/^\([^ ]*\)\.o/$$(OBJDIR)\/\1.$(OBJEXT)/' | \
sed -e 's/\([ \t][ \t]*\)\([a-zA-Z]\):/\1\/cygdrive\/\2/g' > $(DEPEND) ;\
else \
echo "" ;\
echo "Tecmake: error, g++ not found. Dependencies can not be built." ;\
echo "Must set NO_DEPEND=Yes" ;\
echo "" ;\
exit 1 ;\
fi
endif
ifdef USE_NODEPEND
NO_DEPEND:=Yes
endif
###################
ifndef NO_DEPEND
include $(DEPEND)
endif
###################
#---------------------------------#
# Management Rules
.PHONY: clean-dir
clean-dir:
rm -fr $(OBJROOT) $(TARGETROOT)
# Remove extra files
.PHONY: clean-extra
clean-extra:
rm -f $(DEPEND) $(SRELEASE)
# Remove Lua object inclusion files
.PHONY: clean-lohs
clean-lohs:
rm -f $(LOS) $(LOHS)
# Remove Lua inclusion files
.PHONY: clean-lhs
clean-lhs:
rm -f $(LHS)
# Remove object files
.PHONY: clean-obj
clean-obj:
rm -f $(OBJS)
# Remove target
.PHONY: clean-target
clean-target:
rm -f $(TARGET)
# Remove target and object files
.PHONY: clean-all-obj
clean-all-obj:
@for d in $(UNAMES); do \
(cd $(OBJROOT)/$$d; echo $(OBJ) | xargs rm -f) ;\
done
# Remove libraries and executables for all platforms
.PHONY: clean-all-target
clean-all-target:
@for d in $(UNAMES); do \
(rm -f $(TARGETROOT)/$$d/$(TARGETNAME).exe $(TARGETROOT)/$$d/$(TARGETNAME).$(LIBEXT) $(TARGETROOT)/$$d/$(TARGETNAME).dll $(TARGETROOT)/$$d/$(TARGETNAME).exp) ;\
done
.PHONY: clean
clean: clean-target clean-obj
.PHONY: clean-all
clean-all: clean-extra clean-lohs clean-lhs clean-all-target clean-all-obj
# Rebuild target and object files
.PHONY: rebuild
rebuild: clean-obj clean-target tecmake
# Rebuild target without rebuilding object files
.PHONY: relink
relink: clean-target tecmake
#---------------------------------#
.PHONY: version
version:
@echo "Tecmake Windows Version $(VERSION)"
#---------------------------------#