mirror of
https://github.com/facebook/sapling.git
synced 2024-12-25 05:53:24 +03:00
353e248dd4
Summary: Update the CMake build to emit a LIBRARY_DEP_DIRS.txt file in the build output directory. This file should contain additional directories that may contain runtime library dependencies for the generated build artifacts, one directory per line. This file will be parsed by getdeps.py so that it can set `$PATH` properly when running tests in order to find all of the necessary library dependencies. At the moment the runtime location of the Python DLL is the main thing that needs to be stored in this directory. CMake can find the Python location from the registry, even if that location is not in the user's `$PATH`. On its own getdeps.py won't be able to find the location of the Python DLL unless we explicitly give it this information through this file. Reviewed By: wez Differential Revision: D20688289 fbshipit-source-id: 078d07d860de8604c97bf6adede464c0d95fc079
110 lines
3.6 KiB
CMake
110 lines
3.6 KiB
CMake
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2.
|
|
|
|
# The add_fbthrift_library() calls require CMake 3.8+
|
|
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
|
|
# We use the GoogleTest module if it is available (only in CMake 3.9+)
|
|
# It requires CMP0054 and CMP0057 to be enabled.
|
|
if (POLICY CMP0054)
|
|
cmake_policy(SET CMP0054 NEW)
|
|
endif()
|
|
if (POLICY CMP0057)
|
|
cmake_policy(SET CMP0057 NEW)
|
|
endif()
|
|
|
|
# Project information
|
|
project("eden" LANGUAGES CXX C)
|
|
|
|
# Tell CMake to also look in the directories where getdeps.py installs
|
|
# our third-party dependencies.
|
|
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/install")
|
|
|
|
# CMake include directories
|
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake"
|
|
# For shipit-transformed builds
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/build/fbcode_builder/CMake"
|
|
${CMAKE_MODULE_PATH})
|
|
|
|
include_directories(
|
|
${CMAKE_SOURCE_DIR}
|
|
${CMAKE_BINARY_DIR}
|
|
)
|
|
|
|
if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/external/osxfuse")
|
|
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/external/osxfuse/common")
|
|
else()
|
|
find_path(OSXFUSE_INCLUDE_DIR NAMES "fuse_ioctl.h")
|
|
if (OSXFUSE_INCLUDE_DIR)
|
|
include_directories(${OSXFUSE_INCLUDE_DIR})
|
|
endif()
|
|
endif()
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
# Configuration options
|
|
set(ENABLE_EDENSCM AUTO CACHE STRING "Enable support for Eden SCM repositories")
|
|
set_property(CACHE ENABLE_EDENSCM PROPERTY STRINGS AUTO ON OFF)
|
|
set(ENABLE_GIT AUTO CACHE STRING "Enable support for Git repositories")
|
|
set_property(CACHE ENABLE_GIT PROPERTY STRINGS AUTO ON OFF)
|
|
|
|
if (NOT WIN32)
|
|
include(CompilerSettingsUnix)
|
|
endif()
|
|
include(EdenConfigChecks)
|
|
include(FBPythonBinary)
|
|
include(FBThriftLibrary)
|
|
include(RustStaticLibrary)
|
|
|
|
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
set_property(
|
|
DIRECTORY
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
APPEND
|
|
PROPERTY
|
|
COMPILE_DEFINITIONS
|
|
"FOLLY_XLOG_STRIP_PREFIXES=\"${CMAKE_SOURCE_DIR}:${CMAKE_BINARY_DIR}\""
|
|
)
|
|
add_subdirectory(eden/fs)
|
|
add_subdirectory(eden/integration)
|
|
add_subdirectory(eden/scm/edenscm/hgext/extlib)
|
|
add_subdirectory(eden/scm/edenscm/mercurial)
|
|
add_subdirectory(eden/scm/lib)
|
|
add_subdirectory(eden/test_support)
|
|
add_subdirectory(eden/scm/exec/eden_apfs_mount_helper)
|
|
|
|
if(WIN32)
|
|
# On Windows our Python binaries are compiled into executables which depend
|
|
# on Python. They need to be able to find the correct Python DLL at runtime.
|
|
# If INSTALL_PYTHON_LIB is enabled we will copy the correct Python DLL into
|
|
# Eden's installation directory so that our programs can easily find the
|
|
# right Python library.
|
|
#
|
|
# It might be nice if we could link against Python statically. The
|
|
# FindPython3.cmake module does support a Python3_USE_STATIC_LIBS variable,
|
|
# but unfortunately it is ignored on Windows.
|
|
set(
|
|
INSTALL_PYTHON_LIB FALSE CACHE BOOL
|
|
"Install the Python DLL in Eden's bin/ directory."
|
|
)
|
|
if(INSTALL_PYTHON_LIB)
|
|
get_target_property(python_dll Python3::Python LOCATION)
|
|
install(FILES "${python_dll}" DESTINATION bin)
|
|
endif()
|
|
|
|
# Also a emit a file listing additional directories containing runtime
|
|
# library dependencies. On Windows this is needed to help figure out runtime
|
|
# dependencies needed to run the generated build artifacts. This file can be
|
|
# processed by getdeps.py
|
|
get_filename_component(python_dll_dir "${python_dll}" DIRECTORY)
|
|
file(TO_NATIVE_PATH "${python_dll_dir}" python_dll_dir)
|
|
file(WRITE "${CMAKE_BINARY_DIR}/LIBRARY_DEP_DIRS.txt" "${python_dll_dir}\n")
|
|
endif()
|
|
|
|
configure_file(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/CMake/eden-config.h.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/eden/fs/eden-config.h
|
|
)
|