#############################################################################
# Software Testing Automation Framework (STAF) #
# (C) Copyright IBM Corp. 2001 #
# #
# This software is licensed under the Eclipse Public License (EPL) V1.0. #
#############################################################################
#########################
# Setup C/C++ variables #
#########################
# WARNING: These makefiles have only been tested with MS VC++ 98 (also
# known as MS Studio 6.0), MS VC++ V7 (also known as
# MS Visual Studio.NET 2003), and the IA64 compiler which is part of
# the February 2003 MS Platform SDK). Other versions may require
# significant changes.
# WARNING: STAF will not build on Win9x/Me.
# To define the compiler that you are using, set the CC_TYPE variable. Valid
# values are MVC6, MVC7, MVC8-X64, and MVC-SDK-IA64. The default specified in
# the win32 platform makefile is MVC6.
# These variables define the locations where MS VC++ files are installed.
# Typically you only need to define one variable
#
# MSVCDIR = where MS VC++ is installed
#
# For example,
#
# export VSCOMMONDIR=d:/MVStudio/Common
# export MSVCDIR=d:/MVStudio
#
# Note: If the directory names have spaces in them, you should use the ~
# format. For example, use d:/MICROS~1 not "d:/Microsoft Visual Studio".
#
# If you have a non-typcial installation you might also need to specify one
# other variable
#
# VSCOMMONDIR = where the common visual studio components are installed
#
# For example,
#
# export VSCOMMONDIR=d:/MVStudio/Common
#
# Alternatively you can specify VSCOMMONDIR_cyg in place of VSCOMMONDIR and/or
# MSVCDIR_cyg in place of MSVCDIR. The _cyg versions of these variables
# should be defined in cygwin style syntax. For example
#
# export MSVCDIR_cyg=/cygdrive/d/MVStudio
# export VSCOMMONDIR_cyg=/cygdrive/d/MVStudio/Common
#
# If you are using the IA-64 compiler, then you don't need to set the MSVCDIR.
# Instead, you should set the MSSDKDIR, which points to the location in which
# you installed the MS Platform SDK
#
# For example,
#
# export MSSDKDIR=d:/MicrosoftSDK
# Added MVC2014-X64 to this list
ifeq ($(filter MVC6 MVC7 MVC8-X64 MVC-SDK-IA64 MVC140-X64 MVC150-X64 MVC120-X64 MVC110-X64,$(CC_TYPE)),)
#
$(error Invalid CC_TYPE specified: $(CC_TYPE))
endif
ifndef MSVCDIR_cyg
ifdef MSVCDIR_CYG
MSVCDIR_cyg := $(MSVCDIR_CYG)
else
ifdef MSVCDIR
MSVCDIR_cyg := $(shell cygpath -u '$(MSVCDIR)')
endif
endif
endif
ifndef VSCOMMONDIR_cyg
ifdef VSCOMMONDIR_CYG
VSCOMMONDIR_cyg := $(VSCOMMONDIR_CYG)
else
ifdef VSCOMMONDIR
VSCOMMONDIR_cyg := $(shell cygpath -u '$(VSCOMMONDIR)')
endif
endif
endif
ifndef MSSDKDIR_cyg
ifdef MSSDKDIR_CYG
MSSDKDIR_cyg := $(MSSDKDIR_CYG)
else
ifdef MSSDKDIR
MSSDKDIR_cyg := $(shell cygpath -u '$(MSSDKDIR)')
endif
endif
endif
# Now, we setup the various compilers and flags
CC_CC := cl -nologo
CC_C := cl -nologo
CC_MK_SHARED_LIB := cl -nologo
ifeq ($(BUILD_TYPE),retail)
CC_BUILD_TYPE_FLAGS = $(CC_OPTIMIZE) -MT
CC_MK_SHARED_LIB += -LD
else
CC_BUILD_TYPE_FLAGS = $(CC_DEBUG) -MTd
CC_MK_SHARED_LIB += -LDd
endif
# WARNING: -DSTAF_NATIVE_COMPILER should NOT be specified on windows
# due to heap-managment issues
# XXX: Update for appropriate optimization flags
#CC_DEBUG := -Zi -Od -D_DEBUG -D_CRTDBG_MAP_ALLOC
CC_DEBUG := -Zi -Od -D_DEBUG
CC_OPTIMIZE := -Ob1 -Og -Oi -Ot
#CC_OPTIMIZE := -Ob1 -Og -Oi -Ot -Oy -Oa
#CC_OPTIMIZE := -Ob1 -Og -Oi -Ot -Oy -Ow
CC_COMMONDEFINES = -D_CONSOLE -D_MBCS $(CC_CCTYPE_COMMONDEFINES)
CC_SHAREDLIBNAMEFLAGS = -DSTAF_SHARED_LIB_PREFIX=$(OS_SHARED_LIB_PREFIX) \
-DSTAF_SHARED_LIB_SUFFIX=$(OS_SHARED_LIB_SUFFIX)
CC_COMMONFLAGS = $(OS_COMMONFLAGS) $(COMMONFLAGS) -W3 $(CC_CCTYPE_FLAGS)\
$(CC_COMMONDEFINES) $(CC_BUILD_TYPE_FLAGS)\
$(CC_SHAREDLIBNAMEFLAGS)
CC_CFLAGS = $(CC_COMMONFLAGS) $(CFLAGS)
CC_LINKFLAGS = $(CC_COMMONFLAGS) $(LINKFLAGS) $(CC_CCTYPE_LINKFLAGS)
CC_ATEND_LINKFLAGS = $(ATEND_LINKFLAGS) $(CC_CCTYPE_ATEND_LINKFLAGS)
CC_INCLUDEDIRS = $(MVC_WINAPI_INCLUDEDIRS) $(MVC_CRT_INCLUDEDIRS)
CC_LIBDIRS = $(MVC_WINAPI_LIBDIRS) $(MVC_CRT_LIBDIRS)
ifeq ($(CC_TYPE),MVC6)
##################
# MSVC 6 -- MVC6 #
##################
ifndef MSVCDIR_cyg
$(error You must set either MSVCDIR or MSVCDIR_cyg)
endif
ifndef VSCOMMONDIR_cyg
VSCOMMONDIR_cyg := $(MSVCDIR_cyg)/Common
endif
MSVCDIR_cyg := $(MSVCDIR_cyg)/VC98
MSVCDIR := $(shell cygpath -w '$(MSVCDIR_cyg)')
MVC_PATHS ?= $(VSCOMMONDIR_cyg)/MSDev98/BIN $(MSVCDIR_cyg)/BIN
# The WINAPI locations contain the CRT contents
MVC_WINAPI_INCLUDEDIRS ?= $(MSVCDIR)\INCLUDE
MVC_WINAPI_LIBDIRS ?= $(MSVCDIR)\LIB
CC_CCTYPE_FLAGS = -GX
CC_CCTYPE_COMMONDEFINES = -DWIN32
else
ifeq ($(CC_TYPE),MVC7)
##################
# MSVC 7 -- MVC7 #
##################
ifndef MSVCDIR_cyg
$(error You must set either MSVCDIR or MSVCDIR_cyg)
endif
ifndef VSCOMMONDIR_cyg
VSCOMMONDIR_cyg := $(MSVCDIR_cyg)/Common7
endif
MSVCDIR_cyg := $(MSVCDIR_cyg)/vc7
MSVCDIR := $(shell cygpath -w '$(MSVCDIR_cyg)')
MVC_PATHS ?= $(VSCOMMONDIR_cyg)/IDE \
$(MSVCDIR_cyg)/BIN
MVC_WINAPI_INCLUDEDIRS ?= $(MSVCDIR)\PlatformSDK\Include
MVC_CRT_INCLUDEDIRS ?= $(MSVCDIR)\Include
MVC_WINAPI_LIBDIRS ?= $(MSVCDIR)\PlatformSDK\Lib
MVC_CRT_LIBDIRS ?= $(MSVCDIR)\Lib
CC_CCTYPE_FLAGS = -GX
CC_CCTYPE_COMMONDEFINES = -DWIN32
else
ifeq ($(CC_TYPE),MVC8-X64)
#####################################
# MSVC 8 with X64 setup -- MVC8-X64 #
#####################################
ifndef MSVCDIR_cyg
$(error You must set either MSVCDIR or MSVCDIR_cyg)
endif
BUILD_ARCH := X64
ifndef VSCOMMONDIR_cyg
VSCOMMONDIR_cyg := $(MSVCDIR_cyg)/Common7
endif
MSVCDIR_cyg := $(MSVCDIR_cyg)/vc
MSVCDIR := $(shell cygpath -w '$(MSVCDIR_cyg)')
MVC_PATHS ?= $(MSVCDIR_cyg)/bin/x86_amd64 \
$(MSVCDIR_cyg)/bin \
$(VSCOMMONDIR_cyg)/IDE
MVC_WINAPI_INCLUDEDIRS ?= $(MSVCDIR)\PlatformSDK\Include
MVC_CRT_INCLUDEDIRS ?= $(MSVCDIR)\Include
MVC_WINAPI_LIBDIRS ?= $(MSVCDIR)\PlatformSDK\Lib\amd64
MVC_CRT_LIBDIRS ?= $(MSVCDIR)\Lib\amd64
CC_CCTYPE_FLAGS = -EHsc -Wp64 -wd4996
CC_CCTYPE_ATEND_LINKFLAGS = /link /MACHINE:X64
#CC_CCTYPE_COMMONDEFINES = -DWIN64
CC_CCTYPE_COMMONDEFINES = -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32
else
ifeq ($(CC_TYPE),MVC-SDK-IA64)
##########################################
# MSVC SDK IA64 Compiler -- MVC-SDK-IA64 #
##########################################
ifndef MSSDKDIR_cyg
$(error You must set either MSSDKDIR or MSSDKDIR_cyg)
endif
BUILD_ARCH := IA64
MVC_PATHS ?= $(MSSDKDIR_cyg)/bin/Win64
MVC_WINAPI_INCLUDEDIRS ?= $(MSSDKDIR)\Include
MVC_CRT_INCLUDEDIRS ?= $(MSSDKDIR)\Include\Win64\crt
MVC_WINAPI_LIBDIRS ?= $(MSSDKDIR)\Lib\IA64
MVC_CRT_LIBDIRS ?= $(MSSDKDIR)\Lib\IA64
CC_CCTYPE_FLAGS = -GX -Wp64
# This is odd, but is what this what set to for IA-64 before adding X64
CC_CCTYPE_COMMONDEFINES = -DWIN32
#
else
ifeq ($(CC_TYPE),MVC140-X64)
#######################################################
# Visual Studio 2015 X64 (version 14.0) -- MVC140-X64 #
#######################################################
ifndef MSVCDIR_cyg
$(error You must set either MSVCDIR or MSVCDIR_cyg)
endif
BUILD_ARCH := X64
ifndef VSCOMMONDIR_cyg
VSCOMMONDIR_cyg := $(MSVCDIR_cyg)/Common7
endif
MSVCDIR_cyg := $(MSVCDIR_cyg)/vc
MSVCDIR := $(shell cygpath -w '$(MSVCDIR_cyg)')
# The WINAPI (Windows Kit) Include dirs and Lib dirs are not included with visual studio, and are in a seperate folder
ifndef MVC_WINAPI_INCLUDEDIRS
$(error You must set MVC_WINAPI_INCLUDEDIRS to the locations of ALL of the Windows SDK Header files, this is typically something like C:\PROGRA~2\WI3CF2~1\10\Include\10.0.... where PROGRA~2 is the shorthand for Program Files (x86) and WI3CF2~1 is the shorthand for Windows Kits)
endif
ifndef MVC_WINAPI_LIBDIRS
$(error You must set MVC_WINAPI_LIBDIRS to the locations of ALL of the Windows SDK Libraries, this is typically something like C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.... where PROGRA~2 is the shorthand for Program Files (x86) and WI3CF2~1 is the shorthand for Windows Kits)
endif
MVC_PATHS ?= $(MSVCDIR_cyg)/bin/x86_amd64 \
$(MSVCDIR_cyg)/bin \
$(VSCOMMONDIR_cyg)/IDE
MVC_CRT_INCLUDEDIRS ?= $(MSVCDIR)\Include
MVC_CRT_LIBDIRS ?= $(MSVCDIR)\Lib\amd64
CC_CCTYPE_FLAGS = -EHsc -wd4996
CC_CCTYPE_ATEND_LINKFLAGS = /link /MACHINE:X64
CC_CCTYPE_COMMONDEFINES = -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32
endif
#
endif
endif
endif
endif
# Setup the PATH
PATH := $(subst $(SPACE),:,$(MVC_PATHS)):$(PATH)
export PATH
##########################################
# Set commands needed by master makefile #
##########################################
# These four are functions used to convert from cgywin paths to win32 paths
make_drive = $(word 2,$(1)): $(wordlist 3,$(words $(1)),$(1))
convert = $(subst $(SPACE),/,$(call make_drive,$(subst /,$(SPACE),$(1))))
to_pc_style = $(if $(findstring cygdrive,$(1)),$(call convert,$(1)),$(1))
make_list = $(subst $(SPACE),,$(foreach path,$(1),$(call to_pc_style,$(path))$(OS_PS)))
# We need to override ALL_LIB_LIST as MVC doesn't use the '-l' convention
ALL_LIB_LIST = $(foreach lib,$(ALL_LIB_LIST_RAW),$(lib).lib)
# These define the environment variables needed for MVC
MVC_INCLUDE = $(subst /,\,$(call make_list,$(ALL_INCLUDEDIR_LIST_RAW)))
MVC_LIB = $(call make_list,$(ALL_LIBDIR_LIST_RAW))
CC_DEPEND_IT = build/makedep.sh $< $@ obj \
$(foreach item,$(ALL_INCLUDEDIR_LIST_RAW),'$(item)')
CC_DEPEND_IT_C = build/makedep.sh $< $@ obj \
$(foreach item,$(ALL_INCLUDEDIR_LIST_RAW),'$(item)')
CC_COMPILE_IT = PATH='$(PATH)' INCLUDE='$(MVC_INCLUDE)' $(CC_CC) -c \
'-Fo$(OS_@)' $(CC_CFLAGS) '$(OS_<)'
CC_COMPILE_IT_C = PATH='$(PATH)' INCLUDE='$(MVC_INCLUDE)' $(CC_C) -c \
'-Fo$(OS_@)' $(CC_CFLAGS) '$(OS_<)'
CC_LINK_IT = PATH='$(PATH)' INCLUDE='$(MVC_INCLUDE)' LIB='$(MVC_LIB)' \
$(CC_CC) '-Fe$(OS_@)' $(CC_LINKFLAGS) \
$(ALL_LIB_LIST) $(OS_OBJS) $(CC_ATEND_LINKFLAGS)
CC_SHARED_LIB_IT = PATH='$(PATH)' INCLUDE='$(MVC_INCLUDE)' LIB='$(MVC_LIB)' \
$(CC_MK_SHARED_LIB) '-Fe$(OS_@)' $(CC_LINKFLAGS) \
$(ALL_LIB_LIST) $(OS_OBJS) $(CC_ATEND_LINKFLAGS)