# -*- makefile -*- # # comm.nmk: COMMON NMAKE FRAGMENT # # $Id$ # Copyright (c) 2001-2014 Ravenbrook Limited. See end of file for license. # # DESCRIPTION # # This makefile fragment is included in more specific makefiles for # platforms which use nmake. # # %%PART: When adding a new part, add a new parameter for the files included # in the part # Parameters: # PFM platform code, e.g. "w3i3mv" # PFMDEFS /D options to define platforms preprocessor symbols # to the compiler. Avoid using this if possible, as it # prevents the MPS being built with a simple command like # "cl mps.c". # MPMCOMMON list of sources which make up the "mpm" part for all # platforms. Each source is stripped of its .c extension # and surrounded with [brackets]. # MPMPF as above for the current platform. # PLINTH as above for the "plinth" part # AMC as above for the "amc" part # AMS as above for the "ams" part # LO as above for the "lo" part # POOLN as above for the "pooln" part # SNC as above for the "snc" part # POOLS as above for all pools included in the target # MPM as above for the MPMCOMMON + MPMPF + PLINTH + POOLS # DW as above for the "dw" part # FMTTEST as above for the "fmttest" part # FMTSCHEME as above for the "fmtscheme" part # TESTLIB as above for the "testlib" part # TESTTHR as above for the "testthr" part # NOISY if defined, causes command to be emitted # # # EDITING # # To add new targets. varieties, and parts: # Search for the string "%%TARGET", "%%VARIETY", or "%%PART" in this makefile # and follow the instructions. # # TARGETS # # # %%TARGET: When adding a new target, add it to one of the variables # in this section. Library components go in LIB_TARGETS. LIB_TARGETS=mps.lib # Test cases go in TEST_TARGETS. TEST_TARGETS=\ abqtest.exe \ airtest.exe \ amcss.exe \ amcsshe.exe \ amcssth.exe \ amsss.exe \ amssshe.exe \ apss.exe \ arenacv.exe \ awlut.exe \ awluthe.exe \ awlutth.exe \ btcv.exe \ bttest.exe \ djbench.exe \ exposet0.exe \ expt825.exe \ finalcv.exe \ finaltest.exe \ fotest.exe \ gcbench.exe \ landtest.exe \ locbwcss.exe \ lockcov.exe \ lockut.exe \ locusss.exe \ locv.exe \ messtest.exe \ mpmss.exe \ mpsicv.exe \ mv2test.exe \ nailboardtest.exe \ poolncv.exe \ qs.exe \ sacss.exe \ segsmss.exe \ steptest.exe \ teletest.exe \ walkt0.exe \ zcoll.exe \ zmess.exe # Stand-alone programs go in EXTRA_TARGETS if they should always be # built, or in OPTIONAL_TARGETS if they should only be built if EXTRA_TARGETS=mpseventcnv.exe mpseventtxt.exe OPTIONAL_TARGETS=mpseventsql.exe # This target records programs that we were once able to build but # can't at the moment: # # replay -- depends on the EPVM pool. UNBUILDABLE_TARGETS=replay.exe ALL_TARGETS=$(LIB_TARGETS) $(TEST_TARGETS) $(EXTRA_TARGETS) # PARAMETERS # # # %%PART: When adding a new part, add the sources for the new part here. MPMCOMMON=\ [abq] \ [arena] \ [arenacl] \ [arenavm] \ [arg] \ [boot] \ [bt] \ [buffer] \ [cbs] \ [dbgpool] \ [dbgpooli] \ [event] \ [failover] \ [format] \ [freelist] \ [global] \ [land] \ [ld] \ [locus] \ [message] \ [meter] \ [mpm] \ [mpsi] \ [nailboard] \ [policy] \ [pool] \ [poolabs] \ [poolmfs] \ [poolmrg] \ [poolmv2] \ [poolmv] \ [protocol] \ [range] \ [ref] \ [reserv] \ [ring] \ [root] \ [sa] \ [sac] \ [seg] \ [shield] \ [splay] \ [ss] \ [table] \ [trace] \ [traceanc] \ [tract] \ [tree] \ [version] \ [vm] \ [walk] PLINTH = [mpsliban] [mpsioan] AMC = [poolamc] AMS = [poolams] [poolamsi] AWL = [poolawl] LO = [poollo] MVFF = [poolmvff] POOLN = [pooln] SNC = [poolsnc] FMTDY = [fmtdy] [fmtno] FMTTEST = [fmthe] [fmtdy] [fmtno] [fmtdytst] FMTSCHEME = [fmtscheme] TESTLIB = [testlib] [getoptl] TESTTHR = [testthrw3] POOLS = $(AMC) $(AMS) $(AWL) $(LO) $(MV2) $(MVFF) $(SNC) MPM = $(MPMCOMMON) $(MPMPF) $(POOLS) $(PLINTH) # CHECK PARAMETERS # # # %%PART: When adding a new part, add checks for the parameter with the # sources for the new part. !IFNDEF PFM !ERROR comm.nmk: PFM not defined !ENDIF !IFNDEF MPM !ERROR comm.nmk: MPM not defined !ENDIF !IFNDEF MPMCOMMON !ERROR comm.nmk: MPMCOMMON not defined !ENDIF !IFNDEF MPMPF !ERROR comm.nmk: MPMPF not defined !ENDIF !IFNDEF PLINTH !ERROR comm.nmk: PLINTH not defined !ENDIF !IFNDEF LO !ERROR comm.nmk: LO not defined !ENDIF !IFNDEF AMC !ERROR comm.nmk: AMC not defined !ENDIF !IFNDEF AMS !ERROR comm.nmk: AMS not defined !ENDIF !IFNDEF POOLN !ERROR comm.nmk: POOLN not defined !ENDIF !IFNDEF SNC !ERROR comm.nmk: SNC not defined !ENDIF !IFNDEF FMTDY !ERROR comm.nmk: FMTDY not defined !ENDIF !IFNDEF FMTTEST !ERROR comm.nmk: FMTTEST not defined !ENDIF !IFNDEF FMTSCHEME !ERROR comm.nmk: FMTSCHEME not defined !ENDIF !IFNDEF TESTLIB !ERROR comm.nmk: TESTLIB not defined !ENDIF !IFNDEF TESTTHR !ERROR comm.nmk: TESTTHR not defined !ENDIF # DECLARATIONS !IFDEF NOISY ECHO = rem !ELSE .SILENT: ECHO = echo !ENDIF # C FLAGS CFLAGSTARGETPRE = CFLAGSTARGETPOST = CRTFLAGSHOT = CRTFLAGSCOOL = LINKFLAGSHOT = LINKFLAGSCOOL = CFLAGSSQLPRE = /nologo $(PFMDEFS) CFLAGSCOMMONPRE = /nologo $(PFMDEFS) $(CFLAGSTARGETPRE) CFLAGSSQLPOST = CFLAGSCOMMONPOST = $(CFLAGSTARGETPOST) # Flags for use in the variety combinations CFLAGSHOT = /O2 # (above /O2 (maximise speed) used to be set to /Ox # (maximise optimisations) in for tool versions before VS 9) # We used to have /GZ here (stack probe). # Note that GZ is specific to version 12 of the cl tool. drj 2003-11-04 # It is ignored on earlier versions of the cl tool. # /GZ here generates a dependency on the C library and when we are # building a DLL, mpsdy.dll, the linker step will fail (error LNK2001: # unresolved external symbol __chkesp). See # http://support.microsoft.com/kb/q191669/ CFLAGSCOOL = CFLAGSINTERNAL = /Zi CFLAGSEXTERNAL = # The combinations of variety # %%VARIETY: When adding a new variety, define a macro containing the set # of flags for the new variety. CFRASH = /DCONFIG_VAR_RASH $(CRTFLAGSHOT) $(CFLAGSHOT) $(CFLAGSEXTERNAL) CFHOT = /DCONFIG_VAR_HOT $(CRTFLAGSHOT) $(CFLAGSHOT) $(CFLAGSINTERNAL) CFCOOL = /DCONFIG_VAR_COOL $(CRTFLAGSCOOL) $(CFLAGSCOOL) $(CFLAGSINTERNAL) # Microsoft documentation is not very clear on the point of using both # optimization and debug information # LINKER FLAGS # %%VARIETY: When adding a new variety, define a macro containing the flags # for the new variety LINKER = link LINKFLAGSCOMMON = /nologo /LARGEADDRESSAWARE LINKFLAGSINTERNAL = /DEBUG # ( Internal flags used to be set to /DEBUG:full ) LINKFLAGSEXTERNAL = /RELEASE LFRASH = $(LINKFLAGSHOT) $(LINKFLAGSEXTERNAL) LFHOT = $(LINKFLAGSHOT) $(LINKFLAGSINTERNAL) LFCOOL = $(LINKFLAGSCOOL) $(LINKFLAGSINTERNAL) #LFCV = /PROFILE /DEBUG:full /DEBUGTYPE:cv # Library manager # %%VARIETY: When adding a new variety, define a macro containing the flags # for the new variety LIBMAN = lib # can't call this LIB - it screws the environment LIBFLAGSCOMMON = LIBFLAGSRASH = LIBFLAGSHOT = LIBFLAGSCOOL = # Browser database manager [not used at present] #BSC = bscmake #BSCFLAGS = /nologo /n # == Common definitions == # %%PART: When adding a new part, add it here, unless it's platform-specific # [It is not possible use a macro, like $(PFM), in a substitution, # hence all parts end up being platform-specific.] # == Pseudo-targets == all: $(ALL_TARGETS) # Convenience targets $(ALL_TARGETS) $(OPTIONAL_TARGETS): !IFDEF VARIETY $(MAKE) /nologo /f $(PFM).nmk TARGET=$@ variety !ELSE $(MAKE) /nologo /f $(PFM).nmk TARGET=$@ target !ENDIF # "clean" removes the directory containing the build results. # Depends on there being no file called "clean". # Note that we suspend error processing on the if line because rmdir # sometimes exits with an error and the message "The directory is not # empty" even if the /s option is given. See job003854. clean: $(ECHO) $(PFM): $@ -if exist $(PFM) rmdir /q /s $(PFM) # target target # %%VARIETY: When adding a new variety, optionally, add a recursive make # call for the new variety, if it should be built by default. It probably # shouldn't without a product design decision and an update of the readme # and build manual! # Depends on there being no file called "target". !IFDEF TARGET !IFNDEF VARIETY target: $(MAKE) /nologo /f $(PFM).nmk VARIETY=cool variety $(MAKE) /nologo /f $(PFM).nmk VARIETY=hot variety !ENDIF !ENDIF # variety # Depends on there being no file called "variety". !IFDEF VARIETY !IFDEF TARGET variety: $(PFM)\$(VARIETY)\$(TARGET) !ENDIF !ENDIF # testrun testci testall testansi testpollnone # Runs automated test cases. testrun testci testall testansi testpollnone: $(TEST_TARGETS) !IFDEF VARIETY ..\tool\testrun.bat $(PFM) $(VARIETY) $@ !ELSE $(MAKE) /nologo /f $(PFM).nmk VARIETY=cool $@ $(MAKE) /nologo /f $(PFM).nmk VARIETY=hot $@ !ENDIF # FLAGS AMALGAMATION # # %%VARIETY: When adding a new variety, add the following macros that # expand to sets of flags that the variety should use: # # CFLAGS -- when compiling C; # CFLAGSSQL -- when compiling mpseventsql; # LINKFLAGS -- when building executables; # LIBFLAGS -- when building libraries. !IF "$(VARIETY)" == "hot" CFLAGS=$(CFLAGSCOMMONPRE) $(CFHOT) $(CFLAGSCOMMONPOST) CFLAGSSQL=$(CFLAGSSQLPRE) $(CFHOT) $(CFLAGSSQLPOST) LINKFLAGS=$(LINKFLAGSCOMMON) $(LFHOT) LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSHOT) !ELSEIF "$(VARIETY)" == "cool" CFLAGS=$(CFLAGSCOMMONPRE) $(CFCOOL) $(CFLAGSCOMMONPOST) CFLAGSSQL=$(CFLAGSSQLPRE) $(CFCOOL) $(CFLAGSSQLPOST) LINKFLAGS=$(LINKFLAGSCOMMON) $(LFCOOL) LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSCOOL) !ELSEIF "$(VARIETY)" == "rash" CFLAGS=$(CFLAGSCOMMONPRE) $(CFRASH) $(CFLAGSCOMMONPOST) CFLAGSSQL=$(CFLAGSSQLPRE) $(CFRASH) $(CFLAGSSQLPOST) LINKFLAGS=$(LINKFLAGSCOMMON) $(LFRASH) LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSRASH) !ENDIF # SOURCE TO OBJECT FILE MAPPINGS # # %%PART: When adding a new part, add new macros which expand to the object # files included in the part # # Note: nmake doesn't expand variables within a string replacement # operation. We work around this by writing out a temporary makefile # and including it. TEMPMAKE=$(TEMP)\mps.nmk !IF [echo MPMOBJ0 = $$(MPM:[=$(PFM)\$(VARIETY)\) > $(TEMPMAKE)] == 0 \ && [echo FMTDYOBJ0 = $$(FMTDY:[=$(PFM)\$(VARIETY)\) >> $(TEMPMAKE)] == 0 \ && [echo FMTTESTOBJ0 = $$(FMTTEST:[=$(PFM)\$(VARIETY)\) >> $(TEMPMAKE)] == 0 \ && [echo FMTSCHEMEOBJ0 = $$(FMTSCHEME:[=$(PFM)\$(VARIETY)\) >> $(TEMPMAKE)] == 0 \ && [echo POOLNOBJ0 = $$(POOLN:[=$(PFM)\$(VARIETY)\) >> $(TEMPMAKE)] == 0 \ && [echo TESTLIBOBJ0 = $$(TESTLIB:[=$(PFM)\$(VARIETY)\) >> $(TEMPMAKE)] == 0 \ && [echo TESTTHROBJ0 = $$(TESTTHR:[=$(PFM)\$(VARIETY)\) >> $(TEMPMAKE)] == 0 !INCLUDE $(TEMPMAKE) !IF [del $(TEMPMAKE)] != 0 !ERROR Failed to delete $(TEMPMAKE) !ENDIF !ENDIF MPMOBJ = $(MPMOBJ0:]=.obj) FMTDYOBJ = $(FMTDYOBJ0:]=.obj) FMTTESTOBJ = $(FMTTESTOBJ0:]=.obj) FMTSCHEMEOBJ = $(FMTSCHEMEOBJ0:]=.obj) POOLNOBJ = $(POOLNOBJ0:]=.obj) TESTLIBOBJ = $(TESTLIBOBJ0:]=.obj) TESTTHROBJ = $(TESTTHROBJ0:]=.obj) # THE MPS LIBRARY # # The MPS library is built in two ways: # # 1. In the usual way, from a pile of object files compiled from their # corresponding sources. # # 2. From mps.c, which effectively concatenates all the sources, allowing # important global optimisation and inlining to occur. # # We mostly use the method (2), because it is fast to compile and execute. # But we use method (1) for some varieties to ensure correctness of # code (linkage errors are masked by (2)) and to maintain a correct list # of source files in case method (1) won't work on some future constrained # platform. # # %%VARIETY: When adding a new variety, add a rule for how to build the # MPS library for the variety $(PFM)\rash\mps.lib: $(PFM)\rash\mps.obj $(ECHO) $@ $(LIBMAN) $(LIBFLAGS) /OUT:$@ $** $(PFM)\hot\mps.lib: $(PFM)\hot\mps.obj $(ECHO) $@ $(LIBMAN) $(LIBFLAGS) /OUT:$@ $** $(PFM)\cool\mps.lib: $(MPMOBJ) $(ECHO) $@ $(LIBMAN) $(LIBFLAGS) /OUT:$@ $** # OTHER GENUINE TARGETS # # Each line defines an executable or library target to be built and the object # files it is build from. For an executable these lines add dependencies to # the generic rules below, and should not include commands to execute. # For a library this is not possible and the target should include commands # to build it. # %%TARGET: When adding a new target, add your new target here !IFDEF VARIETY $(PFM)\$(VARIETY)\abqtest.exe: $(PFM)\$(VARIETY)\abqtest.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\airtest.exe: $(PFM)\$(VARIETY)\airtest.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTSCHEMEOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\amcss.exe: $(PFM)\$(VARIETY)\amcss.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\amcsshe.exe: $(PFM)\$(VARIETY)\amcsshe.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\amcssth.exe: $(PFM)\$(VARIETY)\amcssth.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)\$(VARIETY)\amsss.exe: $(PFM)\$(VARIETY)\amsss.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\amssshe.exe: $(PFM)\$(VARIETY)\amssshe.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\apss.exe: $(PFM)\$(VARIETY)\apss.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\arenacv.exe: $(PFM)\$(VARIETY)\arenacv.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\awlut.exe: $(PFM)\$(VARIETY)\awlut.obj \ $(FMTTESTOBJ) \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\awluthe.exe: $(PFM)\$(VARIETY)\awluthe.obj \ $(FMTTESTOBJ) \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\awlutth.exe: $(PFM)\$(VARIETY)\awlutth.obj \ $(FMTTESTOBJ) \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)\$(VARIETY)\btcv.exe: $(PFM)\$(VARIETY)\btcv.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\bttest.exe: $(PFM)\$(VARIETY)\bttest.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\cvmicv.exe: $(PFM)\$(VARIETY)\cvmicv.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\djbench.exe: $(PFM)\$(VARIETY)\djbench.obj \ $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)\$(VARIETY)\exposet0.exe: $(PFM)\$(VARIETY)\exposet0.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\expt825.exe: $(PFM)\$(VARIETY)\expt825.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\finalcv.exe: $(PFM)\$(VARIETY)\finalcv.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\finaltest.exe: $(PFM)\$(VARIETY)\finaltest.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\fotest.exe: $(PFM)\$(VARIETY)\fotest.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\gcbench.exe: $(PFM)\$(VARIETY)\gcbench.obj \ $(FMTTESTOBJ) $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)\$(VARIETY)\landtest.exe: $(PFM)\$(VARIETY)\landtest.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\locbwcss.exe: $(PFM)\$(VARIETY)\locbwcss.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\lockcov.exe: $(PFM)\$(VARIETY)\lockcov.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\lockut.exe: $(PFM)\$(VARIETY)\lockut.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)\$(VARIETY)\locusss.exe: $(PFM)\$(VARIETY)\locusss.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\locv.exe: $(PFM)\$(VARIETY)\locv.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\messtest.exe: $(PFM)\$(VARIETY)\messtest.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\mpmss.exe: $(PFM)\$(VARIETY)\mpmss.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\mpsicv.exe: $(PFM)\$(VARIETY)\mpsicv.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\mv2test.exe: $(PFM)\$(VARIETY)\mv2test.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\nailboardtest.exe: $(PFM)\$(VARIETY)\nailboardtest.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\poolncv.exe: $(PFM)\$(VARIETY)\poolncv.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(POOLNOBJ) $(PFM)\$(VARIETY)\qs.exe: $(PFM)\$(VARIETY)\qs.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\sacss.exe: $(PFM)\$(VARIETY)\sacss.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\segsmss.exe: $(PFM)\$(VARIETY)\segsmss.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\steptest.exe: $(PFM)\$(VARIETY)\steptest.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\teletest.exe: $(PFM)\$(VARIETY)\teletest.obj \ $(PFM)\$(VARIETY)\mps.lib $(TESTLIBOBJ) $(PFM)\$(VARIETY)\walkt0.exe: $(PFM)\$(VARIETY)\walkt0.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\zcoll.exe: $(PFM)\$(VARIETY)\zcoll.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\zmess.exe: $(PFM)\$(VARIETY)\zmess.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\ztfm.exe: $(PFM)\$(VARIETY)\ztfm.obj \ $(PFM)\$(VARIETY)\mps.lib $(FMTTESTOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\mpseventcnv.exe: $(PFM)\$(VARIETY)\eventcnv.obj \ $(PFM)\$(VARIETY)\mps.lib $(PFM)\$(VARIETY)\mpseventtxt.exe: $(PFM)\$(VARIETY)\eventtxt.obj \ $(PFM)\$(VARIETY)\mps.lib $(PFM)\$(VARIETY)\mpseventsql.exe: $(PFM)\$(VARIETY)\eventsql.obj \ $(PFM)\$(VARIETY)\sqlite3.obj $(PFM)\$(VARIETY)\mps.lib $(PFM)\$(VARIETY)\replay.exe: $(PFM)\$(VARIETY)\replay.obj \ $(PFM)\$(VARIETY)\eventrep.obj \ $(PFM)\$(VARIETY)\table.obj \ $(PFM)\$(VARIETY)\mps.lib # Have to rename the object file, because the names must match, or # the template rule for .exe.obj won't be used. $(PFM)\$(VARIETY)\replaysw.obj: $(PFM)\$(VARIETY)\replay.obj $(ECHO) $@ copy $** $@ >nul: $(PFM)\$(VARIETY)\mpseventcnv.obj: $(PFM)\$(VARIETY)\eventcnv.obj copy $** $@ >nul: $(PFM)\$(VARIETY)\mpseventtxt.obj: $(PFM)\$(VARIETY)\eventtxt.obj copy $** $@ >nul: $(PFM)\$(VARIETY)\mpseventsql.obj: $(PFM)\$(VARIETY)\eventsql.obj copy $** $@ >nul: !ENDIF # GENERIC RULES # Object files {}.c{$(PFM)\$(VARIETY)}.obj: $(ECHO) $@ @if not exist $(PFM) mkdir $(PFM) @if not exist $(PFM)\$(VARIETY) mkdir $(PFM)\$(VARIETY) $(CC) /c $(CFLAGS) /Fo$@ $< $(PFM)\$(VARIETY)\sqlite3.obj: $(ECHO) $@ @if not exist $(PFM) mkdir $(PFM) @if not exist $(PFM)\$(VARIETY) mkdir $(PFM)\$(VARIETY) $(CC) /c $(CFLAGSSQL) /Fo$@ sqlite3.c {}.asm{$(PFM)\$(VARIETY)}.obj: $(ECHO) $@ @if not exist $(PFM) mkdir $(PFM) @if not exist $(PFM)\$(VARIETY) mkdir $(PFM)\$(VARIETY) $(MASM) /nologo /c /Fo$@ $< # Coverage files #{$(PFM)\$(VARIETY)}.exe{$(PFM)\$(VARIETY)}.cov: # $(ECHO) $@ # cd $(PFM)\$(VARIETY) # prep /nologo /lv $( $(@F) # Executables {$(PFM)\$(VARIETY)}.obj{$(PFM)\$(VARIETY)}.exe: $(ECHO) $@ $(LINKER) $(LINKFLAGS) /OUT:$@ $(**) # C. COPYRIGHT AND LICENSE # # Copyright (C) 2001-2014 Ravenbrook Limited . # All rights reserved. This is an open source license. Contact # Ravenbrook for commercial licensing options. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # 3. Redistributions in any form must be accompanied by information on how # to obtain complete source code for this software and any accompanying # software that uses this software. The source code must either be # included in the distribution or be available for no more than the cost # of distribution plus a nominal fee, and must be freely redistributable # under reasonable conditions. For an executable file, complete source # code means the source code for all modules it contains. It does not # include source code for modules or files that typically accompany the # major components of the operating system on which the executable file # runs. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR # PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.