Building An Executable
Why Build Your Own
Why not? Many people think and believe Kenneth Iverson's work remains that of a true genius, a bright light among some very bright intellectual lights, both from a theoretical as well as a software implementation perspective. Here's your opportunity to attempt to improve upon some very substantive, preexisting software development work - to further it, to make it even better, and perhaps best of all - it's free.
Personalize some already pretty amazing software for yourself, or share it with others and get their feedback for even greater insight and subsequent improvement. NARS version of APL already has over a quarter million lines of source code, subroutines, macros, functions, etc. - 50 years of sometimes intense and continuing evolution, so you are not creating something from undeveloped scratch, but inheriting and working from already highly evolved, rigidly disciplined concepts and rigorously debugged software over time.
APL has been used in physics, science, robotics, engineering, artificial intelligence, VLSI, financial, statistical and social science applications. NASA and Astronomy have used it.
Now APL is 100% customizable. Perhaps you will be the first to customize APL to safely drive a vehicle, help save a life, make new discoveries or make some process(es) more efficient.
It's free. It's evolved. And it is a great opportunity to learn more about the human-machine interface; how machine hardware operates and better understand how software and hardware interact together. One of the magnificent aspects of APL is how fully it spans the breadth of hardware functionality including - instructions running core processor chip(s) and peripheral devices. This is not your grandparents' punch card software program run on a room-sized computer that may have taken him/her several days to get results back for in an introductory chemistry or math lab course. On the other hand, data structures influence speed of quantum search in unexpected ways.
Platforms
The current version of NARS2000 may be built on Windows platforms only, however a goal is to enable it to built on Linux, Mac OS, etc. as per user requests and developer interests. As such, for the moment, the following description for building an executable is necessarily biased towards Windows.
Downloads
To build the executable in summary you'll need the following:
- C Compiler and Linker
- Make program
- Resource Compiler
- Windows SDK
- Parser Generator
- Zip Utility
- PHP (Hypertext Preprocessor)
- NARS2000 Source Code
- NARS2000 External Libraries
- Optionally, Multi-precision Library Source
- STDINT.H header file
- Version Control program
- Doctor Dump SDK
- Optionally, a File Differencing/Merge program
All of the tools you'll need are freely available. Some of them happen to be Microsoft-specific. Bill Gates while at Harvard actually worked a bit on/with APL, obviously he discovered the importance of working with arrays and symbolic notation. At the same time there is no reason more generic tools (such as DJGPP, Cygwin or MinGW) can't be used, a task NARS is hoping someone will volunteer to investigate. In particular, the tools currently used to create the APL Executable, in detail, are as follows:
- C (need Visual C++ 2008 = C++ GUI development environment and compiler for the C language, which much of APL is written in). Compiler and Linker: Microsoft Visual Studio 2008 Express (requires Windows XP or later) — includes Link, Make, a Resource Compiler, and an SDK (among others). Installation Note: Does NOT Install to a mapped or network drive, must be Installed on a local PC drive (e.g. C:\...) and Unmapped directory - Microsoft apparently requires this.
- Parser Generator: Bison, a Cygwin package, (Save and run either setup-x86.exe or setup-x86_64.exe as appropriate to your system, Choose A Download Source: Install from Internet, Select Root Install Directory, Select Local Package Directory, Select Your Internet Connection, Choose A Download Site, Select Packages: Leave alone All (Default) - first time through, just click [Next], Devel, and bison, other dependent packages will be installed along with bison)
- Zip Utility: 7-Zip (Latest version, 32- or 64-bit, as appropriate to your system)
- PHP (Hypertext Preprocessor): Downloads (Windows downloads for Windows systems.) (Windows binaries/VC9 x86 Thread Safe/Latest version/Zip or Installer, your choice) (Items to Install: Entire Script Executable, and entire Extras). Place the unzipped file's contents into something like "C:\PHP". The executable file "php.exe" needs to be "on your directory or environmental path" when later compiling or building the APL executable.
- NARS2000 Source Code: Click on Browse Code button at NARS SourceForge.net code repository. You may also use a Version Control program, e.g. see Tortoise SVN below and here, see their download page.
Prior non-current NARS Source Code versions available at Code Google. - NARS2000 External Libraries: Miscellaneous Library, qdebug Library, gsl Library, and MPIR/MPFR/ECM Libraries
- Multi-precision Library Source Code: MPIR/MPFR/ECM Source. This zipped download is large (467MB) and is needed only to reproduce the files in the MPIR/MPFR/ECM Library download so as to satisfy the requirements of the GNU General Public License (GPL) v3. For more details on using the files in the download, look in the zipped file for
readme.txt
. If you are happy to use the binary libraries in MPIR/MPFR/ECM Libraries, you don't need the MPIR/MPFR/ECM Source Code.. - STDINT.H header file installed in the MS VS 2008 Express include directory (V:\VC\include -- see below)
- Version Control program: Tortoise SVN (Current version, 32- or 64-bit depending upon your OS)
- Doctor Dump SDK: Doctor Dump SDK
- File Differencing/Merge program: WinMerge (Latest stable version)
Install Tools
To install the Microsoft Visual Studio 2008 Express C compiler, run the vcsetup.exe program. Afterwards, the files msobj80.dll, mspdb80.dll, mspdbcore.dll, and mspdbsrv.exe all need to be copied from V:\Common7\IDE to V:\VC\bin, where the V drive is a substitute for C:\Program Files\Microsoft Visual Studio 9.0. See the discussion below on Set Up Makefile Environment Variables.
To install the Parser Generator (Bison), see the instructions above. When the Cygwin setup program asks you to choose a Default Text File Type, choose DOS/text so any committed files are the same as in the version control repository.
To install the Doctor Dump SDK, unzip it in any directory at or above %NARSROOT%. See the discussion below on Set Up Makefile Environment Variables.
Install the rest of the tools as per their separate instructions.
Install The Source Code
- First create a root folder somewhere on one of your hard drives, perhaps calling it NARS2000, as in C:\NARS2000 or perhaps at some lower level. The source code and external libraries are installed at or below this level.
- Under the root folder make two folders: trunk and msieve. The first folder holds the main body of code. The latter is used for the code used to factor numbers.
- Using a Version Control program such as TortoiseSVN, download the source code (see Check Out The Source Code),
- Download the misc.zip, qdebug.zip, gsldir.zip, and mplibs.zip files into the root folder and unzip them using 7z.exe as in 7z x misc.zip, 7z x qdebug.zip, 7z x gsldir.zip, and 7z x mplibs.zip.
Check Out The Source Code
An easy way to initialize your copy of the source code for the first time is to use a version control program such as TortoiseSVN mentioned above. After installing this program, there are two directories you'll need to install.
- First, bring up Windows Explorer, right-click on the trunk folder, and choose SVN Checkout.... The URL of repository: is https://nars2000.googlecode.com/svn/trunk and the Checkout directory: is C:\NARS2000\trunk (or wherever your trunk folder is) — quite likely you will have to edit this field as the default text inserted by TortoiseSVN usually ends with NARS2000.
- Second, bring up Windows Explorer, right-click on the msieve folder, and choose SVN Checkout.... The URL of repository: is https://nars2000.googlecode.com/svn/msieve and the Checkout directory: is C:\NARS2000\msieve (or wherever your msieve folder is)
In both cases, the Checkout Depth should be Fully recursive. Click on OK to initialize your copy of the source code.
The above steps need be done only once in order to establish the special hidden SVN directories.
You will still need to download and unzip qdebug.zip, misc.zip, gsldir.zip, and mplibs.zip as described above.
Subsequently, you may update your copy of the source code by right-clicking on the trunk and/or msieve folders and choose SVN Update.
Folders
After unzipping the above files, the structure under the root folder should look something like the following where some of the lower level directories have been omitted:
branches\ ecm\ gsl\ mpfr\ mpir\ msieve\ qdebug\ trunk\ trunk\binaries\ trunk\Extensions\ trunk\htdocs\ trunk\images\ trunk\MediaWiki\ trunk\ReleaseNotes\ trunk\WineHQ\
Choose How To Build
The following sections describe two alternate ways to build the executable. One is the GUI interface of VC++ Express, the other is a command line interface using a makefile.
Set Up VC++ Express
If you are using VC++ Express, the project file is in the trunk folder and is called NARS2000.vcproj. You may load it manually every time you invoke VC++ Express, or you may load it automatically by placing the path to the project file on the command line in the VC++ Express shortcut as in "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe" C:\NARS2000\trunk\NARS2000.vcproj or wherever you defined your NARS2000 root folder.
The vast majority of the project settings are found in the above file with some exceptions.
Set Up Makefile and Environment Variables
Windows 8: Setting up Environment and Path Variable(s): Under Settings, Control Panel, System and Security, System, Advanced System Settings, Advanced (Tab),
- Click Environment Variables button - There is both a Temp Variable and Path Variable.
- Try adding a New variable (var Name plus Value) for each of the Set commands listed below, vars such as NARSROOT, CS_DIR, ZIPPRG, . . .
- If you need to add another Path to an existing variable, each new or added path is separated with a semi-colon.
- After updating any Environment/Path variable(s) you apparently need to reboot since the above variable changes only affect changes in the Registry until PC is rebooted.
- The instructions below should also or alternatively work.
If you are building from the makefile, you'll need to set some environment variables in your autoexec.bat file:
REM Path of the root of the NARS2000 project *ending with a backslash* Set NARSROOT=C:\NARS2000^\ REM Path to Doctor Dump SDK root Set CS_DIR=C:\DoctorDumpSDK^\ REM Path and name of zip program (7-Zip) Set ZIPPRG="C:\Program Files\7-Zip\7z" REM Path and name of parser generator (bison) Set PARGEN=C:\Cygwin\bin\bison REM Path and name of makedep program Set MAKEDEP=%NARSROOT%makedep.php REM Path and name of the <makepro.php> program Set MAKEPRO=%NARSROOT%makepro.php REM Folder of SDK ("C:\Program Files\Microsoft SDKs\Windows\v7.0A") Set SDK=U:^\ REM MSVC compiler ("C:\Program Files\Microsoft Visual Studio 9.0") Set MSVC=V:\VC^\
I find it convenient to use the Windows subst command to map drive letters as in the references to drives U: and V: above.
subst U: "C:\Program Files\Microsoft SDKs\Windows\v7.0A" (or whatever the current version is) subst V: "C:\Program Files\Microsoft Visual Studio 9.0" (...)
If you install the above tools in other folders, make the appropriate changes to the above lines.
You will also have to append the folders C:\Cygwin\bin and V:\Common7\IDE to your path (PATH=%PATH%;C:\Cygwin\bin;V:\Common7\IDE) so the C compiler can find some of its DLLs and tools.
Building The Executable
At this point you should be ready to build the executable. To do this from VC++ Express (having already opened the project file), click on the menu item Build | Build Solution or press F7. To do this from a makefile, type mkn.