IMPORTANT NOTICE: Devheroes public code hosting will shut down at 1st of March 2023. Due to some difficulties, we have to shut down the instance. Since is pretty mature and welcoming, We highly recommend you to move your code there. Please be advised that on 1st of March, your data will be removed. Thanks for your time with us, and may the source be with you.

Yet another Lisp. This time on LLVM.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Sameer Rahmani 94784f1dfe
Add functionality to download and unpack dependencies
5 days ago
cmake Add new doxygen setup 12 months ago
core Create a PoC to setup the stdlib calls via serene.core 7 months ago
devtools Fix the broken include in types.cpp 8 months ago
docs Add the spec around loading Serene libs vs generic libs (not completed) 7 months ago
libserene Move to the llvm 7240436c94bd02762a723a2e3551528d16c8efdb commit 5 months ago
libserene.v0 Move the old libserene aside and start a new one 8 months ago
resources Update the logo for dark backgrounds 1 week ago
scripts Add functionality to download and unpack dependencies 5 days ago
serene-repl Refactore the compiler/linker options to add asan only on executables 7 months ago
serene-tblgen Move over SereneContext and remove the old bits 8 months ago
serenec Extract the packer related functions out of the JIT 7 months ago
.ci.yml Add LLVM_USE_PERF option to account for the same flag in target llvm 8 months ago
.clang-format Hide the clang-tidy behind a build option 1 year ago
.clang-tidy Add the more resouces about JIT to 1 year ago
.dockerignore Setup the dockerfiles necessary to build serene in a container 1 year ago
.env.example Fix all the linter warnings 7 months ago
.gitignore Add .tmp to gitignore 7 months ago
.ignore_sanitize Fix the broken bash array to str process in the builder 8 months ago
.pre-commit-config.yaml Add the build-in-devfs command to builder 7 months ago
CMakeLists.txt Refactore the compiler/linker options to add asan only on executables 7 months ago
LICENSE Add include-fixer to pre-commit 8 months ago Move to the llvm 7240436c94bd02762a723a2e3551528d16c8efdb commit 5 months ago
builder Add functionality to download and unpack dependencies 5 days ago Add the conversation around jit and libasan to for the future reference 7 months ago

Serene lang

Build Status:

Setup development environment

Setup the githook and install dependencies using the following commands:

./builder setup


You would need the following dependencies to start get started with Serene development

  • LLVM (LLVM Instructions coming up.)
  • cmake
  • ninja
  • doxygen (If you want to build the docs as well)
  • Valgrind
  • CCache (If you want faster builds specially with the LLVM)
  • Boehm GC v8.2.0 (has to be built statically and with -fPIC)

LLVM Installation

Important Note: We're trying to keep Serene up to date with the LLVM release cycle till we get to our first release. So we use the development version of the LLVM. Currently we are using 7240436c94bd02762a723a2e3551528d16c8efdb commit as our reference.

MLIR is a part of the LLVM project and in order to build it we need to build the LLVM itself as well. Here is a quick guide to build the latest version of the LLVM and MLIR.

  ## YES we're using the development version of MLIR
  git clone

  mkdir llvm-project/build
  cd llvm-project/build

  cmake -G Ninja ../llvm \
        -DCMAKE_INSTALL_PREFIX=/your/target/path \
        -DCMAKE_BUILD_TYPE=Release \
        -DLLVM_EXTERNAL_PROJECTS=iwyu \ # Only if you want to enable the 'Include what you use' tool
        -DLLVM_EXTERNAL_IWYU_SOURCE_DIR=/path/to/iwyu \
        -DLLVM_ENABLE_PROJECTS='clang;lldb;lld;mlir;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind' \
        -DCMAKE_C_COMPILER=clang \       # If you have clang installed already
        -DCMAKE_CXX_COMPILER=clang++ \   # If you have clang installed already

  cmake --build .

  cmake --build . --target check-mlir

  cmake -DCMAKE_INSTALL_PREFIX=/your/target/location -P cmake_install.cmake

You need to have clang and lld installed to compile the LLVM with the above command. Also if you are not using ccache just remove the option related to it from the above command.


If you're using Emacs as your development environment just install clangd and lsp.

Heads up for devs

While you're working on Serene be mindful of:

  • In DEBUG mode we dynamically link against libsan due to the fact that we build the libserene as a shared lib by default. This means we need to LD_PRELOAD the libclang_rt before we run any executable. If you're using the builder script you're all set otherwise you can run an executable like:

      LD_PRELOAD=$(clang /path/to/executable

Build the devtools

We have our own version of `mlir-opt` which is `slir-opt` and also we have an LSP server for SLIR too. Both are in the devtools directory and in order to build them all you need to do is to use -DSERENE_ENABLE_DEVTOOLS=ON parameter with cmake for example ./builder build -DSERENE_ENABLE_DEVTOOLS=ON will do the job for you.

How to build

In order to build for development (Debug mode) just use ./builder build to setup the build and build the project once and then you can just use ./builder compile to build the changed files only.

Check out the builder script for more subcommands and details.

How to Debug

Since we're using the Boehm GC, in order to use a debugger we need to turn off some of the signal handlers that the debugger sets. In order to run the debugger (by default lldb) with serenec just use the lldb-run subcommand of the builder script. In the debugger, after setting the break point on the main function (b main) then use the following commands on:

 process handle -p yes -s no -n no SIGPWR
 process handle -p yes -s no -n no SIGXCPU
 process handle -p yes -s no -n no SIGSEGV



Copyright (c) 2019-2022 Sameer Rahmani <>

Serene is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <>.

Get Help

If you need help or you just want to hangout, you can find us at: