123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- # This is not meant to be included by the top-level.
- cmake_minimum_required(VERSION 3.16)
- project(NVIM_DEPS C)
- if(POLICY CMP0135)
- cmake_policy(SET CMP0135 NEW)
- endif()
- # Point CMake at any custom modules we may ship
- list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${PROJECT_SOURCE_DIR}/../cmake")
- include(CheckCCompilerFlag)
- include(ExternalProject)
- include(FindPackageHandleStandardArgs)
- include(Deps)
- include(Find)
- include(Util)
- #-------------------------------------------------------------------------------
- # User settings
- #-------------------------------------------------------------------------------
- set(DEPS_IGNORE_SHA FALSE)
- # Options
- option(USE_BUNDLED "Use bundled dependencies." ON)
- option(USE_BUNDLED_LIBUV "Use the bundled libuv." ${USE_BUNDLED})
- option(USE_BUNDLED_LPEG "Use the bundled lpeg." ${USE_BUNDLED})
- # PUC Lua is only used for tests, unless explicitly requested.
- option(USE_BUNDLED_LUA "Use the bundled version of lua." OFF)
- option(USE_BUNDLED_LUAJIT "Use the bundled version of luajit." ${USE_BUNDLED})
- option(USE_BUNDLED_LUV "Use the bundled version of luv." ${USE_BUNDLED})
- option(USE_BUNDLED_TS "Use the bundled treesitter runtime." ${USE_BUNDLED})
- option(USE_BUNDLED_TS_PARSERS "Use the bundled treesitter parsers." ${USE_BUNDLED})
- option(USE_BUNDLED_UNIBILIUM "Use the bundled unibilium." ${USE_BUNDLED})
- option(USE_BUNDLED_UTF8PROC "Use the bundled utf8proc library." ${USE_BUNDLED})
- if(USE_BUNDLED AND MSVC)
- option(USE_BUNDLED_GETTEXT "Use the bundled version of gettext." ON)
- option(USE_BUNDLED_LIBICONV "Use the bundled version of libiconv." ON)
- else()
- option(USE_BUNDLED_GETTEXT "Use the bundled version of gettext." OFF)
- option(USE_BUNDLED_LIBICONV "Use the bundled version of libiconv." OFF)
- endif()
- option(ENABLE_WASMTIME "Use treesitter with wasmtime support." OFF)
- if(ENABLE_WASMTIME)
- if(USE_BUNDLED)
- option(USE_BUNDLED_WASMTIME "Use the bundled wasmtime." ON)
- else()
- option(USE_BUNDLED_WASMTIME "Use the bundled wasmtime." OFF)
- endif()
- endif()
- if(NOT ENABLE_WASMTIME AND USE_BUNDLED_WASMTIME)
- message(FATAL_ERROR "ENABLE_WASMTIME is set to OFF while USE_BUNDLED_WASMTIME is set to ON.\
- You need set ENABLE_WASMTIME to ON if you want to use wasmtime.")
- endif()
- option(USE_EXISTING_SRC_DIR "Skip download of deps sources in case of existing source directory." OFF)
- set_default_buildtype(Release)
- get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
- if(NOT isMultiConfig)
- list(APPEND DEPS_CMAKE_ARGS -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
- endif()
- set(DEFAULT_MAKE_CFLAGS CFLAGS+=-g)
- check_c_compiler_flag(-Og HAS_OG_FLAG)
- if(HAS_OG_FLAG)
- set(DEFAULT_MAKE_CFLAGS CFLAGS+=-Og ${DEFAULT_MAKE_CFLAGS})
- endif()
- set(DEPS_INCLUDE_FLAGS "-I${DEPS_INSTALL_DIR}/include -I${DEPS_INSTALL_DIR}/include/luajit-2.1")
- # If the macOS deployment target is not set manually (via $MACOSX_DEPLOYMENT_TARGET),
- # fall back to local system version. Needs to be done here and in top-level CMakeLists.txt.
- if(APPLE)
- if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
- execute_process(COMMAND sw_vers -productVersion
- OUTPUT_VARIABLE MACOS_VERSION
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- set(CMAKE_OSX_DEPLOYMENT_TARGET "${MACOS_VERSION}")
- endif()
- message(STATUS "Using deployment target ${CMAKE_OSX_DEPLOYMENT_TARGET}")
- endif()
- if(USE_BUNDLED_LUAJIT)
- set(LUA_ENGINE LuaJit)
- elseif(USE_BUNDLED_LUA)
- set(LUA_ENGINE Lua)
- else()
- find_package(Luajit)
- find_package(Lua 5.1 EXACT)
- if(LUAJIT_FOUND)
- set(LUA_ENGINE LuaJit)
- string(APPEND DEPS_INCLUDE_FLAGS " -I${LUAJIT_INCLUDE_DIR}")
- elseif(LUA_FOUND)
- set(LUA_ENGINE Lua)
- string(APPEND DEPS_INCLUDE_FLAGS " -I${LUA_INCLUDE_DIR}")
- else()
- message(FATAL_ERROR "Could not find system lua or luajit")
- endif()
- endif()
- if(USE_BUNDLED_UNIBILIUM)
- include(BuildUnibilium)
- endif()
- if(USE_BUNDLED_LIBUV)
- include(BuildLibuv)
- endif()
- if(USE_BUNDLED_LUAJIT)
- include(BuildLuajit)
- endif()
- if(USE_BUNDLED_LUA)
- include(BuildLua)
- endif()
- if(USE_BUNDLED_LUV)
- include(BuildLuv)
- endif()
- if(USE_BUNDLED_LPEG)
- include(BuildLpeg)
- endif()
- if(USE_BUNDLED_GETTEXT)
- include(BuildGettext)
- endif()
- if(USE_BUNDLED_LIBICONV)
- include(BuildLibiconv)
- endif()
- if(USE_BUNDLED_TS_PARSERS)
- include(BuildTreesitterParsers)
- endif()
- if(USE_BUNDLED_WASMTIME)
- include(BuildWasmtime)
- endif()
- if(USE_BUNDLED_TS)
- include(BuildTreesitter)
- endif()
- if(USE_BUNDLED_UTF8PROC)
- include(BuildUTF8proc)
- endif()
- if(WIN32)
- include(GetBinaryDeps)
- GetExecutable(TARGET cat)
- GetExecutable(TARGET tee)
- GetExecutable(TARGET xxd)
- GetBinaryDep(TARGET win32yank_X86_64
- INSTALL_COMMAND ${CMAKE_COMMAND} -E copy win32yank.exe ${DEPS_BIN_DIR})
- endif()
|