summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
AgeCommit message (Collapse)Author
2021-07-26Meta: Add LibUnicode (and its tests) to LagomTimothy Flynn
This is primarily to allow using LibUnicode within LibJS and its REPL. Note: this seems to be the first time that a Lagom dependency requires generated source files. For this to work, some of Lagom's CMakeLists.txt commands needed to be re-organized to include the CMake files that fetch and parse UnicodeData.txt. The paths required to invoke the generator also differ depending on what is currently building (SerenityOS vs. Lagom as part of the Serenity build vs. a standalone Lagom build).
2021-07-26LibUnicode: Introduce a Unicode library for interacting with UCD filesTimothy Flynn
The Unicode standard publishes the Unicode Character Database (UCD) with information about every code point, such as each code point's upper case mapping. LibUnicode exists to download and parse UCD files at build time and to provide accessors to that data. As a start, LibUnicode includes upper- and lower-case code point converters.
2021-07-26Kernel: Add option to build with coverage instrumentation and KCOVPatrick Meyer
GCC and Clang allow us to inject a call to a function named __sanitizer_cov_trace_pc on every edge. This function has to be defined by us. By noting down the caller in that function we can trace the code we have encountered during execution. Such information is used by coverage guided fuzzers like AFL and LibFuzzer to determine if a new input resulted in a new code path. This makes fuzzing much more effective. Additionally this adds a basic KCOV implementation. KCOV is an API that allows user space to request the kernel to start collecting coverage information for a given user space thread. Furthermore KCOV then exposes the collected program counters to user space via a BlockDevice which can be mmaped from user space. This work is required to add effective support for fuzzing SerenityOS to the Syzkaller syscall fuzzer. :^) :^)
2021-07-15Kernel: Make new kernel build process work on macOSGunnar Beutner
Use objcopy from the toolchain so that the changes introduced in 7236584 will succeed on macOS. Fixes #8768.
2021-07-14Meta: Remove obsolete `-fconcepts` CFLAGDaniel Bertalan
The GCC documentation says that since it's officially a part of C++20, this flag does nothing. Clang, however, does complain that it does not recognize it, so it's better to just remove it.
2021-07-12Meta+Documentation: Remove unused -DDEBUG from buildAndrew Kaster
2021-07-06Meta: Add the ConfigureComponents utilityMax Wipfli
This adds a utility program which is essentially a command generator for CMake. It reads the 'components.ini' file generated by CMake in the build directory, prompts the user to select a build type and optionally customize it, generates and runs a CMake command as well as 'ninja clean' and 'rm -rf Root', which are needed to properly remove system components. The program uses whiptail(1) for user interaction.
2021-07-04Toolchain+Userland: Enable TLS for x86_64Gunnar Beutner
This is not technically a toolchain change, but it does require rebuilding the toolchain for x86_64 (and just that).
2021-06-30Kernel: Disable __thread and TLS on x86_64 for nowGunnar Beutner
They're not yet properly supported.
2021-06-28Userland: Set linker max page size to 4096Gunnar Beutner
Neither the kernel nor LibELF support loading libraries with larger PT_LOAD alignment. The default on x86 is 4096 while it's 2MiB on x86_64. This changes the alignment to 4096 on all platforms.
2021-06-25Meta: Run 64-bit kernels with qemu-system-x86_64Gunnar Beutner
2021-06-18Userland/Libraries: Add LibUSBDB libraryJesse Buhagiar
Simple clone of LibPCIDB to support USB IDs instead of PCI ones. The format is basically identical, besides a few changes of the double tab fields.
2021-06-17Meta: Add support for declaring componentsGunnar Beutner
Components are a group of build targets that can be built and installed separately. Whether a component should be built can be configured with CMake arguments: -DBUILD_<NAME>=ON|OFF, where <NAME> is the name of the component (in all caps). Components can be marked as REQUIRED if they're necessary for a minimally functional base system or they can be marked as RECOMMENDED if they're not strictly necessary but are useful for most users. A component can have an optional description which isn't used by the build system but may be useful for a configuration UI. Components specify the TARGETS which should be built when the component is enabled. They can also specify other components which they depend on (with DEPENDS). This also adds the BUILD_EVERYTHING CMake variable which lets the user build all optional components. For now this defaults to ON to make the transition to the components-based build system easier. The list of components is exported as an INI file in the build directory (e.g. Build/i686/components.ini). Fixes #8048.
2021-06-09Meta: Disable -Wmaybe-uninitializedAli Mohammad Pur
It's prone to finding "technically uninitialized but can never happen" cases, particularly in Optional<T> and Variant<Ts...>. The general case seems to be that it cannot infer the dependency between Variant's index (or Optional's boolean state) and a particular alternative (or Optional's buffer) being untouched. So it can flag cases like this: ```c++ if (index == StaticIndexForF) new (new_buffer) F(move(*bit_cast<F*>(old_buffer))); ``` The code in that branch can _technically_ make a partially initialized `F`, but that path can never be taken since the buffer holding an object of type `F` and the condition being true are correlated, and so will never be taken _unless_ the buffer holds an object of type `F`. This commit also removed the various 'diagnostic ignored' pragmas used to work around this warning, as they no longer do anything.
2021-05-31CMake: Hide KMALLOC_VERIFY_NO_SPINLOCK_HELD so folks don't find itBrian Gianforcaro
Since I introduced this functionality there has been a steady stream of people building with `ALL_THE_DEBUG_MACROS` and trying to boot the system, and immediately hitting this assert. I have no idea why people try to build with all the debugging enabled, but I'm tired of seeing the bug reports about asserts we know are going to happen at this point. So I'm hiding this value under the new ENABLE_ALL_DEBUG_FACILITIES flag instead. This is only set by CI, and hopefully no-one will try to build with this thing (It's documented as not recommended). Fixes: #7527
2021-05-31CMake: Verify the GCC host version is new enough to build serenityBrian Gianforcaro
There are lots of people who have issues building serenity because they don't read the build directions closely enough and have an unsupported GCC version as their host compiler. Instead of repeatedly having to answer these kinds of questions, lets just error out upfront.
2021-05-27Userland: Port UBSAN implementation to userspaceAndrew Kaster
Take Kernel/UBSanitizer.cpp and make a copy in LibSanitizer. We can use LibSanitizer to hold other sanitizers as people implement them :^). To enable UBSAN for LibC, DynamicLoader, and other low level system libraries, LibUBSanitizer is built as a serenity_libc, and has a static version for LibCStatic to use. The approach is the same as that taken in Note that this means now UBSAN is enabled for code generators, Lagom, Kernel, and Userspace with -DENABLE_UNDEFINED_SANTIZER=ON. In userspace however, UBSAN is not deadly (yet). Co-authored-by: ForLoveOfCats <ForLoveOfCats@vivaldi.net>
2021-05-27Meta: Run the Wasm spec tests in CIAli Mohammad Pur
Since LibWasm is still not capable of passing all of the spec tests, ignore failing tests, only fail the build if some segfault/abort/etc occurs.
2021-05-27Meta/CI: Add ENABLE_ALL_DEBUG_FACILITIES CMake optionAndrew Kaster
This option replaces the use of ENABLE_ALL_THE_DEBUG_MACROS in CI runs, and enables all debug options that might be broken by developers unintentionally that are only used in specific debugging situations.
2021-05-27Kernel: Add ENABLE_EXTRA_KERNEL_DEBUG_SYMBOLS option to set Og and ggdb3Andrew Kaster
When debugging kernel code, it's necessary to set extra flags. Normal advice is to set -ggdb3. Sometimes that still doesn't provide enough debugging information for complex functions that still get optimized. Compiling with -Og gives the best optimizations for debugging, but can sometimes be broken by changes that are innocuous when the compiler gets more of a chance to look at them. The new CMake option enables both compile options for kernel code.
2021-05-21LibWasm+Meta: Implement instantiation/execution primitives in test-wasmAli Mohammad Pur
This also optionally generates a test suite from the WebAssembly testsuite, which can be enabled via passing `INCLUDE_WASM_SPEC_TESTS` to cmake, which will generate test-wasm-compatible tests and the required fixtures. The generated directories are excluded from git since there's no point in committing them.
2021-05-21LibWasm+Meta: Add test-wasm and optionally test the conformance testsAli Mohammad Pur
This only tests "can it be parsed", but the goal of this commit is to provide a test framework that can be built upon :) The conformance tests are downloaded, compiled* and installed only if the INCLUDE_WASM_SPEC_TESTS cmake option is enabled. (*) Since we do not yet have a wast parser, the compilation is delegated to an external tool from binaryen, `wasm-as`, which is required for the test suite download/install to succeed. This *does* run the tests in CI, but it currently does not include the spec conformance tests.
2021-05-17Build: Stop using precompiled headers (PCH)Andreas Kling
This had very bad interactions with ccache, often leading to rebuilds with 100% cache misses, etc. Ali says it wasn't that big of a speedup in the end anyway, so let's not bother with it. We can always bring it back in the future if it seems like a good idea.
2021-05-16DevTools: Add StateMachineGenerator utilityDaniel Bertalan
This program turns a description of a state machine that takes its input byte-by-byte into C++ code. The state machine is described in a custom format as specified below: ``` // Comments are started by two slashes, and cause the rest of the line // to be ignored @name ExampleStateMachine // sets the name of the generated class @namespace Test // sets the namespace (optional) @begin Begin // sets the state the parser will start in // The rest of the file contains one or more states and an optional // @anywhere directive. Each of these is a curly bracket delimited set // of state transitions. State transitions contain a selector, the // literal "=>" and a (new_state, action) tuple. Examples: // 0x0a => (Begin, PrintLine) // [0x00..0x1f] => (_, Warn) // '_' means no change // [0x41..0x5a] => (BeginWord, _) // '_' means no action // Rules common to all states. These take precedence over rules in the // specific states. @anywhere { 0x0a => (Begin, PrintLine) [0x00..0x1f] => (_, Warn) } Begin { [0x41..0x5a] => (Word, _) [0x61..0x7a] => (Word, _) // For missing values, the transition (_, _) is implied } Word { // The entry action is run when we transition to this state from a // *different* state. @anywhere can't have this @entry IncreaseWordCount 0x09 => (Begin, _) 0x20 => (Begin, _) // The exit action is run before we transition to any *other* state // from here. @anywhere can't have this @exit EndOfWord } ``` The generated code consists of a single class which takes a `Function<Action, u8>` as a parameter in its constructor. This gets called whenever an action is to be done. This is because some input might not produce an action, but others might produce up to 3 (exit, state transition, entry). The actions allow us to build a more advanced parser over the simple state machine. The sole public method, `void advance(u8)`, handles the input byte-by-byte, managing the state changes and requesting the appropriate Action from the handler. Internally, the state transitions are resolved via a lookup table. This is a bit wasteful for more complex state machines, therefore the generator is designed to be easily extendable with a switch-based resolver; only the private `lookup_state_transition` method needs to be re-implemented. My goal for this tool is to use it for implementing a standard-compliant ANSI escape sequence parser for LibVT, as described on <https://vt100.net/emu/dec_ansi_parser>
2021-05-13CMake: Fix message levels for error conditions during configurationBrian Gianforcaro
Make messages which should be fatal, actually fail the build. - FATAL is not a valid mode keyword. The full list is available in the docs: https://cmake.org/cmake/help/v3.19/command/message.html - SEND_ERROR doesn't immediately stop processing, FATAL_ERROR does. We should immediately stop if the Toolchain is not present. - The app icon size validation was just a WARNING that is easy to overlook. We should promote it to a FATAL_ERROR so that people will not overlook the issue when adding a new application. We can only make the small icon message FATAL_ERROR, as there is currently one violation of the medium app icon validation.
2021-05-12Build: Add extlinux-image target to CMakeDolphinChips
2021-05-06Tests: Establish root Tests directory, move Userland/Tests thereBrian Gianforcaro
With the goal of centralizing all tests in the system, this is a first step to establish a Tests sub-tree. It will contain all of the unit tests and test harnesses for the various components in the system.
2021-05-01LibC: Move crypt() and crypt_r() to the right header fileGunnar Beutner
According to POSIX.1 these should be in <crypt.h>.
2021-04-30CMake: Fix building with AppleClang compilerCarlos César Neves Enumo
2021-04-30CMake: Fix building libraries on macOSGunnar Beutner
When building libraries on macOS they'd be missing the SONAME attribute which causes the linker to embed relative paths into other libraries and executables: Dynamic section at offset 0x52794 contains 28 entries: Type Name/Value (NEEDED) Shared library: [libgcc_s.so] (NEEDED) Shared library: [Userland/Libraries/LibCrypt/libcrypt.so] (NEEDED) Shared library: [Userland/Libraries/LibCrypto/libcrypto.so] (NEEDED) Shared library: [Userland/Libraries/LibC/libc.so] (NEEDED) Shared library: [libsystem.so] (NEEDED) Shared library: [libm.so] (NEEDED) Shared library: [libc.so] The dynamic linker then fails to load those libraries which makes the system unbootable.
2021-04-29Kernel: Add a CMake flag to enable LTO for the kernelGunnar Beutner
2021-04-29Toolchain+Ports: Update GCC to version 11.1.0Gunnar Beutner
2021-04-27Build: Use variables when concatenating Toolchain paths.Brian Gianforcaro
Make this stuff a bit easier to maintain by using the root level variables to build up the Toolchain paths. Also leave a note for future editors of BuildIt.sh to give them warning about the other changes they'll need to make.
2021-04-22Meta: Disable the use of PCH by defaultAli Mohammad Pur
While this has a rather significant impact for me, it appears to have very minimal build time improvements (or in some cases, regressions). Also appears to cause some issues when building on macOS. So disable it by default, but leave the option so people that get something out of it (seems to mostly be a case of "is reading the headers fast enough") can turn it on for their builds.
2021-04-21Meta: Add an option to precompile some very common AK headersAli Mohammad Pur
Until we get the goodness that C++ modules are supposed to be, let's try to shave off some parse time using precompiled headers. This commit only adds some very common AK headers, only to binaries, libraries and the kernel (tests are not covered due to incompatibility with AK/TestSuite.h). This option is on by default, but can be disabled by passing `-DPRECOMPILE_COMMON_HEADERS=OFF` to cmake, which will disable all header precompilations. This makes the build about 30 seconds faster on my machine (about 7%).
2021-04-20Everywhere: Replace SERENITY_ROOT with SERENITY_SOURCE_DIRPanagiotis Vasilopoulos
2021-04-19CMake: Quiet warnings about literal suffixLenny Maiorani
Problem: - Newer versions of clang (ToT) have a similar `-Wliteral-suffix` warning as GCC. A previous commit enabled it for all compilers. This needs to be silenced for the entire build, but it currently only is silenced for some directories. Solution: - Move the `-Wno-literal-suffix` option up in the CMakeLists.txt so that it gets applied everywhere.
2021-04-18CMake: Remove redundancies and support clang ToTLenny Maiorani
Problem: - There are redundant options being set for some directories. - Clang ToT fails to compile the project. Solution: - Remove redundancies. - Fix clang error list.
2021-04-16Everywhere: Add `-Wdouble-promotion` warningNicholas-Baron
This warning informs of float-to-double conversions. The best solution seems to be to do math *either* in 32-bit *or* in 64-bit, and only to cross over when absolutely necessary.
2021-04-15Everything: Add `-Wnon-virtual-dtor` flagNicholas-Baron
This flag warns on classes which have `virtual` functions but do not have a `virtual` destructor. This patch adds both the flag and missing destructors. The access level of the destructors was determined by a two rules of thumb: 1. A destructor should have a similar or lower access level to that of a constructor. 2. Having a `private` destructor implicitly deletes the default constructor, which is probably undesirable for "interface" types (classes with only virtual functions and no data). In short, most of the added destructors are `protected`, unless the compiler complained about access.
2021-04-15Everywhere: Add "free" warningsNicholas-Baron
The following warnings do not occur anywhere in the codebase and so enabling them is effectivly free: * `-Wcast-align` * `-Wduplicated-cond` * `-Wformat=2` * `-Wlogical-op` * `-Wmisleading-indentation` * `-Wunused` These are taken as a strict subset of the list in #5487.
2021-04-12Meta: Add install-ports CMake targetPeter Elliott
install-ports copys the necessary files from Ports/ to /usr/Ports. Also refactor the compiler and destiation variables from .port_include.sh into .hosted_defs.sh. .hosted_defs.sh does not exists when ports are built in serenity
2021-03-28cmake: Hotfix the broken buildAndreas Kling
This regressed in #6000 and started complaining about bad literal suffixes, so here's a quick and dirty partial revert to make things build again.
2021-03-28cmake: Tidy compiler options.Michel Hermier
Prior to this patch there was some long line of unreadable compiler options. Now the long lines are deduplicated and there is only one option per line to ease reading/maintenance.
2021-03-28cmake: Group compile options together.Michel Hermier
2021-03-19Build: Enable --noexecstackBrendan Coles
Build ELF executables with a zero length `GNU_STACK` program header flagged non-executable. The stack is never executable on SerenityOS regardless of whether the `GNU_STACK` header is specified. Specifically defining this header is more explicit, as absence of this header implies an executable stack on other systems (Linux).
2021-03-04Build: Download and uncompress gzipped version of pci.idsLinus Groh
Partially addresses #5611.
2021-03-04Build: Add ENABLE_PCI_IDS_DOWNLOAD CMake optionLinus Groh
This allows disabling the download of the pci.ids database at build time. Addresses concerns raised in #5410.
2021-02-28Meta: Build AK and LibRegex tests in Lagom and for SerenityAndrew Kaster
These tests were never built for the serenity target. Move their Lagom build steps to the Lagom CMakeLists.txt, and add serenity build steps for them. Also, fix the build errors when building them with the serenity cross-compiler :^)
2021-02-24AK: Add support for AK::StringView literals with operator""svBrian Gianforcaro
A new operator, operator""sv was added as of C++17 to support string_view literals. This allows string_views to be constructed from string literals and with no runtime cost to find the string length. See: https://en.cppreference.com/w/cpp/string/basic_string_view/operator%22%22sv This change implements that functionality in AK::StringView. We do have to suppress some warnings about implementing reserved operators as we are essentially implementing STL functions in AK as we have no STL :).