Build Guide
This is the guide of how to build kscript. If you just want to run kscript programs, you probably just want to follow the installation guide
The source code is available here. You can download specific versions from the ‘releases’ page.
Unix-like OSes (MacOS, Linux, BSD, etc.)
Requirements
Building on MacOS, Linux, or other Unix-like OSes is a similar process, and assumes that you have:
- A POSIX-compliant shell (
/bin/sh
) and the normal POSIX utilities, including:echo
printf
mkdir
sed
uname
- A
make
build system - A C compiler, capable of compiling at least C89 (ANSI) C (some parts of kscript may not be strictly C89, such as
//
comments)- kscript has been confirmed to compile with
gcc
,clang
, andtcc
- kscript has been confirmed to compile with
Additionally, there are optional dependencies which can result in better performance, or more features in kscript. These are automatically detected during the configure stage, but none are hard requirements. Here is a list of them:
- GMP (
./configure --with-gmp on
): If included, use the GMP library for (faster) integer arithmetic. Otherwise, use a smaller stand-in library (calledminigmp
) is used. - FFI (
./configure --with-ffi on
): If included, use the Foreign Function Interface (FFI) library to allow theffi
module to execute functions loaded dynamically at runtime. Otherwise, throw an error when such a function call is issued - pthreads (
./configure --with-pthreads on
): If included (and it almost always is), then threading is enabled. Otherwise, an error is thrown when a thread spawn is attempted - readline (
./configure --with-readline on
): If included, use the GNU readline library with theinput()
builtin and the interactive interpreter. Otherwise, use un-line-edited interface - FFTW (
./configure --with-fftw3 on
): If included, FFTW library for faster transforms (in thenx
module). Otherwise, use my own home-rolled FFT code (which is decently fast for power-of-two transforms).
Configure
To configure kscript, using defaults, run ./configure
:
$ ./configure
-- Headers --
Searching for 'dirent.h ' ... Succeeded
Searching for 'unistd.h ' ... Succeeded
Searching for 'dlfcn.h ' ... Succeeded
Searching for 'time.h ' ... Succeeded
...
... (many, many more)
...
Generating 'include/ks/config.h' ...
Done!
Generating 'makefile' ...
Done!
Configuration was successful, run 'make' to build kscript
Any problems, questions, concerns, etc. can be sent to:
Cade Brown <brown.cade@gmail.com>
That script should print out what elements were found on your installation. To see configuration options, run with -h
(output may differ slightly):
$ ./configure -h
Usage: ./configure [options]
-h,--help Print this help/usage message and exit
-v,--verbose Print verbose output for checks
--prefix V Sets the prefix that the software should install to (default: /usr/local)
--dest-dir V Destination locally to install to (but is not kept for runtime) (default: )
--ucd-ascii If given, then only use ASCII characters in the unicode database (makes the build smaller)
--with-gmp V Whether or not to use GMP for integers (default: auto)
--with-readline V Whether or not to use Readline for line-editing (default: auto)
--with-pthreads V Whether or not to use pthreads (Posix-threads) for threading interface (default: auto)
--with-ffi V Whether or not to use ffi from libffi (Foreign Function Interface) for C-function interop (default: auto)
--with-fftw3 V Whether or not to use FFTW3 for Fast-Fourier-Transforms (default: auto)
Any questions, comments, or concerns can be sent to:
Cade Brown <cade@kscript.org>
Compile
After configuration, to compile kscript, run make
:
$ make
cc -O3 -I./include -DKS_BUILD -fPIC -c -o .tmp/src/mem.o src/mem.c
cc -O3 -I./include -DKS_BUILD -fPIC -c -o .tmp/src/lexer.o src/lexer.c
...
... (many, many more)
...
cc -L./lib -Wl,-rpath,'$ORIGIN' -Wl,-rpath,'$ORIGIN/../lib' \
.tmp/src/ks/ks.o \
-lks -lm -ldl -pthread -lffi -lgmp -lreadline -o bin/ks
Now, the following files should have been created (and possibly more, depending on your configuration):
bin/ks
lib/libks.so
Check (optional)
To run a series of checks (i.e. sanity checks), you can run:
$ make check
PASSED: tests/regex.ks
PASSED: tests/basic.ks
...
... (many, many more)
...
PASSED: tests/range.ks
Success
Install (optional)
To install kscript to your system, you can run sudo make install
:
$ sudo make install
install -d /usr/local/lib/ks-0.2.2/include/ks
install -d /usr/local/lib/ks-0.2.2/bin
install -d /usr/local/lib/ks-0.2.2/lib
... (many, many more)
ln -sf ks-0.2.2/lib/libks.so /usr/local/lib/libks.so
ln -sf ../lib/ks-0.2.2/bin/ks /usr/local/bin/ks
ln -sf ../lib/ks-0.2.2/include/ks /usr/local/include/ks
ln -sf ../lib/ks-0.2.2 /usr/local/lib/ks
Which will install to whatever --prefix
was given to ./configure
(default: /usr/local
)
To uninstall, run sudo make uninstall
Windows
The Visual Studio solution and projects are located in the winbuild
directory. I am able to build by opening those with Visual Studio (not Visual Studio Code), and running in the IDE. Good luck. (I will try and write a formal guide once I figure it all out myself – I don’t much care for Windows build system)