Just another Lisp https://serene-lang.org
Go to file
Sameer Rahmani 3725d15521 Add the clang-tidy configurations 2021-10-17 22:23:15 +01:00
docs Remove useless null checks from the passes 2021-10-16 20:48:14 +01:00
include Fix all the tidy issues 2021-10-17 20:12:17 +01:00
resources Add the serene-dev.el to ease the development on the mighty Emacs 2021-10-17 00:24:22 +01:00
scripts Hide the clang-tidy behind a build option 2021-10-17 22:22:49 +01:00
src Hide the clang-tidy behind a build option 2021-10-17 22:22:49 +01:00
.clang-format Hide the clang-tidy behind a build option 2021-10-17 22:22:49 +01:00
.clang-tidy Add the clang-tidy configurations 2021-10-17 22:23:15 +01:00
.gitignore Add CCache support to cmake list 2021-09-27 15:25:06 +01:00
.ignore_sanitize Add the IR generation facilities to Namespace and Expression 2021-06-13 22:40:58 +01:00
CMakeLists.txt Hide the clang-tidy behind a build option 2021-10-17 22:22:49 +01:00
LICENSE Change the license to GPL2 2021-10-12 20:51:03 +01:00
README.org Setup the serene-repl target with a basic REPL loop 2021-10-12 22:50:08 +01:00
builder Hide the clang-tidy behind a build option 2021-10-17 22:22:49 +01:00
dev.org Refactor the passes name for slir lowering 2021-10-06 18:48:48 +01:00

README.org

Serene lang

Setup development environment

Setup the githook and install dependencies using the following commands:

./builder setup

Dependencies

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)

LLVM Installation

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 https://github.com/llvm/llvm-project.git

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

  cmake -G Ninja ../llvm \
        -DCMAKE_INSTALL_PREFIX=/your/target/path \
        -DLLVM_PARALLEL_COMPILE_JOBS=7 \
        -DLLVM_PARALLEL_LINK_JOBS=1 \
        -DLLVM_BUILD_EXAMPLES=ON \
        -DLLVM_TARGETS_TO_BUILD="X86" \
        -DCMAKE_BUILD_TYPE=Release \
        -DLLVM_ENABLE_ASSERTIONS=ON \
        -DLLVM_CCACHE_BUILD=ON \
        -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
        -DLLVM_ENABLE_PROJECTS='clang;lldb;lld;mlir;clang-tools-extra;compiler-rt' \
        -DCMAKE_C_COMPILER=clang \       # If you have clang installed already
        -DCMAKE_CXX_COMPILER=clang++ \   # If you have clang installed already
        -DLLVM_ENABLE_LLD=ON

  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.

Emacs

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 -print-file-name=libclang_rt.asan-x86_64.so) /path/to/executable

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.

Cheatsheets

License

Copyright (c) 2019-2021 Sameer Rahmani <lxsameer@gnu.org>

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 <http://www.gnu.org/licenses/>.

Get Help

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