home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
fish
/
misc_utils
/
flex_407
/
misc
/
msdos.notes
< prev
next >
Wrap
Text File
|
1990-03-20
|
5KB
|
178 lines
$Header:$
Notes on Porting flex to MS-DOS
-------------------------------
[These notes were last revised 30Dec89 for flex release 2.2.]
Previous releases of flex have been successfully built using Microsoft C and
the following options: /AL, /stack:10000, -LARGE, -Ml, -Mt128, -DSYS_V
Other folks report that the following work for MSC 5.1 under DOS and OS/2:
CFLAGS=-ALu -F 8000 -Gt16000 -Ox -DMS_DOS -DSYS_V -D__RUNTIME_YYMAXDEPTH
LINKFLAGS=/E /FAR /PAC /NOI
Where you may want to adjust -F up in order to increase available stack
size (though it may not be necessary) and you may want to increase -Gt
to some number that puts just enought of the big data items in their own
data segments. (The default for -Gt is items of 32k. This is too high for
flex.) __RUNTIME_YYMAXDEPTH is useful if you have a parse.c that's
been generated by a yacc that understands how to do this; otherwise, it's a
no-op.
Jeffrey R. Jones (jjones@angate.att.com) writes [this has been edited -vp]:
.... The port was accomplished with:
AT&T 6312 WGS (12 Mhz AT class machine)
Microsoft C compiler Version 5.0
'make' utility from Aztec-C package (subset of unix-make)
The re-done makefile is included .... Do what you wish with it.
[note that this Makefile is now slightly out of date and has not been
tested with flex 2.2]
# This makefile is used to port the flex 2.1 build to a PC. The compiler is
# Microsoft-C Version 5.0 while the 'make' utility came with Aztec-C, which
# is VERY compatible with Unix's make. There are a few things that Aztec-C's
# 'make' can't do that unix does so I have made a few minor changes.
# At the least you can manually compile each file and then link.
# The linker and library utilities are alos Microsoft's.
#
# Additionally, after building with the large model, the flex.map reveals that
# code-size is less than 64K, therefore, in favor of a little more execution
# efficiency, I built with the compact model. I've used the default compiler
# optimization (no /O switches).
#
# The linker must be told to increase the run-time stack space. The default
# stack space is 2048. Flexing scan.l with the default stack-space results in
# a run-time stack overflow, hence the stack was increase to 4096.
#
# NOTE: I have MKS-Toolkit's yacc and was able to use it with virtually no
# modifications to anything. If you don't have yacc for a PC, you can try
# yaccing on a unix system and downloading the resulting files to the PC.
#
# Jeffrey R. Jones
# jjones@angate!att.com
# make file for "flex" tool
# @(#) $Header: Makefile,v 2.3 89/06/20 17:27:12 vern Exp $ (LBL)
# Porting considerations:
#
# For System V Unix machines, add -DSYS_V to CFLAGS.
# For Vax/VMS, add -DSYS_V to CFLAGS.
# For MS-DOS, add "-DMS_DOS -DSYS_V" to CFLAGS. Create \tmp if not present.
# You will also want to rename flex.skel to something with a three
# character extension, change SKELETON_FILE below appropriately,
# For Amiga, add "-DAMIGA -DSYS_V" to CFLAGS.
# the first time around use "make first_flex"
YACC=yacc
SKELETON_DIR = c:/usr/contrib/lib
SKELETON_FILE = flex.ske
SKELFLAGS = -DDEFAULT_SKELETON_FILE=\"$(SKELETON_DIR)/$(SKELETON_FILE)\"
CFLAGS = -c -AC -DMS_DOS -DSYS_V
LDFLAGS = /noi /cp:1 /stack:4096
#this null definition prevents a returned error code
MFLAGS =
FLEX_FLAGS =
FLEX = flex
CC = cl
# redefine Aztec make's built-in rule
.c.obj:
$(CC) $(CFLAGS) $*.c
# break obj-list into two because of 128 character command-line limit of
# Microsoft's link and lib utilities.
FLEXOBJS1 = ccl.obj dfa.obj ecs.obj gen.obj main.obj misc.obj nfa.obj parse.obj
FLEXOBJS2 = scan.obj sym.obj tblcmp.obj yylex.obj
FLEX_C_SOURCES = \
ccl.c \
dfa.c \
ecs.c \
gen.c \
main.c \
misc.c \
nfa.c \
parse.c \
scan.c \
sym.c \
tblcmp.c \
yylex.c
# lib is used to get around the 128 character command-line limit of 'link'.
flex.exe : $(FLEXOBJS1) $(FLEXOBJS2)
lib tmplib $(FLEXOBJS1);
link $(LDFLAGS) $(FLEXOBJS2),$*.exe,,tmplib;
rm -f tmplib.lib
# the second 'make flex.exe' causes scan.l to be RE-flexed. The resulting
# scan.c is different from initscan.c in that \r\n are added instead of
# just \n. Since \r\n is DOS language and this is targetted for PCs, and
# since I don't know what would happen for all cases in DOS-land, I went
# ahead and did it.
first_flex:
cp initscan.c scan.c
make $(MFLAGS) flex.exe
rm -f scan.c
make flex.exe
parse.obj: parse.c parse.h
parse.h parse.c : parse.y
$(YACC) -d parse.y
@mv ytab.c parse.c
@mv ytab.h parse.h
scan.c : scan.l
$(FLEX) -ist $(FLEX_FLAGS) scan.l > scan.c
scan.obj : scan.c parse.h
main.obj : main.c
$(CC) $(CFLAGS) $(SKELFLAGS) main.c
###################
#don't have, or need, anything else except maybe the 'test' rule.
#
# don't have nroff
#flex.man : flex.1
# nroff -man flex.1 >flex.man
#
# don't have lint
#lint : $(FLEX_C_SOURCES)
# lint $(FLEX_C_SOURCES) > flex.lint
#
#distrib :
# mv scan.c initscan.c
# chmod 444 initscan.c
# $(MAKE) $(MFLAGS) clean
#
#clean :
# rm -f core errs flex *.o parse.c *.lint parse.h flex.man tags
#
#tags :
# ctags $(FLEX_C_SOURCES)
#
#vms : flex.man
# $(MAKE) $(MFLAGS) distrib
#
# break this up into multiple lines...Aztec 'make' limitation
test :
$(FLEX) -ist $(FLEX_FLAGS) scan.l > scan.tst
diff scan.c scan.tst
rm -f scan.tst