aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/CMakeLists.txt
Commit message (Collapse)AuthorAge
* build: enable IWYU on macdundargoc2023-11-27
|
* build: rework IWYU mapping filesdundargoc2023-11-25
| | | | | Create mapping to most of the C spec and some POSIX specific functions. This is more robust than relying files shipped with IWYU.
* build: reorder compiler option settingdundargoc2023-11-22
| | | | | | | The most general conditions should come before more specific conditions. For example, `UNIX` options needs to be specified before any distro-specific options. This way distro specific options takes priority over the general case in case there's a conflict.
* build: reorganize cmake filesdundargoc2023-11-21
| | | | | | Also add _GNU_SOURCE compiler definition for all non MSVC compilers. Closes https://github.com/neovim/neovim/issues/26087.
* build: various cmake fixesdundargoc2023-11-18
| | | | | | | | | | - Correct MSVC warning suppression. The C4003 warning is issued during file generation and not for the actual source files. - Remove non-existent "scripts/pvscheck.sh" file from `lintsh` target. - Remove spaces inside for loops with uncrustify. - Point dependencies to use a git tag rather than releases, as releases might have changes that deviate from the actual source code. - Automatically update uncrustify config before formatting or linting.
* refactor: move defaults into separate module (#25929)Gregory Anders2023-11-08
| | | | Move default mappings and autocommands into a separate module and add comments and docstrings to document each of the defaults.
* build: enable ASAN for MSVCdundargoc2023-11-05
| | | | | | | | | | | | | | | | | It is enabled with ENABLE_ASAN_UBSAN like other compilers. Technically it only enables ASAN as UBSAN is not available, meaning to make the variable names fully correct we'd need to separate it into two checks: ENABLE_ASAN and ENABLE_UBSAN, but the convenience of combining them into the same flag outweighs the theoretical correctness. Also note in CONTRIBUTING.md that debug builds in ASAN is not supported. Technically it is the debug runtime that is not supported, which cmake automatically enables when using the debug build type. However, neovim can't be built with debug builds without linking to the debug runtime since the third party libraries has likely been linked to the debug runtime if it was built with debug build type. This technicality is likely uninteresting to the potential developer and it's easier to just say to use a release build type.
* refactor: combine regexp filesdundargoc2023-11-05
| | | | | | regext_bt.c and regexp_nfa.c are inlined into regexp.c instead of included as a header. This makes developer tools like clang-tidy and clangd be able to understand the code better.
* build: various cmake fixesdundargoc2023-11-04
| | | | | | | - silence false warnings on MSVC - merge `clang-tidy` cmake target into `lintc` and remove the corresponding make target - use cmake's built-in endianness detection
* build: make the vimdoc generation depend on the nvim target (#25876)Gregory Anders2023-11-02
| | | | The gen_vimdoc.py script uses the nvim executable, so the executable must be built before running the script.
* build: use built nvim artifact to generate eval files (#25875)Gregory Anders2023-11-02
| | | | | | | | | | | In cases where the generated files depend on changes to Nvim itself, generating the files with an older version of Nvim will fail because those changes are not present in the older version. For example, if a new option is added then the generator script should be run with the version of Nvim that contains the new option, or else the generation will fail. Co-authored-by: dundargoc <gocdundar@gmail.com>
* build: set char to always be signeddundargoc2023-11-01
| | | | | Sticking to the same convention makes it easier to reason about the code and reduces complexity.
* build: bump required minimum libvterm version to 0.3.3dundargoc2023-10-28
| | | | Also add detection for libvterm patch version.
* build: add sub-targets to the doc targetdundargoc2023-10-18
| | | | | It's easier to debug and to customize scripting if there are sub-targets that build up each target.
* refactor: allow not having a `default` case for enumFamiu Haque2023-10-10
| | | | | | Problem: The style guide states that all switch statements that are not conditional on an enum must have a `default` case, but does not give any explicit guideline for switch statements that are conditional on enums. As a result, a `default` case is added in many enum switch statements, even when the switch statement is exhaustive. This is not ideal because it removes the ability to have compiler errors to easily detect unchanged switch statements when a new possible value for an enum is added. Solution: Add explicit guidelines for switch statements that are conditional on an enum, clarifying that a `default` case is not necessary if the switch statement is exhaustive. Also refactor pre-existing code with unnecessary `default` cases.
* ci: enable clang-analyzer warningsdundargoc2023-10-09
| | | | | | | | | | | | | This adds the checks in https://neovim.io/doc/reports/clang/ when using clang-tidy. The strategy is to enable all clang-analyzer checks, and disable only the checks for the warnings that exist currently. This allows us to eliminate each warning type without blocking ongoing work, but also without adding bugs for already eliminated warnings. The plan is to eventually eliminate https://neovim.io/doc/reports/clang/ by completely integrating it into the clang-tidy check. Also add make and cmake targets `clang-analyzer` to run this check.
* build: actually export symbols on macdundargoc2023-09-21
| | | | | | | | | | | | If `-export_dynamic` is not passed to the linker, then Link Time Optimization may inline and remove global functions even though ENABLE_EXPORTS is set to true. Closes https://github.com/neovim/neovim/issues/25295. Closes https://github.com/kevinhwang91/nvim-ufo/issues/162. Closes https://github.com/neovim/neovim/issues/25295. Co-authored-by: Carlo Cabrera <30379873+carlocab@users.noreply.github.com>
* fix(build): better deps for docLewis Russell2023-09-20
|
* refactor(map): enhanced implementation, Clean Codeā„¢, etc etcbfredl2023-09-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This involves two redesigns of the map.c implementations: 1. Change of macro style and code organization The old khash.h and map.c implementation used huge #define blocks with a lot of backslash line continuations. This instead uses the "implementation file" .c.h pattern. Such a file is meant to be included multiple times, with different macros set prior to inclusion as parameters. we already use this pattern e.g. for eval/typval_encode.c.h to implement different typval encoders reusing a similar structure. We can structure this code into two parts. one that only depends on key type and is enough to implement sets, and one which depends on both key and value to implement maps (as a wrapper around sets, with an added value[] array) 2. Separate the main hash buckets from the key / value arrays Change the hack buckets to only contain an index into separate key / value arrays This is a common pattern in modern, state of the art hashmap implementations. Even though this leads to one more allocated array, it is this often is a net reduction of memory consumption. Consider key+value consuming at least 12 bytes per pair. On average, we will have twice as many buckets per item. Thus old implementation: 2*12 = 24 bytes per item New implementation 1*12 + 2*4 = 20 bytes per item And the difference gets bigger with larger items. One might think we have pulled a fast one here, as wouldn't the average size of the new key/value arrays be 1.5 slots per items due to amortized grows? But remember, these arrays are fully dense, and thus the accessed memory, measured in _cache lines_, the unit which actually matters, will be the fully used memory but just rounded up to the nearest cache line boundary. This has some other interesting properties, such as an insert-only set/map will be fully ordered by insert only. Preserving this ordering in face of deletions is more tricky tho. As we currently don't use ordered maps, the "delete" operation maintains compactness of the item arrays in the simplest way by breaking the ordering. It would be possible to implement an order-preserving delete although at some cost, like allowing the items array to become non-dense until the next rehash. Finally, in face of these two major changes, all code used in khash.h has been integrated into map.c and friends. Given the heavy edits it makes no sense to "layer" the code into a vendored and a wrapper part. Rather, the layered cake follows the specialization depth: code shared for all maps, code specialized to a key type (and its equivalence relation), and finally code specialized to value+key type.
* build: various fixesdundargoc2023-09-04
| | | | | | | | | - simplify lua interpreter search - fix incorrect variable name in BuildLua.cmake - build PUC Lua with -O2 - silence non-mandatory find_package search for libuv - simplify Find modules - Prefer using the explicitly set CI_BUILD over relying on the environment variable "CI".
* docs(generators): bake into cmakeLewis Russell2023-08-23
|
* build(deps): bump luajit to HEAD - 03c31124cChristian Clason2023-08-23
| | | | | | Switch to a rolling release, so the `0-beta3` suffix is dropped in favor of the date. Remove the custom UNIX command as the symlink is now created by the LuaJIT Makefile.
* feat(lua-types): types for vim.api.* (#24523)Lewis Russell2023-08-01
|
* build: fix --luamod-dev not working properly (#24519)zeertzjq2023-08-01
| | | Fixes a regression from #23112.
* refactor: rename _meta.lua to _options.luaLewis Russell2023-07-17
|
* build!: remove neovim qtdundargoc2023-06-06
| | | | | | | | | | | | | | | | | | | | | | | Neovim QT was originally bundled on Windows as a response to the then lackluster terminal options. The situation has dramatically changed, with viable options such as Windows terminal, Alacritty and Wezterm to name a few. The Windows build no longer needs this special treatment for neovim to be usable. Pros: - Release builds will be smaller. - Less maintenance burden. - Clearer separation of responsibility (neovim issues go to the neovim repo and neovim-qt issues to the neovim-qt repo). - More consistent treatment between platforms. Cons: - Users who've come to expect neovim-qt to be bundled with nvim will need to adjust and download neovim-qt from https://github.com/equalsraf/neovim-qt instead. - Similarly, build scripts will need to be adjusted to reflect this change. Closes https://github.com/neovim/neovim/issues/21209.
* build: remove LOG_DEBUG optiondundargoc2023-05-28
| | | | | Its usecase is too specific to warrant an option. The same effect can be achieved by passing `-DCMAKE_C_FLAGS=-DNVIM_LOG_DEBUG` in the command line when building neovim.
* build: bundle uncrustifydundargoc2023-05-18
| | | | | | Uncrustify is sensitive to version changes, which causes friction for contributors that doesn't have that exact version. It's also simpler to download and install the correct version than to have bespoke version checking.
* build: add ubsan default optionsii142023-05-15
| | | | Use print_stacktrace=1 for UBSAN by default.
* build: cmake cleanupdundargoc2023-05-13
| | | | | | | | | | - Simplify error checking when using execute_process. - Set BUILD_SHARED_LIBS to OFF when building dependencies. This is normally not needed, but msgpack interprets an unset BUILD_SHARED_LIBS to build a shared library, which is the opposite of the cmake behavior. - Move function check_lua_module to Util.cmake. - Remove unnecessary code. - Make variable naming more consistent
* build: add luajit runtime files when installing (#23514)dundargoc2023-05-09
| | | Closes https://github.com/neovim/neovim/issues/15543.
* refactor(build): include lpeg as a librarybfredl2023-04-27
|
* build: revert accidental permission changes (#23319)zeertzjq2023-04-26
| | | Revert the permission changes in 794d2744f33562326172801ddd729853e7135347.
* build: drop diff.exe from windows buildsdundargoc2023-04-22
| | | | | | | | The shipped versions of xdiff already does everything diff does, so this duplication of tools isn't necessary. Furthermore, this setup is more consistent overall, as the 'diffopt=external' option should be for external programs rather than programs we bundle neovim with. Install diffutils for oldtests in CI to avoid needing to modify tests.
* fix(cmake): restore previously undocumented workround, now documentedbfredl2023-04-22
|
* build: include all dependency directories when generating headersdundargoc2023-04-21
| | | | | | | This will add all interface include directories property from all targets to main_lib. This may not be universally wanted, in which case we can revisit/rework it. Closes https://github.com/neovim/neovim/issues/23237.
* fix(build): distinguish vim.mpack from global require'mpack'bfredl2023-04-20
| | | | | problem: the api of vim.mpack is not compatible with a system provided mpack solution: don't require 'mpack' directly from the system path
* refactor(build): use vendored versions of mpack and luabitopbfredl2023-04-19
|
* build: various cmake fixesdundargoc2023-04-15
| | | | | - Remove unused function argument from GetBinaryDeps - Remove unused variable LUA_LOAD_PACKAGE_MODULE_SOURCE - Add LUA_FS_MODULE_SOURCE as a dependency of VIM_MODULE_FILE
* Merge pull request #22873 from bfredl/keyset2bfredl2023-04-08
|\ | | | | refactor(api): make typed dicts appear as real types in the source code
| * refactor(api): make typed dicts appear as types in the source codebfredl2023-04-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | problem: can we have Serde? solution: we have Serde at home This by itself is just a change of notation, that could be quickly merged to avoid messy merge conflicts, but upcoming changes are planned: - keysets no longer need to be defined in one single file. `keysets.h` is just the initial automatic conversion of the previous `keysets.lua`. keysets just used in a single api/{scope}.h can be moved to that file, later on. - Typed dicts will have more specific types than Object. this will enable most of the existing manual typechecking boilerplate to be eliminated. We will need some annotation for missing value, i e a boolean will need to be represented as a TriState (none/false/true) in some cases. - Eventually: optional parameters in form of a `Dict opts` final parameter will get added in some form to metadata. this will require a discussion/desicion about type forward compatibility.
* | ci: don't automatically enable -Werror on CI environmentsdundargoc2023-04-07
|/ | | | | | This catches downstream consumers of neovim off guard when using neovim in an esoteric environment not tested in our own CI. Closes https://github.com/neovim/neovim/issues/22932
* build: cmake cleanupdundargoc2023-04-04
| | | | | | | - Change libtermkeyCMakeLists.txt to LibtermkeyCMakeLists.txt - Remove duplicate mark_as_advanced calls in FindLibuv.cmake - Fix "Enabling Clang sanitizer" messages as it's no longer clang-only - Simplify parser installation syntax - Rename tree-sitter to treesitter
* refactor(treesitter): delegate region calculation to treesitter (#22576)Lewis Russell2023-04-04
|
* Merge pull request #22791 from lewis6991/refactor/loadermiscLewis Russell2023-03-30
|\ | | | | refactor(loader): changes
| * refactor(loader): use vim.fsLewis Russell2023-03-26
| |
* | build: drop curl.exe on Windowsdundargoc2023-03-28
|/ | | | | Curl is already shipped by default on Windows 10 starting from versions 1803. As we already require version 1809 we can safely remove it.
* feat(lua): add `vim.loader`Folke Lemaitre2023-03-26
| | | feat: new faster lua loader using byte-compilation
* build!: rename sanitizer options from CLANG_* to ENABLE_*ii142023-03-17
|
* build: sanitizers for gccii142023-03-16
| | | | | | GCC also supports sanitizers. GCC doesn't support -fsanitize-blacklist option though, so replace .asan-blacklist file with no_sanitize_address function attributes instead.