#-------------------------------------------------------------------------# #- 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 $( $@ $(LOHDIR)/%.loh: $(OBJROOT)/%.lo @echo ''; echo Tecmake: generating $( $@ $(OBJROOT)/%$(LO_SUFFIX).lo: $(SRCLUADIR)/%.lua @echo ''; echo Tecmake: compiling $( $(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)" #---------------------------------#