--- gforth/configure.in 2000/12/10 18:02:17 1.77 +++ gforth/configure.in 2002/12/15 17:38:51 1.90 @@ -22,10 +22,12 @@ AC_INIT(engine/engine.c) dnl We use some automake macros here, dnl but don't use automake for creating Makefile.in -AM_INIT_AUTOMAKE(gforth,0.5.0) +AM_INIT_AUTOMAKE(gforth,0.5.9-20020901) #snapshots have numbers major.minor.release-YYYYMMDD #note that lexicographic ordering bust be heeded. #I.e., 0.4.1-YYYYMMDD must not exist before 0.4.1! +UPDATED="1 September 2002" +AC_SUBST(UPDATED) AM_CONFIG_HEADER(engine/config.h) #AM_CYGWIN32 @@ -34,19 +36,7 @@ AC_ARG_ENABLE(force-reg, the machine.h file. This can cause a good speedup, but also incorrect code with some gcc versions on some processors (default disabled).], - -AC_DEFINE(FORCE_REG)) -dnl this is not quite according to the autoconf manual, it causes a replacement -AC_ARG_ENABLE(direct-threaded, -[ --enable-direct-threaded Force direct threading. This may not work on - some machines and may cause slowdown on others. - (default processor-dependent)], -AC_DEFINE(DIRECT_THREADED)) -AC_ARG_ENABLE(indirect-threaded, -[ --enable-indirect-threaded Force indirect threading. This can cause a - slowdown on some machines. - (default processor-dependent)], -AC_DEFINE(INDIRECT_THREADED)) +AC_DEFINE(FORCE_REG,,[Define if you want to use explicit register declarations for better performance or for more convenient CODE words (does not work with all GCC versions on all machines)])) AC_ARG_WITH(debug, [ --with-debug specifies option -g to compile with debug info (default) @@ -55,6 +45,16 @@ AC_ARG_WITH(debug, debugging informations.], if test "$withval" = "yes"; then DEBUGFLAG=-g; fi) +PEEPHOLE="yes" +AC_ARG_WITH(peephole, +[ --with-peephole Enable peephole optimization (default) + --without-peephole disables peephole optimization. Creates smaller, + but slower images.], +PEEPHOLE="$withval") + +#currently we force direct threading this way. Eventually we should +#setup in the arch and engine files right + CFLAGS=$CFLAGS AC_PROG_CC @@ -117,7 +117,7 @@ if test "$ac_cv_int_type_cell" != int; t echo "Since you don't have a proper C on this machine, that's one more reason" echo "to use Forth;-)" fi -AC_DEFINE_UNQUOTED(CELL_TYPE,$ac_cv_int_type_cell) +AC_DEFINE_UNQUOTED(CELL_TYPE,$ac_cv_int_type_cell,[an integer type that is as long as a pointer]) ac_cv_int_type_double_cell=none case `expr 2 '*' "$ac_cv_sizeof_char_p"` in @@ -139,10 +139,10 @@ if test "$ac_cv_int_type_double_cell" = echo "If you find this unacceptable, ask the GCC maintainers to provide proper" echo 'long longs for your machine (the GCC manual states that they \"are twice as' echo "long as \`long int\'\")." - LIBOBJS="$LIBOBJS dblsub.o" - AC_DEFINE(BUGGY_LONG_LONG) + AC_LIBOBJ(dblsub) + AC_DEFINE(BUGGY_LONG_LONG,,[define this if there is no working DOUBLE_CELL_TYPE on your machine]) else - AC_DEFINE_UNQUOTED(DOUBLE_CELL_TYPE,$ac_cv_int_type_double_cell) + AC_DEFINE_UNQUOTED(DOUBLE_CELL_TYPE,$ac_cv_int_type_double_cell,[an integer type that is twice as long as a pointer]) fi AC_MSG_CHECKING([whether the linker accepts -export-dynamic]) @@ -161,13 +161,9 @@ case "$host_cpu" in hppa*) machine=hppa $srcdir/mkinstalldirs arch/hppa - LIBOBJS="$LIBOBJS ../arch/hppa/cache.o" + AC_LIBOBJ(../arch/hppa/cache) LDFLAGS="$LDFLAGS -Xlinker -N" LIBS="$LIBS -L/lib/pa1.1/" - if test "${enable_direct_threaded+set}" = "" - then - AC_DEFINE(DIRECT_THREADED) - fi ;; sparc*) machine=sparc @@ -175,35 +171,17 @@ case "$host_cpu" in i386) machine=386 CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem" - if test "${enable_direct_threaded+set}" = "" \ - -a "${enable_indirect_threaded+set}" = "" - then - echo "Using direct threaded code on 386" - AC_DEFINE(DIRECT_THREADED) - fi ;; i486) machine=386 CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem -m486" - if test "${enable_direct_threaded+set}" = "" \ - -a "${enable_indirect_threaded+set}" = "" - then - echo "Using direct threaded code on 486" - AC_DEFINE(DIRECT_THREADED) - fi ;; i*86) machine=386 CFLAGS="$CFLAGS -fomit-frame-pointer -fforce-addr -fforce-mem" CFLAGS_1="$CFLAGS" - CFLAGS="$CFLAGS -mpentium" + CFLAGS="$CFLAGS -march=pentium" AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1 -m486") - if test "${enable_direct_threaded+set}" = "" \ - -a "${enable_indirect_threaded+set}" = "" - then - echo "Using indirect threaded code on IA32 CPUs with split L1 caches" - AC_DEFINE(INDIRECT_THREADED) - fi ;; ia64*) machine=ia64 @@ -213,7 +191,7 @@ case "$host_cpu" in CFLAGS="$CFLAGS -fomit-frame-pointer" if test "$host_os" = "nextstep3" then - LIBOBJS="$LIBOBJS termios.o" + AC_LIBOBJ(termios) fi ;; mips*) @@ -225,7 +203,9 @@ case "$host_cpu" in AC_TRY_LINK(,,ac_link_mips_t=yes,ac_link_mips_t=no) test $ac_link_mips_t = yes||LDFLAGS=$OLDLDFLAGS AC_MSG_RESULT($ac_link_mips_t) - test $ac_link_mips_t = yes||(echo cannot link text and data into same 256M region, using indirect threading; AC_DEFINE(INDIRECT_THREADED)) + fixme #dynamically generated code should be in the same 256MB + # region as the text segment; no indirect threading necessary + test $ac_link_mips_t = yes||(echo cannot link text and data into same 256M region, using indirect threading; AC_DEFINE(INDIRECT_THREADED,,[Define if you want to force an indirect threaded code implementation])) AC_MSG_CHECKING([whether the linker accepts -D]) OLDLDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -Xlinker -D -Xlinker 10400000" @@ -241,22 +221,9 @@ case "$host_cpu" in power*|rs6000) machine=power $srcdir/mkinstalldirs arch/power - AC_CHECK_FUNC(_sync_cache_range,true,LIBOBJS="$LIBOBJS ../arch/power/_sync_cache_range.o") - #link text segment into first 32MB - AC_MSG_CHECKING([whether the linker accepts --script=arch/power/elf32ppc.x]) - OLDLDFLAGS=$LDFLAGS - #the -L../$srcdir helps when $srcdir is relative - LDFLAGS="$LDFLAGS -L$srcdir -L../$srcdir -Xlinker --script=$srcdir/arch/power/elf32ppc.x" - AC_TRY_LINK(,,ac_link_script=yes,ac_link_script=no) - test $ac_link_script = yes||LDFLAGS=$OLDLDFLAGS - AC_MSG_RESULT($ac_link_script) - AC_MSG_CHECKING([whether the code is in the first 32MB]) - AC_TRY_RUN([main(){label: exit(((unsigned long)&&label)>32000000UL);}],ac_code_under_32=yes,ac_code_under_32=no,ac_code_under_32=no) - AC_MSG_RESULT($ac_code_under_32) - test $ac_code_under_32 = yes||(AC_MSG_WARN([Using indirect threading]); AC_DEFINE(INDIRECT_THREADED)) + AC_CHECK_FUNC(_sync_cache_range,true,AC_LIBOBJ(../arch/power/_sync_cache_range)) ;; *) - echo "No direct threading support for $host_cpu, using indirect threading." echo "Using a generic machine description." echo "I'll assume that C floats and doubles are represented by IEEE single and" echo "double numbers. If this is not so, SF@ etc. will not work correctly." @@ -266,6 +233,12 @@ esac AC_SUBST(host) AC_SUBST(ENGINE_FLAGS) +# Try if GCC understands -fno-cross-jump + +CFLAGS_1="$CFLAGS" +CFLAGS="$CFLAGS -fno-cross-jump" +AC_TRY_COMPILE(,,,CFLAGS="$CFLAGS_1") + AC_CHECK_PROG(asm_fs,asm.fs,arch/$machine/asm.fs,,$srcdir/arch/$machine) AC_SUBST(asm_fs) @@ -275,27 +248,42 @@ AC_SUBST(disasm_fs) case "$host_os" in *win32) EXE=".exe" + DIRSEP="\\" ;; *) EXE="" + DIRSEP="/" ;; esac AC_SUBST(EXE) +AC_SUBST(DIRSEP) +AC_DEFINE_UNQUOTED(DIRSEP,'$DIRSEP',[a directory separator character]) dnl Now a little support for DOS/DJGCC AC_SUBST(GFORTH_EXE) GFORTH_EXE="" AC_SUBST(GFORTHFAST_EXE) GFORTHFAST_EXE="" +AC_SUBST(GFORTHITC_EXE) +GFORTHITC_EXE="" AC_SUBST(GFORTHDITC_EXE) GFORTHDITC_EXE="" PATHSEP=":" AC_SUBST(PATHSEP) -AC_DEFINE_UNQUOTED(PATHSEP,'$PATHSEP') +AC_DEFINE_UNQUOTED(PATHSEP,'$PATHSEP',[a path separator character]) AC_SUBST(FORTHSIZES) +if test "$PEEPHOLE" = "yes" +then + PEEPHOLEFLAG="true" + AC_DEFINE(HAS_PEEPHOLE,,[Define if you want to use peephole optimization]) +else + PEEPHOLEFLAG="false" +fi +AC_SUBST(PEEPHOLEFLAG) + dnl copy commands for systems that don't have links AC_SUBST(LINK_KERNL) LINK_KERNL="" @@ -335,14 +323,14 @@ fi AC_REPLACE_FUNCS(memmove strtoul pow10 strerror strsignal atanh) AC_CHECK_FUNCS(dlopen sys_siglist getrusage) AC_DECL_SYS_SIGLIST -AC_CHECK_FUNC(getopt_long,true,LIBOBJS="$LIBOBJS getopt.o getopt1.o") -AC_CHECK_FUNCS(rint expm1 log1p) -AC_REPLACE_FUNCS(ecvt) +AC_CHECK_FUNC(getopt_long,true,AC_LIBOBJ(getopt.$ac_objext getopt1)) +AC_CHECK_FUNCS(expm1 log1p) +AC_REPLACE_FUNCS(rint ecvt) dnl No check for select, because our replacement is no good under dnl anything but DOS AC_CHECK_HEADERS(sys/mman.h fnmatch.h) AC_FUNC_FNMATCH -test $ac_cv_func_fnmatch_works = yes || LIBOBJS="$LIBOBJS fnmatch.o" +test $ac_cv_func_fnmatch_works = yes || AC_LIBOBJ(fnmatch) AC_CHECK_FUNCS(mmap sysconf getpagesize) AM_PATH_LISPDIR @@ -360,9 +348,12 @@ AC_OUTPUT([ Makefile Makedist gforthmi +vmgen +machpc.fs engine/Makefile doc/version.texi ], echo timestamp > stamp-h chmod +x gforthmi +chmod +x vmgen test -d kernel||mkdir kernel)