mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-30 04:10:44 -08:00
Patches for building ECL using the Microsoft Visual C++ Toolkit 2003
This commit is contained in:
parent
bd283f5a2b
commit
d83012b506
24 changed files with 2725 additions and 423 deletions
142
msvc/c/Makefile
Normal file
142
msvc/c/Makefile
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
#
|
||||
# Makefile for ECL core library
|
||||
#
|
||||
top_srcdir = ..\..\src
|
||||
srcdir = ..\..\src\c
|
||||
|
||||
!if "$(ECL_THREADS)" != ""
|
||||
THREADS_OBJ= threads_win32.obj
|
||||
THREADS_FLAGS= -DECL_THREADS -DGC_WIN32_THREADS
|
||||
!else
|
||||
THREADS_OBJ=
|
||||
THREADS_FLAGS=
|
||||
!endif
|
||||
|
||||
# Programs used by "make":
|
||||
#
|
||||
TRUE_CC = cl
|
||||
CC = cl
|
||||
CFLAGS = -c -MD -Zi -I./ -I$(srcdir) -I$(HDIR) -I../h -I$(top_srcdir)/gc/include -DHAVE_ISATTY $(THREADS_FLAGS) -DGC_NOT_DLL
|
||||
# -Wall -W -Wfloat-equal -Wundef -Wendif-labels -Wpointer-arith -Wcast-align \
|
||||
# -Wwrite-strings -Wconversion -Wsign-compare -Wmissing-prototypes -Wredundant-decls \
|
||||
# -Wunreachable-code -Winline
|
||||
DEFS = $(THREADS_FLAGS)
|
||||
|
||||
SHELL = /bin/sh
|
||||
RM = del
|
||||
CP = copy /Y
|
||||
MV = move /Y
|
||||
LINK = link
|
||||
EXE = .exe
|
||||
DPP = .\dpp$(EXE)
|
||||
|
||||
# Data for installation
|
||||
#
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
prefix=@prefix@
|
||||
exec_prefix=$(prefix)
|
||||
libdir=$(prefix)\lib\ecl
|
||||
|
||||
# Files
|
||||
|
||||
HDIR = $(top_srcdir)\h
|
||||
HFILES = ..\h\config.h $(HDIR)\ecl.h $(HDIR)\ecl-cmp.h\
|
||||
$(HDIR)\object.h $(HDIR)\cs.h $(HDIR)\stacks.h\
|
||||
$(HDIR)\external.h $(HDIR)\eval.h\
|
||||
$(HDIR)\number.h $(HDIR)\page.h $(HDIR)\unify.h\
|
||||
$(HDIR)\lwp.h
|
||||
OBJS = main.obj symbol.obj package.obj list.obj\
|
||||
apply.obj eval.obj interpreter.obj compiler.obj disassembler.obj \
|
||||
instance.obj gfun.obj reference.obj character.obj\
|
||||
file.obj read.obj print.obj error.obj string.obj cfun.obj\
|
||||
typespec.obj assignment.obj \
|
||||
predicate.obj big.obj number.obj\
|
||||
num_pred.obj num_comp.obj num_arith.obj num_sfun.obj num_co.obj\
|
||||
num_log.obj num_rand.obj array.obj sequence.obj cmpaux.obj\
|
||||
macros.obj backq.obj stacks.obj \
|
||||
time.obj unixint.obj\
|
||||
mapfun.obj multival.obj hash.obj format.obj pathname.obj\
|
||||
structure.obj load.obj unixfsys.obj unixsys.obj \
|
||||
ffi.obj alloc_2.obj tcp.obj $(THREADS_OBJ)
|
||||
|
||||
all: $(DPP) external.h ..\eclmin.lib ..\cinit.obj
|
||||
|
||||
.SUFFIXES: .obj .c .d
|
||||
|
||||
{$(srcdir:\=/)}.d{}.c:
|
||||
$(DPP) $< $@
|
||||
#.d.c:
|
||||
# $(DPP) $< $@
|
||||
.c.obj:
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
.PHONY: all
|
||||
|
||||
#
|
||||
# When compiling the library itself, we have to remove the dllimport
|
||||
# declarations, because the variables that they mark are in the
|
||||
# in the library and can be referenced without indirection.
|
||||
#
|
||||
external.h: $(top_srcdir)/h/external.h Makefile
|
||||
cut.exe removedecl < $(top_srcdir)/h/external.h > $@
|
||||
|
||||
cut.exe: $(top_srcdir)/util/cut.c
|
||||
$(CC) $(LDFLAGS) /Fecut.exe $(top_srcdir)/util/cut.c
|
||||
|
||||
install: $(HFILES)
|
||||
for %i in ($(HFILES)) do $(CP) %i $(libdir)\h
|
||||
cut.exe < ..\h\config.h > $(libdir)\h\config-install.h
|
||||
$(RM) $(libdir)\h\config.h
|
||||
$(MV) $(libdir)\h\config-install.h $(libdir)\h\config.h
|
||||
|
||||
flatinstall: $(HFILES)
|
||||
for %i in ($(HFILES)) do $(CP) %i $(prefix)\h
|
||||
cut.exe < ..\h\config.h > $(prefix)\h\config-install.h
|
||||
for %h in (..\h\*.h) do $(CP) %h $(prefix)\h
|
||||
$(RM) $(prefix)\h\config.h
|
||||
$(MV) $(prefix)\h\config-install.h $(prefix)\h\config.h
|
||||
|
||||
..\eclmin.lib: $(OBJS:.obj=.c) all_symbols.c $(OBJS) all_symbols.obj all_symbols2.obj
|
||||
-$(RM) $@
|
||||
$(LINK) -lib -out:$@ $(OBJS)
|
||||
|
||||
clean:
|
||||
-for %f in (..\h\config.h dpp dpp.obj $(DPP) external.h \
|
||||
..\eclmin.lib ..\cinit.obj cinit.c \
|
||||
symbols_list2.h) \
|
||||
do $(RM) %f
|
||||
-for %f in ($(OBJS:.obj=.c) all_symbols.c) do $(RM) %f
|
||||
-for %f in ($(OBJS) all_symbols.obj all_symbols2.obj) do $(RM) %f
|
||||
-$(RM) *.pdb
|
||||
|
||||
# Build rules
|
||||
|
||||
$(DPP): $(srcdir)/dpp.c $(srcdir)/symbols_list2.h ../h/config.h
|
||||
$(TRUE_CC) -I../h -I./ -I$(HDIR) $(DEFS) $(srcdir)/dpp.c -o $@
|
||||
../h/config.h: ../h/config.h.msvc6
|
||||
$(CP) ..\h\config.h.msvc6 ..\h\config.h
|
||||
|
||||
#
|
||||
# GCC might break this code
|
||||
#
|
||||
gbc.o: gbc.c $(HFILES)
|
||||
$(CC) $(CFLAGS) -O0 gbc.c -o $@
|
||||
#
|
||||
# This reduces the overhead of jumping to other functions
|
||||
#
|
||||
apply.o: apply.c $(HFILES) $(HDIR)/cs.h
|
||||
$(CC) $(CFLAGS) apply.c -o $@
|
||||
#
|
||||
# These files are interrelated
|
||||
#
|
||||
all_symbols.obj: all_symbols.c
|
||||
$(CC) $(CFLAGS) -Fo$@ -I./ all_symbols.c
|
||||
all_symbols2.obj: all_symbols.c
|
||||
$(CC) $(CFLAGS) -DECL_FINAL -Fo$@ -I./ all_symbols.c
|
||||
#
|
||||
# This is in another directory
|
||||
#
|
||||
../cinit.obj: cinit.c
|
||||
$(CC) $(CFLAGS) -I./ -o cinit.obj cinit.c
|
||||
$(MV) cinit.obj ..\
|
||||
162
msvc/doc/Makefile
Normal file
162
msvc/doc/Makefile
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
top_srcdir= ..\..\src
|
||||
srcdir = ..\..\src\doc
|
||||
|
||||
prefix=@prefix@
|
||||
exec_prefix=$(prefix)\bin
|
||||
infodir = $(prefix)\doc\info
|
||||
mandir=$(prefix)\doc\man
|
||||
docdir=$(prefix)\doc
|
||||
manext=1
|
||||
|
||||
INFOEXT = info
|
||||
SHELL = cmd.exe
|
||||
INSTALL = ..\install.bat
|
||||
INSTALL_PROGRAM = $(INSTALL)
|
||||
INSTALL_DATA = $(INSTALL)
|
||||
INSTALL_INFO = $(INSTALL)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/gc/mkinstalldirs.bat
|
||||
INFO_FILES = ecl.$(INFOEXT) ecldev.$(INFOEXT)
|
||||
HTML_FILES = index.html license.html lgpl.html news.html benchmark.html \
|
||||
install.html download.html
|
||||
|
||||
RM = erase
|
||||
RMDIR = rmdir /S /Q
|
||||
MKDIR = mkdir
|
||||
CP = copy /Y
|
||||
|
||||
ECL_VERSION=0.9f
|
||||
|
||||
FILTER = ..\c\cut$(EXE) "@PACKAGE_VERSION@" "$(ECL_VERSION)"
|
||||
|
||||
ECL = ../ecl
|
||||
|
||||
all: $(INFO_FILES) $(HTML_FILES) developers_manual user_manual clx_manual
|
||||
|
||||
ecl.dvi: $(srcdir)/user.txi $(srcdir)/macros.txi clisp.sty ecl.sty
|
||||
tex $(srcdir)/user.txi
|
||||
ecldev.dvi: $(srcdir)/devel.txi $(srcdir)/macros.txi clisp.sty ecl.sty
|
||||
tex $(srcdir)/devel.txi
|
||||
clx.dvi: clx.texinfo
|
||||
tex clx.texinfo
|
||||
|
||||
ecl.ps: ecl.dvi $(srcdir)/macros.txi
|
||||
dvips -o $@ ecl.dvi
|
||||
ecldev.ps: ecldev.dvi $(srcdir)/macros.txi
|
||||
dvips -o $@ ecldev.dvi
|
||||
clx.ps: clx.dvi
|
||||
dvips -o $@ clx.dvi
|
||||
|
||||
install: all
|
||||
IF NOT EXIST $(docdir) $(MKDIR) $(docdir)
|
||||
for %i in (Copyright LGPL) do $(CP) $(top_srcdir)\..\%i $(docdir)
|
||||
for %i in ($(HTML_FILES)) do $(CP) %i $(docdir)
|
||||
IF NOT EXIST $(docdir)\ecldev $(MKDIR) $(docdir)\ecldev
|
||||
for %i in (ecldev\*) do $(CP) %i $(docdir)\ecldev
|
||||
IF NOT EXIST $(docdir)\ecl $(MKDIR) $(docdir)\ecl
|
||||
for %i in (ecl\*) do $(CP) %i $(docdir)\ecl
|
||||
IF NOT EXIST $(docdir)\clx $(MKDIR) $(docdir)\clx
|
||||
for %i in (clx\*) do $(CP) %i $(docdir)\clx
|
||||
flatinstall: all
|
||||
IF NOT EXIST $(docdir) $(MKDIR) $(docdir)
|
||||
for %i in (Copyright LGPL) do $(CP) $(top_srcdir)\..\%i $(docdir)
|
||||
for %i in ($(HTML_FILES)) do $(CP) %i $(docdir)
|
||||
IF NOT EXIST $(docdir)\ecldev $(MKDIR) $(docdir)\ecldev
|
||||
for %i in (ecldev\*) do $(CP) %i $(docdir)\ecldev
|
||||
IF NOT EXIST $(docdir)\ecl $(MKDIR) $(docdir)\ecl
|
||||
for %i in (ecl\*) do $(CP) %i $(docdir)\ecl
|
||||
IF NOT EXIST $(docdir)\clx $(MKDIR) $(docdir)\clx
|
||||
for %i in (clx\*) do $(CP) %i $(docdir)\clx
|
||||
|
||||
uninstall:
|
||||
for k in $(INFO_FILES); do \
|
||||
rm $$k; \
|
||||
if [ -x $(INSTALL_INFO) ]; then \
|
||||
$(INSTALL_INFO) --delete $$k; \
|
||||
fi; \
|
||||
done
|
||||
rm -r $(infodir)/ecl.$(INFOEXT) $(infodir)/ecldev.$(INFOEXT); \
|
||||
rm $(mandir)/man$(manext)/ecl.$(manext)
|
||||
|
||||
head2: developers_manual user_manual clx_manual $(srcdir)/head Makefile
|
||||
IF EXIST ecl\index.html ( \
|
||||
..\c\cut.exe "ecl/user.html" "ecl/index.html" \
|
||||
"ecldev/devel.html" "ecldev/index.html" \
|
||||
< $(srcdir)/head > head2 \
|
||||
) ELSE ( \
|
||||
copy /y $(srcdir)/head head2 \
|
||||
)
|
||||
ecl.info.gz: ecl.info
|
||||
gzip < ecl.info > ecl.info.gz
|
||||
ecldev.info.gz: ecldev.info
|
||||
gzip < ecldev.info > ecldev.info.gz
|
||||
clx.info.gz: clx.info
|
||||
gzip < clx.info > clx.info.gz
|
||||
ecl.info: $(srcdir)/user.txi $(srcdir)/macros.txi
|
||||
makeinfo -I $(srcdir) --no-split $(srcdir)/user.txi
|
||||
ecldev.info: $(srcdir)/devel.txi $(srcdir)/macros.txi
|
||||
makeinfo -I $(srcdir) --no-split $(srcdir)/devel.txi
|
||||
clx.info: clx.texinfo
|
||||
makeinfo --no-split clx.texinfo
|
||||
clx.texinfo: $(top_srcdir)/clx/manual/clx.texinfo
|
||||
cp $(top_srcdir)/clx/manual/clx.texinfo .
|
||||
|
||||
download.html: $(srcdir)/download.in.html head2
|
||||
( type head2 $(srcdir)\download.in.html $(srcdir)\end ) | $(FILTER) > $@
|
||||
index.html: $(srcdir)/index.in.html head2
|
||||
( type head2 $(srcdir)\index.in.html $(srcdir)\end ) | $(FILTER) > $@
|
||||
install.html: $(srcdir)/install.in.html head2
|
||||
( type head2 $(srcdir)\install.in.html $(srcdir)\end ) | $(FILTER) > $@
|
||||
news.html: $(srcdir)\..\..\ANNOUNCEMENT head2
|
||||
type head2 > html_tmp
|
||||
echo "<pre>" >> html_tmp
|
||||
type $(srcdir)\..\..\ANNOUNCEMENT >> html_tmp
|
||||
echo "</pre>" >> html_tmp
|
||||
type $(srcdir)\end >> html_tmp
|
||||
$(FILTER) < html_tmp > $@
|
||||
$(RM) html_tmp
|
||||
benchmark.html: $(srcdir)/benchmark.in.html ../gabriel/BENCHMARK head2
|
||||
type head2 > html_tmp
|
||||
type $(srcdir)\benchmark.in.html >> html_tmp
|
||||
echo "<pre>" >> html_tmp
|
||||
type ..\gabriel\BENCHMARK >> html_tmp
|
||||
echo "</pre>" >> html_tmp
|
||||
type $(srcdir)\end >> html_tmp
|
||||
$(FILTER) < html_tmp > $@
|
||||
$(RM) html_tmp
|
||||
../gabriel/BENCHMARK:
|
||||
if not exist ..\gabriel $(MKDIR) ..\gabriel
|
||||
echo No benchmarks available > ..\gabriel\BENCHMARK
|
||||
license.html: $(top_srcdir)/../Copyright head2
|
||||
type head2 > html_tmp
|
||||
echo "<pre>" >> html_tmp
|
||||
type $(top_srcdir)\..\Copyright >> html_tmp
|
||||
echo "</pre>" >> html_tmp
|
||||
type $(srcdir)\end >> html_tmp
|
||||
$(FILTER) < html_tmp > $@
|
||||
$(RM) html_tmp
|
||||
lgpl.html: $(top_srcdir)/../LGPL head2
|
||||
type head2 > html_tmp
|
||||
echo "<pre>" >> html_tmp
|
||||
type $(top_srcdir)\..\LGPL >> html_tmp
|
||||
echo "</pre>" >> html_tmp
|
||||
type $(srcdir)\end >> html_tmp
|
||||
$(FILTER) < html_tmp > $@
|
||||
$(RM) html_tmp
|
||||
user_manual: $(srcdir)/user.txi $(srcdir)/macros.txi
|
||||
echo "Producing ecl.html; ignore error messages."
|
||||
IF NOT EXIST ecl MKDIR ecl
|
||||
makeinfo -v -I $(srcdir) --html $(srcdir)/user.txi
|
||||
echo > user_manual
|
||||
developers_manual: $(srcdir)/devel.txi $(srcdir)/macros.txi
|
||||
echo "Producing ecldev.html; ignore error messages."
|
||||
IF NOT EXIST ecldev MKDIR ecldev
|
||||
makeinfo -v -I $(srcdir) --html $(srcdir)/devel.txi
|
||||
echo > developers_manual
|
||||
clx_manual: $(srcdir)/../clx/manual/clx.texinfo
|
||||
echo "Producing clx.html; ignore error messages."
|
||||
IF NOT EXIST clx MKDIR clx
|
||||
makeinfo -v --html $(srcdir)\..\clx\manual\clx.texinfo
|
||||
echo > clx_manual
|
||||
clean:
|
||||
-for %i in (ecl ecldev clx ..\gabriel) do $(RMDIR) %i
|
||||
-for %i in (ecl.info* ecldev.info* $(HTML_FILES) head2 user_manual developers_manual clx_manual ..\gabriel\BENCHMARK) do $(RM) %i
|
||||
71
msvc/gc/Makefile
Normal file
71
msvc/gc/Makefile
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# Makefile for Windows NT. Assumes Microsoft compiler, and a single thread.
|
||||
# DLLs are included in the root set under NT, but not under win32S.
|
||||
# Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor.
|
||||
|
||||
CPU= i386
|
||||
!include <ntwin32.mak>
|
||||
|
||||
srcdir = ..\..\src\gc
|
||||
|
||||
!if "$(ECL_THREADS)" != ""
|
||||
THREADS_OBJ= win32_threads.obj
|
||||
THREADS_FLAGS= -DGC_WIN32_THREADS
|
||||
!else
|
||||
THREADS_OBJ=
|
||||
THREADS_FLAGS=
|
||||
!endif
|
||||
|
||||
OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj $(THREADS_OBJ)
|
||||
|
||||
all: gctest.exe cord\de.exe test_cpp.exe
|
||||
|
||||
{$(srcdir)}.c{}.obj:
|
||||
$(cc) $(cdebug) $(cflags) $(cvarsdll) -I$(srcdir)\include -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL $(THREADS_FLAGS) $< /Fo$*.obj
|
||||
|
||||
.cpp.obj:
|
||||
$(cc) /MD $(cdebug) $(cflags) $(cvarsdll) -I$(srcdir)\include -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL $(THREADS_FLAGS) $*.CPP /Fo$*.obj
|
||||
|
||||
$(OBJS) tests\test.obj: $(srcdir)\include\private\gc_priv.h $(srcdir)\include\private\gc_hdrs.h $(srcdir)\include\gc.h $(srcdir)\include\private\gcconfig.h $(srcdir)\include\private\gc_locks.h $(srcdir)\include\private\gc_pmark.h $(srcdir)\include\gc_mark.h
|
||||
|
||||
gc.lib: $(OBJS)
|
||||
link -lib /MACHINE:i386 /out:gc.lib $(OBJS)
|
||||
# The original NT SDK used lib32 instead of lib
|
||||
|
||||
gctest.exe: tests\test.obj gc.lib
|
||||
# The following works for win32 debugging. For win32s debugging use debugtype:coff
|
||||
# and add mapsympe line.
|
||||
# This produces a "GUI" applications that opens no windows and writes to the log file
|
||||
# "gc.log". This is done to make the result runnable under win32s.
|
||||
$(link) -debug:full -debugtype:cv $(guiflags) -stack:131072 -out:$*.exe tests\test.obj $(guilibs) gc.lib
|
||||
# mapsympe -n -o gctest.sym gctest.exe
|
||||
|
||||
cord\de_win.rbj: cord\de_win.res
|
||||
cvtres -$(CPU) cord\de_win.res -o cord\de_win.rbj
|
||||
|
||||
cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h
|
||||
|
||||
cord\de_win.res: cord\de_win.rc cord\de_win.h cord\de_cmds.h
|
||||
$(rc) $(rcvars) -r -fo cord\de_win.res $(cvarsdll) cord\de_win.rc
|
||||
|
||||
# Cord/de is a real win32 gui application.
|
||||
cord\de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib
|
||||
$(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:cord\de.exe cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib $(guilibs)
|
||||
|
||||
gc_cpp.obj: $(srcdir)\include\gc_cpp.h $(srcdir)\include\gc.h
|
||||
|
||||
gc_cpp.cpp: $(srcdir)\gc_cpp.cc
|
||||
copy $(srcdir)\gc_cpp.cc gc_cpp.cpp
|
||||
|
||||
test_cpp.cpp: tests\test_cpp.cc
|
||||
copy tests\test_cpp.cc test_cpp.cpp
|
||||
|
||||
# This generates the C++ test executable. The executable expects
|
||||
# a single numeric argument, which is the number of iterations.
|
||||
# The output appears in the file "gc.log".
|
||||
test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib
|
||||
$(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:test_cpp.exe test_cpp.obj gc.lib $(guilibs)
|
||||
|
||||
|
||||
clean:
|
||||
-del gc.lib
|
||||
-for %i in ($(OBJS) gc_cpp.cpp) do erase %i
|
||||
615
msvc/gmp/Makefile
Normal file
615
msvc/gmp/Makefile
Normal file
|
|
@ -0,0 +1,615 @@
|
|||
srcdir = ..\..\src\gmp
|
||||
|
||||
AUTO_SUBDIRS = mpn\generic mpf mpq mpz printf scanf
|
||||
|
||||
MPN_GC_SOURCES = \
|
||||
mpn\generic\add.c \
|
||||
mpn\generic\add_1.c \
|
||||
mpn\generic\add_n.c \
|
||||
mpn\generic\addmul_1.c \
|
||||
mpn\generic\addsub_n.c \
|
||||
mpn\generic\bdivmod.c \
|
||||
mpn\generic\cmp.c \
|
||||
mpn\generic\dc_divrem_n.c \
|
||||
mpn\generic\dive_1.c \
|
||||
mpn\generic\diveby3.c \
|
||||
mpn\generic\divis.c \
|
||||
mpn\generic\divrem.c \
|
||||
mpn\generic\divrem_1.c \
|
||||
mpn\generic\divrem_2.c \
|
||||
mpn\generic\dump.c \
|
||||
mpn\generic\fib2_ui.c \
|
||||
mpn\generic\gcd.c \
|
||||
mpn\generic\gcd_1.c \
|
||||
mpn\generic\gcdext.c \
|
||||
mpn\generic\get_str.c \
|
||||
mpn\generic\hamdist.c \
|
||||
mpn\generic\jacbase.c \
|
||||
mpn\generic\lshift.c \
|
||||
mpn\generic\mod_1.c \
|
||||
mpn\generic\mod_34lsub1.c \
|
||||
mpn\generic\mode1o.c \
|
||||
mpn\generic\mul.c \
|
||||
mpn\generic\mul_1.c \
|
||||
mpn\generic\mul_basecase.c \
|
||||
mpn\generic\mul_fft.c \
|
||||
mpn\generic\mul_n.c \
|
||||
mpn\generic\perfsqr.c \
|
||||
mpn\generic\popcount.c \
|
||||
mpn\generic\pow_1.c \
|
||||
mpn\generic\pre_divrem_1.c \
|
||||
mpn\generic\pre_mod_1.c \
|
||||
mpn\generic\random.c \
|
||||
mpn\generic\random2.c \
|
||||
mpn\generic\rootrem.c \
|
||||
mpn\generic\rshift.c \
|
||||
mpn\generic\sb_divrem_mn.c \
|
||||
mpn\generic\scan0.c \
|
||||
mpn\generic\scan1.c \
|
||||
mpn\generic\set_str.c \
|
||||
mpn\generic\sizeinbase.c \
|
||||
mpn\generic\sqr_basecase.c \
|
||||
mpn\generic\sqrtrem.c \
|
||||
mpn\generic\sub.c \
|
||||
mpn\generic\sub_1.c \
|
||||
mpn\generic\sub_n.c \
|
||||
mpn\generic\submul_1.c \
|
||||
mpn\generic\tdiv_qr.c \
|
||||
mpn\mp_bases.c
|
||||
|
||||
MPN_P0_C_SOURCES = \
|
||||
mpn\generic\add.c \
|
||||
mpn\generic\add_1.c \
|
||||
mpn\generic\addsub_n.c \
|
||||
mpn\generic\bdivmod.c \
|
||||
mpn\generic\cmp.c \
|
||||
mpn\generic\dc_divrem_n.c \
|
||||
mpn\generic\divis.c \
|
||||
mpn\generic\divrem.c \
|
||||
mpn\generic\divrem_2.c \
|
||||
mpn\generic\dump.c \
|
||||
mpn\generic\fib2_ui.c \
|
||||
mpn\generic\gcd.c \
|
||||
mpn\generic\gcd_1.c \
|
||||
mpn\generic\gcdext.c \
|
||||
mpn\generic\get_str.c \
|
||||
mpn\generic\hamdist.c \
|
||||
mpn\generic\jacbase.c \
|
||||
mpn\generic\mode1o.c \
|
||||
mpn\mp_bases.c \
|
||||
mpn\generic\mul.c \
|
||||
mpn\generic\mul_fft.c \
|
||||
mpn\generic\mul_n.c \
|
||||
mpn\generic\perfsqr.c \
|
||||
mpn\generic\popcount.c \
|
||||
mpn\generic\pow_1.c \
|
||||
mpn\generic\pre_divrem_1.c \
|
||||
mpn\generic\pre_mod_1.c \
|
||||
mpn\generic\random.c \
|
||||
mpn\generic\random2.c \
|
||||
mpn\generic\rootrem.c \
|
||||
mpn\generic\sb_divrem_mn.c \
|
||||
mpn\generic\scan0.c \
|
||||
mpn\generic\scan1.c \
|
||||
mpn\generic\set_str.c \
|
||||
mpn\generic\sizeinbase.c \
|
||||
mpn\generic\sqr_basecase.c \
|
||||
mpn\generic\sqrtrem.c \
|
||||
mpn\generic\sub.c \
|
||||
mpn\generic\sub_1.c \
|
||||
mpn\generic\tdiv_qr.c
|
||||
|
||||
MPN_P0_ASM_SOURCES = \
|
||||
mpn\x86i\umul.asm \
|
||||
mpn\x86i\udiv.asm \
|
||||
mpn\x86i\rshift.asm \
|
||||
mpn\x86i\mul_basecase.asm \
|
||||
mpn\x86i\mul_1.asm \
|
||||
mpn\x86i\mod_34lsub1.asm \
|
||||
mpn\x86i\mod_1.asm \
|
||||
mpn\x86i\lshift.asm \
|
||||
mpn\x86i\divrem_1.asm \
|
||||
mpn\x86i\diveby3.asm \
|
||||
mpn\x86i\dive_1.asm \
|
||||
mpn\x86i\copyi.asm \
|
||||
mpn\x86i\copyd.asm \
|
||||
mpn\x86i\aorsmul_1.asm \
|
||||
mpn\x86i\aors_n.asm
|
||||
|
||||
MPN_P3_C_SOURCES = \
|
||||
mpn\generic\add.c \
|
||||
mpn\generic\add_1.c \
|
||||
mpn\generic\addsub_n.c \
|
||||
mpn\generic\bdivmod.c \
|
||||
mpn\generic\cmp.c \
|
||||
mpn\generic\dc_divrem_n.c \
|
||||
mpn\generic\divis.c \
|
||||
mpn\generic\divrem.c \
|
||||
mpn\generic\divrem_2.c \
|
||||
mpn\generic\dump.c \
|
||||
mpn\generic\fib2_ui.c \
|
||||
mpn\generic\gcd.c \
|
||||
mpn\generic\gcd_1.c \
|
||||
mpn\generic\gcdext.c \
|
||||
mpn\generic\get_str.c \
|
||||
mpn\generic\jacbase.c \
|
||||
mpn\mp_bases.c \
|
||||
mpn\generic\mul.c \
|
||||
mpn\generic\mul_fft.c \
|
||||
mpn\generic\mul_n.c \
|
||||
mpn\generic\perfsqr.c \
|
||||
mpn\generic\pow_1.c \
|
||||
mpn\generic\random.c \
|
||||
mpn\generic\random2.c \
|
||||
mpn\generic\rootrem.c \
|
||||
mpn\generic\sb_divrem_mn.c \
|
||||
mpn\generic\scan0.c \
|
||||
mpn\generic\scan1.c \
|
||||
mpn\generic\set_str.c \
|
||||
mpn\generic\sizeinbase.c \
|
||||
mpn\generic\sqrtrem.c \
|
||||
mpn\generic\sub.c \
|
||||
mpn\generic\sub_1.c \
|
||||
mpn\generic\tdiv_qr.c
|
||||
|
||||
MPN_P3_ASM_SOURCES = \
|
||||
mpn\x86i\umul.asm \
|
||||
mpn\x86i\udiv.asm \
|
||||
mpn\x86i\p6\sqr_basecase.asm \
|
||||
mpn\x86i\mul_basecase.asm \
|
||||
mpn\x86i\mul_1.asm \
|
||||
mpn\x86i\p6\mode1o.asm \
|
||||
mpn\x86i\mod_34lsub1.asm \
|
||||
mpn\x86i\p6\mod_1.asm \
|
||||
mpn\x86i\p6\diveby3.asm \
|
||||
mpn\x86i\p6\dive_1.asm \
|
||||
mpn\x86i\copyi.asm \
|
||||
mpn\x86i\p6\copyd.asm \
|
||||
mpn\x86i\p6\aorsmul_1.asm \
|
||||
mpn\x86i\aors_n.asm \
|
||||
mpn\x86i\p6\mmx\rshift.asm \
|
||||
mpn\x86i\p6\p3mmx\popham.asm \
|
||||
mpn\x86i\p6\mmx\lshift.asm \
|
||||
mpn\x86i\p6\mmx\divrem_1.asm
|
||||
|
||||
MPN_P4_C_SOURCES = \
|
||||
mpn\generic\add.c \
|
||||
mpn\generic\add_1.c \
|
||||
mpn\generic\addsub_n.c \
|
||||
mpn\generic\bdivmod.c \
|
||||
mpn\generic\cmp.c \
|
||||
mpn\generic\dc_divrem_n.c \
|
||||
mpn\generic\divis.c \
|
||||
mpn\generic\divrem.c \
|
||||
mpn\generic\divrem_2.c \
|
||||
mpn\generic\dump.c \
|
||||
mpn\generic\fib2_ui.c \
|
||||
mpn\generic\gcd.c \
|
||||
mpn\generic\gcd_1.c \
|
||||
mpn\generic\gcdext.c \
|
||||
mpn\generic\get_str.c \
|
||||
mpn\generic\jacbase.c \
|
||||
mpn\mp_bases.c \
|
||||
mpn\generic\mul.c \
|
||||
mpn\generic\mul_fft.c \
|
||||
mpn\generic\mul_n.c \
|
||||
mpn\generic\perfsqr.c \
|
||||
mpn\generic\pow_1.c \
|
||||
mpn\generic\pre_divrem_1.c \
|
||||
mpn\generic\pre_mod_1.c \
|
||||
mpn\generic\random.c \
|
||||
mpn\generic\random2.c \
|
||||
mpn\generic\rootrem.c \
|
||||
mpn\generic\sb_divrem_mn.c \
|
||||
mpn\generic\scan0.c \
|
||||
mpn\generic\scan1.c \
|
||||
mpn\generic\set_str.c \
|
||||
mpn\generic\sizeinbase.c \
|
||||
mpn\generic\sqrtrem.c \
|
||||
mpn\generic\sub.c \
|
||||
mpn\generic\sub_1.c \
|
||||
mpn\generic\tdiv_qr.c
|
||||
|
||||
MPN_P4_ASM_SOURCES = \
|
||||
mpn\x86i\umul.asm \
|
||||
mpn\x86i\udiv.asm \
|
||||
mpn\x86i\mod_1.asm \
|
||||
mpn\x86i\divrem_1.asm \
|
||||
mpn\x86i\pentium4\copyi.asm \
|
||||
mpn\x86i\pentium4\copyd.asm \
|
||||
mpn\x86i\pentium4\sse2\submul_1.asm \
|
||||
mpn\x86i\pentium4\sse2\sub_n.asm \
|
||||
mpn\x86i\pentium4\sse2\sqr_basecase.asm \
|
||||
mpn\x86i\pentium4\sse2\mul_basecase.asm \
|
||||
mpn\x86i\pentium4\sse2\mul_1.asm \
|
||||
mpn\x86i\pentium4\sse2\mode1o.asm \
|
||||
mpn\x86i\pentium4\sse2\mod_34lsub1.asm \
|
||||
mpn\x86i\pentium4\sse2\diveby3.asm \
|
||||
mpn\x86i\pentium4\sse2\dive_1.asm \
|
||||
mpn\x86i\pentium4\sse2\addmul_1.asm \
|
||||
mpn\x86i\pentium4\sse2\add_n.asm \
|
||||
mpn\x86i\pentium4\mmx\rshift.asm \
|
||||
mpn\x86i\pentium4\mmx\popham.asm \
|
||||
mpn\x86i\pentium4\mmx\lshift.asm
|
||||
|
||||
MPF_SOURCES = \
|
||||
mpf\abs.c \
|
||||
mpf\add.c \
|
||||
mpf\add_ui.c \
|
||||
mpf\ceilfloor.c \
|
||||
mpf\clear.c \
|
||||
mpf\cmp.c \
|
||||
mpf\cmp_d.c \
|
||||
mpf\cmp_si.c \
|
||||
mpf\cmp_ui.c \
|
||||
mpf\div.c \
|
||||
mpf\div_2exp.c \
|
||||
mpf\div_ui.c \
|
||||
mpf\dump.c \
|
||||
mpf\eq.c \
|
||||
mpf\fits_sint.c \
|
||||
mpf\fits_slong.c \
|
||||
mpf\fits_sshort.c \
|
||||
mpf\fits_uint.c \
|
||||
mpf\fits_ulong.c \
|
||||
mpf\fits_ushort.c \
|
||||
mpf\get_d.c \
|
||||
mpf\get_d_2exp.c \
|
||||
mpf\get_dfl_prec.c \
|
||||
mpf\get_prc.c \
|
||||
mpf\get_si.c \
|
||||
mpf\get_str.c \
|
||||
mpf\get_ui.c \
|
||||
mpf\init.c \
|
||||
mpf\init2.c \
|
||||
mpf\inp_str.c \
|
||||
mpf\int_p.c \
|
||||
mpf\iset.c \
|
||||
mpf\iset_d.c \
|
||||
mpf\iset_si.c \
|
||||
mpf\iset_str.c \
|
||||
mpf\iset_ui.c \
|
||||
mpf\mul.c \
|
||||
mpf\mul_2exp.c \
|
||||
mpf\mul_ui.c \
|
||||
mpf\neg.c \
|
||||
mpf\out_str.c \
|
||||
mpf\pow_ui.c \
|
||||
mpf\random2.c \
|
||||
mpf\reldiff.c \
|
||||
mpf\set.c \
|
||||
mpf\set_d.c \
|
||||
mpf\set_dfl_prec.c \
|
||||
mpf\set_prc.c \
|
||||
mpf\set_prc_raw.c \
|
||||
mpf\set_q.c \
|
||||
mpf\set_si.c \
|
||||
mpf\set_str.c \
|
||||
mpf\set_ui.c \
|
||||
mpf\set_z.c \
|
||||
mpf\size.c \
|
||||
mpf\sqrt.c \
|
||||
mpf\sqrt_ui.c \
|
||||
mpf\sub.c \
|
||||
mpf\sub_ui.c \
|
||||
mpf\swap.c \
|
||||
mpf\trunc.c \
|
||||
mpf\ui_div.c \
|
||||
mpf\ui_sub.c \
|
||||
mpf\urandomb.c
|
||||
|
||||
MPQ_SOURCES = \
|
||||
mpq\abs.c \
|
||||
mpq\aors.c \
|
||||
mpq\canonicalize.c \
|
||||
mpq\clear.c \
|
||||
mpq\cmp.c \
|
||||
mpq\cmp_si.c \
|
||||
mpq\cmp_ui.c \
|
||||
mpq\div.c \
|
||||
mpq\equal.c \
|
||||
mpq\get_d.c \
|
||||
mpq\get_den.c \
|
||||
mpq\get_num.c \
|
||||
mpq\get_str.c \
|
||||
mpq\init.c \
|
||||
mpq\inp_str.c \
|
||||
mpq\inv.c \
|
||||
mpq\md_2exp.c \
|
||||
mpq\mul.c \
|
||||
mpq\neg.c \
|
||||
mpq\out_str.c \
|
||||
mpq\set.c \
|
||||
mpq\set_d.c \
|
||||
mpq\set_den.c \
|
||||
mpq\set_f.c \
|
||||
mpq\set_num.c \
|
||||
mpq\set_si.c \
|
||||
mpq\set_str.c \
|
||||
mpq\set_ui.c \
|
||||
mpq\set_z.c \
|
||||
mpq\swap.c
|
||||
|
||||
MPZ_SOURCES = \
|
||||
mpz\abs.c \
|
||||
mpz\add.c \
|
||||
mpz\add_ui.c \
|
||||
mpz\and.c \
|
||||
mpz\aorsmul.c \
|
||||
mpz\aorsmul_i.c \
|
||||
mpz\array_init.c \
|
||||
mpz\bin_ui.c \
|
||||
mpz\bin_uiui.c \
|
||||
mpz\cdiv_q.c \
|
||||
mpz\cdiv_q_ui.c \
|
||||
mpz\cdiv_qr.c \
|
||||
mpz\cdiv_qr_ui.c \
|
||||
mpz\cdiv_r.c \
|
||||
mpz\cdiv_r_ui.c \
|
||||
mpz\cdiv_ui.c \
|
||||
mpz\cfdiv_q_2exp.c \
|
||||
mpz\cfdiv_r_2exp.c \
|
||||
mpz\clear.c \
|
||||
mpz\clrbit.c \
|
||||
mpz\cmp.c \
|
||||
mpz\cmp_d.c \
|
||||
mpz\cmp_si.c \
|
||||
mpz\cmp_ui.c \
|
||||
mpz\cmpabs.c \
|
||||
mpz\cmpabs_d.c \
|
||||
mpz\cmpabs_ui.c \
|
||||
mpz\com.c \
|
||||
mpz\cong.c \
|
||||
mpz\cong_2exp.c \
|
||||
mpz\cong_ui.c \
|
||||
mpz\dive_ui.c \
|
||||
mpz\divegcd.c \
|
||||
mpz\divexact.c \
|
||||
mpz\divis.c \
|
||||
mpz\divis_2exp.c \
|
||||
mpz\divis_ui.c \
|
||||
mpz\dump.c \
|
||||
mpz\export.c \
|
||||
mpz\fac_ui.c \
|
||||
mpz\fdiv_q.c \
|
||||
mpz\fdiv_q_ui.c \
|
||||
mpz\fdiv_qr.c \
|
||||
mpz\fdiv_qr_ui.c \
|
||||
mpz\fdiv_r.c \
|
||||
mpz\fdiv_r_ui.c \
|
||||
mpz\fdiv_ui.c \
|
||||
mpz\fib2_ui.c \
|
||||
mpz\fib_ui.c \
|
||||
mpz\fits_sint.c \
|
||||
mpz\fits_slong.c \
|
||||
mpz\fits_sshort.c \
|
||||
mpz\fits_uint.c \
|
||||
mpz\fits_ulong.c \
|
||||
mpz\fits_ushort.c \
|
||||
mpz\gcd.c \
|
||||
mpz\gcd_ui.c \
|
||||
mpz\gcdext.c \
|
||||
mpz\get_d.c \
|
||||
mpz\get_d_2exp.c \
|
||||
mpz\get_si.c \
|
||||
mpz\get_str.c \
|
||||
mpz\get_ui.c \
|
||||
mpz\getlimbn.c \
|
||||
mpz\hamdist.c \
|
||||
mpz\import.c \
|
||||
mpz\init.c \
|
||||
mpz\init2.c \
|
||||
mpz\inp_raw.c \
|
||||
mpz\inp_str.c \
|
||||
mpz\invert.c \
|
||||
mpz\ior.c \
|
||||
mpz\iset.c \
|
||||
mpz\iset_d.c \
|
||||
mpz\iset_si.c \
|
||||
mpz\iset_str.c \
|
||||
mpz\iset_ui.c \
|
||||
mpz\jacobi.c \
|
||||
mpz\kronsz.c \
|
||||
mpz\kronuz.c \
|
||||
mpz\kronzs.c \
|
||||
mpz\kronzu.c \
|
||||
mpz\lcm.c \
|
||||
mpz\lcm_ui.c \
|
||||
mpz\lucnum2_ui.c \
|
||||
mpz\lucnum_ui.c \
|
||||
mpz\millerrabin.c \
|
||||
mpz\mod.c \
|
||||
mpz\mul.c \
|
||||
mpz\mul_2exp.c \
|
||||
mpz\mul_si.c \
|
||||
mpz\mul_ui.c \
|
||||
mpz\n_pow_ui.c \
|
||||
mpz\neg.c \
|
||||
mpz\nextprime.c \
|
||||
mpz\out_raw.c \
|
||||
mpz\out_str.c \
|
||||
mpz\perfpow.c \
|
||||
mpz\perfsqr.c \
|
||||
mpz\popcount.c \
|
||||
mpz\pow_ui.c \
|
||||
mpz\powm.c \
|
||||
mpz\powm_ui.c \
|
||||
mpz\pprime_p.c \
|
||||
mpz\random.c \
|
||||
mpz\random2.c \
|
||||
mpz\realloc.c \
|
||||
mpz\realloc2.c \
|
||||
mpz\remove.c \
|
||||
mpz\root.c \
|
||||
mpz\rrandomb.c \
|
||||
mpz\scan0.c \
|
||||
mpz\scan1.c \
|
||||
mpz\set.c \
|
||||
mpz\set_d.c \
|
||||
mpz\set_f.c \
|
||||
mpz\set_q.c \
|
||||
mpz\set_si.c \
|
||||
mpz\set_str.c \
|
||||
mpz\set_ui.c \
|
||||
mpz\setbit.c \
|
||||
mpz\size.c \
|
||||
mpz\sizeinbase.c \
|
||||
mpz\sqrt.c \
|
||||
mpz\sqrtrem.c \
|
||||
mpz\sub.c \
|
||||
mpz\sub_ui.c \
|
||||
mpz\swap.c \
|
||||
mpz\tdiv_q.c \
|
||||
mpz\tdiv_q_2exp.c \
|
||||
mpz\tdiv_q_ui.c \
|
||||
mpz\tdiv_qr.c \
|
||||
mpz\tdiv_qr_ui.c \
|
||||
mpz\tdiv_r.c \
|
||||
mpz\tdiv_r_2exp.c \
|
||||
mpz\tdiv_r_ui.c \
|
||||
mpz\tdiv_ui.c \
|
||||
mpz\tstbit.c \
|
||||
mpz\ui_pow_ui.c \
|
||||
mpz\ui_sub.c \
|
||||
mpz\urandomb.c \
|
||||
mpz\urandomm.c \
|
||||
mpz\xor.c \
|
||||
|
||||
PRINTF_SOURCES = \
|
||||
printf\asprintf.c \
|
||||
printf\asprntffuns.c \
|
||||
printf\doprnt.c \
|
||||
printf\doprntf.c \
|
||||
printf\doprnti.c \
|
||||
printf\fprintf.c \
|
||||
printf\obprintf.c \
|
||||
printf\obprntffuns.c \
|
||||
printf\obvprintf.c \
|
||||
printf\printf.c \
|
||||
printf\printffuns.c \
|
||||
printf\repl-vsnprintf.c \
|
||||
printf\snprintf.c \
|
||||
printf\snprntffuns.c \
|
||||
printf\sprintf.c \
|
||||
printf\sprintffuns.c \
|
||||
printf\vasprintf.c \
|
||||
printf\vfprintf.c \
|
||||
printf\vprintf.c \
|
||||
printf\vsnprintf.c \
|
||||
printf\vsprintf.c
|
||||
|
||||
SCANF_SOURCES = \
|
||||
scanf\doscan.c \
|
||||
scanf\fscanf.c \
|
||||
scanf\fscanffuns.c \
|
||||
scanf\scanf.c \
|
||||
scanf\sscanf.c \
|
||||
scanf\sscanffuns.c \
|
||||
scanf\vfscanf.c \
|
||||
scanf\vscanf.c \
|
||||
scanf\vsscanf.c
|
||||
|
||||
GMP_SOURCES = \
|
||||
ansi2knr.c \
|
||||
assert.c \
|
||||
compat.c \
|
||||
errno.c \
|
||||
extract-dbl.c \
|
||||
insert-dbl.c \
|
||||
memory.c \
|
||||
mp_bpl.c \
|
||||
mp_clz_tab.c \
|
||||
mp_minv_tab.c \
|
||||
mp_set_fns.c \
|
||||
rand.c \
|
||||
randclr.c \
|
||||
randdef.c \
|
||||
randlc.c \
|
||||
randlc2s.c \
|
||||
randlc2x.c \
|
||||
randraw.c \
|
||||
rands.c \
|
||||
randsd.c \
|
||||
randsdui.c \
|
||||
version.c
|
||||
|
||||
MPN_GC_OBJS = $(MPN_GC_SOURCES:.c=.obj)
|
||||
MPN_P0_OBJS = $(MPN_P0_ASM_SOURCES:.asm=.obj) $(MPN_P0_C_SOURCES:.c=.obj)
|
||||
MPN_P3_OBJS = $(MPN_P3_ASM_SOURCES:.asm=.obj) $(MPN_P3_C_SOURCES:.c=.obj)
|
||||
MPN_P4_OBJS = $(MPN_P4_ASM_SOURCES:.asm=.obj) $(MPN_P4_C_SOURCES:.c=.obj)
|
||||
MPF_OBJS = $(MPF_SOURCES:.c=.obj)
|
||||
MPQ_OBJS = $(MPQ_SOURCES:.c=.obj)
|
||||
MPZ_OBJS = $(MPZ_SOURCES:.c=.obj)
|
||||
PRINTF_OBJS = $(PRINTF_SOURCES:.c=.obj)
|
||||
SCANF_OBJS = $(SCANF_SOURCES:.c=.obj)
|
||||
GMP_OBJS = $(GMP_SOURCES:.c=.obj)
|
||||
|
||||
GMP_ALL_OBJS = $(MPF_OBJS) $(MPQ_OBJS) $(MPZ_OBJS) \
|
||||
$(PRINTF_OBJS) $(SCANF_OBJS) $(GMP_OBJS)
|
||||
|
||||
MPN_TYPE = gc
|
||||
|
||||
all: gmp.lib
|
||||
|
||||
mpn_gc.lib: msvc-build $(MPN_GC_OBJS)
|
||||
link -lib /NOLOGO /OUT:$@ $(MPN_GC_OBJS)
|
||||
|
||||
mpn_p0.lib: msvc-build $(MPN_P0_OBJS)
|
||||
link -lib /NOLOGO /OUT:$@ $(MPN_P0_OBJS)
|
||||
|
||||
mpn_p3.lib: msvc-build $(MPN_P3_OBJS)
|
||||
link -lib /NOLOGO /OUT:$@ $(MPN_P3_OBJS)
|
||||
|
||||
mpn_p4.lib: msvc-build $(MPN_P4_OBJS)
|
||||
link -lib /NOLOGO /OUT:$@ $(MPN_P4_OBJS)
|
||||
|
||||
gmp.lib: mpn_$(MPN_TYPE).lib $(GMP_ALL_OBJS)
|
||||
link -lib /NOLOGO /OUT:$@ *.obj mpf\*.obj mpz\*.obj mpq\*.obj $(PRINTF_OBJS) $(SCANF_OBJS) mpn_$(MPN_TYPE).lib
|
||||
|
||||
CFLAGS = /nologo /MD /W3 /GX /I "." /I $(srcdir) /I "$(srcdir)\mpn\generic" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "_MBCS"
|
||||
|
||||
{$(srcdir)\mpn\generic}.c{mpn\generic}.obj:
|
||||
cl -c $(CFLAGS) /Fo$@ $?
|
||||
{$(srcdir)\mpn}.c{mpn}.obj:
|
||||
cl -c $(CFLAGS) /Fo$@ $?
|
||||
{$(srcdir)\mpf}.c{mpf}.obj:
|
||||
cl -c $(CFLAGS) /Fo$@ $?
|
||||
{$(srcdir)\mpq}.c{mpq}.obj:
|
||||
cl -c $(CFLAGS) /Fo$@ $?
|
||||
{$(srcdir)\mpz}.c{mpz}.obj:
|
||||
cl -c $(CFLAGS) /Fo$@ $?
|
||||
{$(srcdir)\printf}.c{printf}.obj:
|
||||
cl -c $(CFLAGS) /Fo$@ $?
|
||||
{$(srcdir)\scanf}.c{scanf}.obj:
|
||||
cl -c $(CFLAGS) /Fo$@ $?
|
||||
{$(srcdir)}.c{}.obj:
|
||||
cl -c $(CFLAGS) /Fo$@ $?
|
||||
|
||||
.asm.obj:
|
||||
nasm -O9 -Xvc -f win32 -i $(@D)\ -o $@ $?
|
||||
|
||||
msvc-build: config-vc6.$(MPN_TYPE) gmp.h.vc6
|
||||
copy config-vc6.$(MPN_TYPE) config.h
|
||||
copy gmp.h.vc6 gmp.h
|
||||
for %d in ($(AUTO_SUBDIRS)) do \
|
||||
if not exist %d mkdir %d
|
||||
echo > $@
|
||||
|
||||
clean:
|
||||
-erase mpn\generic\*.obj
|
||||
-erase mpn\*.obj
|
||||
-erase mpf\*.obj
|
||||
-erase mpq\*.obj
|
||||
-erase mpz\*.obj
|
||||
-erase printf\*.obj
|
||||
-erase scanf\*.obj
|
||||
-erase *.obj
|
||||
-erase mpn_*.lib
|
||||
-erase gmp.lib
|
||||
-for %o in ($(MPN_P0_ASM_SOURCES:.asm=.obj)) do erase %o
|
||||
-for %o in ($(MPN_P3_ASM_SOURCES:.asm=.obj)) do erase %o
|
||||
-for %o in ($(MPN_P4_ASM_SOURCES:.asm=.obj)) do erase %o
|
||||
-for %d in ($(AUTO_SUBDIRS)) do rmdir /S /Q %d
|
||||
-erase config.h
|
||||
-erase gmp.h
|
||||
-erase msvc-build
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
@ECHO off
|
||||
REM @ECHO off
|
||||
REM Converted from ecl_nsi.sh
|
||||
|
||||
SETLOCAL
|
||||
|
|
@ -7,17 +7,17 @@ SET source=%1
|
|||
SET where=%2
|
||||
CD %where%
|
||||
SET dest=ecl.nsi
|
||||
SET where=%CD%
|
||||
ECHO %where%
|
||||
|
||||
REM set -x
|
||||
|
||||
sed -e "/!@INSTALLFILES@/,$d" -e "s,@ECLDIR@,%where:\=\\%," %source% > %dest%
|
||||
DIR /B /A:-D | sed -e "/^.*ecl.exe.*$/d" -e "/^.*ecl.nsi.*$/d" -e "s,^%where:\=\\%\\,,g" -e "s,^\(.*\)$, File \"${ECLDIR}\\\1\",g" >> %dest%
|
||||
DIR /B /A:D | sed -e "s,^%where:\=\\%\\,,g" -e "s,^\(.*\)$, File /r \"${ECLDIR}\\\1\",g" >> %dest%
|
||||
sed -e "1,/!@INSTALLFILES@/d;/!@DELETEFILES@/,$d" %source% >> %dest%
|
||||
DIR /B /A:-D | sed -e "/^.*ecl.exe.*$/d" -e "/^.*ecl.nsi.*$/d" -e "s,^%where:\=\\%\\,,g" -e "s,^\(.*\)$, Delete \"$INSTDIR\\\1\",g" >> %dest%
|
||||
DIR /B /A:D | sed -e "s,^%where:\=\\%\\,,g" -e "s,^\(.*\)$, RMDir /r \"$INSTDIR\\\1\",g" >> %dest%
|
||||
sed -e "1,/!@DELETEFILES@/d" %source% >> %dest%
|
||||
type %source%1 | ..\c\cut.exe "@ECLDIR@" "%where%" > %dest%
|
||||
dir /s /b /a:-d | ..\c\cut.exe "ecl.exe" "/DELETE/" "ecl.nsi" "/DELETE/" "%where%\\" "" > ../aux_files
|
||||
dir /s /b /a:d | ..\c\cut.exe "ecl.exe" "/DELETE/" "ecl.nsi" "/DELETE/" "%where%\\" "" > ../aux_dirs
|
||||
echo HOLA
|
||||
for /f %%i in (../aux_dirs) do @echo %%i
|
||||
for /f %%i in (../aux_dirs) do @echo File /r "${ECLDIR}\%%i" >> %dest%
|
||||
for /f %%i in (../aux_files) do @echo File "${ECLDIR}\%%i" >> %dest%
|
||||
type %source%2 >> %dest%
|
||||
for /f %%i in (../aux_files) do @echo Delete "$INSTDIR\%%i" >> %dest%
|
||||
for /f %%i in (../aux_dirs) do @echo RMDir /r "$INSTDIR\%%i" >> %dest%
|
||||
type %source%3 >> %dest%
|
||||
|
||||
ENDLOCAL
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ ECL 0.9g
|
|||
- Generated C functions now have readable names corresponding to appropriate
|
||||
Lisp function names (M. Pasternacki)
|
||||
|
||||
- ECL now compiles with the free Microsoft Visual C++ Toolkit
|
||||
2003. Instructions are provided on how to do it.
|
||||
|
||||
* Errors fixed:
|
||||
|
||||
- Now .o files compiled with :SYSTEM-P T with dash in filename load
|
||||
|
|
|
|||
|
|
@ -92,11 +92,11 @@ clean:
|
|||
|
||||
# Build rules
|
||||
|
||||
$(DPP): $(srcdir)/dpp.c symbols_list2.h
|
||||
$(DPP): $(srcdir)/dpp.c $(srcdir)/symbols_list2.h
|
||||
if test -f ../CROSS-DPP; then touch dpp; else \
|
||||
$(TRUE_CC) @CFLAGS@ @ECL_CFLAGS@ -I../h -I./ -I$(HDIR) $(DEFS) $(srcdir)/dpp.c -o $@ ; \
|
||||
fi
|
||||
symbols_list2.h: $(srcdir)/symbols_list.h Makefile
|
||||
$(srcdir)/symbols_list2.h: $(srcdir)/symbols_list.h Makefile
|
||||
cat $(srcdir)/symbols_list.h | \
|
||||
sed -e 's%{\([A-Z ]*.*".*"\),[^,]*,[ ]*NULL,.*}%{\1,NULL}%g' \
|
||||
-e 's%{\([A-Z ]*.*".*"\),[^,]*,[ ]*\([^,]*\),.*}%{\1,"\2"}%g' \
|
||||
|
|
|
|||
|
|
@ -136,12 +136,14 @@ int nres;
|
|||
put_lineno(void)
|
||||
{
|
||||
static int flag = 0;
|
||||
#if 0
|
||||
if (flag)
|
||||
fprintf(out, "#line %d\n", lineno);
|
||||
else {
|
||||
flag++;
|
||||
fprintf(out, "#line %d \"%s\"\n", lineno, filename);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
error(char *s)
|
||||
|
|
|
|||
1528
src/c/symbols_list2.h
Normal file
1528
src/c/symbols_list2.h
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -11,7 +11,7 @@
|
|||
(setq *ld-format* #-msvc "~A -o ~S -L~S ~{~S ~} ~@?"
|
||||
#+msvc "~A -Zi -Fe~S~* ~{~S ~} ~@?")
|
||||
(setq *cc-format* #-msvc "~A ~A ~:[~*~;~A~] \"-I~A/h\" -w -c \"~A\" -o \"~A\""
|
||||
#+msvc "~A ~A ~:[~*~;~A~] -I\"~A/h\" -Zi -W3 -c \"~A\" -Fo\"~A\"")
|
||||
#+msvc "~A ~A ~:[~*~;~A~] -I\"~A/h\" -Zi -w -nologo -c \"~A\" -Fo\"~A\"")
|
||||
#-dlopen
|
||||
(setq *ld-flags* "@LDRPATH@ @LDFLAGS@ -lecl @CORE_LIBS@ @LIBS@ @FASL_LIBS@")
|
||||
#+dlopen
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ static cl_object VV[VM];
|
|||
(with-open-file (f "static_lib.tmp" :direction :output :if-does-not-exist :create :if-exists :supersede)
|
||||
(format f "/DEBUGTYPE:CV /OUT:~A ~A ~{\"~&~A\"~}"
|
||||
output-name o-name ld-flags))
|
||||
(safe-system "lib @static_lib.tmp"))
|
||||
(safe-system "link -lib @static_lib.tmp"))
|
||||
(when (probe-file "static_lib.tmp")
|
||||
(cmp-delete-file "static_lib.tmp")))
|
||||
)
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
#+msvc "@CFLAGS@ @ECL_CFLAGS@ -I\"@true_srcdir@\"/h -I\"@true_builddir@\"/h"
|
||||
c::*cc-format*
|
||||
#-msvc "~A ~A ~:[~*~;~A~] -I\"@true_builddir@\"/h~* -w -c ~S -o ~S"
|
||||
#+msvc "~A ~A ~:[~*~;~A~] -I\"@true_builddir@\"/h~* -Zi -W3 -c ~S -Fo~S"
|
||||
#+msvc "~A ~A ~:[~*~;~A~] -I\"@true_builddir@\"/h~* -Zi -w -nologo -c ~S -Fo~S"
|
||||
c::*ld-format*
|
||||
#-msvc "~A -o ~S -L\"@true_builddir@\"~* ~{~S ~} ~@?"
|
||||
#+msvc "~A -Zi -Fe~S~* ~{~S ~} ~@?")
|
||||
|
|
|
|||
|
|
@ -113,10 +113,8 @@ index.html: $(srcdir)/index.in.html head
|
|||
cat head $(srcdir)/index.in.html $(srcdir)/end | $(FILTER) > $@
|
||||
install.html: $(srcdir)/install.in.html head
|
||||
cat head $(srcdir)/install.in.html $(srcdir)/end | $(FILTER) > $@
|
||||
news.html: $(srcdir)/news.in.html head
|
||||
(cat head; sed -e '/^----.*$$/,$$d' $(srcdir)/news.in.html; \
|
||||
sed -e '1,/^ECL [0-9\.]*$$/d;/^===*$$/d' $(srcdir)/../../ANNOUNCEMENT| sed -e '1d'; \
|
||||
sed -e '1,/^----*$$/d' $(srcdir)/news.in.html; \
|
||||
news.html: head
|
||||
(cat head; echo '<pre>'; cat $(srcdir)/../../ANNOUNCEMENT| sed -e '1d'; echo '</pre>' \
|
||||
cat $(srcdir)/end) | $(FILTER) > $@
|
||||
benchmark.html: $(srcdir)/benchmark.in.html ../gabriel/BENCHMARK head
|
||||
(cat head; cat $(srcdir)/benchmark.in.html; \
|
||||
|
|
|
|||
|
|
@ -1,327 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>ECL-Spain 0.1a</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>ECL-Spain 0.1a</h1>
|
||||
|
||||
<a name="toc"><h2>Table of contents</h2></a>
|
||||
<ul>
|
||||
<li><a href="#intro">Introduction</a>
|
||||
<li><a href="#intro">Project goals</a>
|
||||
<li><a href="#news">News</a>
|
||||
<li><a href="#bugs">Known bugs</a>
|
||||
<li><a href="#distrib">Distribution</a>
|
||||
<li><a href="#installing">Installation</a>
|
||||
<li><a href="ecls-guide.html">User's guide</a>
|
||||
<li><a href="#author">The author</a>
|
||||
<li><a href="#bench">Benchmark</a>
|
||||
</ul>
|
||||
|
||||
<a name="intro"><a href="#toc"><h2>Introduction</h2></a></a>
|
||||
|
||||
<a href="http://ecls.sourceforge.net">ECLS</a> stands for <em>Embeddable
|
||||
Common-Lisp "Spain"</em>, and I usually read it as "e-klos". It is a an
|
||||
implementation of the <a href="http://www.lisp.org">Common-Lisp language</a>
|
||||
which aims to comply to the <a
|
||||
href="http://www.lisp.org/HyperSpec/FrontMatter/index.html">ANSI X3J13</a>
|
||||
definition of the language.
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> combines a bytecodes
|
||||
compiler/interpreter and a translator to C. The first one is specially suited
|
||||
for prototyping and debugging. The second one produces fast code that can be
|
||||
dynamically loaded into the interpreter or statically linked to build
|
||||
standalone executables.
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> is distributed under the <a
|
||||
href="#copyright">GNU Library General Public License (GNU LGPL)</a>.
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> is not a brand new
|
||||
product. It has evolved from the EcoLisp implementation by Giuseppe Attardi
|
||||
which in turn was based on the Kyoto Common-Lisp implementation done by Taiichi
|
||||
Yuasa and Masami Hagiya, with contributions from several people. Nevertheless
|
||||
the program has been seriously modified and the current code base bears little
|
||||
resemblance to the previous implementations and the author of those
|
||||
implementations should not be blamed for the faults of thi <a
|
||||
href="http://ecls.sourceforge.net">ECLS</a>.
|
||||
|
||||
<a name="goals"><a href="#toc"><h2>Project goals</h2></a></a>
|
||||
|
||||
<ul>
|
||||
<li><b>To produce a free implementation of Common-Lisp.</b>
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> is released under the LGPL or
|
||||
GNU Library General Public Licence (See <a
|
||||
href="Copyright">Copyright</a>). This means that <a
|
||||
href="http://ecls.sourceforge.net">ECLS</a> can be used in commercial projects
|
||||
while keeping the implementation free.
|
||||
|
||||
<li><b>Compliance to the latest ANSI spec.</b>
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> is already rather standards
|
||||
compliant. <a href="http://ecls.sourceforge.net">ECLS</a> was born as a fork
|
||||
from the ECL (Eco-Common-Lisp by Giussepe Attardi) which conformed to Cltl2
|
||||
("Common-Lisp the Language 2"), but which was shipped with some ANSI
|
||||
compatibility extensions. Currently the worst parts with respect to ANSI are
|
||||
the LOOP package and parts of CLOS.
|
||||
|
||||
<li><b>Small code size.</b>
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> is made of a runtime library
|
||||
and an interpreter. The interpreter itself is small, at most three files of C
|
||||
code. Once the lisp environment is booted, it takes about 1Mb of code (although
|
||||
currently it is a bit more due to debuggin issues in the interpreter). If the
|
||||
whole of <a href="http://ecls.sourceforge.net">ECLS</a> is compiled from lisp
|
||||
to C, the resulting program is 1.5Mb. Nevertheless, there is room for
|
||||
improvement in this area.
|
||||
|
||||
<li><b>Embedability.</b>
|
||||
|
||||
<p>In a near future <a href="http://ecls.sourceforge.net">ECLS</a> will be
|
||||
shipped as a library that can be linked against arbitrary C
|
||||
programs. Currently, arbitrary C code can be linked against <a
|
||||
href="http://ecls.sourceforge.net">ECLS</a>, either statically or at runtime.
|
||||
|
||||
<li><b>Portability to arbitrary environments.</b>
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> currently compiles and runs
|
||||
on Linux, FreeBSD 4.x and NetBSD 1.5. Most of the code is portable. The parts
|
||||
which change from operating system to operating system are about the
|
||||
filesystem, sockets, signals and the allocation of big chunks of memory, but in
|
||||
all it is well below 1000 lines. The worst part is related to word-size and
|
||||
endianness. Work is in progress to port <a
|
||||
href="http://ecls.sourceforge.net">ECLS</a> to 64-bit environments.
|
||||
|
||||
<li><b>Compilation via an ANSI C compiler.</b>
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> can translate lisp code to C
|
||||
code that can be dynamically loaded or linked to the runtime to produce a
|
||||
standalone executable. Currently this process relies on GCC as a targed
|
||||
platform, but work is in progress to remove GCC dependencies.
|
||||
|
||||
<li><b>Better garbage collection.</b>
|
||||
|
||||
<p>As of this release the memory that <a
|
||||
href="http://ecls.sourceforge.net">ECLS</a> can allocate is restricted to
|
||||
16Mb. I have tried replacing the garbage collector with a conservative one
|
||||
(Boehm's GC v 4.11) and that did fix the problems, but increases the memory
|
||||
requirements of <a href="http://ecls.sourceforge.net">ECLS</a>. Since this is
|
||||
really undesirable, I have been also thinking about revamping the current
|
||||
garbage collector with an interface to mmap(). Time wil tell...
|
||||
|
||||
<li><b>Improve the compiler: more agressive inlining, better operations among
|
||||
numbers and unboxed arrays of complex numbers.</b>
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECLS</a> currently can inline all
|
||||
operations that involve fixnums, characters and floating point
|
||||
numbers. However, the type inferencer is not very powerful and therefore some
|
||||
operations are not inlined because the compiler cannot actually tell the types
|
||||
of the arguments and of the output.
|
||||
</ul>
|
||||
|
||||
<a name="news"><a href="#toc"><h2>News in this release (ECLS-0.1a)</h2></a></a>
|
||||
|
||||
<ul>
|
||||
<li>Due to human errors, the bytecompiler shipped with 0.1a was an
|
||||
unfinished version. In 0.1b we shipped a more polished files. Some
|
||||
of the errors which are fixed are
|
||||
<ul>
|
||||
<li>Produce the right code for TAGBODY inside closures</li>
|
||||
<li>Activate compiler for SYMBOL-MACROLET</li>
|
||||
<li>Allow non-keyword symbols as lambda-list-keywords</li>
|
||||
<li>Allow more than one :ALLOW-OTHER-KEYS to be supplied, but discard other than the first one
|
||||
<li> Process declarations in FLET/LABELS forms
|
||||
</ul>
|
||||
|
||||
<li> Fixed the C compiler routines for TAGBODY: it would produce wrong
|
||||
code when jumping out of a closure.
|
||||
|
||||
<li> Rewrite the error system using KMP's condition system, CLOS and a
|
||||
rudimentary interface to the toplevel.
|
||||
|
||||
<li> Enclosing the bytecompiler in an UNWIND-PROTECT ensures that the
|
||||
status of the compiler and of the interpreter is always consistent.
|
||||
|
||||
<li> Port and incorporate Peter Van Eynde's test suite for ANSI
|
||||
compliance.
|
||||
|
||||
<li> Replace features ECL/ECL-MIN with ECLS and ECLS-MIN. All references
|
||||
to ECL (Eco-Common-Lisp) should have been dropped by now.
|
||||
|
||||
<li> Add simple-program-error and simple-control-error to the hierarchy
|
||||
of conditions, and try to ensure that all routines in libecls.a
|
||||
signal the right type of condition.
|
||||
|
||||
<li> Define COMPLEMENT and CONTINOUSLY.
|
||||
|
||||
<li> Fix #'= between bignums.
|
||||
|
||||
<li> NIL is no longer valid as the first of a pair of bounding index
|
||||
designators, i.e. (nstring-upcase "aa" :start nil :end nil) causes
|
||||
an error.
|
||||
</ul>
|
||||
|
||||
<a name="bugs"><a href="#toc"><h2>Known bugs</h2></a></a>
|
||||
|
||||
As I mentioned above, the problem I am finding here is the lack of test suites
|
||||
which I can use to detect failures in the behavior of any function. Currently I
|
||||
can assure that <a href="http://ecls.sourceforge.net">ECLS</a> passes most of
|
||||
the tests from the <a href="http://clocc.sourceforge.net">the CLOCC suite</a>.
|
||||
The most important exceptions are
|
||||
<ul>
|
||||
<li>CLOS
|
||||
<li>#'format
|
||||
<li>#'unread-char is too lax
|
||||
<li>The CL package is too polluted
|
||||
<li>LOOP lacks some of the standard keywords, including destructuring
|
||||
<li>Support for logical pathnames is incomplete
|
||||
</ul>
|
||||
|
||||
If you find something that should be fixed or that the behavior of a
|
||||
function is particularly misleading with respect to the standards, feel free
|
||||
to tell me so.
|
||||
|
||||
Some other bugs which need to be fixed are:
|
||||
<ul>
|
||||
<li>Threads and sockets haven't been tested yet.
|
||||
<li>#'format doesn't pass the Cltl-1 tests and fails when the number of
|
||||
arguments is large.
|
||||
<li>Needs better support for wildcards in pathnames.
|
||||
<li>Bugs in logical operations among bignums.
|
||||
<li>Support for CLOS needs yet more optimization.
|
||||
</ul>
|
||||
|
||||
<a name="distrib"><a href="#toc"><h2>Distribution</h2></a></a>
|
||||
|
||||
This project is hosted at <a href="http://ecls.sourceforge.net">Source
|
||||
forge</a>. You can get current copies of the sources and of the documentation
|
||||
in there.
|
||||
|
||||
<a name="installing"><a href="#toc"><h2>Installation</h2></a></a>
|
||||
|
||||
<ul>
|
||||
<li>Unpack the tar file
|
||||
<pre>
|
||||
gunzip -c ecls.tgz | tar xf -
|
||||
</pre>
|
||||
|
||||
<li>Run the configuration file.
|
||||
<pre>
|
||||
cd ecls-0.1a
|
||||
./configure
|
||||
</pre>
|
||||
The previous step creates a directory with the name <b>build</b>, and
|
||||
stores a bunch of makefiles in it.
|
||||
|
||||
<li>Use GNU make to invoke the compilation
|
||||
<pre>
|
||||
make
|
||||
</pre>
|
||||
|
||||
<li>If you want to test the fresh new executable before installing. You you
|
||||
should invoke ECLS from withing the build directory using the "-dir ./"
|
||||
argument to advice him about the right place to find header files, libraries,
|
||||
etc. For instance, under linux the build directory is "linux" and we would do
|
||||
<pre>
|
||||
$ ./configure --prefix=$HOME
|
||||
[...]
|
||||
$ cd build
|
||||
$ make
|
||||
[...]
|
||||
$ ./ecls -dir ./
|
||||
</pre>
|
||||
|
||||
<li>Install it in the desired location
|
||||
<pre>
|
||||
make install
|
||||
</pre>
|
||||
</ul>
|
||||
|
||||
<p>As a side note, a --disable-clos is still in ./configure, but its use is
|
||||
discouraged and unsupported.
|
||||
|
||||
|
||||
<a name="author"><a href="#toc"><h2>The author</h2></a></a>
|
||||
|
||||
For the people who built the several pieces from ECoLisp, see the README.orig
|
||||
file. To contact the author of <a href="http://ecls.sourceforge.net">ECLS</a>,
|
||||
use the following address
|
||||
<pre>
|
||||
Juan Jose Garcia Ripoll
|
||||
|
||||
Univ. de Castilla-La Mancha
|
||||
E.T.S.I. Industriales
|
||||
Departamento de Matematicas
|
||||
c/Camilo Jose Cela, 3
|
||||
Ciudad Real, E-13071
|
||||
Spain
|
||||
|
||||
<a href="mailto:jjgarcia@ind-cr.uclm.es">jjgarcia@ind-cr.uclm.es</a>
|
||||
</pre>
|
||||
|
||||
|
||||
<a name="news"><a href="#toc"><h2>Benchmark</h2></a></a>
|
||||
|
||||
Benchmarks should be taken with a grain of salt. <a
|
||||
href="http://ecls.sourceforge.net">ECLS</a> does not aim to compete with any
|
||||
commercial or open source implementation. The purpose of these benchmarks are,
|
||||
thus, to show the progress of <a href="http://ecls.sourceforge.net">ECLS</a>
|
||||
itself from version to version.
|
||||
|
||||
<p>It also serves to show how well other implementations perform: CLISPc, which
|
||||
is based on bytecodes, is astonishingly fast, compared to other bytecodes
|
||||
implementations (ECLSi, CMUCLi) and to native code implementations (ECLSc,
|
||||
CMUCLc).
|
||||
|
||||
<p>All benchmarks are executed one after another. The benchmark currently shows
|
||||
just mean execution times in seconds, using English decimal point (0.03 = 3/100
|
||||
seconds). This means that performance of garbage collectors has a deep impact
|
||||
in these numbers.
|
||||
|
||||
<p>It would be nice to collect some other information, such as memory use and
|
||||
garbage collector timings, but that is beyond my reach for now. Help is always
|
||||
welcome.
|
||||
|
||||
<p>Finally, I have decided to distribute Gabriel's benchmarks together with <a
|
||||
href="http://ecls.sourceforge.net">ECLS</a>. The reason is that this code seems
|
||||
to belong to public domain and I had to perform several changes in order to let
|
||||
it run with different implementations. To recreate the benchmark just get in
|
||||
<tt>build/gabriel/</tt> and type <tt>make</tt>.
|
||||
|
||||
<pre>
|
||||
|
||||
CLISPi ECLSi CMUCLi CLISPc ECLSc CMUCLc
|
||||
boyer 2.490 28.283 13.520 0.397 0.767 0.110
|
||||
browse 3.116 7.167 13.260 0.459 ***** 0.280
|
||||
ctak 0.406 0.883 1.530 0.032 0.017 0.000
|
||||
dderiv 0.455 1.317 1.850 0.110 0.167 0.080
|
||||
deriv 0.405 1.133 1.670 0.111 0.167 0.070
|
||||
destru-mod 1.418 0.871 2.398 0.053 0.025 0.025
|
||||
destru 1.384 0.871 2.412 0.053 0.025 0.020
|
||||
div2 0.889 1.867 3.850 0.132 0.150 0.070
|
||||
fprint 0.026 0.046 0.015 0.026 0.042 0.015
|
||||
fread 0.009 0.017 0.007 0.009 0.017 0.005
|
||||
frpoly 3.026 22.750 15.240 0.625 6.267 0.220
|
||||
puzzle 6.452 4.633 14.630 0.481 0.033 0.020
|
||||
puzzle-mod 6.890 4.667 14.680 0.480 0.017 0.030
|
||||
puzzle-mod2 6.467 4.633 14.690 0.480 0.033 0.030
|
||||
stak 0.374 0.842 1.768 0.047 0.021 0.007
|
||||
tak 3.394 9.183 11.500 0.208 0.033 0.020
|
||||
tak-mod 3.385 9.450 11.520 0.208 0.033 0.020
|
||||
takl 1.407 6.433 9.130 0.107 0.000 0.010
|
||||
takr 0.346 0.971 2.035 0.026 0.004 0.002
|
||||
tprint 0.022 0.046 0.023 0.022 0.046 0.020
|
||||
traverse 41.230 71.767 108.390 1.880 1.450 0.370
|
||||
triang-mod 74.765 169.750 255.840 7.362 1.567 3.110
|
||||
triang 71.018 149.417 243.330 5.797 0.667 *****
|
||||
|
||||
IMPLi = Implementation IMPL interpreted
|
||||
IMPLc = Implementation IMPL compiled
|
||||
|
||||
CLISP = CLISP 2000-03-06 (March 2000)
|
||||
CMUCL = CMUCL 18c
|
||||
ECLS = ECLS 0.1a
|
||||
|
||||
</pre></body></html>
|
||||
|
|
@ -67,27 +67,28 @@ improvement in this area.
|
|||
|
||||
<li><b>Embedability.</b>
|
||||
|
||||
<p>In a near future <a href="http://ecls.sourceforge.net">ECL</a> will be
|
||||
shipped as a library that can be linked against arbitrary C
|
||||
programs. Currently, arbitrary C code can be linked against <a
|
||||
href="http://ecls.sourceforge.net">ECL</a>, either statically or at runtime.
|
||||
<p><a href="http://ecls.sourceforge.net">ECL</a> is shipped as a
|
||||
library that can be linked against arbitrary C programs. Arbitrary
|
||||
C/C++ code can be linked against <a
|
||||
href="http://ecls.sourceforge.net">ECL</a>, either statically or at
|
||||
runtime.
|
||||
|
||||
<li><b>Portability to arbitrary environments.</b>
|
||||
|
||||
<p><a href="http://ecls.sourceforge.net">ECL</a> is currently supported in
|
||||
<ul>
|
||||
<li>Debian and Redhat Linux on Intel</li>
|
||||
<li>Debian Linux on PowerPC</li>
|
||||
<li>FreeBSD 4.x</li>
|
||||
<li>Cygwin on Intel Windows (statically linked)</li>
|
||||
<li>MacOSX (statically linked)</li>
|
||||
<li>Linux on Intel, PowerPC, Alpha and Opteron</li>
|
||||
<li>FreeBSD on Intel</li>
|
||||
<li>NetBSD on Intel and Alpha</li>
|
||||
<li>Microsoft Windows</li>
|
||||
<li>MacOSX (currently broken)</li>
|
||||
</ul>
|
||||
Most of the code is portable. The parts
|
||||
which change from operating system to operating system are about the
|
||||
filesystem, sockets, signals and the allocation of big chunks of memory, but in
|
||||
all it is well below 1000 lines. The worst part is related to word-size and
|
||||
endianness. Work is in progress to port <a
|
||||
href="http://ecls.sourceforge.net">ECL</a> to 64-bit environments.
|
||||
Most of the code is portable and clean from issues like endianness and
|
||||
word size (<a href="http://ecls.sourceforge.net">ECL</a> works on 64
|
||||
bit architectures). The parts which change from operating system to
|
||||
operating system are about the filesystem, sockets, signals and the
|
||||
allocation of big chunks of memory, but in all it is well below 1000
|
||||
lines.
|
||||
|
||||
<li><b>Compilation via an ANSI C compiler.</b>
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@
|
|||
<tr><td><a href="clx/index.html"><b>CLX manual</b></a></td></tr>
|
||||
<tr><td><a href="benchmark.html"><b>Benchmarks</b></a></td></tr>
|
||||
<tr><td><a href="download.html"><b>Distribution</b></a></td></tr>
|
||||
<tr><td><a href="patch-current-exp.gz"><b>Experimental<br>Patches</b></a></td></tr>
|
||||
<tr><td><a
|
||||
href="http://lists.sourceforge.net/mailman/listinfo/ecls-list"><b>Mailing list</b></a></td></tr>
|
||||
<tr><td><a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ecls/ecls"><b>Browse CVS</b></a></td></tr>
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ definition of the language.
|
|||
<ul>
|
||||
<li>A bytecodes compiler and interpreter.</li>
|
||||
<li>A translator to C.</li>
|
||||
<li>An interface to foreign functions.</li>
|
||||
<li>A UFFI-compatible interface to C code.</li>
|
||||
<li>A dynamic loader.</li>
|
||||
<li>The possibility to build standalone executables.</li>
|
||||
<li>The possibility to build standalone executables and DLLs.</li>
|
||||
<li>The Common-Lisp Object System (CLOS).</li>
|
||||
<li>Conditions and restarts for handling errors.</li>
|
||||
<li>Sockets as ordinary streams.</li>
|
||||
|
|
@ -24,8 +24,10 @@ definition of the language.
|
|||
</ul>
|
||||
|
||||
<p>ECL supports the operating systems Linux, FreeBSD, NetBSD, Solaris,
|
||||
Windows/Cygwin and OSX, running on top of the Intel, Sparc, Alpha and PowerPC
|
||||
processors. Porting to other architectures should be rather easy.</p>
|
||||
Windows, running on top of the Intel, Sparc, Alpha and PowerPC
|
||||
processors. The port to OSX is broken due to some problems with the
|
||||
garbage collector and latest versions of OSX. Porting to other
|
||||
architectures should be rather easy.</p>
|
||||
|
||||
<h2>The author</h2>
|
||||
|
||||
|
|
@ -33,8 +35,8 @@ The original version was written by Giuseppe Attardi.
|
|||
The current maintainer of <a href="http://ecls.sourceforge.net">ECLS</a> is
|
||||
Juan Jose Garcia Ripoll, who can be reached at the ECLS mailing list.
|
||||
|
||||
<p>We seek volunteers willing to test or improve the implementation. We accept
|
||||
both code and constructive critics, so feel free to share your toughts at the
|
||||
mailing list.
|
||||
<p>We seek volunteers willing to test or improve the
|
||||
implementation. We accept both code and constructive critics, so feel
|
||||
free to share your toughts at the mailing list.
|
||||
|
||||
<h2>Latest news</h2>
|
||||
|
|
|
|||
|
|
@ -15,20 +15,6 @@ href="#msvc">the appropiate section</a>.
|
|||
chapter</a> on how to pre-configure, write down a configuration file
|
||||
and finish the compilation.
|
||||
|
||||
<h3><a name="msvc">Microsoft C++</a></h3>
|
||||
<ul>
|
||||
<li>Change to the <tt>msvc</tt> directory.
|
||||
|
||||
<li>Run <tt>nmake</tt> to build ECL.
|
||||
|
||||
<li>Run <tt>nmake flatinstall prefix=d:\Software\ECL</tt> where the
|
||||
<tt>prefix</tt> is the directory where you want to install ECL.
|
||||
|
||||
<li>Optionally, if you want to build a self-installing executable, you can install NSIS
|
||||
and run <tt>nmake windows-nsi</tt>.
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a name="configure">Autoconf based configuration</a></h3>
|
||||
|
||||
<ul>
|
||||
|
|
@ -39,21 +25,21 @@ and run <tt>nmake windows-nsi</tt>.
|
|||
|
||||
<li>Run the configuration file.
|
||||
<pre>
|
||||
cd ecl-@VERSION@
|
||||
cd ecl-@PACKAGE_VERSION@
|
||||
./configure
|
||||
</pre>
|
||||
The previous step creates a directory with the name <b>build</b>, and
|
||||
stores a bunch of makefiles in it.
|
||||
|
||||
<li>Use GNU make to invoke the compilation
|
||||
<li>Use GNU make to begin building ECL
|
||||
<pre>
|
||||
make
|
||||
</pre>
|
||||
|
||||
<li>If you want to test the fresh new executable before installing. You you
|
||||
should invoke ECL from withing the build directory using the "-dir ./"
|
||||
argument to advice him about the right place to find header files, libraries,
|
||||
etc. For instance, under linux the build directory is "linux" and we would do
|
||||
<li>If you want to test the fresh new executable before installing,
|
||||
you can do it. You should invoke ECL from withing the build directory
|
||||
using the "-dir ./" argument to advice it about the right place to
|
||||
find header files, libraries, etc
|
||||
<pre>
|
||||
$ ./configure --prefix=$HOME
|
||||
[...]
|
||||
|
|
@ -63,12 +49,43 @@ etc. For instance, under linux the build directory is "linux" and we would do
|
|||
$ ./ecl -dir ./
|
||||
</pre>
|
||||
|
||||
<li>Install it in the desired location
|
||||
<li>Install it in the preconfigured location
|
||||
<pre>
|
||||
make install
|
||||
</pre>
|
||||
</ul>
|
||||
|
||||
<h3><a name="msvc">Microsoft C++</a></h3>
|
||||
|
||||
<p>If you have a commercial version of Microsoft Visual Studio, the
|
||||
steps are simple:
|
||||
<ul>
|
||||
<li>Change to the <tt>msvc</tt> directory.
|
||||
|
||||
<li>Run <tt>nmake</tt> to build ECL.
|
||||
|
||||
<li>Run <tt>nmake flatinstall prefix=d:\Software\ECL</tt> where the
|
||||
<tt>prefix</tt> is the directory where you want to install ECL.
|
||||
|
||||
<li>Optionally, if you want to build a self-installing executable, you can install <a href="http://nsis.sourceforge.net">NSIS</a>
|
||||
and run <tt>nmake windows-nsi</tt>.
|
||||
</ul>
|
||||
|
||||
<p>If you want to build ECL using the free Microsoft Visual C++
|
||||
Toolkit 2003, you should follow these before building ECL:
|
||||
<ul>
|
||||
<li> Download and install <a href="http://msdn.microsoft.com/visualc/vctoolkit2003/">Microsoft Visual C++ Toolkit</a>.
|
||||
<li> Download and install the <a href="http://www.microsoft.com/msdownload/platformsdk/sdkupdate/">Microsoft Platform SDK</a>
|
||||
<li> Download NMAKE and install. There is an old version in <a href="http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe">Microsoft's download page</a>.
|
||||
<li> Download and install the .NET Framework SDK. Copy the files msvcrt.lib an msvcrtd.lib from this toolkit to the directory where the Visual C++ Toolkit keeps it libraries. Afterwards you can uninstall the .NET SDK.
|
||||
<li> Make sure that
|
||||
<ul>
|
||||
<li><tt>%PATH%</tt> includes the directories <tt>bin</tt> of both the C++ Toolkit, NMAKE and the SDK.
|
||||
<li><tt>%INCLUDE%</tt> includes the directories <tt>include</tt> of both the C++ Toolkit and the SDK.
|
||||
<li><tt>%LIB%</tt>includes the directories <tt>lib</tt> of both the C++ Toolkit and the SDK.
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a name="cross">Cross compiling ECL</a></h3>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
<h2>News in this release (ECL-@VERSION@)</h2>
|
||||
<pre>
|
||||
-------
|
||||
</pre>
|
||||
|
||||
<h2>Known bugs</h2>
|
||||
|
||||
As I mentioned above, the problem I am finding here is the lack of test suites
|
||||
which I can use to detect failures in the behavior of any function. Currently I
|
||||
can assure that <a href="http://ecls.sourceforge.net">ECL</a> passes most of
|
||||
the tests from the <a href="http://clocc.sourceforge.net">the CLOCC suite</a>.
|
||||
The most important exceptions are
|
||||
<ul>
|
||||
<li>CLOS
|
||||
<li>#'format
|
||||
<li>#'unread-char is too lax
|
||||
<li>Support for logical pathnames is incomplete
|
||||
<li>No support for (SETF (VALUES ...) ...)
|
||||
</ul>
|
||||
|
||||
If you find something that should be fixed or that the behavior of a
|
||||
function is particularly misleading with respect to the standards, feel free
|
||||
to tell me so.
|
||||
|
||||
Some other bugs which need to be fixed are:
|
||||
<ul>
|
||||
<li>Threads were broken with latest improvements.
|
||||
<li>#'format doesn't pass the Cltl-1 tests.
|
||||
<li>Support for CLOS needs yet more optimization.
|
||||
<li>ECL has its own pretty-printer, which does not conform ANSI.
|
||||
</ul>
|
||||
|
|
@ -18,6 +18,8 @@ sed_emulator(int narg, char **patterns)
|
|||
for (i = 0; i < narg; i+=2) {
|
||||
char *b3, *b4;
|
||||
while ((b3 = strstr(b1, patterns[i]))) {
|
||||
if (strcmp(patterns[i+1], "/DELETE/") == 0)
|
||||
goto GO_ON;
|
||||
b3[0] = 0;
|
||||
strcpy(b2, b1);
|
||||
strcat(b2, patterns[i+1]);
|
||||
|
|
@ -26,6 +28,7 @@ sed_emulator(int narg, char **patterns)
|
|||
}
|
||||
}
|
||||
puts(b1);
|
||||
GO_ON:;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
54
src/util/ecl.nsi1
Normal file
54
src/util/ecl.nsi1
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
; Script generated by the HM NIS Edit Script Wizard.
|
||||
|
||||
; HM NIS Edit Wizard helper defines
|
||||
!define PRODUCT_NAME "ECL"
|
||||
!define PRODUCT_VERSION "0.9d"
|
||||
!define PRODUCT_PUBLISHER "Juan Jose Garcia Ripoll"
|
||||
!define PRODUCT_WEB_SITE "http://ecls.sourceforge.net"
|
||||
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\ecl.exe"
|
||||
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
||||
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
|
||||
!define ECLDIR "@ECLDIR@"
|
||||
|
||||
; MUI 1.67 compatible ------
|
||||
!include "MUI.nsh"
|
||||
|
||||
; MUI Settings
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
|
||||
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
|
||||
|
||||
; Welcome page
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
; License page
|
||||
!insertmacro MUI_PAGE_LICENSE "${ECLDIR}\doc\Copyright"
|
||||
; Directory page
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
; Instfiles page
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
; Finish page
|
||||
!define MUI_FINISHPAGE_RUN "$INSTDIR\ecl.exe"
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
; Uninstaller pages
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
; Language files
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
|
||||
; MUI end ------
|
||||
|
||||
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
||||
OutFile "Setup.exe"
|
||||
InstallDir "$PROGRAMFILES\ECL"
|
||||
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
|
||||
ShowInstDetails show
|
||||
ShowUnInstDetails show
|
||||
|
||||
Section "Hauptgruppe" SEC01
|
||||
SetOutPath "$INSTDIR"
|
||||
SetOverwrite ifnewer
|
||||
File "${ECLDIR}\ecl.exe"
|
||||
CreateDirectory "$SMPROGRAMS\ECL"
|
||||
CreateShortCut "$SMPROGRAMS\ECL\ECL.lnk" "$INSTDIR\ecl.exe"
|
||||
CreateShortCut "$DESKTOP\ECL.lnk" "$INSTDIR\ecl.exe"
|
||||
33
src/util/ecl.nsi2
Normal file
33
src/util/ecl.nsi2
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
SectionEnd
|
||||
|
||||
Section -AdditionalIcons
|
||||
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
|
||||
CreateShortCut "$SMPROGRAMS\ECL\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
|
||||
CreateShortCut "$SMPROGRAMS\ECL\Uninstall.lnk" "$INSTDIR\uninst.exe"
|
||||
SectionEnd
|
||||
|
||||
Section -Post
|
||||
WriteUninstaller "$INSTDIR\uninst.exe"
|
||||
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\ecl.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\ecl.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
|
||||
SectionEnd
|
||||
|
||||
|
||||
Function un.onUninstSuccess
|
||||
HideWindow
|
||||
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) has been succesfully deinstalled."
|
||||
FunctionEnd
|
||||
|
||||
Function un.onInit
|
||||
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you really want to deinstall $(^Name)?" IDYES +2
|
||||
Abort
|
||||
FunctionEnd
|
||||
|
||||
Section Uninstall
|
||||
Delete "$INSTDIR\${PRODUCT_NAME}.url"
|
||||
Delete "$INSTDIR\uninst.exe"
|
||||
14
src/util/ecl.nsi3
Normal file
14
src/util/ecl.nsi3
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Delete "$INSTDIR\ecl.exe"
|
||||
|
||||
Delete "$SMPROGRAMS\ECL\Uninstall.lnk"
|
||||
Delete "$SMPROGRAMS\ECL\Website.lnk"
|
||||
Delete "$DESKTOP\ECL.lnk"
|
||||
Delete "$SMPROGRAMS\ECL\ECL.lnk"
|
||||
|
||||
RMDir "$SMPROGRAMS\ECL"
|
||||
RMDir "$INSTDIR"
|
||||
|
||||
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
|
||||
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
|
||||
SetAutoClose true
|
||||
SectionEnd
|
||||
16
src/util/make_msvcrtlib
Executable file
16
src/util/make_msvcrtlib
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
set -x
|
||||
export MSVC="d:/unix/msvc/bin"
|
||||
|
||||
cat > exports.sed <<EOF
|
||||
/^.*@.*$/d
|
||||
/[ \t]*ordinal hint/,/^[ \t]*Summary/{
|
||||
/^[ \t]\+[0-9]\+/{
|
||||
s/^[ \t]\+[0-9]\+[ \t]\+[0-9A-Fa-f]\+[ \t]\+[0-9A-Fa-f]\+[ \t]\+\(.*\)/\1/p
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
echo EXPORTS> msvcrt.def
|
||||
${MSVC}/link -dump -exports ${SYSTEMROOT}/System32/msvcrt.dll | tee msvcrt.out | sed -nf exports.sed >> msvcrt.def
|
||||
${MSVC}/link -lib -machine:X86 -def:msvcrt.def -out:msvcrt.lib
|
||||
Loading…
Add table
Add a link
Reference in a new issue