📄 makefile
字号:
#############################################################################
# MAKEFILE for all of CW
# useable with NMAKE
# Assumes DOSENV tools
#############################################################################
#
# symbols imported:
# FINAL = final library name
# ?? more to document here ???
# MAKE_LOADER => make the loader
# MAKE_CBOX => make CBOX variant
#
#############################################################################
## REVIEW: add comments to explain complicated things (like DUAL).
#
#############################################################################
all: tools headers version loader kernel user cbox final
#############################################################################
# General Stuff
.SUFFIXES: .c .asm .h .inc .obj .lib .exe .m3 .m5 .o5
# build directory is prefixed by $
D=$$$(FINAL)
# Add version control directory to INCLUDE path (for version.h/inc)
INCLUDE=$(INCLUDE)
# general object suffix
O=obj
# Tools compile flags
TFLAGS=-DD86 -DCC
# Compilers
CC=$(TL)\cl
CS=tools\csl
# Final Output directory
$D:
!IF ([tools\test -d $D] != 0)
mkdir $D
!ENDIF
# Empty library
nullib.lib:
$(TL)\lib nullib,
#############################################################################
# Tools
tools: tools\cowstrip.exe tools\cowseg.exe tools\echotime.exe \
tools\iterate.exe tools\catresp.exe \
tools\mkdrv.exe
{tools}.c{tools}.obj:
$(CC) -c $(TFLAGS) -Fotools\ $*.c
{tools}.c{tools}.exe:
$(CC) $(TFLAGS) -o $@ $*.c
# multiple file utility programs
COWSTRIP_OBJ = tools\cowstrip.obj tools\misc.obj
tools\cowstrip.exe: $(COWSTRIP_OBJ)
$(CC) $(TFLAGS) -o tools\cowstrip.exe $(COWSTRIP_OBJ)
#############################################################################
# Version Independent Includes
headers: private public
public: inc\cwindows.h inc\csdm.h inc\csdmtmpl.h inc\cwindows.txt inc\cedit.h \
inc\cwindows.inc \
inc\cgraphic.h inc\cgraphic.txt
# Cwindows.h header
CWINDOWS_H = inc\cow.h inc\kinput.h inc\inmou.h inc\kmem.h inc\inkbd.h \
inc\kkeyboar.h inc\inscr.h inc\indrv.h inc\inscreen.h inc\udialog.h \
inc\uedit.h inc\uevent.h inc\uisa.h inc\umenu.h inc\uscreen.h \
inc\uscroll.h inc\uwindow.h inc\insyd.h inc\uutil.h inc\vkey.h \
inc\ukanji.h inc\ucolor.h
# SDM headers
SDM_H = inc\usdm.h
SDMTMPL_H = inc\sdmver.h inc\usdmtmpl.h
# Graphics Support
CGRAPHIC_H = inc\ingxd.h inc\graphic.h
## Private stuff
PRIVATE_INC = inc\uevent.inc inc\uisa.inc inc\uscroll.inc inc\uscreen.inc \
inc\vkey.inc inc\uedit.inc inc\indrv.inc inc\inscr.inc inc\inkbd.inc \
inc\insyd.inc inc\inmou.inc inc\kmem.inc inc\ingxd.inc
private: $(PRIVATE_INC) inc\cwproc.inc
{inc}.h{inc}.inc:
if exist *.db del *.db
$(CS) -Q -mW -SsCim $(DEFS) inc\private.c
-$(TL)\mv $(*B).db $@
if exist private.im del private.im
if exist private.sy del private.sy
if exist *.db del *.db
# WARNING: the following rule does not always work !!!
# Special rule to prevent default rule (above) from replacing cow.inc
# NOTE: it appears that this does not work...
inc\cow.inc: inc\cow.h
tools\touch inc\cow.inc
# Main header
inc\cwindows.h: inc\cwindows.hdr $(CWINDOWS_H)
copy inc\cwindows.hdr inc\cwindows.h
tools\echotime -- Created /t */ >>inc\cwindows.h
tools\iterate "tools\cowstrip %s >> inc\cwindows.h" @<<
$(CWINDOWS_H)
<<
# Sdm headers
inc\csdm.h: inc\csdm.hdr $(SDM_H)
copy inc\csdm.hdr inc\csdm.h
tools\echotime -- Created /t */ >>inc\csdm.h
tools\cowstrip $(SDM_H) >>inc\csdm.h
inc\csdmtmpl.h: inc\csdmtmpl.hdr $(SDMTMPL_H)
copy inc\csdmtmpl.hdr inc\csdmtmpl.h
tools\echotime -- Created /t */ >>inc\csdmtmpl.h
tools\cowstrip $(SDMTMPL_H) >>inc\csdmtmpl.h
# Graphics headers
inc\cgraphic.h: inc\cgraphic.hdr $(CGRAPHIC_H)
copy inc\cgraphic.hdr inc\cgraphic.h
tools\echotime -- Created /t */ >>inc\cgraphic.h
tools\cowstrip $(CGRAPHIC_H) >>inc\cgraphic.h
# .TXT for Pcode toolbox mechanism
inc\cwindows.txt: inc\cwindows.h inc\csdm.h
$(TL)\sed -n -e "s/FARPUBLIC/FAR PASCAL/p" inc\cwindows.h >tmp1
$(TL)\sed -n -e "s/FARPUBLIC/FAR PASCAL/p" inc\csdm.h >>tmp1
$(TL)\fgrep -v typedef tmp1 | fgrep -v Internal | fgrep -v define >inc\cwindows.txt
if exist tmp1 del tmp1
inc\cgraphic.txt: inc\cgraphic.h
$(TL)\sed -n -e "s/FARPUBLIC/FAR PASCAL/p" inc\cgraphic.h >inc\cgraphic.txt
# Multi-line edit stuff (interface is questionable)
inc\cedit.h: inc\cedit.hdr inc\umedit.h
copy inc\cedit.hdr inc\cedit.h
tools\echotime -- Created /t */ >>inc\cedit.h
tools\cowstrip inc\umedit.h >>inc\cedit.h
# CW procedure templates
inc\cwproc.inc: inc\cwindows.txt
$(TL)\sed -n -e "s/.*FAR PASCAL./externFP /p" inc\cwindows.txt >tmp1
$(TL)\fgrep -v OPTIONAL tmp1 >tmp2
$(TL)\sed -n -e "s/(.*//p" tmp2 >inc\cwproc.inc
if exist tmp1 del tmp1
if exist tmp2 del tmp2
inc\cwindows.inc: $(PRIVATE_INC) inc\cwproc.inc
copy inc\cwindows.idr inc\cwindows.inc
tools\echotime ; Created /t */ >>inc\cwindows.inc
tools\iterate "cat %s >>inc\cwindows.inc" @<<
$(PRIVATE_INC)
<<
echo IFNDEF NOPROCS >>inc\cwindows.inc
$(TL)\cat inc\cwproc.inc >>inc\cwindows.inc
echo ENDIF ;!NOPROCS >>inc\cwindows.inc
#############################################################################
# Version Control
version: $D $D\version.h $D\version.inc
$D\version.h: inc\$(VERSION)
copy inc\$(VERSION) $D\version.h
tools\touch $D\version.h
$D\version.inc: $D\version.h
$(TL)\sed -n -e "s/\/\*/;*/" -e "s/^#define[ ]*//" -e "/^[^; ]/s/^[^; ]*/& = /p" $D\version.h >$D\version.inc
#############################################################################
# DUAL rules
T=0.tmp
{lib}.obj{$D}.m3:
modobj -s DOS3 -e dual3.xpt $< $@
{lib}.obj{$D}.m5:
modobj -s OS2 -e dual5.xpt $< $@
{kernel}.asm{$D}.m3:
$(TL)\masm $(AFLAGS) -Ikernel $(DEFS) $<, $T;
modobj -s DOS3 -e dual3.xpt $T $@
{kernel}.asm{$D}.m5:
$(TL)\masm $(AFLAGS) -Ikernel $(DEFSOS2) $<, $T;
modobj -s OS2 -e dual5.xpt $T $@
{kernel}.asm{$D}.o5:
$(TL)\masm $(AFLAGS) -Ikernel $(DEFSOS2) $<, $@;
{kernel}.c{$D}.m3:
$(CC) -c $(CCFLAGS) -AM $(DEFS) -NT $(CORE) -Ikernel -Fo$D\ $<
modobj -s DOS3 -e dual3.xpt $(@R).obj $(@R).m3
{kernel}.c{$D}.m5:
$(CC) -c $(CCFLAGS) -AM $(DEFS) -NT $(CORE) -Ikernel -Fo$D\ $<
modobj -s OS2 -e dual5.xpt $(@R).obj $(@R).m5
$D\lddrvd5.m5: kernel\loaddrv.asm
cp kernel\loaddrv.asm $D\lddrvd5.asm
$(TL)\masm $(AFLAGS) -Ikernel $(DEFSOS2) $D\lddrvd5.asm, $T;
modobj -s OS2 -e dual5.xpt $T $D\lddrvd5.m5
{user}.asm{$D}.m3:
$(TL)\masm $(AFLAGS) -Iuser $(DEFS) $<, $T;
modobj -s DOS3 -e dual3.xpt $T $@
{user}.asm{$D}.m5:
$(TL)\masm $(AFLAGS) -Iuser $(DEFSOS2) $<, $T;
modobj -s OS2 -e dual5.xpt $T $@
{user}.c{$D}.m3:
$(CC) -c $(CCFLAGS) -AM $(DEFS) -NT $(CORE) -Iuser -Fo$D\ $<
modobj -s DOS3 -e dual3.xpt $(@R).obj $(@R).m3
{user}.c{$D}.m5:
$(CC) -c $(CCFLAGS) -AM $(DEFS) -NT $(CORE) -Iuser -Fo$D\ $<
modobj -s OS2 -e dual5.xpt $(@R).obj $(@R).m5
$D\khead.m3: $D\knull.obj
tools\cowseg $D\knull.obj $D\khead.obj
modobj -s DOS3 -e dual3.xpt $D\khead.obj $D\khead.m3
#############################################################################
# Loader
!IFDEF MAKE_LOADER
loader: $D\loader.exe
!ELSE
loader:
!ENDIF
# "loader" must be first, "loadrelo" must be last.
LOADER_OBJ = $D\loader.obj $D\loadmem.obj $D\loadrelo.obj
{loader}.asm{$D}.obj:
$(TL)\masm $(AFLAGS) -Iloader $(DEFS) $<, $@;
$D\loader.exe: $(LOADER_OBJ)
$(TL)\link @<<
$(LOADER_OBJ)
$D\loader.exe
$D\loader.map/MA;
<<
cd $D
$(TL)\mapsym loader
cd ..
#############################################################################
# Kernel
kernel: $D\$(KERNEL)
{kernel}.asm{$D}.obj:
$(TL)\masm $(AFLAGS) -Ikernel $(DEFS) $<, $@;
{kernel}.c{$D}.obj: # Medium model for asserts
$(CC) -c $(CCFLAGS) -AM $(DEFS) -NT $(CORE) -Ikernel -Fo$D\ $<
# - files for swapped version
KERNEL_OBJ = $D\galloc.obj $D\gcompact.obj $D\gmem.obj $D\gwinterf.obj \
$D\glock.obj $D\handle.obj $D\int24.obj $D\kerninit.obj $D\khead.obj \
$D\ktimer.obj $D\krun.obj $D\ldreloc.obj $D\ldseg.obj $D\ldstack.obj \
$D\ldthunk.obj $D\mouse.obj $D\mousedat.obj $D\keyboard.obj \
$D\cbfree.obj \
$D\assertsw.obj $D\assert.obj $D\gacheck.obj $D\lddebug.obj \
$D\setjmp.obj \
!IFNDEF MAKE_CBOX
$D\promptc.obj \
!ENDIF
!IFDEF MAKE_QC
$D\gfixcomp.obj $D\dump.obj $D\gdsize.obj \
!ENDIF
$D\loaddrv.obj $D\utildrv.obj \
$D\inos.obj $D\mouses3.obj $D\kstart.obj
# - files for DUAL
KERNELD_OBJ = $D\cwos2.obj $D\osspec.obj \
$D\mousedat.obj $D\keyboard.obj \
$D\khead.obj \
$D\assert.obj \
$D\stubs.obj \
$D\utildrv.obj \
$D\kerninit.obj
KERNELD_O5 = $D\inos.o5
KERNELD_M3 = $D\galloc.m3 $D\gcompact.m3 $D\gmem.m3 $D\gwinterf.m3 \
$D\glock.m3 $D\handle.m3 $D\gacheck.m3 \
$D\ldreloc.m3 $D\ldseg.m3 $D\ldstack.m3 $D\ldthunk.m3 \
$D\cbfree.m3 \
$D\mouse.m3 $D\mouses3.m3 \
$D\int24.m3 $D\ktimer.m3 \
$D\kstart.m3 \
$D\krun.m3 \
$D\assertsw.m3 \
$D\lddebug.m3 \
$D\loaddrv.m3 \
!IFNDEF MAKE_CBOX
$D\promptc.m3 \
!ENDIF
$D\setjmp.m3 \
$D\prtsc3.m3
KERNELD_M5 = $D\startup.m5 $D\mouse5.m5 \
$D\gmemory5.m5 $D\ktimer5.m5 \
$D\assertns.m5 \
$D\lddrvd5.m5 \
$D\debug5.m5 \
$D\krun5.m5 \
$D\prtsc5.m5
dprep: $(KERNELD_M5)
# - files for dos 3 (non-swapped)
KERNEL3_OBJ = $D\startup.obj $D\assert.obj $D\assertns.obj \
$D\mouse.obj $D\mousedat.obj \
$D\gmemory3.obj $D\int24.obj $D\keyboard.obj $D\loaddrv.obj \
$D\inos.obj $D\mouses3.obj
# - files for dos 5
KERNEL5_OBJ = $D\startup.obj $D\assert.obj $D\assertns.obj \
$D\mouse5.obj $D\mousedat.obj \
$D\gmemory5.obj $D\ktimer5.obj $D\keyboard.obj $D\loaddrv.obj \
$D\inos.obj $D\krun5.obj
#### Special case for KHEAD.OBJ
$D\khead.obj: $D\knull.obj
tools\cowseg $D\knull.obj $D\khead.obj
# - swapped
$D\kernel.lib: $(KERNEL_OBJ) nullib.lib $D\kernel.llk
$(TL)\lib @$D\kernel.llk
$D\kernel.llk: makefile
echo nullib > $D\kernel.llk
tools\catresp $D\kernel.llk @<<
$(KERNEL_OBJ:.obj=)
<<
echo $D\kernel.map >> $D\kernel.llk
echo $D\kernel.lib >> $D\kernel.llk
# - DUAL
$D\kerneld.lib: $(KERNELD_OBJ) $(KERNELD_O5) $(KERNELD_M3) $(KERNELD_M5) nullib.lib $D\kerneld.llk
$(TL)\lib @$D\kerneld.llk
$D\kerneld.llk: makefile
echo nullib > $D\kerneld.llk
tools\catresp $D\kerneld.llk @<<
$(KERNELD_OBJ) $(KERNELD_O5) $(KERNELD_M3) $(KERNELD_M5)
<<
echo $D\kerneld.map >> $D\kerneld.llk
echo $D\kerneld.lib >> $D\kerneld.llk
# - DOS 3 non-swapped
$D\kernel3.lib: $(KERNEL3_OBJ) nullib.lib $D\kernel3.llk
$(TL)\lib @$D\kernel3.llk
$D\kernel3.llk: makefile
echo nullib > $D\kernel3.llk
tools\catresp $D\kernel3.llk @<<
$(KERNEL3_OBJ:.obj=)
<<
echo $D\kernel3.map >> $D\kernel3.llk
echo $D\kernel3.lib >> $D\kernel3.llk
# - OS/2 non-swapped
$D\kernel5.lib: $(KERNEL5_OBJ) nullib.lib $D\kernel5.llk
$(TL)\lib @$D\kernel5.llk
$D\kernel5.llk: makefile
echo nullib > $D\kernel5.llk
tools\catresp $D\kernel5.llk @<<
$(KERNEL5_OBJ:.obj=)
<<
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -