Ensure the following is installed:
- Visual Studio 2022+ or Visual Studio 2022+ build tools.
- Both can be found at here.
- CMake
- (Recommended way) Visual Studio/Visual Studio Build Tools provides bundled CMake as a selectable component
- Otherwise, CMake can be found here
- Python 3+
- Available here.
- Perl on Windows
- (Recommended way) Strawberry Perl is available at Strawberry Perl.
- (Not recommended due to license terms) ActiveState Perl is available here.
- Ninja
- (Recommended) Visual Studio/Visual Studio Build Tools provides bundled Ninja as part of CMake build tools
- Otherwise, Ninja can be installed using winget by running
winget install Ninja-build.Ninja
. - If winget is not available, Ninja can be found here.
If installing this way, ensure
ninja
is accessible fromPATH
. - (Untested)
ninja.exe
is bundled within a Strawberry Perl installation.
- A GCC-compatible C++ compiler (Optional, but highly recommended. See #installing-gcc-compatible-c++-compiler)
- (Recommended way) here.
- (Untested)
g++.exe
is bundled within a Strawberry Perl installation. - (Untested) Visual Studio also provides clang tools as an installable component.
If installing this way, ensure that
clang++.exe
is available.
- Vcpkg (Optional, but highly recommended. See #notes-on-dependency-management)
- Can be found here.
Ensure TeX Live is available on the system. MikTeX is a possible substitute but is unsupported.
Building asymptote.pdf
requires a UNIX system.
The following is required for building the setup file:
- NSIS installer.
- NSIS installer can be found here.
If you are getting started and want a quick configuration, run ./quick-start-win32.ps1
.
This script automatically checks that you have vcpkg, and if not, clones and bootstraps vcpkg on your system.
Additionally, this script automatically locates your Visual Studio installation and establishes all required environment variables.
The recommended way is to use vcpkg.
See INSTALL.md
for more details.
On windows, one may run
git clone https://github.com/microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.bat
to initialize vcpkg.
Make sure the environment VCPKG_ROOT
points to where your vcpkg repository is at user or machine scope.
This can be done either by Start -> "Edit environment variables for your account" and then adding VCPKG_ROOT entry, or by PowerShell,
[Environment]::SetEnvironmentVariable('VCPKG_ROOT', '<path to vcpkg>', 'User')
Otherwise, you can also set VCPKG_ROOT for everyone on your machine.
We (highly) suggest installing a GCC-compatible C++ compiler for preprocessing. Our recommendation is to use clang/LLVM tools, available here. Once your compiler is installed, there are a few options.
- (Recommended) Ensure
clang++.exe
is available inPATH
and leaveGCCCOMPAT_CXX_COMPILER_FOR_MSVC
unset. The build script will automatically try to locateclang++.exe
org++.exe
in places withinPATH
. Be warned that the build script may select a different compiler depending on if there are other compilers available inPATH
. - (Only if you require a specific clang++ compiler) Set
GCCCOMPAT_CXX_COMPILER_FOR_MSVC
environment variable to your GCC-compatible C++ compiler. For example$env:GCCCOMPAT_CXX_COMPILER_FOR_MSVC="<LLVM install location>/bin/clang++.exe
- If you want to make the environment variable permanent, run
[Environment]::SetEnvironmentVariable('GCCCOMPAT_CXX_COMPILER_FOR_MSVC', '<LLVM install location>/bin/clang++.exe', 'User
- If you want to make the environment variable permanent, run
Ensure you have cl.exe
in your path.
The easiest way is to use Visual Studio Developer PowerShell, though be careful that by default
VS Developer PowerShell selects 32-bit cl.exe.
To explicitly select 64-bit Visual Studio Developer PowerShell, one can use Visual Studio locator alongside its developer shell script as
$vsInfo = Get-CimInstance MSFT_VSInstance -Namespace root/cimv2/vs
& "$($vsInfo.InstallLocation)\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -HostArch amd64 -SkipAutomaticLocation
This prompt should put you in to 64-bit Visual Studio Developer PowerShell.
There are multiple CMake presets available for building, depending on what you intend to build
- If you are building Asymptote for release with setup files, depending on how you would build
asymptote.pdf
, use either (see #documentation-generation section)- The
msvc/release
preset - The
msvc/msvc/release-with-existing-asymptote-pdf
- The
- If you are building only asymptote executable for release, or do not care about
asymptote.pdf
, usemsvc/release
preset - If you are building Asymptote for development or debug mode, you are required to either create your own debug preset or configure cache variables manually.
Ensure that you are in the Visual Studio 64-bit PowerShell (or have every tool available in PATH
), and run
cmake --preset <your selected preset>
There are multiple key targets for building Asymptote.
- For the
asy.exe
executable andbase/
files, the target to run isasy-with-basefiles
- For documentation (depending on your configuration, including or excluding
asymptote.pdf
) -docgen
- If you are generating an installer file, the target
asy-pre-nsis-targets
builds all required components, excluding the GUI. See #building-gui-files for instructions on how to build GUI files.
The Asymptote binary is available
at cmake-build-msvc/release/asy.exe
if using msvc/release
or msvc/msvc/release-with-existing-asymptote-pdf
targets.
Instructions for generating a setup file are in the next section
On Windows, asymptote.pdf
is built using MikTeX's texify
program, hence why TeX Live cannot be used here.
Additionally, ensure that a replacement for texindex
is available in the system.
As of the moment, I have only tested using WSL's texindex
.
- If you have a WSL distribution with
texindex
installed, that may be used as a substitute fortexindex
on windows. In this case, ensure the cache variableWIN32_TEXINDEX
is set toWSL
. This is the default option. - If you have a replacement
texindex
program, ensureWIN32_TEXINDEX
points to that file.
All required dependencies for building GUI are present in GUI/requirements.txt
and GUI/requirements.dev.txt
.
We recommend using a virtual environment, for example
python.exe -m virtualenv asyguibuild
./asyguibuild/Scripts/activate.ps1
cd <asymptote-repo>/GUI
pip install -r requirements.txt
pip install -r requirements.dev.txt
However, against our recommendations, the dependencies can be also installed into the system interpreter.
The python script GUI/buildtool.py
is used for building required files. To do this, run
cd <asymptote-repo>/GUI
python.exe buildtool.py build
This should build all required GUI files.
Ensure that
- Requirements for building asymptote executable
- Requirements for building documentation (excluding
asymptote.pdf
) - At least one of the following:
- A pre-built
asymptote.pdf
file - Requirements for building
asymptote.pdf
file
- A pre-built
- PowerShell. This should come pre-installed on windows.
- Ensure that the ability to execute unsigned scripts is enabled
- Python 3 with relevant dependencies for building GUI files (This will be discussed in a separate section)
are present in the system.
Place asymptote.pdf
in the directory <asymptote-repo>/extfiles/
.
That is, the file <asymptote-repo>/extfiles/asymptote.pdf
is present.
After that, configure cmake with the preset msvc/release-with-existing-asymptote-pdf
- that is,
cmake --preset msvc/release-with-existing-asymptote-pdf
Use the msvc/release
build preset for cmake.
The cmake target asy-pre-nsis-targets
should build everything on the C++
side needed
for asymptote installation.
After building asy-pre-nsis-targets
, install using CMake.
Note that this does not install into
the program files directory, but rather, to a "local install root"
at <asymptote-repo>/cmake-install-w32-nsis-release/
.
Due to how google test build files are written (as of currently), installing
every component may result in an error (in particular, with gmock.lib
).
This can be remedied by installing only the component needed for installer generation: asy-pre-nsis
To do this, run
cmake --install cmake-build-msvc/release --component asy-pre-nsis
After building all the required dependencies,
navigate to the directory <asymptote-repo>/cmake-install-w32-nsis-release/
.
There, a script called build-asy-installer.ps1
script is present.
Run that script.
It will prompt for the location of makensis.exe
from the NSIS.
Specify the path to makensis.exe
.
After this, the script should generate the installer file with the name asymptote-<version>-setup.exe
.
This is the setup file ready for distribution.