This project is an implementation of the SLang programming language compiler backend using LLVM.
You may find an old implementation on the branch v0.1.3
.
This project is based on CMake. In order to build it, you need to install dependencies and then build the project.
Also consider installation of clang-format
and clang-tidy
tools to conform to project's coding standard.
The version used as of the writing of this manual is 13.0.0
.
You can run the corresponding check using CMake targets Format
and Tidy
.
To run all the unit tests you can use target test
, building target SlangCompilerLlvmCodegenUnitTests
beforehand.
Cross-platform universal solution for development for this project is to use the Visual Studio Code.
Please, consider installing all recommended extensions for this workspace and take care of the dependencies based on the instructions below.
If considering vcpkg
, then you should have properly set VCPKG_ROOT
environment variable prior opening project folder.
Otherwise, feel free to ignore vcpkg
configuration and remove all settings that require the presence of it (for example, CMAKE_TOOLCHAIN_FILE
in cmake.configureSettings
)
After cloning the project, run the tool that installs the vcpkg
and sets a global environment variable with a path to it:
tools/install_vcpkg.sh
By default, it installs vcpkg
in a folder near project's folder. You may customise this behaviour by providing the install path by your own.
You are strongly advised to not install it in any of the project folder or subfolders.
tools/install_vcpkg.sh path/to/vcpkg
As an alternative, you can install all the required dependencies by yourself. Use vcpkg.json
and Dockerfile
for hints on what you may need to install.
This method is not advised since it introduces inconsistency into project development.
You are advised to set this option before cloning this project to not make you editor go mad.
git config --global core.autocrlf input
You will also need to have vcpkg
package manager installed:
REM Put vcpkg out of project scope
cd ..
REM If fails, remove `/m` option to setup variable just for a user
SETX VCPKG_ROOT "%cd%\vcpkg" /m
git clone https://github.com/microsoft/vcpkg %VCPKG_ROOT%
%VCPKG_ROOT%\bootstrap-vcpkg.bat
%VCPKG_ROOT%\vcpkg integrate install
Instead of VS Code you may want to work in Visual Studio, which is also supported.
You are advised to use 2019 edition and later with the following individual components installed:
Open this project's folder as a CMake project.
Don't forget to setup command line arguments for debug:
.vs\launch.vs.json
{..."configurations": [...{..."args": "path/to/in.debug.slangir"...}...]...}
CMakeLists.txt
The project is packed into reproducible build environment with Docker. You may use Dockerfile provided to build your own image to work with project. We are considering publishing the resulting image with dependencies somewhere for quick start on a project.
The following example may be helpful in getting started, but you still need to get Docker by yourself (Ubuntu instruction):
docker build --target install-vcpkg --network "host" -t slang-project/slang-codegen-llvm-deps:0.2.1 .
docker build --cache-from slang-project/slang-codegen-llvm-deps:0.2.1 --network "host" -t slang-project/slang-codegen-llvm:0.2.1 .
docker run --rm slang-project/slang-codegen-llvm:0.2.1 path/to/in.json
build/app/SlangCompilerLlvmCodegenDriver path/to/in.slangir