{"id":13561328,"url":"https://github.com/GauravDawra/Beast","last_synced_at":"2025-04-03T17:30:36.885Z","repository":{"id":37233236,"uuid":"457824530","full_name":"GauravDawra/Beast","owner":"GauravDawra","description":"A build system built for speed and power","archived":false,"fork":false,"pushed_at":"2022-08-23T13:08:16.000Z","size":817,"stargazers_count":112,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-04T13:37:15.392Z","etag":null,"topics":["beast","build","build-system","build-tool","c","cpp","linux","macos"],"latest_commit_sha":null,"homepage":"https://gauravdawra.github.io/Beast-docs","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GauravDawra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-10T14:57:44.000Z","updated_at":"2024-10-19T12:33:21.000Z","dependencies_parsed_at":"2022-07-14T08:17:46.529Z","dependency_job_id":null,"html_url":"https://github.com/GauravDawra/Beast","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GauravDawra%2FBeast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GauravDawra%2FBeast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GauravDawra%2FBeast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GauravDawra%2FBeast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GauravDawra","download_url":"https://codeload.github.com/GauravDawra/Beast/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247046753,"owners_count":20874714,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beast","build","build-system","build-tool","c","cpp","linux","macos"],"created_at":"2024-08-01T13:00:54.921Z","updated_at":"2025-04-03T17:30:36.449Z","avatar_url":"https://github.com/GauravDawra.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# \u003cp id=\"beast-the-build-system\"\u003e\u003c/p\u003e ***Beast*** - The Build System\n\u003cp align=\"center\"\u003e\n\u003cimg style=\"align: center;\" src=\"resources/logo/logo.png\" title=\"Logo\" height=\"600px\"  /\u003e\u003c/p\u003e\nBeast is a build system designed for the purpose of power,\nspeed and productivity. It is a cross-platform, general purpose build tool that combines ease \nof use with high efficiency. It is very easy to use syntactically,\nand also provides great build times!\n\nThe complete documentation for ***Beast*** can be found [here](https://gauravdawra.github.io/Beast-docs/).\n\n---\n\n[![MacOS](https://github.com/GauravDawra/Beast/actions/workflows/mac_build.yml/badge.svg)](https://github.com/GauravDawra/Beast/actions?query=workflow%3AMacOS)\n[![Ubuntu](https://github.com/GauravDawra/Beast/actions/workflows/ubuntu_build.yml/badge.svg)](https://github.com/GauravDawra/Beast/actions?query=workflow%3AUbuntu)\n[![Windows](https://github.com/GauravDawra/Beast/actions/workflows/windows_build.yml/badge.svg)](https://github.com/GauravDawra/Beast/actions?query=workflow%3AWindows)\n\nBeast builds projects based on the information provided in a *beast build file*. In this build file, the user defines what all items need to be built (*targets*), how they should be built (*build rules*), and what all targets need to be ready to build a particular target (*dependencies*). In this way, Beast works on a comprehensive and easy to use target-dependency model. For more information about the particular aspects of a build file, see [**Writing a Beast File**](https://gauravdawra.github.io/Beast-docs/mainDocs/writingABeastFile).\n\nNot only does Beast provide you with an easy to understand structure for all your build needs, it comes with a super-easy and intuitive syntax. This causes Beast to be a tool suitable for both highly experienced programmers and beginners.\n\nIn addition, Beast has a highly optimized build procedure which works well for multiple threads too. Understanding the build procedure can further help you write optimized beast build files. See [**Build procedure**](https://gauravdawra.github.io/Beast-docs/mainDocs/buildProcedure).\n\n- [Introduction](#beast-the-build-system)\n- [Installation](#installation)\n- [Getting started](#getting-started)\n- [Using Beast in your project](#using-beast-in-project)\n- [Licensing](#licensing)\n- [Contribution](#contribution)\n- [Support](#support)\n\n## \u003cp id=\"installation\"\u003e\u003c/p\u003eInstallation\n\n\nInstalling Beast is super-easy. You can either download your *system binaries* directly or you can compile it from source yourself. \n\n### Pre-compiled binaries\nYou can directly download your system specific binaries from the release section on github.\n\nOnce you have downloaded the binaries, make sure that the location of this executable is present in the *PATH* environment variable. */usr/local/bin* is the preferred position to place the *beast* executable.\n\n### Compiling from source\n#### Using *Make*\n*This method of compiling the source using Make is just used for building targets for MacOS or Linux systems*\n\nFor compiling the source, you would require:\n- make\n- GNU G++ (\u003e= 10.0) or Clang\n- flex\n- bison\n\nNote: flex and bison are required only if the *parser.cpp/hpp* and *scanner.cpp/h* files are not present in your source code or is outdated.\n\nFollow these steps to compile:\n1. Clone the github Beast repository with the following command:\n   ```\n   git clone https://github.com/GauravDawra/Beast Beast --recursive\n   ``` \n   Make sure you use the *--recursive* flag since the code has some submodule dependencies\n    \n2. Move into the *Beast* directory using \n\n        cd Beast\n3. Now we will compile the source code using *make*. If your *g++* points to one of the suitable compilers listed above the simply run \n    \n        make MODE=RELEASE \n\n    Otherwise, you should point *CXX* environment variable to a suitable compiler and then run the above command. Your command will then look like: `CXX=\u003cpath_to_compiler\u003e make MODE=RELEASE`.\n4. An executable named *beast* should then appear in rhe main working directory if the compilation was successful. To add it to the $PATH at */usr/local/bin*, run \n    \n        make install\n    \n    This is a root action so you will have to enter your password for this step. If you don't want to install this to your */usr/local/bin*, you can directly use the *beast* binary.\n\n#### Using CMake\n*This method of build using CMake can be used for building targets for MacOS, Linux and Windows systems*\n\n1. Clone the github Beast repository with the following command:\n   ```\n   git clone https://github.com/GauravDawra/Beast Beast --recursive\n   ``` \n   Make sure you use the *--recursive* flag since the code has some submodule dependencies\n\n2. Move into the *Beast* directory using\n\n        cd Beast\n   Now create a build directory and navigate to it:\n      \n         mkdir build \u0026\u0026 cd build\n   \n3. Now, let us create cmake build files:\n         \n         cmake .. -DCAME_BUILD_TYPE=Release\n   You can choose to create the *Debug* build by using the *-DCAME_BUILD_TYPE=Debug*\n   option instead of *-DCAME_BUILD_TYPE=Release*.\n4. Let us finally build the project using the following command:\n         \n         cmake --build .\n\n## \u003cp id=\"getting-started\"\u003eGetting started with ***Beast***\u003c/p\u003e\nBeast has a very simple to follow Quickstart which helps you use Beast in a sample project. This quickstart can be found in the [quickstart repository](https://github.com/GauravDawra/Beast-quickstart) or in the documentation [Quickstart](https://gauravdawra.github.io/Beast-docs/quickStart/beast-quickstart) page.\n\nIt contains a very easy to follow tutorial. To learn more about what is going on in the *beast.build* file provided with the quickstart repository, see [Writing a Beast file](https://gauravdawra.github.io/Beast-docs/mainDocs/writingABeastFile).\n\n\n## \u003cp id=\"using-beast-in-project\"\u003e Using Beast in your project \u003c/p\u003e\n\nBeast is very easy to integrate in your project with the help of just one beast build file, **beast.build**. A beast file can be written with minimal syntax and is very intuitive to use. There are a bunch functionalities that make the file writing process easy and intuitive. Also, Beast command line interface can be easily used to build your project and sub-directories.\n\n1. Place the **beast.build** file in the root working directory of your project. For more information on how to write the build file, look at [Writing a Beast file](https://gauravdawra.github.io/Beast-docs/mainDocs/writingABeastFile).\n\n2. Once you have placed the beast file in your project directory, navigate to this directory on a shell. Simply run `beast` in your terminal to start the build process.\n\nThis will start the build process. The necessary build rules will be carried out in the order taking into account the dependencies. For more information on the build procedure, look at [Build procedure](https://gauravdawra.github.io/Beast-docs/mainDocs/buildProcedure).\n\nYou can also use beast itself for various directories and sub-directories. If you want to build a subdirectory in your project you can simply use the `-d` CLI option within the beast file at your main directory.\n\nFor example, if you have a subfolder called *sub* within the main directory of your project, place a beast file in both, this main working directory and *sub* directory. Now, from within the *beast.build* file in your main directory simply call\n```\nbuild sub:\n    ! beast -d sub\n```\n\nFor a hands on tutorial on building a sample project, look at [Quickstart](https://gauravdawra.github.io/Beast-docs/quickStart/beast-quickstart)!\n\n## \u003cp id=\"licensing\"\u003e Licensing \u003c/p\u003e\nBeast uses the Apache-2.0 license. Please read the [license](https://github.com/GauravDawra/Beast/blob/master/LICENSE) carefully.\n\n## \u003cp id=\"contribution\"\u003eContribution\u003c/p\u003e\nBeast is primarily written in C++ for speed and optimizations. You can easily contribute to Beast by making a pull request. Although, it is advised to contact me before making a pull request. For more details about contribution check out [Contribution](https://gauravdawra.github.io/Beast-docs/contribute/) in the official documentation.\n\nSee [Support](#support) for contact details.\n\n## \u003cp id=\"support\"\u003e Support \u003c/p\u003e\nFor any kind of bugs and feature requests it is adviced to use Github issues. But you can also join the official [mailing list](https://groups.google.com/g/beast-build) and drop an email at beast-build@googlegroups.com once you are a member, for any kind of support. You can also email me directly at gaurav19039@iiitd.ac.in.\n\n### *Great!!! You are all set to start using Beast. Go ahead and unleash the Beast!!!*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGauravDawra%2FBeast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGauravDawra%2FBeast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGauravDawra%2FBeast/lists"}