summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
AgeCommit message (Collapse)Author
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 :).
2021-02-24AK: Rename {DBGLN_NO => ENABLE}_COMPILETIME_FORMAT_CHECKLinus Groh
This is no longer limited to dbgln(). Also invert it to match all the other ENABLE_FOO options.
2021-02-24Build: Build Userland with -O2, Kernel with -OsAndreas Kling
For some reason I don't yet understand, building the kernel with -O2 produces a way-too-large kernel on some people's systems. Since there are some really nice performance benefits from -O2 in userspace, let's do a compromise and build Userland with -O2 but put Kernel back into the -Os box for now.
2021-02-23Everywhere: Okay let's try that -O2 build again :^)Andreas Kling
Now that the issue with the kernel outgrowing its slot is patched, we should be able to boot a slightly larger kernel without trouble.
2021-02-23Build: Revert back to building with -OsAndreas Kling
-O2 kernels are failing to boot on other people's machines for some reason that we need to investigate. In the meantime, let's revert.
2021-02-23Everywhere: Build with -O2 :^)Andreas Kling
Let's try going faster instead of smaller.
2021-02-23Build: Only use -fstack-clash-protection with GCCAndreas Kling
This is not yet supported by Clang, so let's disable it for non-GCC compilers for now. (CLion was whining about it.)
2021-02-19Toolchain: Use -ftls-model=initial-exec by defaultItamar
Our TLS implementation relies on the TLS model being "initial-exec". We previously enforced this by adding the '-ftls-model=initial-exec' flag in the root CmakeLists file, but that did not affect ports - So now we put that flag in the gcc spec files. Closes #5366
2021-02-19Everywhere: Build with -fstack-clash-protectionAndreas Kling
This option causes GCC to generate code to prevent "stack clash" style attacks where a very large stack allocation is used in to jump over the stack guard page and into whatever's next to it.
2021-02-19DynamicLoader+Userland: Enable RELRO for shared libraries as well :^)Andreas Kling
To support this, I had to reorganize the "load_elf" function into two passes. First we map all the dynamic objects, to get their symbols into the global lookup table. Then we link all the dynamic objects. So many read-only GOT's! :^)
2021-02-18LibELF+Userland: Enable RELRO for all userland executables :^)Andreas Kling
The dynamic loader will now mark RELRO segments read-only after performing relocations. This is pretty cool! Note that this only applies to main executables so far,. RELRO support for shared libraries will require some reorganizing of the dynamic loader.
2021-02-15Meta: Make it possible to (somewhat) build the system inside SerenityAnotherTest
This removes some hard references to the toolchain, some unnecessary uses of an external install command, and disables a -Werror flag (for the time being) - only if run inside serenity. With this, we can build and link the kernel :^)
2021-02-15CMake: Add 'setup-and-run' target to perform all prereqs and run the imageBrian Gianforcaro
Running 'ninja install && ninja image && ninja run` is kind of annoying. I got tired, and came up with this instead, which does the right thing and I don't have to type out the incantation.
2021-02-15Kernel: Initial integration of Kernel Address Sanitizer (KASAN)Brian Gianforcaro
KASAN is a dynamic analysis tool that finds memory errors. It focuses mostly on finding use-after-free and out-of-bound read/writes bugs. KASAN works by allocating a "shadow memory" region which is used to store whether each byte of memory is safe to access. The compiler then instruments the kernel code and a check is inserted which validates the state of the shadow memory region on every memory access (load or store). To fully integrate KASAN into the SerenityOS kernel we need to: a) Implement the KASAN interface to intercept the injected loads/stores. void __asan_load*(address); void __asan_store(address); b) Setup KASAN region and determine the shadow memory offset + translation. This might be challenging since Serenity is only 32bit at this time. Ex: Linux implements kernel address -> shadow address translation like: static inline void *kasan_mem_to_shadow(const void *addr) { return ((unsigned long)addr >> KASAN_SHADOW_SCALE_SHIFT) + KASAN_SHADOW_OFFSET; } c) Integrating KASAN with Kernel allocators. The kernel allocators need to be taught how to record allocation state in the shadow memory region. This commit only implements the initial steps of this long process: - A new (default OFF) CMake build flag `ENABLE_KERNEL_ADDRESS_SANITIZER` - Stubs out enough of the KASAN interface to allow the Kernel to link clean. Currently the KASAN kernel crashes on boot (triple fault because of the crash in strlen other sanitizer are seeing) but the goal here is to just get started, and this should help others jump in and continue making progress on KASAN. References: * ASAN Paper: https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf * KASAN Docs: https://github.com/google/kasan * NetBSD KASAN Blog: https://blog.netbsd.org/tnf/entry/kernel_address_sanitizer_part_3 * LWN KASAN Article: https://lwn.net/Articles/612153/ * Tracking Issue #5351
2021-02-08Build: Allow setting DBGLN_NO_COMPILETIME_FORMAT_CHECK via CMake flagAndreas Kling
2021-02-07Base: Remove /res/pci.ids and download at build time insteadLinus Groh
This is an external file from https://pci-ids.ucw.cz that's being updated daily, which was imported a while ago but probably shouldn't live in the SerenityOS repository in the first place (or else would need manual maintenance). The legal aspects of redistributing this file as we currently do are not quite clear to me, they require either GPL (version 2 or later) or 3-clause BSD - Serenity is 2-clause BSD... The current version we use is 2019.08.08, so quite outdated - and while most of these devices are obviously not supported, we're still capable of *listing* them, so having an up-to-date version with recent additions and fixes would be nice. This updates the root CMakeLists.txt to check for existence of the file and download it if not found - effectively on every fresh build. Do note that this is not a critical file, and the system runs just fine should this ever fail. :^)
2021-02-05Userland: Add LibSystem and funnel all syscalls through itAndreas Kling
This achieves two things: - Programs can now intentionally perform arbitrary syscalls by calling syscall(). This allows us to work on things like syscall fuzzing. - It restricts the ability of userspace to make syscalls to a single 4KB page of code. In order to call the kernel directly, an attacker must now locate this page and call through it.
2021-01-26Meta: Split debug defines into multiple headers.asynts
The following script was used to make these changes: #!/bin/bash set -e tmp=$(mktemp -d) echo "tmp=$tmp" find Kernel \( -name '*.cpp' -o -name '*.h' \) | sort > $tmp/Kernel.files find . \( -path ./Toolchain -prune -o -path ./Build -prune -o -path ./Kernel -prune \) -o \( -name '*.cpp' -o -name '*.h' \) -print | sort > $tmp/EverythingExceptKernel.files cat $tmp/Kernel.files | xargs grep -Eho '[A-Z0-9_]+_DEBUG' | sort | uniq > $tmp/Kernel.macros cat $tmp/EverythingExceptKernel.files | xargs grep -Eho '[A-Z0-9_]+_DEBUG' | sort | uniq > $tmp/EverythingExceptKernel.macros comm -23 $tmp/Kernel.macros $tmp/EverythingExceptKernel.macros > $tmp/Kernel.unique comm -1 $tmp/Kernel.macros $tmp/EverythingExceptKernel.macros > $tmp/EverythingExceptKernel.unique cat $tmp/Kernel.unique | awk '{ print "#cmakedefine01 "$1 }' > $tmp/Kernel.header cat $tmp/EverythingExceptKernel.unique | awk '{ print "#cmakedefine01 "$1 }' > $tmp/EverythingExceptKernel.header for macro in $(cat $tmp/Kernel.unique) do cat $tmp/Kernel.files | xargs grep -l $macro >> $tmp/Kernel.new-includes ||: done cat $tmp/Kernel.new-includes | sort > $tmp/Kernel.new-includes.sorted for macro in $(cat $tmp/EverythingExceptKernel.unique) do cat $tmp/Kernel.files | xargs grep -l $macro >> $tmp/Kernel.old-includes ||: done cat $tmp/Kernel.old-includes | sort > $tmp/Kernel.old-includes.sorted comm -23 $tmp/Kernel.new-includes.sorted $tmp/Kernel.old-includes.sorted > $tmp/Kernel.includes.new comm -13 $tmp/Kernel.new-includes.sorted $tmp/Kernel.old-includes.sorted > $tmp/Kernel.includes.old comm -12 $tmp/Kernel.new-includes.sorted $tmp/Kernel.old-includes.sorted > $tmp/Kernel.includes.mixed for file in $(cat $tmp/Kernel.includes.new) do sed -i -E 's/#include <AK\/Debug\.h>/#include <Kernel\/Debug\.h>/' $file done for file in $(cat $tmp/Kernel.includes.mixed) do echo "mixed include in $file, requires manual editing." done
2021-01-25Everywhere: Use CMake to generate AK/Debug.h.asynts
This was done with the help of several scripts, I dump them here to easily find them later: awk '/#ifdef/ { print "#cmakedefine01 "$2 }' AK/Debug.h.in for debug_macro in $(awk '/#ifdef/ { print $2 }' AK/Debug.h.in) do find . \( -name '*.cpp' -o -name '*.h' -o -name '*.in' \) -not -path './Toolchain/*' -not -path './Build/*' -exec sed -i -E 's/#ifdef '$debug_macro'/#if '$debug_macro'/' {} \; done # Remember to remove WRAPPER_GERNERATOR_DEBUG from the list. awk '/#cmake/ { print "set("$2" ON)" }' AK/Debug.h.in
2021-01-12Services: Move to Userland/Services/Andreas Kling
2021-01-12DevTools: Move to Userland/DevTools/Andreas Kling
2021-01-12Libraries: Move to Userland/Libraries/Andreas Kling
2021-01-12Applications: Move to Userland/Applications/Andreas Kling
2021-01-12Games: Move to Userland/Games/Andreas Kling
2021-01-12MenuApplets: Move to Userland/MenuApplets/Andreas Kling
2021-01-12Demos: Move to Userland/Demos/Andreas Kling
2021-01-12Shell: Move to Userland/Shell/Andreas Kling
2021-01-07CMake: Only enable "MacOS workaround" on MacOSAndreas Kling
This was preventing ports from building on Linux.
2021-01-07CMake: set CMAKE_SKIP_RPATH everywhereNico Weber
Else, there's tons of "-- Set runtime path of" spam at build time, with apparently no way of disabling the build noise other than turning of rpaths. If the dynamic loader uses them at some point, we probably want to set them through cflags/ldflags instead of through cmake's built-in thing anyways, for that reason.
2021-01-06Everywhere: Force linker hash style to be gnuSahan Fernando
2021-01-02Build + LibC: Enable -fstack-protector-strong in user spaceBrian Gianforcaro
Modify the user mode runtime to insert stack canaries to find stack corruptions. The `-fstack-protector-strong` variant was chosen because it catches more issues than vanilla `-fstack-protector`, but doesn't have substantial performance impact like `-fstack-protector-all`. Details: -fstack-protector enables stack protection for vulnerable functions that contain: * A character array larger than 8 bytes. * An 8-bit integer array larger than 8 bytes. * A call to alloca() with either a variable size or a constant size bigger than 8 bytes. -fstack-protector-strong enables stack protection for vulnerable functions that contain: * An array of any size and type. * A call to alloca(). * A local variable that has its address taken. Example of it catching corrupting in the `stack-smash` test: ``` courage ~ $ ./user/Tests/LibC/stack-smash [+] Starting the stack smash ... Error: Stack protector failure, stack smashing detected! Shell: Job 1 (/usr/Tests/LibC/stack-smash) Aborted ```
2021-01-01Meta: Enable RTTI for Userspace programsAndrew Kaster
RTTI is still disabled for the Kernel, and for the Dynamic Loader. This allows for much less awkward navigation of class heirarchies in LibCore, LibGUI, LibWeb, and LibJS (eventually). Measured RootFS size increase was < 1%, and libgui.so binary size was ~3.3%. The small binary size increase here seems worth it :^)
2021-01-01CMake: Add public cmake option to document BUILD_LAGOMBrian Gianforcaro
- Making this an option makes this option visible to users and tooling.
2021-01-01CMake: Add public cmake option to document ENABLE_ALL_THE_DEBUG_MACROSBrian Gianforcaro
- Making this an option makes this option visible to users and tooling. - Rename `ALL_THE_DEBUG_MACROS` -> `ENABLE_ALL_THE_DEBUG_MACROS`.
2021-01-01CMake: Remove some trailing whitespace from a few CMakeLists.txt filesBrian Gianforcaro
2021-01-01CMake: Consolidate all options to the root of the projectBrian Gianforcaro