sim-project
sim-project copied to clipboard
Sim is an open source platform for carrying out algorithmic contests and programming classes. This repository contains all Sim projects as a monorepo.
Sim project
Sim is an open source platform for carrying out algorithmic contests and programming classes.
This repository contains all Sim projects as a monorepo. You can explore individual repositories here:
Subprojects
subprojects/sim
Web server and utilities around that.
subprojects/sip
Tool for creating and managing problem packages.
subprojects/simlib
The library used internally by the subprojects. It contains common functionality e.g. the Sim Sandbox.
Development
Setting up build directory
First of all, you need to set up the build directory. The simplest way to do it is like this:
meson setup build
This will setup build directory build/ in which all subproject will be build but no install targets are made. To build only subprojects you can use -Dbuild=suproject1,subproject2,... option. E.g.
meson setup build --wipe -Dbuild=sip
For detailed option description you can inspect meson_options.txt file.
By default no subproject is marked to be installed on meson install -C build. Marking subprojects to be installed is done with '-Dinstall=subproject1,subproject2,...' option. E.g.
meson setup build --wipe -Dbuild=sim,sip -Dinstall=sip
This command will build sim and sip subprojects, but will mark only sip to be installed.
Specifying subpojects to install is also adds them to the list of subprojects to build.
For detailed option description you can inspect meson_options.txt file.
Example development setup
CC='sccache clang' CXX='sccache clang++' CC_LD=mold CXX_LD=mold meson setup build -Dc_args=-DDEBUG -Dcpp_args='-DDEBUG -D_GLIBCXX_DEBUG' -Db_sanitize=undefined -Db_lundef=false -Dinstall=sim --wipe && meson configure build --prefix $PWD/sim
Building
Just run
meson compile -C build
or
ninja -C build
Formating C/C++ sources
To format all sources (clang-format is required):
ninja -C build format
Linting C/C++ sources
All sources
To lint all sources:
ninja -C build tidy
or
./tidy
Specified sources
To lint specified sources:
./tidy path/to/source.cc other/source.h
Static analysis
ninja -C build scan-build