# impl.nmk.commpost: SECOND COMMON FRAGMENT FOR PLATFORMS USING MV AND NMAKE # # $Id$ # Copyright (c) 2001 Ravenbrook Limited. # # DESCRIPTION # # Second common makefile fragment for w3*mv.nmk. See commpre.nmk # PSEUDO-TARGETS # "all" builds all the varieties of all targets # %%TARGET: Add the target to the all dependencies, if it uses the # CONFIG_PROD_MPS configuration, to swall if CONFIG_PROD_EPCORE all: mpmss.exe amcss.exe amsss.exe segsmss.exe awlut.exe \ mpsicv.exe lockutw3.exe lockcov.exe poolncv.exe locv.exe qs.exe apss.exe \ finalcv.exe arenacv.exe bttest.exe teletest.exe protcv.exe \ abqtest.exe cbstest.exe btcv.exe mv2test.exe messtest.exe \ locbwcss.exe locusss.exe \ eventcnv.exe swall: mmsw.lib epvmss.exe replaysw.exe # Convenience targets # %%TARGET: Add a pseudo-target for the new target here, first rule for # variety-dependent targets, and second for variety-independent ones. mpmss.exe amcss.exe amcsshe.exe amsss.exe segsmss.exe awlut.exe dwstress.exe \ mpsicv.exe lockutw3.exe lockcov.exe poolncv.exe locv.exe qs.exe apss.exe \ finalcv.exe arenacv.exe bttest.exe teletest.exe protcv.exe epvmss.exe \ abqtest.exe cbstest.exe btcv.exe mv2test.exe messtest.exe \ locbwcss.exe locusss.exe \ replay.exe replaysw.exe eventcnv.exe \ mmdw.lib mmsw.lib mps_conf.lib mpsplan.lib: !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". # Since we can't know whether we have rmdir, try with deltree as well. clean: $(ECHO) $(PFM): $@ -echo y | rmdir/s $(PFM) -deltree /Y $(PFM) # target target # %%VARIETY: Optionally, add a recursive make call for the new variety, # if it should be built by default. # Only the varieties needed for development and internal customers are made. # Depends on there being no file called "target". !IFDEF TARGET !IFNDEF VARIETY target: $(MAKE) /nologo /f $(PFM).nmk VARIETY=hi variety $(MAKE) /nologo /f $(PFM).nmk VARIETY=ci variety $(MAKE) /nologo /f $(PFM).nmk VARIETY=ti variety !ENDIF !ENDIF # variety # Depends on there being no file called "variety". !IFDEF VARIETY !IFDEF TARGET variety: $(PFM)\$(VARIETY)\$(TARGET) !ENDIF !ENDIF mpsicv.cov: $(MAKE) /nologo /f $(PFM).nmk TARGET=$@ VARIETY=cv variety # FORCE # Used to force a target to be built. # Depends on there being no file called "FORCE". FORCE: # 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: Add your new target here !IFDEF VARIETY # .special.version: version.obj has a special rule so that it is always # built. This rule has no commands, meaning that the commands from # other rules (the implicit .c -> .obj rule in particular) will be used. # (Actually, there's a MS bug that causes this to randomly fail to build.) $(PFM)\$(VARIETY)\version.obj: FORCE $(PFM)\$(VARIETY)\finalcv.exe: $(PFM)\$(VARIETY)\finalcv.obj \ $(MPMOBJ) $(PLINTHOBJ) $(AMCOBJ) $(DWOBJ) $(DWTESTOBJ) \ $(MRGOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\locv.exe: $(PFM)\$(VARIETY)\locv.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(LOOBJ) $(PFM)\$(VARIETY)\mpmss.exe: $(PFM)\$(VARIETY)\mpmss.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\apss.exe: $(PFM)\$(VARIETY)\apss.obj \ $(PFM)\$(VARIETY)\poolmvff.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\bttest.exe: $(PFM)\$(VARIETY)\bttest.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\teletest.exe: $(PFM)\$(VARIETY)\teletest.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\lockcov.exe: $(PFM)\$(VARIETY)\lockcov.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\lockutw3.exe: $(PFM)\$(VARIETY)\lockutw3.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\protcv.exe: $(PFM)\$(VARIETY)\protcv.obj \ $(MPMOBJ) $(PLINTHOBJ) $(PFM)\$(VARIETY)\mpsicv.exe: $(PFM)\$(VARIETY)\mpsicv.obj \ $(MPMOBJ) $(AMCOBJ) $(PLINTHOBJ) $(DWOBJ) $(DWTESTOBJ) \ $(TESTLIBOBJ) $(PFM)\$(VARIETY)\amcss.exe: $(PFM)\$(VARIETY)\amcss.obj \ $(MPMOBJ) $(AMCOBJ) $(PLINTHOBJ) $(DWOBJ) $(DWTESTOBJ) \ $(TESTLIBOBJ) $(PFM)\$(VARIETY)\amcsshe.exe: $(PFM)\$(VARIETY)\amcsshe.obj \ $(CONFIGURAOBJ) $(AMCOBJ) $(PLINTHOBJ) $(PFM)\$(VARIETY)\fmthe.obj \ $(TESTLIBOBJ) $(DONGLELIB) $(PFM)\$(VARIETY)\amsss.exe: $(PFM)\$(VARIETY)\amsss.obj \ $(MPMOBJ) $(AMSOBJ) $(PLINTHOBJ) $(DWOBJ) $(DWTESTOBJ) \ $(TESTLIBOBJ) $(PFM)\$(VARIETY)\segsmss.exe: $(PFM)\$(VARIETY)\segsmss.obj \ $(MPMOBJ) $(AMSOBJ) $(PLINTHOBJ) $(DWOBJ) $(DWTESTOBJ) \ $(TESTLIBOBJ) $(PFM)\$(VARIETY)\locbwcss.exe: $(PFM)\$(VARIETY)\locbwcss.obj \ $(PFM)\$(VARIETY)\poolmvff.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\dwstress.exe: $(PFM)\$(VARIETY)\dwstress.obj \ $(DWOBJ) $(MPMOBJ) $(PLINTHOBJ) $(AMCOBJ) $(PFM)\$(VARIETY)\epvmss.exe: $(PFM)\$(VARIETY)\epvmss.obj \ $(PFM)\$(VARIETY)\fmtpstst.obj \ $(SWOBJ) $(TESTLIBOBJ) $(PLINTHOBJ) $(EVENTOBJ) $(PFM)\$(VARIETY)\awlut.exe: $(PFM)\$(VARIETY)\awlut.obj \ $(PFM)\$(VARIETY)\fmtdy.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(LOOBJ) $(AWLOBJ) $(PFM)\$(VARIETY)\poolncv.exe: $(PFM)\$(VARIETY)\poolncv.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(POOLNOBJ) $(PFM)\$(VARIETY)\qs.exe: $(PFM)\$(VARIETY)\qs.obj \ $(AMCOBJ) $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\arenacv.exe: $(PFM)\$(VARIETY)\arenacv.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\abqtest.exe: $(PFM)\$(VARIETY)\abqtest.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\cbstest.exe: $(PFM)\$(VARIETY)\cbstest.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\btcv.exe: $(PFM)\$(VARIETY)\btcv.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\mv2test.exe: $(PFM)\$(VARIETY)\mv2test.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\eventcnv.exe: $(PFM)\$(VARIETY)\eventcnv.obj \ $(PFM)\$(VARIETY)\eventpro.obj $(PFM)\$(VARIETY)\table.obj $(PFM)\$(VARIETY)\replay.exe: $(PFM)\$(VARIETY)\replay.obj \ $(PFM)\$(VARIETY)\eventrep.obj \ $(PFM)\$(VARIETY)\eventpro.obj $(PFM)\$(VARIETY)\table.obj \ $(MPMOBJ) $(AWLOBJ) $(AMSOBJ) $(POOLNOBJ) $(AMCOBJ) $(SNCOBJ) \ $(PFM)\$(VARIETY)\poolmvff.obj $(PFM)\$(VARIETY)\mpsliban.obj # 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)\replaysw.exe: $(PFM)\$(VARIETY)\replaysw.obj \ $(PFM)\$(VARIETY)\eventrep.obj \ $(PFM)\$(VARIETY)\eventpro.obj $(PFM)\$(VARIETY)\table.obj \ $(PFM)\$(VARIETY)\fmtpstst.obj $(TESTLIBOBJ) \ $(PFM)\$(VARIETY)\mpsliban.obj $(SWOBJ) $(PFM)\$(VARIETY)\messtest.exe: $(PFM)\$(VARIETY)\messtest.obj \ $(MPMOBJ) $(PLINTHOBJ) $(TESTLIBOBJ) $(PFM)\$(VARIETY)\mmsw.lib: $(SWOBJ) $(ECHO) $@ $(LIBMAN) $(LIBFLAGS) /OUT:$@ $** $(PFM)\$(VARIETY)\mmdw.lib: $(MPMOBJ) $(AMCOBJ) $(DWOBJ) \ $(AWLOBJ) $(LOOBJ) $(SNCOBJ) $(ECHO) $@ $(LIBMAN) $(LIBFLAGS) /OUT:$@ $** $(PFM)\$(VARIETY)\mps_conf.lib: $(CONFIGURAOBJ) $(AMCOBJ) $(LOOBJ) $(SNCOBJ) \ $(MVFFOBJ) $(AMSOBJ) $(ECHO) $@ $(LIBMAN) $(LIBFLAGS) /OUT:$@ $(DONGLELIB) $** $(PFM)\$(VARIETY)\mpsplan.lib: $(PLINTHOBJ) $(ECHO) $@ $(LIBMAN) $(LIBFLAGS) /OUT:$@ $** !ENDIF # GENERIC RULES # Object files {}.c{$(PFM)\$(VARIETY)}.obj: $(ECHO) $@ @if not exist $(PFM) mkdir $(PFM) @if not exist $(PFM)\$(VARIETY) mkdir $(PFM)\$(VARIETY) cl /c $(CFLAGS) /Fd$(PFM)\$(VARIETY)\ /Fo$@ $< {}.asm{$(PFM)\$(VARIETY)}.obj: $(ECHO) $@ @if not exist $(PFM) mkdir $(PFM) @if not exist $(PFM)\$(VARIETY) mkdir $(PFM)\$(VARIETY) ml /nologo /c /coff /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:$@ $(**)