aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt130
1 files changed, 92 insertions, 38 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 348e138a06..f06d060560 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,31 +38,36 @@ endif()
# Set available build types for CMake GUIs.
# A different build type can still be set by -DCMAKE_BUILD_TYPE=...
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
- STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
+ STRINGS "Debug" "Dev" "Release" "MinSizeRel" "RelWithDebInfo")
# Set default build type.
if(NOT CMAKE_BUILD_TYPE)
- message(STATUS "CMAKE_BUILD_TYPE not given; setting to 'RelWithDebInfo'.")
- set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE)
+ message(STATUS "CMAKE_BUILD_TYPE not given, defaulting to 'Dev'.")
+ set(CMAKE_BUILD_TYPE "Dev" CACHE STRING "Choose the type of build." FORCE)
endif()
# Version tokens
+# - In a git repo, these tokens are _ignored_.
+# - If the current HEAD is tagged, the tag name is used.
+# - Otherwise the result of `git describe` is used.
+# - If not in a git repo (e.g. a tarball) these tokens set the version string.
+set(NVIM_VERSION_MAJOR 0)
+set(NVIM_VERSION_MINOR 1)
+set(NVIM_VERSION_PATCH 1)
+
+file(TO_CMAKE_PATH ${CMAKE_CURRENT_LIST_DIR}/.git FORCED_GIT_DIR)
include(GetGitRevisionDescription)
-file(TO_NATIVE_PATH ${CMAKE_CURRENT_LIST_DIR}/.git GIT_DIR)
get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT)
-if(NOT NVIM_VERSION_COMMIT)
- set(NVIM_VERSION_COMMIT "?")
-endif()
-set(NVIM_VERSION_MAJOR 0)
-set(NVIM_VERSION_MINOR 0)
-set(NVIM_VERSION_PATCH 0)
-set(NVIM_VERSION_PRERELEASE "-alpha")
-# TODO(justinmk): UTC time would be nice here #1071
-git_timestamp(GIT_TIMESTAMP)
-# TODO(justinmk): do not set this for "release" builds #1071
-if(GIT_TIMESTAMP)
- set(NVIM_VERSION_BUILD "+${GIT_TIMESTAMP}")
+if(NVIM_VERSION_COMMIT) # is a git repo
+ git_get_exact_tag(NVIM_VERSION_MEDIUM)
+ if(NVIM_VERSION_MEDIUM) # is a tagged release
+ unset(NVIM_VERSION_COMMIT)
+ else() # is a dev build
+ git_describe(NVIM_VERSION_MEDIUM)
+ get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT)
+ endif()
endif()
+
set(NVIM_VERSION_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
# NVIM_VERSION_CFLAGS set further below.
@@ -74,6 +79,57 @@ if(CMAKE_C_FLAGS_RELEASE MATCHES "-O3")
string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
endif()
+# Disable logging for release-type builds.
+if(NOT CMAKE_C_FLAGS_RELEASE MATCHES DDISABLE_LOG)
+ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDISABLE_LOG")
+endif()
+if(NOT CMAKE_C_FLAGS_MINSIZEREL MATCHES DDISABLE_LOG)
+ set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DDISABLE_LOG")
+endif()
+if(NOT CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES DDISABLE_LOG)
+ set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDISABLE_LOG")
+endif()
+
+# Enable assertions for RelWithDebInfo.
+if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES DNDEBUG)
+ string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
+endif()
+
+# Set build flags for custom Dev build type.
+# -DNDEBUG purposely omitted because we want assertions.
+if(MSVC)
+ SET(CMAKE_C_FLAGS_DEV ""
+ CACHE STRING "Flags used by the compiler during development (optimized, but with debug info and logging) builds."
+ FORCE)
+else()
+ if(CMAKE_COMPILER_IS_GNUCC)
+ check_c_compiler_flag(-Og HAS_OG_FLAG)
+ else()
+ set(HAS_OG_FLAG 0)
+ endif()
+
+ if(HAS_OG_FLAG)
+ set(CMAKE_C_FLAGS_DEV "-Og -g"
+ CACHE STRING "Flags used by the compiler during development (optimized, but with debug info and logging) builds."
+ FORCE)
+ else()
+ set(CMAKE_C_FLAGS_DEV "-O2 -g"
+ CACHE STRING "Flags used by the compiler during development (optimized, but with debug info and logging) builds."
+ FORCE)
+ endif()
+endif()
+SET(CMAKE_EXE_LINKER_FLAGS_DEV ""
+ CACHE STRING "Flags used for linking binaries during development (optimized, but with debug info and logging) builds."
+ FORCE)
+SET(CMAKE_SHARED_LINKER_FLAGS_DEV ""
+ CACHE STRING "Flags used by the shared libraries linker during development (optimized, but with debug info and logging) builds."
+ FORCE)
+
+MARK_AS_ADVANCED(
+ CMAKE_C_FLAGS_DEV
+ CMAKE_EXE_LINKER_FLAGS_DEV
+ CMAKE_SHARED_LINKER_FLAGS_DEV)
+
# Enable -Wconversion.
if(NOT MSVC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wconversion")
@@ -177,22 +233,6 @@ if(TRAVIS_CI_BUILD)
add_definitions(-Werror)
endif()
-if(CMAKE_COMPILER_IS_GNUCC)
- check_c_compiler_flag(-Og HAS_OG_FLAG)
-else()
- set(HAS_OG_FLAG 0)
-endif()
-
-# Set custom build flags for RelWithDebInfo.
-# -DNDEBUG purposely omitted because we want assertions.
-if(HAS_OG_FLAG)
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Og -g"
- CACHE STRING "Flags used by the compiler during release builds with debug info." FORCE)
-elseif(NOT MSVC)
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g"
- CACHE STRING "Flags used by the compiler during release builds with debug info." FORCE)
-endif()
-
if(CMAKE_BUILD_TYPE MATCHES Debug)
set(DEBUG 1)
else()
@@ -260,12 +300,16 @@ if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MA
message(FATAL_ERROR "Sanitizers are only supported for Clang.")
endif()
-if(CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN)
- message(STATUS "Sanitizers have been enabled; don't use jemalloc.")
-else()
- find_package(JeMalloc)
- if(JEMALLOC_FOUND)
- include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
+option(ENABLE_JEMALLOC "enable jemalloc" ON)
+
+if (ENABLE_JEMALLOC)
+ if(CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN)
+ message(STATUS "Sanitizers have been enabled; don't use jemalloc.")
+ else()
+ find_package(JeMalloc)
+ if(JEMALLOC_FOUND)
+ include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
+ endif()
endif()
endif()
@@ -321,6 +365,8 @@ if(NOT BUSTED_OUTPUT_TYPE)
set(BUSTED_OUTPUT_TYPE "utfTerminal")
endif()
+find_program(LUACHECK_PRG luacheck)
+
include(InstallHelpers)
file(GLOB MANPAGES
@@ -411,3 +457,11 @@ if(BUSTED_PRG)
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
DEPENDS ${BENCHMARK_PREREQS})
endif()
+
+if(LUACHECK_PRG)
+ add_custom_target(testlint
+ COMMAND ${CMAKE_COMMAND}
+ -DLUACHECK_PRG=${LUACHECK_PRG}
+ -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test
+ -P ${PROJECT_SOURCE_DIR}/cmake/RunTestsLint.cmake)
+endif()