@c -*- mode: texinfo; coding: utf-8; -*- @node Install, Run, Intro, Top @chapter Installing YAP @cindex installation @menu * Configuration Options:: Tuning the Functionality of YAP Machine * Machine Options:: Tuning YAP for a Particular Machine and Compiler @end menu To compile YAP it should be sufficient to: @enumerate @item @command{autoconf}. Recent versions of YAP try to follow GNU conventions on where to place software. @itemize @bullet @item The main executable is placed at @var{$BINDIR}. This executable is actually a script that calls the Prolog engine, stored at @var{$LIBDIR}. @item @var{$LIBDIR} is the directory where libraries are stored. YAPLIBDIR is a subdirectory that contains the Prolog engine and a Prolog library. @item @var{$INCLUDEDIR} is used if you want to use YAP as a library. @item @var{$INFODIR} is where to store @code{info} files. Usually @file{/usr/local/info}, @file{/usr/info}, or @file{/usr/share/info}. @end itemize @item @command{make}. @item If the compilation succeeds, try @command{./yap}. @item If you feel satisfied with the result, do @command{make install}. @item @command{make install-info} will create the info files in the standard info directory. @item @command{make html} will create documentation in html format in the predefined directory. @end enumerate In most systems you will need to be superuser in order to do @command{make install} and @command{make info} on the standard directories. @node Configuration Options, Machine Options, ,Install @section Tuning the Functionality of YAP @cindex syntax Compiling YAP with the standard options give you a plain vanilla Prolog. You can tune YAP to include extra functionality by calling @command{configure} with the appropriate options: @itemize @bullet @item @command{--enable-rational-trees=yes} gives you support for infinite rational trees. @item @command{--enable-coroutining=yes} gives you support for coroutining, including freezing of goals, attributed variables, and constraints. This will also enable support for infinite rational trees. @item @command{--enable-depth-limit=yes} allows depth limited evaluation, say for implementing iterative deepening. @item @command{--enable-low-level-tracer=yes} allows support for tracing all calls, retries, and backtracks in the system. This can help in debugging your application, but results in performance loss. @item @command{--enable-wam-profile=yes} allows profiling of abstract machine instructions. This is useful when developing YAP, should not be so useful for normal users. @item @command{--enable-condor=yes} allows using the Condor system that support High Throughput Computing (HTC) on large collections of distributively owned computing resources. @item @command{--enable-tabling=yes} allows tabling support. This option is still experimental. @item @command{--enable-parallelism=@{env-copy,sba,a-cow@}} allows or-parallelism supported by one of these three forms. This option is still highly experimental. @item @command{--with-max-workers} allows definition of the maximum number of parallel processes (its value can be consulted at runtime using the flag @command{max_workers}). @item @command{--with-gmp[=DIR]} give a path to where one can find the @code{GMP} library if not installed in the default path. @item @command{--enable-threads} allows using of the multi-threading predicates provided by YAP. Depending on the operating system, the option @command{--enable-pthread-locking} may also need to be used. @item @command{--with-max-threads} allows definition of the maximum number of threads (the default value is 1024; its value can be consulted at runtime using the flag @code{max_threads}). @end itemize Next section discusses machine dependent details. @node Machine Options, , Configuration Options,Install @section Tuning YAP for a Particular Machine and Compiler @cindex machine optimizations The default options should give you best performance under @command{GCC}. Although the system is tuned for this compiler we have been able to compile versions of YAP under lcc in Linux, Sun's cc compiler, IBM's xlc, SGI's cc, and Microsoft's Visual C++ 6.0. @menu * Tuning for GCC:: Using the GNUCC compiler * Compiling Under Visual C++:: Using Microsoft's Visual C++ environment * Tuning for SGI cc:: Compiling Under SGI's @command{cc} @end menu @node Tuning for GCC, Compiling Under Visual C++, , Machine Options @section Tuning YAP for @command{GCC}. YAP has been developed to take advantage of @command{GCC} (but not to depend on it). The major advantage of @command{GCC} is threaded code and explicit register reservation. YAP is set by default to compile with the best compilation flags we know. Even so, a few specific options reduce portability. The option @itemize @bullet @item @command{--enable-max-performance=yes} will try to support the best available flags for a specific architectural model. Currently, the option assumes a recent version of @command{GCC}. @item @command{--enable-debug-yap} compiles YAP so that it can be debugged by tools such as @command{dbx} or @command{gdb}. @end itemize Here follow a few hints: On x86 machines the flags: @example YAP_EXTRAS= ... -DBP_FREE=1 @end example tells us to use the @code{%bp} register (frame-pointer) as the emulator's program counter. This seems to be stable and is now default. On Sparc/Solaris2 use: @example YAP_EXTRAS= ... -mno-app-regs -DOPTIMISE_ALL_REGS_FOR_SPARC=1 @end example and YAP will get two extra registers! This trick does not work on SunOS 4 machines. Note that versions of GCC can be tweaked to recognize different processors within the same instruction set, e.g. 486, Pentium, and PentiumPro for the x86; or Ultrasparc, and Supersparc for Sparc. Unfortunately, some of these tweaks do may make YAP run slower or not at all in other machines with the same instruction set, so they cannot be made default. Last, the best options also depends on the version of GCC you are using, and it is a good idea to consult the GCC manual under the menus "Invoking GCC"/"Submodel Options". Specifically, you should check @command{-march=XXX} for recent versions of GCC/EGCS. In the case of @command{GCC2.7} and other recent versions of @command{GCC} you can check: @itemize @bullet @item 486: In order to take advantage of 486 specific optimizations in GCC 2.7.*: @example YAP_EXTRAS= ... -m486 -DBP_FREE=1 @end example @item Pentium: @example YAP_EXTRAS= ... -m486 -malign-loops=2 -malign-jumps=2 \ -malign-functions=2 @end example @item PentiumPro and other recent Intel and AMD machines: PentiumPros are known not to require alignment. Check your version of @command{GCC} for the best @command{-march} option. @item Super and UltraSparcs: @example YAP_EXTRAS= ... -msupersparc @end example @item MIPS: if have a recent machine and you need a 64 bit wide address space you can use the abi 64 bits or eabi option, as in: @example CC="gcc -mabi=64" ./configure --... @end example Be careful. At least for some versions of @command{GCC}, compiling with @command{-g} seems to result in broken code. @item WIN32: GCC is distributed in the MINGW32 and CYGWIN packages. The Mingw32 environment is available from the URL: @url{http://www.mingw.org} You will need to install the @command{msys} and @command{mingw} packages. You should be able to do configure, make and make install. If you use mingw32 you may want to search the contributed packages for the @command{gmp} multi-precision arithmetic library. If you do setup YAP with @code{gmp} note that @file{libgmp.dll} must be in the path, otherwise YAP will not be able to execute. CygWin environment is available from the URL: @url{http://www.cygwin.com} @noindent and mirrors. We suggest using recent versions of the cygwin shell. The compilation steps under the cygwin shell are as follows: @example mkdir cyg $YAPSRC/configure --enable-coroutining \\ --enable-depth-limit \\ --enable-max-performance make make install @end example By default, YAP will use the @command{-mno-cygwin} option to disable the use of the cygwin dll and to enable the mingw32 subsystem instead. YAP thus will not need the cygwin dll. It instead accesses the system's @file{CRTDLL.DLL} @code{C} run time library supplied with Win32 platforms through the mingw32 interface. Note that some older WIN95 systems may not have @file{CRTDLL.DLL}, in this case it should be sufficient to import the file from a newer WIN95 or WIN98 machine. You should check the default installation path which is set to @file{/YAP} in the standard Makefile. This string will usually be expanded into @file{c:\YAP} by Windows. The cygwin environment does not provide @t{gmp} on the MINGW subsystem. You can fetch a dll for the @t{gmp} library from @url{http://www.sf.net/projects/mingwrep}. It is also possible to configure YAP to be a part of the cygwin environment. In this case you should use: @example mkdir cyg $YAPSRC/configure --enable-max-performance \\ --enable-cygwin=yes make make install @end example YAP will then compile using the cygwin library and will be installed in cygwin's @file{/usr/local}. You can use YAP from a cygwin console, or as a standalone application as long as it can find @file{cygwin1.dll} in its path. Note that you may use to use @command{--enable-depth-limit} for Aleph compatibility, and that you may want to be sure that GMP is installed. @end itemize @node Compiling Under Visual C++, Tuning for SGI cc, Tuning for GCC, Machine Options @subsection Compiling Under Visual C++ YAP compiles cleanly under Microsoft's Visual C++ release 6.0. We next give a step-by-step tutorial on how to compile YAP manually using this environment. First, it is a good idea to build YAP as a DLL: @enumerate @item create a project named yapdll using File.New. The project will be a DLL project, initially empty. Notice that either the project is named yapdll or you must replace the preprocessors variable @var{$YAPDLL_EXPORTS} to match your project names in the files @file{YAPInterface.h} and @code{c_interface.c}. @item add all .c files in the @file{$YAPSRC/C} directory and in the @file{$YAPSRC\OPTYAP} directory to the Project's @code{Source Files} (use FileView). @item add all .h files in the @var{$YAPSRC/H} directory, @var{$YAPSRC\include} directory and in the @var{$YAPSRC\OPTYAP} subdirectory to the Project's @code{Header Files}. @item Ideally, you should now use @code{m4} to generate extra .h from .m4 files and use @code{configure} to create a @code{config.h}. Or, you can be lazy, and fetch these files from @var{$YAPSRC\VC\include}. @item You may want to go to @code{Build.Set Active Configuration} and set @code{Project Type} to @code{Release} @item To use YAP's own include directories you have to set the Project option @code{Project.Project Settings.C/C++.Preprocessor.Additional Include Directories} to include the directories @var{$YAPSRC\H}, @var{$YAPSRC\VC\include}, @var{$YAPSRC\OPTYAP} and @var{$YAPSRC\include}. The syntax is: @example $YAPSRC\H, $YAPSRC\VC\include, $YAPSRC\OPTYAP, $YAPSRC\include @end example @item Build: the system should generate an @file{yapdll.dll} and an @file{yapdll.lib}. @item Copy the file @file{yapdll.dll} to your path. The file @file{yapdll.lib} should also be copied to a location where the linker can find it. @end enumerate Now you are ready to create a console interface for YAP: @enumerate @item create a second project say @code{wyap} with @code{File.New}. The project will be a WIN32 console project, initially empty. @item add @var{$YAPSRC\console\yap.c} to the @code{Source Files}. @item add @var{$YAPSRC\VC\include\config.h} and the files in @var{$YAPSRC\include} to the @code{Header Files}. @item You may want to go to @code{Build.Set Active Configuration} and set @code{Project Type} to @code{Release}. @item you will eventually need to bootstrap the system by booting from @code{boot.yap}, so write: @example -b $YAPSRC\pl\boot.yap @end example in @code{Project.Project Settings.Debug.Program Arguments}. @item You need the sockets and yap libraries. Add @example ws2_32.lib yapdll.lib @end example to @code{Project.Project Settings.Link.Object/Library Modules} You may also need to set the @code{Link Path} so that VC++ will find @code{yapdll.lib}. @item set @code{Project.Project Settings.C/C++.Preprocessor.Additional Include Directories} to include the @var{$YAPSRC/VC/include} and @var{$YAPSRC/include}. The syntax is: @example $YAPSRC\VC\include, $YAPSRC\include @end example @item Build the system. @item Use @code{Build.Start Debug} to boot the system, and then create the saved state with @example ['$YAPSRC\\pl\\init']. qsave_program('startup.yss'). ^Z @end example That's it, you've got YAP and the saved state! @end enumerate The $YAPSRC\VC directory has the make files to build YAP4.3.17 under VC++ 6.0. @node Tuning for SGI cc, , Compiling Under Visual C++ ,Machine Options @subsection Compiling Under SGI's cc YAP should compile under the Silicon Graphic's @code{cc} compiler, although we advise using the GNUCC compiler, if available. @table @code @item 64 bit Support for 64 bits should work by using (under Bourne shell syntax): @example CC="cc -64" $YAP_SRC_PATH/configure --... @end example @end table