# /make_process/cpp/bld/mkcommondefs.mk # Need to create an absolute path to the shell and this path must work # for either the cmd or Cygwin sh shells on the Windows platform. Must # also work for GNU make or ClearCase clearmake programs. Also must be # done as the very first thing because until the SHELL macro is defined # the cmd shell is used. ifeq "$(OS)" "Windows_NT" SHELL := c:/cygwin/bin/sh.exe CYGPATH = /cygdrive/c/cygwin BASENAME = $(CYGPATH)/bin/basename.exe DIRNAME = $(CYGPATH)/bin/dirname.exe ECHO = $(CYGPATH)/bin/echo.exe PERL = $(CYGPATH)/bin/perl.exe PWD = $(CYGPATH)/bin/pwd.exe SED = $(CYGPATH)/bin/sed.exe UNAME = $(CYGPATH)/bin/uname.exe else BASENAME = basename DIRNAME = dirname PWD = pwd SED = sed UNAME = uname WHICH = which endif # Keep relative paths for the C++ bulds so ClearCase winkins will work. TOOLS = $(TOP)/../tools # Get version identification if we are in ClearCase. SET_VERSION = $(TOP)/../inf_generic/cpp/bld/set_version REL_VERSION = $(shell $(SET_VERSION)) JREL_VERSION = $(shell $(SET_VERSION) -Java) CHECK_VERSION = $(TOP)/../inf_generic/cpp/bld/check_version CMWHAT = $(TOP)/../inf_generic/cpp/bld/cmwhat # Where are we in the filesystem ? LOCDIR = $(shell $(PWD)) # Which submake (leaf directory) are we doing ? PROJECT = $(shell $(BASENAME) $(LOCDIR)) # Get view tag, name, to put into html document footer. # E-mail address and lead's name. If e-mail name or address # has special characters like single quotes you need to enter # them in them in html format &#D;, \&\#39;, is a single quote # character. VIEW = $(shell $(CT) pwv -s) ADDRESS = NAME = # Default to 'debug' on ... turn off with a "DEBUG=" on the command-line DEBUG = -g # Default to 'debug' on ... turn off with a "JDEBUG=false" on the # command-line JDEBUG = true # This sets the shell environment variable which will return an error # code if any subprocess exits with a failure code. The build process # will then stop if there are any errors. SET_E = case '$(MFLAGS)' in *[ik]*) set +e;; *) set -e;; esac # Determine what platform we are executing on. OSTYPE = $(shell $(UNAME) -s) # List of libraries LIBX = \ $(EXTRA_LIBS) \ $(INF_GENERIC_LIB) \ $(BOOST_LIBS) LIBS = $(LIBX) # Convert LIBX linker library list into make dependency list #Start with: # -L/usr/local/lib -ltom -ldick -lharry -L/usr/lib -ljane -ldoe #Convert to: # /usr/local/lib/libtom.so /usr/local/lib/libdick.so # /usr/local/lib/libharry.so /usr/lib/libjane.so /usr/lib/libdoe.so # If any member of the list does not exist, return nothing so the linker # can tell you it can not find a file. Before doing this make failed # indicating it could not find the target instead of a missing # dependency which was very hard to debug, make version 3.81. LIB_DEPS = $(shell \ for i in $(LIBX); \ do \ tmp=`$(ECHO) $$i | \ $(SED) -r -n -e 's|^([ ]*)(-L)([^ ]+)|\3|p'`; \ if [ "$$tmp" != '' ]; then \ pat=$$tmp; \ continue; \ fi; \ tmpout="$$tmpout `$(ECHO) $$i | \ $(SED) -r \ -e 's|(-l)([^ ]+)|'$$pat/$(LIB_PREFIX)'\2'.$(LIB_SUFFIX)'|' \ -e 's|^([a-zA-Z])(:)(.*)|/cygdrive/\1\3|'`"; \ done; \ for i in $$tmpout; \ do \ if [ -f $$i ]; then \ out="$$out $$i"; \ fi; \ done; \ $(ECHO) $$out) ##################################### # Tailor for current build platform # ##################################### # Note: we have way too many duplicate definitions currently caused by # inconsistent naming of library files. We need to fix this issue. ##################################### # Linux Platform Macros # ##################################### ifeq "$(OSTYPE)" "Linux" ANT = \ JINFO=$(QJINFO) \ ANT_ARGS="$(ANT_ARGS)" \ ANT_HOME=$(ANT_HOME) \ ANT_OPTS="$(MY_ANT_OPTS)" \ JAVA_HOME=$(JAVA_HOME) \ PATH=$(MY_PATH) ant --noconfig ANT_HOME = $(TOOLS)/apache-ant AR = /usr/bin/ar -crs AR_OUT = $@ ARCH = /bin/arch ARCH_TYPE = $(shell $(ARCH)) ifeq "$(ARCH_TYPE)" "x86_64" ADDRMODE = 64 else ADDRMODE = 32 endif ifeq "$(ADDRMODE)" "64" JAVA_HOME = $(TOOLS)/$(OSTYPE)/jdk7_$(ADDRMODE) MY_CFLAGS += -m$(ADDRMODE) MY_LDXFLAGS += -m$(ADDRMODE) else ifeq "$(ADDRMODE)" "32" JAVA_HOME = $(TOOLS)/$(OSTYPE)/jdk6_$(ADDRMODE) MY_CFLAGS += -m$(ADDRMODE) MY_LDXFLAGS += -m$(ADDRMODE) else $(error Address mode is either 64, the default, or 32 bit \ not "$(ADDRMODE)") endif endif CAT = /bin/cat CC = CP = /bin/cp CXX = CCDEFAULT = gcc CXXDEFAULT = g++ ifndef CC ifndef CXX CCTEMP = $(CCDEFAULT) CXXTEMP = $(CXXDEFAULT) endif endif ifdef CC CCTEMP = $(CC) ifndef CXX ifeq "$(findstring gcc,$(CC))" "gcc" CXXTEMP = $(CXXDEFAULT) else ifeq "$(findstring clang,$(CC))" "clang" CXXTEMP = clang++ endif endif endif endif ifdef CXX CXXTEMP = $(CXX) ifndef CC ifeq "$(findstring clang,$(CXX))" "clang" CCTEMP = clang else # NOTE: Test below is bogus as the "+" really break the test # ifeq "$(findstring g++,$(CXX))" "g++" CCTEMP = $(CCDEFAULT) # endif endif endif endif ifndef CCTEMP $(error The C compiler macro is not defined) endif ifndef CXXTEMP $(error The C++ compiler macro is not defined) endif CCPATH = $(shell PATH=/usr/local/gcc/bin:$(PATH); \ $(DIRNAME) "`$(WHICH) $(CCTEMP)`") CXXPATH = $(shell PATH=/usr/local/gcc/bin:$(PATH) \ $(DIRNAME) "`$(WHICH) $(CXXTEMP)`") ifeq "$(CCPATH)" "." ifeq "$(CXXPATH)" "." $(error Did not discover the path to the compiler. Either \ add the path into the compiler macro or extend the \ environment PATH variable) endif endif ifeq "$(CCPATH)" "." CCPATH = $(CXXPATH) endif ifeq "$(CXXPATH)" "." CXXPATH = $(CCPATH) endif CXXVER = $(shell $(MY_CXX) -dumpversion) C_OUT = -o $@ DOXYFILE = Doxyfile.txt DOXYGEN = /usr/bin/doxygen # Note the directory name below is also hard # coded into the doxygen configuration file. DOXYGEN_HTML = doxygen_html ECHO = /bin/echo EXE_SUFFIX = FIND = /usr/bin/find FOOTER = footer.html FOOTER_TEMPLATE = $(TOP)/../inf_generic/cpp/doc/footer_template.html GREP = /bin/grep HEADER = $(TOP)/../inf_generic/cpp/doc/Product_Markings.html HOSTNAME := $(shell $(ECHO) $$HOSTNAME) HTML_OUTPUT = html INFO = Built on $(HOSTNAME), $(PRODUCTNAME) using INFO += compiler $(MY_CXXNAME) version $(CXXVER) for INFO += address mode $(ADDRMODE) bits. JAVAC = \ JAVA_HOME=$(JAVA_HOME) \ PATH=$(MY_PATH) javac # Note the directory name below is also hard # coded into the ant build.xml file. JAVADOC_HTML = javadoc_html JAVA_VER = $(shell $(JAVAC) -version 2>&1 | \ $(SED) -e 's|^javac ||' -e 's|_.*$$||') JFOOTER = -DJFOOTER="$(shell $(CAT) ../doc/$(FOOTER))" JHEADER = -DJHEADER="$(shell $(CAT) $(HEADER))" JINFO = Built on hostname $(HOSTNAME), $(PRODUCTNAME) JINFO += using jdk version $(JAVA_VER) for address mode JINFO += $(ADDRMODE) bits. JOBJDIR = jdk_$(JAVA_VER) LD_CMD = $^ LD_LIBRARY_PATH = LD_OUT = -o $@ LIB_PREFIX = lib LIB_SUFFIX = a LIB_SO = so LINK_TYPE = shared LN = /bin/ln -s MKDIR = /bin/mkdir -p MY_ANT_OPTS += $(ANT_OPTS) MY_CC = $(CCPATH)/$(MY_CCNAME) MY_CCNAME = $(shell $(BASENAME) $(CCTEMP)) MY_CXX = $(CXXPATH)/$(MY_CXXNAME) MY_CXXNAME = $(shell $(BASENAME) $(CXXTEMP)) MY_DFLAGS += $(THREADING) MY_LD = $(MY_CXX) MY_LDXFLAGS += $(THREADING) NULL = /dev/null OBJDIR = $(OSTYPE)$(ADDRMODE)_rh$(OSREL)_$(MY_CCNAME)$(CXXVER)$(LIBDBG) OBJ_EXT = o OSREL = $(shell $(ECHO) "$(PRODUCTNAME)" | \ $(SED) -re 's|^.*release ||' \ -e 's| .*||') OSTYPE = linux # Build up execution environment PATH variable. Java 7 update 15 no # longer needs a wrapper script to run within ClearCase. Starting # with Java 4 upate 5 through at least Java 7 update needed a # wrapper script to insert an interposer on Linux platforms to fix # the issue of calling the Linux unique /proc/self command that # returns a symlink to the calling process and then assuming it # gives a valid location in the file system. ifeq "$(findstring jdk6_,$(JAVA_HOME))" "jdk6_" MY_PATH := $(TOOLS)/$(OSTYPE)/java_fix:$(JAVA_HOME)/bin:$(ANT_HOME)/bin:$(PATH) else MY_PATH := $(JAVA_HOME)/bin:$(ANT_HOME)/bin:$(PATH) endif ifneq "$(findstring $(CCPATH),$(PATH))" "$(CCPATH)" MY_PATH := $(CCPATH):$(JAVA_HOME)/bin:$(ANT_HOME)/bin:$(PATH) endif ifneq "$(findstring $(CXXPATH),$(PATH))" "$(CXXPATH)" MY_PATH := $(CXXPATH):$(JAVA_HOME)/bin:$(ANT_HOME)/bin:$(PATH) endif PLATFORM_LIBS = -lrt PLATFORM_OPTS = -Wall -Wconversion PLATFORM_OPTS_SHARED= -fPIC PLATFORM_OPTS_STATIC= -fpic PRODUCTNAME := $(shell $(CAT) /etc/redhat-release) QINFO := "$(INFO)" QJINFO := "$(JINFO)" RM = /bin/rm -f RMDIR = /bin/rmdir --ignore-fail-on-non-empty SED = /bin/sed SHARED = -shared SHELL = /bin/sh STATIC = -static TEMPLATE_DEPTH = -ftemplate-depth-50 TEST = /usr/bin/test THREADING = -pthread # Was there a "DEBUG=whatever" option on the command line? ifdef DEBUG CDEBUG = -g LIBDBG = _$(LINK_TYPE)_d OPTIMIZED = else CDEBUG = LIBDBG = _$(LINK_TYPE) OPTIMIZED = -O3 endif ifeq "$(LINK_TYPE)" "static" MY_LDXFLAGS += $(STATIC) LINK = $(LINK_STATIC) PLATFORM_OPTS += $(PLATFORM_OPTS_STATIC) else ifeq "$(LINK_TYPE)" "shared" LIB_NAME = $(SHARED) -Wl,-h -Wl,$(@F) LIB_SUFFIX = $(LIB_SO) LINK = $(LINK_SHARED) PLATFORM_LIBS += -ldl PLATFORM_OPTS += $(PLATFORM_OPTS_SHARED) else $(error Unsupported LINK_TYPE=shared|static shared is default) endif endif else ##################################### # Windows Platform Macros # ##################################### ifeq "$(OS)" "Windows_NT" # Cl.exe uses CL, _CL_, and INCLUDE. # CL, if defined, prepends arguments to the driver command line. # _CL_, if defined, appends arguments to the command line. # INCLUDE points to the include subdirectory of your Visual C++ # installation. # Link.exe uses LINK, LIB, PATH, and TMP. # LINK, if defined, prepends arguments in the command line. LIB, # if defined, specifies the path that the LINK tools use when # searching for an object, library, or other file specified on the # command line or by the /BASE option. It also uses the LIB path # to find a .pdb file named in an object. # # The LIB variable can contain one or more path specifications, # separated by semicolons. One path must point to the lib # subdirectory of your Visual C++ installation. # Note: The LIBPATH environment variable is not used to locate a # DLL. Yet for link, LIBPATH take precedence over the LIB variable. # # PATH is used if the tool must run CVTRES and cannot find the # file in the same directory as LINK. (LINK requires CVTRES to # link a .res file.) PATH must point to the bin subdirectory of # your Visual C++ installation. # TMP is used to specify a directory when linking OMF or .res # files. ANT = \ JINFO=$(QJINFO) \ ANT_ARGS="$(ANT_ARGS)" \ ANT_HOME=$(ANT_HOME) \ ANT_OPTS="$(MY_ANT_OPTS)" \ JAVA_HOME=$(JAVA_HOME) \ PATH=$(MY_PATH) ant --noconfig ANT_HOME = $(TOOLS)/apache-ant AR_OUT = -out:"$@" AWK = $(CYGPATH)/bin/awk$(EXE_SUFFIX) CAT = $(CYGPATH)/bin/cat$(EXE_SUFFIX) CMAKE_PNAME_SEP = / CMD = cmd$(EXE_SUFFIX) CP = $(CYGPATH)/bin/cp$(EXE_SUFFIX) C_OUT = -Fo"$@" DOXYFILE = Doxyfile.txt DOXYGEN = $(CYGPATH)/bin/doxygen$(EXE_SUFFIX) # Note the directory name below is also hard # coded into the doxygen configuration file. DOXYGEN_HTML = doxygen_html EXE_SUFFIX = .exe FIND = $(CYGPATH)/bin/find$(EXE_SUFFIX) FOOTER = footer.html FOOTER_TEMPLATE = $(TOP)/../inf_generic/cpp/doc/footer_template.html GREP = $(CYGPATH)/bin/grep$(EXE_SUFFIX) HEADER = $(TOP)/../inf_generic/cpp/doc/Product_Markings.html HOSTNAME := $(shell $(ECHO) $$HOSTNAME) HTML_OUTPUT = html INDEX_PROTO_SDD = $(TOP)/../inf_generic/cpp/doc/index_proto_sdd.html INDEX_FILENAME = context_index.html INFO = Built on hostname $(HOSTNAME), $(PRODUCTNAME) INFO += $(PRODUCTVER) using Studio compiler version INFO += $(MS_STUDIO_VER) for address mode INFO += $(ADDRMODE) bits. JAVAC = \ JAVA_HOME=$(JAVA_HOME) \ PATH=$(MY_PATH) javac # Note the directory name below is also hard # coded into the ant build.xml file. JAVADOC_HTML = javadoc_html JAVA_VER = $(shell $(JAVAC) -version 2>&1 | \ $(SED) -e 's|^javac ||' -e 's|_.*$$||') JFOOTER = -DJFOOTER="$(shell $(CAT) ../doc/$(FOOTER))" JHEADER = -DJHEADER="$(shell $(CAT) $(HEADER))" JINFO = Built on hostname $(HOSTNAME), $(PRODUCTNAME) JINFO += $(PRODUCTVER) using jdk version $(JAVA_VER) JINFO += for address mode $(ADDRMODE) bits. JOBJDIR = jdk_$(JAVA_VER) LD_CMD = $^ LD_OUT = -out:"$@" LD_LIBRARY_PATH = LIB_PREFIX = LIB_SUFFIX = lib LIB_SO = dll LIBS = $(patsubst -L%,-libpath:%,$(LIBSTMP1)) LIBSTMP1 = $(patsubst -l%,%.$(LIB_SUFFIX),$(LIBX)) LINK_TYPE = shared LS = $(CYGPATH)/bin/ls$(EXE_SUFFIX) # Begin fix for known clearmake defect Ref #: 1141322 MAKE := $(subst \,/,$(MAKE)) MKDIR = $(CYGPATH)/bin/mkdir$(EXE_SUFFIX) -p ifneq "$(VS100COMNTOOLS)" "" MS_STUDIO_VER = 10.0 else ifneq "$(VS80COMNTOOLS)" "" MS_STUDIO_VER = 8.0 endif endif MY_ANT_OPTS += $(ANT_OPTS) MY_DFLAGS += -DVC_EXTRALEAN -DWIN32 -D_MBCS -D_LIB NULL = NUL OBJ_EXT = obj OSTYPE = win ifeq "$(MS_STUDIO_VER)" "10.0" ADDRMODE = 64 COMP_INCS = \ -I"$(WVSPATH)/VC/include" \ -I"$(WVSPATH)/VC/atlmfc/include" \ -I"$(WSDKDIR)/Include" MY_DFLAGS += \ -D_CRT_NONSTDC_NO_WARNINGS \ -D_CRT_SECURE_NO_WARNINGS \ -D_SCL_SECURE_NO_WARNINGS PLATFORM_OPTS = -nologo -W3 -EHsc -GR -Gy -GS \ -Zc:forScope $(COMP_INCS) # Create Cygwin; CVSPATH, CSDKDIR; and Windows; WVSPATH, WSDKDIR # style paths. Get the Visual Studio installation pointer # environment variable. Truncate the path to the root of the # installation location. WVSPATH := $(shell $(ECHO) "$$VS100COMNTOOLS" | \ $(SED) -re 's|^(/cygdrive/)([a-zA-Z])(.*)|\2:\3|' \ -e 's|[\\/]Common7[\\/]Tools[\\/]||' \ -e 's|\\|/|g') CVSPATH := $(shell $(ECHO) "$(WVSPATH)" | \ $(SED) -re 's|^([a-zA-Z])(:)(.*)|/cygdrive/\1\3|') # Retrieve from the registry the Windows SDK installation directory. WSDKDIR := $(shell reg query \ 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A' \ /v InstallationFolder 2>$(NULL) | \ $(SED) -re 's|\r$$||g' \ -e '/^$$/d' \ -e '/HKEY/d' \ -e 's|^(.*)([A-Za-z]:.*)$$|\2|' \ -e 's|\\|/|g' \ -e 's|/$$||') ifeq "$(WSDKDIR)" "" $(error Not able to configure for Windows SDK install location.) else CSDKDIR := $(shell $(ECHO) "$(WSDKDIR)" | \ $(SED) -re 's|^([a-zA-Z])(:)(.*)|/cygdrive/\1\3|') endif ifeq "$(ADDRMODE)" "64" # 64 bit address mode AR = $(MY_LD) -lib -nologo -machine:X64 JAVA_HOME = $(TOOLS)/$(OSTYPE)/jdk7_$(ADDRMODE) MT = "$(CSDKDIR)/bin/x64/mt$(EXE_SUFFIX)" MY_CC = "$(CVSPATH)/VC/bin/x86_amd64/cl$(EXE_SUFFIX)" MY_CXX = $(MY_CC) MY_DFLAGS += -D_WIN64 MY_LD = "$(CVSPATH)/VC/bin/x86_amd64/link$(EXE_SUFFIX)" MY_PATH := "$(CVSPATH)/Common7/IDE:$(CVSPATH)/VC/bin/x86_amd64:$(CVSPATH)/VC/bin:$(CSDKDIR)/bin/x64:$(JAVA_HOME)/bin:$(ANT_HOME)/bin:$(PATH)" OBJDIR = $(OSTYPE)$(ADDRMODE)_vs$(MS_STUDIO_VER)$(LIBDBG) OPTIMIZED += -favor:INTEL64 PLATFORM_LIBS = -nologo $(SUB_SYSTEM) $(MLINK) \ $(PROC_ARCH) user32.lib advapi32.lib \ -libpath:"$(WVSPATH)/VC/lib/amd64" \ -libpath:"$(WVSPATH)/VC/atlmfc/lib/amd64" \ -libpath:"$(WSDKDIR)/Lib/x64" PROC_ARCH = -machine:X64 RC = "$(CSDKDIR)/bin/x64/rc$(EXE_SUFFIX)" -r else ifeq "$(ADDRMODE)" "32" # 32 bit address mode AR = $(MY_LD) -lib -nologo JAVA_HOME = $(TOOLS)/$(OSTYPE)/jdk6_$(ADDRMODE) MT = "$(CSDKDIR)/bin/mt$(EXE_SUFFIX)" MY_CC = "$(CVSPATH)/VC/bin/cl$(EXE_SUFFIX)" MY_CXX = $(MY_CC) MY_LD = "$(CVSPATH)/VC/bin/link$(EXE_SUFFIX)" MY_PATH := "$(CVSPATH)/Common7/IDE:$(CVSPATH)/VC/bin:$(CSDKDIR)/bin:$(JAVA_HOME)/bin:$(ANT_HOME)/bin:$(PATH)" OBJDIR = $(OSTYPE)$(ADDRMODE)_vs$(MS_STUDIO_VER)$(LIBDBG) PLATFORM_LIBS = -nologo $(SUB_SYSTEM) $(MLINK) \ $(PROC_ARCH) user32.lib advapi32.lib \ -libpath:"$(WVSPATH)/VC/lib" \ -libpath:"$(WVSPATH)/VC/atlmfc/lib" \ -libpath:"$(WSDKDIR)/Lib" PROC_ARCH = -machine:$(shell $(ECHO) "$$PROCESSOR_ARCHITECTURE") RC = "$(CSDKDIR)/bin/rc$(EXE_SUFFIX)" -r else # Bad address mode $(error Address mode is either 64, the default, or 32 bit \ not "$(ADDRMODE)") endif endif else # End Visual Studio 10.0 block ifeq "$(MS_STUDIO_VER)" "8.0" ADDRMODE = 32 ifneq "$(ADDRMODE)" "32" $(error Only address mode 32 is supported with \ studio version "$(MS_STUDIO_VER)") endif AR = $(MY_LD) -lib -nologo COMP_INCS = \ -I"$(WVSPATH)/VC/include" \ -I"$(WVSPATH)/VC/atlmfc/include" \ -I"$(WVSPATH)/VC/PlatformSDK/Include" JAVA_HOME = $(TOOLS)/$(OSTYPE)/jdk6_$(ADDRMODE) MT = "$(CVSPATH)/VC/bin/mt$(EXE_SUFFIX)" MY_CC = "$(CVSPATH)/VC/bin/cl$(EXE_SUFFIX)" MY_CXX = $(MY_CC) MY_DFLAGS += \ -D_CRT_SECURE_NO_DEPRECATE \ -D_CRT_NONSTDC_NO_DEPRECATE \ -D_SCL_SECURE_NO_DEPRECATE MY_LD = "$(CVSPATH)/VC/bin/link$(EXE_SUFFIX)" # Create Cygwin; CVSPATH, and Windows, WVSPATH, style paths. # Get the Visual Studio installation pointer environment variable. # Truncate the path to the root of the installation location. WVSPATH := $(shell $(ECHO) "$$VS80COMNTOOLS" | \ $(SED) -re 's|^(/cygdrive/)([a-zA-Z])(.*)|\2:\3|' \ -e 's|[\\/]Common7[\\/]Tools[\\/]||' \ -e 's|\\|/|g') CVSPATH := $(shell $(ECHO) "$(WVSPATH)" | \ $(SED) -re 's|^([a-zA-Z])(:)(.*)|/cygdrive/\1\3|') MY_PATH := "$(CVSPATH)/Common7/IDE:$(CVSPATH)/VC/bin:$(CVSPATH)/SDK/v2.0/bin:$(JAVA_HOME)/bin:$(ANT_HOME)/bin:$(PATH)" OBJDIR = $(OSTYPE)$(ADDRMODE)_vs$(MS_STUDIO_VER)$(LIBDBG) PLATFORM_LIBS = -nologo $(SUB_SYSTEM) $(MLINK) \ $(PROC_ARCH) user32.lib advapi32.lib \ -libpath:"$(WVSPATH)/VC/PlatformSDK/Lib" \ -libpath:"$(WVSPATH)/VC/lib" \ -libpath:"$(WVSPATH)/VC/atlmfc/lib" PLATFORM_OPTS = -nologo -W3 -EHsc -GR -Gy -GS \ -Zc:forScope $(COMP_INCS) PROC_ARCH = -machine:$(shell $(ECHO) "$$PROCESSOR_ARCHITECTURE") RC = "$(CVSPATH)/VC/bin/rc$(EXE_SUFFIX)" -r else # End Visual Studio 8.0 block $(error Unsupported Visual Studio Version "$(MS_STUDIO_VER)", \ supported versions are 10.0 and 8.0) endif endif PERL_COPY_SCRIPT = $(TOP)/../inf_generic/cpp/doc/perlCopyRecurse.pl PLATFORM_OPTS_STATIC= PRODUCTNAME := $(shell reg query \ 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' \ /v ProductName 2>$(NULL) | \ $(SED) -re 's|\r$$|\n|g' \ -e '/HKEY/d' \ -e 's|REG_SZ||' \ -e 's|\\|/|g' \ -e 's|^[ ]*||' \ -e 's|[ ]+|: |') PRODUCTVER := $(shell $(CMD) /c ver | \ $(SED) -re 's|^.*[[]||' \ -e 's|[]].*$$||') QINFO := "$(INFO)" QJINFO := "$(JINFO)" RM = $(CYGPATH)/bin/rm$(EXE_SUFFIX) -f RMDIR = $(CYGPATH)/bin/rmdir --ignore-fail-on-non-empty SED = $(CYGPATH)/bin/sed$(EXE_SUFFIX) SHARED = \ -dll \ -implib:"$(LIBPATH)/$(LIB_PREFIX)$(PROJECT).$(LIB_SUFFIX)" SORT = $(CYGPATH)/bin/sort$(EXE_SUFFIX) STATIC = SUB_SYSTEM = -subsystem:console TEST = $(CYGPATH)/bin/test$(EXE_SUFFIX) WEB_LOC = # Was there a "DEBUG=whatever" option on the command line? ifdef DEBUG CDEBUG = -Z7 -RTC1 LIBDBG = _$(LINK_TYPE)_d MLINK = -debug MY_DFLAGS += -D_DEBUG OPTIMIZED += -Od ifeq "$(LINK_TYPE)" "static" CDEBUG += -MTd PLATFORM_LIBS += \ -nodefaultlib:libcd.lib \ -nodefaultlib:msvcrtd.lib \ -nodefaultlib:libcmtd.lib \ -nodefaultlib:nafxcwd.lib \ libcmtd.lib else CDEBUG += -MDd endif else # Begin release block CDEBUG = LIBDBG = _$(LINK_TYPE) MY_DFLAGS += -DNDEBUG OPTIMIZED += -Ox ifeq "$(LINK_TYPE)" "static" CDEBUG += -MT PLATFORM_LIBS += \ -nodefaultlib:libc.lib \ -nodefaultlib:msvcrt.lib \ -nodefaultlib:libcmt.lib \ -nodefaultlib:nafxcw.lib \ libcmt.lib else CDEBUG += -MD endif endif # Linker options section. ifneq "$(LINK_TYPE)" "static" MY_LDXFLAGS += \ -manifest \ -manifestfile:"$@.intermediate.manifest" MANIFEST = \ ;$(MT) -manifest "$@.intermediate.manifest" \ -outputresource:"$@;1"; \ $(RM) "$@.intermediate.manifest" ifeq "$(LINK_TYPE)" "dll" MANIFEST := $(subst 1,2,$(MANIFEST)) endif endif ifneq "$(LINK_TYPE)" "dll" LINK = $(LINK_STATIC) PLATFORM_LIBS += -incremental:no PLATFORM_OPTS += $(PLATFORM_OPTS_STATIC) endif # Finish testing allowed link types. ifeq "$(LINK_TYPE)" "static" else ifeq "$(LINK_TYPE)" "shared" else ifeq "$(LINK_TYPE)" "dll" MY_LDXFLAGS += \ -libpath:"." \ -libpath:"$(LIBPATH)" \ -incremental \ $(SHARED) \ $(SUB_SYSTEM) \ $(PROC_ARCH) LINK = $(LINK_DLL) PLATFORM_OPTS += $(PLATFORM_OPTS_SHARED) else $(error Unsupported LINK_TYPE=static|shared|dll \ shared (MD) is default) endif endif endif else $(error Unsupported build platform = $(OSTYPE)) endif endif ############################ # COTS Library path macros # ############################ BINPATH = $(TOP)/cpp/bin/$(OBJDIR) LIBPATH = $(TOP)/cpp/lib/$(OBJDIR) GENERIC = generic ifeq "$(LINK_TYPE)" "dll" LIBRARY = $(LIBPATH)/$(LIB_PREFIX)$(PROJECT).$(LIB_SO) else LIBRARY = $(LIBPATH)/$(LIB_PREFIX)$(PROJECT).$(LIB_SUFFIX) endif GENERIC_LIB = -L$(LIBPATH) -l$(GENERIC) BOOST_DIR = $(TOP)/../inf_boost ifeq "$(OSTYPE)" "win" BOOST_INCS = -I$(BOOST_DIR) else ifeq "$(findstring gcc,$(MY_CC))" "gcc" BOOST_INCS = -isystem $(BOOST_DIR) endif ifeq "$(findstring clang,$(MY_CC))" "clang" BOOST_INCS = -isystem $(BOOST_DIR) endif endif BOOST_LIBPATH = $(BOOST_DIR)/lib/$(OBJDIR) # Just point to the directory as each release the library names change. ifeq "$(OSTYPE)" "win" BOOST_LIBS = -L$(BOOST_LIBPATH) else BOOST_LIBS = -L$(BOOST_LIBPATH) \ -lboost_filesystem \ -lboost_system \ -lboost_regex \ -lboost_serialization \ -lboost_chrono \ -lboost_thread endif # Users can add includes in the leaf makefiles 'EXTRA_INCS="-I..."' EXTRA_INCS = INCBASE = $(TOP)/cpp/include GENERIC_INCS = -I. -I$(INCBASE) INCS = \ $(EXTRA_INCS) \ $(GENERIC_INCS) \ $(BOOST_INCS) # Users can add libraries in the leaf makefiles # 'EXTRA_LIBS="-L.../libexample -lexample"' EXTRA_LIBS = RELSRCPATH = $(TOP)/cpp/src DIRS = \ $(RELSRCPATH)/src1 \ $(RELSRCPATH)/src2 \ $(RELSRCPATH)/src3 APPSSRCPATH = $(TOP)/cpp/apps BDIRS = TESTSRCPATH = $(TOP)/cpp/test TDIRS = CT = cleartool ############################ # Source and object macros # ############################ # Empty the suffices so that make does not try and use any built in # rules which can break the build process. .SUFFIXES: # Wrapping lines in this section causes extra spaces to # be added in to the macro file lists. While it may not # cause a failure it is a trap to be avoided if possible. CPPSRCS = $(filter-out $(EXCLUDES),$(wildcard *.cpp)) CPPOBJS = $(patsubst %.cpp,$(OBJDIR)/%.$(OBJ_EXT),$(CPPSRCS)) CPPDEPFILES = $(patsubst %.cpp,$(OBJDIR)/%.d,$(CPPSRCS)) CSRCS = $(filter-out $(EXCLUDES),$(wildcard *.c)) COBJS = $(patsubst %.c,$(OBJDIR)/%.$(OBJ_EXT),$(CSRCS)) CDEPFILES = $(patsubst %.c,$(OBJDIR)/%.d,$(CSRCS)) EXES = $(patsubst %.cpp,$(OBJDIR)/%$(EXE_SUFFIX),$(CPPSRCS)) BIN = $(BINPATH)/$(PROGRAM)$(EXE_SUFFIX) BINS = $(patsubst %.cpp,$(BINPATH)/%$(EXE_SUFFIX),$(CPPSRCS)) RCS = $(filter-out $(EXCLUDES),$(wildcard *.rc)) RESS = $(patsubst %.rc,$(OBJDIR)/%.res,$(RCS)) SRCS = $(CPPSRCS) $(CSRCS) OBJS = $(CPPOBJS) $(COBJS) ifeq "$(OSTYPE)" "win" OBJS += $(RESS) endif DEPFILES = $(CPPDEPFILES) $(CDEPFILES) # The UNIX/Linux linker is not able to handle libraries within libraries # so we use these macros to roll up object files into a larger library. FIND_SRCS = $(filter-out $(EXCLUDES),$(wildcard $(DIR)/*.cpp)) FIND_OBJS = $(filter-out $(EXCLUDES),$(patsubst $(DIR)/%.cpp,$(DIR)/$(OBJDIR)/%.$(OBJ_EXT),$(FIND_SRCS))) LIBRARY_OBJS = $(foreach DIR,$(DIRS),$(FIND_OBJS)) # Users can specify compile options on command-line via 'CXXFLAGS="..."' MY_CFLAGS += \ -c \ $(CDEBUG) \ $(OPTIMIZED) \ $(MY_DFLAGS) \ $(DFLAGS) \ $(INCS) \ $(PLATFORM_OPTS) MY_CXXFLAGS += \ $(MY_CFLAGS) \ $(TEMPLATE_DEPTH) COMPILE = \ INFO=$(QINFO) \ PATH=$(MY_PATH) $(MY_CXX) $(MY_CXXFLAGS) \ $(CXXFLAGS) $(C_OUT) $< C_COMPILE = \ INFO=$(QINFO) \ PATH=$(MY_PATH) $(MY_CC) $(MY_CFLAGS) \ $(CFLAGS) $(C_OUT) $< COMPILE_VER_OBJ = \ INFO=$(QINFO) \ PATH=$(MY_PATH) $(MY_CXX) $(MY_CXXFLAGS) \ $(CXXFLAGS) $(REL_VERSION) $(C_OUT) $< RC_COMPILE = \ INFO=$(QINFO) \ PATH=$(MY_PATH) $(RC) $(MY_DFLAGS) $(DFLAGS) \ $(INCS) $(COMP_INCS) -fo $@ $< # Macro script for dependency file generation to structure the format of # the files. For Windows make sure the dependency path is not in Windows # format. Filter out compiler and platform headers from the dependencies. ifeq "$(OSTYPE)" "win" GEN_CPP_DEP_FILE = \ $(ECHO) "$(@D)/$(*F).$(OBJ_EXT) $@ : $^ \\" > $@; \ PATH=$(MY_PATH) $(MY_CXX) -Zs -showIncludes $(MY_CXXFLAGS) \ $(CXXFLAGS) $(INCS) $< | \ $(GREP) "^Note: including file: " | \ $(SED) -re '/[Mm]icrosoft/d' \ -e 's,Note: including file: ,,' \ -e 's,^[ ]*, ,' \ -e 's,\\,/,g' \ -e 's,^( )([a-zA-Z])(:)(.*), /cygdrive/\2\4,' \ -e 's,$$, \\,' | \ $(SORT) -u | \ $(SED) -e '$$s, \\$$,,' >> $@; \ [ -s $@ ] || $(RM) $@ else GEN_CPP_DEP_FILE = \ PATH=$(MY_PATH) $(MY_CXX) -MM $(MY_DFLAGS) $(DFLAGS) \ $(INCS) $(PLATFORM_OPTS) $< | \ $(SED) -re 's,($*)\.$(OBJ_EXT)[ :]*,'$(@D)/'\1.$(OBJ_EXT) $@ : ,g' \ -e 's,^( )([a-zA-Z])(:)(.*), /cygdrive/\2\4,' > $@; \ [ -s $@ ] || $(RM) $@ endif ifeq "$(OSTYPE)" "win" GEN_C_DEP_FILE = \ $(ECHO) "$(@D)/$(*F).$(OBJ_EXT) $@ : $^ \\" > $@; \ PATH=$(MY_PATH) $(MY_CC) -Zs -showIncludes $(MY_CFLAGS) \ $(CFLAGS) $(INCS) $< | \ $(GREP) "^Note: including file: " | \ $(SED) -re '/[Mm]icrosoft/d' \ -e 's,Note: including file: ,,' \ -e 's,^[ ]*, ,' \ -e 's,\\,/,g' \ -e 's,^( )([a-zA-Z])(:)(.*), /cygdrive/\2\4,' \ -e 's,$$, \\,' | \ $(SORT) -u | \ $(SED) -e '$$s, \\$$,,' >> $@; \ [ -s $@ ] || $(RM) $@ else GEN_C_DEP_FILE = \ PATH=$(MY_PATH) $(MY_CC) -MM $(MY_DFLAGS) $(DFLAGS) $(INCS) \ $(PLATFORM_OPTS) $< | \ $(SED) -re 's,($*)\.$(OBJ_EXT)[ :]*,'$(@D)/'\1.$(OBJ_EXT) $@ : ,g' \ -e 's,^( )([a-zA-Z])(:)(.*), /cygdrive/\2\4,' > $@; \ [ -s $@ ] || $(RM) $@ endif # Users can specify link options on command-line via 'LDXFLAGS="...."' # Link executable created from one source file. EXELINK = \ PATH=$(MY_PATH) \ LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ $(MY_LD) \ $(LD_OUT) \ $(MY_LDXFLAGS) \ $(LDXFLAGS) \ $< \ $(LIBS) \ $(PLATFORM_LIBS) \ $(MANIFEST) # Link executable created from multiple source files. COMPLEX_EXE_LINK = \ PATH=$(MY_PATH) \ LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ $(MY_LD) \ $(LD_OUT) \ $(MY_LDXFLAGS) \ $(LDXFLAGS) \ $(OBJS) \ $(LIBS) \ $(PLATFORM_LIBS) \ $(MANIFEST) # Define library link command. LINK_STATIC = \ PATH=$(MY_PATH) \ $(AR) \ $(AR_OUT) \ $(LDXFLAGS) \ $(LD_CMD) LINK_SHARED = \ PATH=$(MY_PATH) \ LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ $(MY_LD) \ $(LD_OUT) \ $(LIB_NAME) \ $(MY_LDXFLAGS) \ $(LDXFLAGS) \ $(LD_CMD) LINK_DLL = \ PATH=$(MY_PATH) \ LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \ $(MY_LD) \ $(LD_OUT) \ $(LIB_NAME) \ $(MY_LDXFLAGS) \ $(LDXFLAGS) \ $(LD_CMD) \ $(LIBS) \ $(PLATFORM_LIBS) \ $(MANIFEST)