127 lines
5.0 KiB
Org Mode
127 lines
5.0 KiB
Org Mode
* Serene lang
|
|
Build Status: [[https://drone.devheroes.codes/api/badges/Serene/Serene/status.svg]]
|
|
|
|
** Setup development environment
|
|
Setup the githook and install dependencies using the following commands:
|
|
|
|
#+BEGIN_SRC bash
|
|
./builder setup
|
|
#+END_SRC
|
|
|
|
*** 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)
|
|
- Boehm GC v8.2.0
|
|
|
|
** 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 =14.0.6= branch as our reference.
|
|
|
|
MLIR is a part of the [[https://llvm.org][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.
|
|
|
|
#+BEGIN_SRC bash
|
|
## 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_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_ASSERTIONS=ON \
|
|
-DLLVM_CCACHE_BUILD=ON \
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
|
-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
|
|
-DLLVM_ENABLE_LLD=ON
|
|
|
|
cmake --build .
|
|
|
|
cmake --build . --target check-mlir
|
|
|
|
cmake -DCMAKE_INSTALL_PREFIX=/your/target/location -P cmake_install.cmake
|
|
#+END_SRC
|
|
|
|
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:
|
|
|
|
#+BEGIN_SRC bash
|
|
LD_PRELOAD=$(clang -print-file-name=libclang_rt.asan-x86_64.so) /path/to/executable
|
|
#+END_SRC
|
|
|
|
** 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:
|
|
|
|
#+BEGIN_SRC bash
|
|
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
|
|
#+END_SRC bash
|
|
|
|
|
|
* Cheatsheets
|
|
- [[https://github.com/muqsitnawaz/modern-cpp-cheatsheet][Modern C++ Cheatsheet]]
|
|
|
|
* License
|
|
Copyright (c) 2019-2022 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:
|
|
|
|
- *IRC*: *#serene-lang* on the libera chat server
|
|
- *MailingList*: https://www.freelists.org/list/serene
|