Version 4 of Godzilla Guides to tclquadcode

Updated 2018-02-19 12:03:33 by hypnotoad

This is a set of how-to notes for using the new tclquadcode. Your mileage may (WILL!) vary depending on which platform you are setting up, but this shows some of the pitfalls and workarounds you may run into.

Setup for Ubuntu 16.04

These are the steps to install and test the new quadcode on a fresh installation of Ubuntu 16.04

  • Install the X11 dev libraries to compile Tk.
  • The X includes may not be installed by default on your system.
 sudo apt-get install libx11-dev
  • Update the system.
 sudo apt-get update
 sudo apt-get upgrade
  • Install the LLVM requirements: definitely clang, maybe lldb.
 apt-add-repository "deb llvm-toolchain-xenial-5.0 m$
 apt-get update
 apt-get install -y clang-5.0
 apt-get install -y lldb-5.0
  • Download the master branch archive for llvmtcl.
 wget -O ~/Downloads/llvmtcl-master.tar.gz
  • Create and cd to your base development directory for tclquadcode — you'll end up with tcl, tk, quadcode, and llvmtcl-master in this directory.
 cd ~/your-dir
 tar xvf ~/Downloads/llvmtcl-master.tar.gz
 cd ~/Downloads  # For example.
 tar xvf tcllib-1.18.tar.gz
 cd tcllib-1.18
 sudo make install
 cd ~/your-dir
 fossil clone tcl.fos
 fossil clone tk.fos
 fossil clone quadcode.fos
  • Build and install tcl, tk, and llvmtcl.
 mkdir tcl tk
 cd tcl
  • Do not take the tip - It may have issues.
 fossil open ../tcl.fos core-8-6-8
 cd unix
 ./configure; make
 sudo make install

 cd ../../tk
 fossil open ../tk.fos core-8-6-8
 cd unix
 ./configure; make
 sudo make install

 cd ../../llvmtcl-master
  • This fails because there is no llvm_config command.
  • That's because the llvm 5.0 package calls it llvm-config-5.0.
 cd /usr/bin
 sudo ln -s llvm-config-5.0 llvm-config
 cd -
 sudo make install
  • Note: if you get errors like below, you are using a 9.x version of Tcl that as of Jan 2018 is not supported.
 version conflict for package "Tcl": have 9.0a0, need 8.5
    while executing
 "package require Tcl 8.5"
 version conflict for package "Tcl": have 9.0a0, need 8.2
    while executing
 "package require Tcl 8.2"
    (file "./installer.tcl" line 10)
  • Make a directory for quadcode. I'm using a date-stamped directory to keep the evolutionary steps separate.
 mkdir quad-201801
 cd quad-201801/
 fossil open ../quadcode.fos
 tclsh8.6 demos/smalltest.tcl
  • This should "just work", and you'll see about a factor of 10 improvement in run time.

DKF: I recommend only using my releases of llvmtcl (unless you want to help develop it; it really needs attention on Windows as I don't have a development toolchain on that platform at all), the latest of which is at

The configure for llvmtcl takes the option --with-llvm-config=$LLVM_CONFIG_PROGRAM which lets you override the default (which is llvm-config but you probably have a different name). I always have to use that on my system as I need to select the right version of LLVM. Also, right now we _only_ support the latest release of Tcl 8.6 (or maybe one or two patchlevels before). Select your compiler (if necessary; it is for me) by setting the CC environment variable.

Setup for Macos 10.13, Xcode and Macports

While Xcode uses llvm, it doesn't ship the bits to extend and link against llvm. So you have to use an llvm that ships with Homebrew, Macports, etc.

This example uses macports

 sudo port install llvm-5.0

 mkdir -p ~/tcl/download
 cd ~/tcl/download
 fossil clone tcl.fos
 fossil clone tk.fos
 fossil clone quadcode.fos

 mkdir -p ~/build/dev-tcl/
 cd ~/build/dev-tcl
 mkdir tcl tk tclquadcode

 cd ~/build/dev-tcl/tcl
 fossil open ~/tcl/download/tcl.fos core-8-6-8
 cd ~/build/dev-tcl/tcl/unix
 ./configure --prefix=$HOME/tcl --enable-corefoundation=yes  --enable-framework=no
 make install

 cd ~/build/dev-tcl/tk
 fossil open ~/tcl/download/tk.fos core-8-6-8
 cd ~/build/dev-tcl/tk/unix
 ./configure --prefix=$HOME/tcl --enable-aqua=yes
 make install

 cd ~/build/dev-tcl/llvmtcl
 ./configure --with-llvm-config=/opt/local/bin/llvm-config-mp-5.0 --with-tcl=../tcl/unix
 make install

 cd ~/build/dev-tcl/
 git clone llvmtcl

 cd ~/build/dev-tcl/tclquadcode
 fossil open ~/tcl/download/tclquadcode.fos

 # Just softlink the code sandbox to where the interpreter will find it
 cd ~/tcl/lib
 ln -s ~/build/dev-tcl/tclquadcode .

NOTES: We only need the macports llvm to satisfy build requirements for llvmtcl In production the clang that ships with apple seems to be compadible enough with llvm-5.0 that we don't need to set the CC environment variable

To use this tclsh instead of the native tclsh:

 alias tclsh=~/tcl/bin/tclsh8.6
 alias wish=~/tcl/bin/wish8.6