aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt56
-rw-r--r--Makefile29
-rw-r--r--README.md21
3 files changed, 61 insertions, 45 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d3ea80c926..988c69cd2d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -97,14 +97,22 @@ else()
option(ENABLE_LTO "enable link time optimization" ON)
endif()
-# Set default build type.
+message(STATUS "CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}")
+
+# Build type.
if(NOT CMAKE_BUILD_TYPE)
- message(STATUS "CMAKE_BUILD_TYPE not given, defaulting to 'Debug'")
+ message(STATUS "CMAKE_BUILD_TYPE not specified, default is 'Debug'")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE)
+else()
+ message(STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
+endif()
+if(CMAKE_BUILD_TYPE MATCHES Debug)
+ set(DEBUG 1)
+else()
+ set(DEBUG 0)
endif()
-
# Set available build types for CMake GUIs.
-# A different build type can still be set by -DCMAKE_BUILD_TYPE=...
+# Other build types can still be set by -DCMAKE_BUILD_TYPE=...
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
@@ -138,12 +146,6 @@ set(NVIM_VERSION_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
-# Default to -O2 on release builds.
-if(CMAKE_C_FLAGS_RELEASE MATCHES "-O3")
- message(STATUS "Replacing -O3 in CMAKE_C_FLAGS_RELEASE with -O2")
- string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
-endif()
-
# Minimize logging for release-type builds.
if(NOT CMAKE_C_FLAGS_RELEASE MATCHES DMIN_LOG_LEVEL)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DMIN_LOG_LEVEL=3")
@@ -155,6 +157,22 @@ if(NOT CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES DMIN_LOG_LEVEL)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DMIN_LOG_LEVEL=3")
endif()
+# Log level (MIN_LOG_LEVEL in log.h)
+if("${MIN_LOG_LEVEL}" MATCHES "^$")
+ message(STATUS "MIN_LOG_LEVEL not specified, default is 0 (DEBUG)")
+else()
+ if(NOT MIN_LOG_LEVEL MATCHES "^[0-3]$")
+ message(FATAL_ERROR "invalid MIN_LOG_LEVEL: " ${MIN_LOG_LEVEL})
+ endif()
+ message(STATUS "MIN_LOG_LEVEL=${MIN_LOG_LEVEL}")
+endif()
+
+# Default to -O2 on release builds.
+if(CMAKE_C_FLAGS_RELEASE MATCHES "-O3")
+ message(STATUS "Replacing -O3 in CMAKE_C_FLAGS_RELEASE with -O2")
+ string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
+endif()
+
if(CMAKE_COMPILER_IS_GNUCC)
check_c_compiler_flag(-Og HAS_OG_FLAG)
else()
@@ -329,12 +347,6 @@ if(TRAVIS_CI_BUILD)
endif()
endif()
-if(CMAKE_BUILD_TYPE MATCHES Debug)
- set(DEBUG 1)
-else()
- set(DEBUG 0)
-endif()
-
option(LOG_LIST_ACTIONS "Add list actions logging" OFF)
add_definitions(-DINCLUDE_GENERATED_DECLARATIONS)
@@ -525,17 +537,9 @@ install_helper(
FILES ${MANPAGES}
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
-# MIN_LOG_LEVEL for log.h
-if("${MIN_LOG_LEVEL}" MATCHES "^$")
- message(STATUS "MIN_LOG_LEVEL not specified")
-else()
- if(NOT MIN_LOG_LEVEL MATCHES "^[0-3]$")
- message(FATAL_ERROR "invalid MIN_LOG_LEVEL: " ${MIN_LOG_LEVEL})
- endif()
- message(STATUS "MIN_LOG_LEVEL set to ${MIN_LOG_LEVEL}")
-endif()
-
+#
# Go down the tree.
+#
add_subdirectory(src/nvim)
# Read compilation flags from src/nvim, used in config subdirectory below.
diff --git a/Makefile b/Makefile
index ec7f5c7bce..980ea83bdd 100644
--- a/Makefile
+++ b/Makefile
@@ -7,13 +7,31 @@ filter-true = $(strip $(filter-out 1 on ON true TRUE,$1))
CMAKE_PRG ?= $(shell (command -v cmake3 || echo cmake))
CMAKE_BUILD_TYPE ?= Debug
-
CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
+# Extra CMake flags which extend the default set
+CMAKE_EXTRA_FLAGS ?=
+
+# CMAKE_INSTALL_PREFIX
+# - May be passed directly or as part of CMAKE_EXTRA_FLAGS.
+# - Fail if the given value does not match the CMake cached value. #9615
+CACHED_PREFIX := $(shell $(CMAKE_PRG) -L -N build | 2>/dev/null \
+ grep 'CMAKE_INSTALL_PREFIX' | cut -d '=' -f2)
+CMAKE_INSTALL_PREFIX ?= $(shell echo $(CMAKE_EXTRA_FLAGS) | 2>/dev/null \
+ grep -o 'CMAKE_INSTALL_PREFIX=[^ ]\+' | cut -d '=' -f2)
+ifneq (,$(CMAKE_INSTALL_PREFIX))
+ ifneq (,$(CACHED_PREFIX))
+ ifneq ($(CMAKE_INSTALL_PREFIX),$(CACHED_PREFIX))
+ $(info error: CMAKE_INSTALL_PREFIX "$(CMAKE_INSTALL_PREFIX)" does not match cached value "$(CACHED_PREFIX)")
+ $(info . Run this command, then try again:)
+ $(info . cmake build -DCMAKE_INSTALL_PREFIX=$(CMAKE_INSTALL_PREFIX))
+ $(error error)
+ endif
+ endif
+endif
BUILD_TYPE ?= $(shell (type ninja > /dev/null 2>&1 && echo "Ninja") || \
echo "Unix Makefiles")
DEPS_BUILD_DIR ?= .deps
-
ifneq (1,$(words [$(DEPS_BUILD_DIR)]))
$(error DEPS_BUILD_DIR must not contain whitespace)
endif
@@ -41,8 +59,6 @@ endif
BUILD_CMD = $(BUILD_TOOL) $(VERBOSE_FLAG)
-# Extra CMake flags which extend the default set
-CMAKE_EXTRA_FLAGS ?=
DEPS_CMAKE_FLAGS ?=
# Back-compat: USE_BUNDLED_DEPS was the old name.
USE_BUNDLED ?= $(USE_BUNDLED_DEPS)
@@ -153,8 +169,9 @@ generated-sources: build/.ran-cmake
appimage:
bash scripts/genappimage.sh
-# Build an appimage with embedded update information appimage-nightly for
-# nightly builds or appimage-latest for a release
+# Build an appimage with embedded update information.
+# appimage-nightly: for nightly builds
+# appimage-latest: for a release
appimage-%:
bash scripts/genappimage.sh $*
diff --git a/README.md b/README.md
index 21b3a7ac6f..4979ab53ef 100644
--- a/README.md
+++ b/README.md
@@ -57,12 +57,14 @@ and [more](https://github.com/neovim/neovim/wiki/Installing-Neovim)!
Install from source
-------------------
+The build is CMake-based, but a Makefile is provided as a convenience.
+
make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install
-To install to a non-default location, set `CMAKE_INSTALL_PREFIX`:
+To install to a non-default location:
- make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=/full/path/"
+ make CMAKE_INSTALL_PREFIX=/full/path/
make install
To skip bundled (`third-party/*`) dependencies:
@@ -80,17 +82,10 @@ To skip bundled (`third-party/*`) dependencies:
sudo make install
```
-CMake features:
-
-- List all build targets:
- ```
- cmake --build build --target help
- ```
-- Print all variable definitions:
- ```
- cmake -LAH
- ```
-- `build/CMakeCache.txt` contains the resolved values of all CMake variables.
+To inspect the build, these CMake features are useful:
+
+- `cmake --build build --target help` lists all build targets.
+- `build/CMakeCache.txt` (or `cmake -LAH build/`) contains the resolved values of all CMake variables.
- `build/compile_commands.json` shows the full compiler invocations for each translation unit.
See the [Building Neovim](https://github.com/neovim/neovim/wiki/Building-Neovim) wiki page for details.