Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 76 additions & 24 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -218,38 +218,88 @@ set(DEPS_VERSION 11)

option(USE_EXTERNAL_DEPS "Download or reuse dependencies from EXTERNAL_DEPS_DIR (mandatory for building and running NaCl .nexe binaries)." ON)

macro(set_deps_dir)
set(DEPS_DIR ${EXTERNAL_DEPS_DIR}/${DEPS_SYSTEM}-${DEPS_ARCH}-${DEPS_COMPILER}_${DEPS_VERSION})
endmacro()

set(DEFAULT_USE_EXTERNAL_DEPS_LIBS ON)

if (USE_EXTERNAL_DEPS AND NOT NACL)
set(EXTERNAL_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external_deps" CACHE STRING "Directory in which to store the downloaded dependencies.")

set(DEPS_EXT ".tar.xz")

set(DEPS_ARCH "${ARCH}")

if (MSVC)
set(DEPS_COMPILER msvc)
elseif (WIN32)
set(DEPS_COMPILER mingw)
else()
set(DEPS_COMPILER default)
endif()

if (WIN32)
set(DEPS_SYSTEM windows)
set(SUPPORTED_${DEPS_SYSTEM}_ARCH amd64 i686)
elseif (APPLE)
set(DEPS_SYSTEM macos)
set(SUPPORTED_${DEPS_SYSTEM}_ARCH amd64)
elseif (LINUX OR FREEBSD)

if (ARCH STREQUAL arm64)
set(DEPS_ARCH amd64)

set_deps_dir()

if (NOT EXISTS ${DEPS_DIR})
set(DEFAULT_USE_EXTERNAL_DEPS_LIBS OFF)
endif()
endif()
elseif (LINUX)
set(DEPS_SYSTEM linux)
set(SUPPORTED_${DEPS_SYSTEM}_ARCH amd64 i686 arm64 armhf)
endif()
elseif (FREEBSD)
set(DEPS_SYSTEM freebsd)
set(SUPPORTED_${DEPS_SYSTEM}_ARCH amd64 i686)

if (MSVC)
set(DEPS_COMPILER msvc)
elseif (WIN32)
set(DEPS_COMPILER mingw)
else()
set(DEPS_COMPILER default)
set_deps_dir()

if (NOT EXISTS ${DEPS_DIR})
set(DEFAULT_USE_EXTERNAL_DEPS_LIBS OFF)
set(DEPS_SYSTEM linux)
endif()
endif()

if (DEPS_SYSTEM AND ARCH IN_LIST SUPPORTED_${DEPS_SYSTEM}_ARCH)
set(DEPS_DIR ${EXTERNAL_DEPS_DIR}/${DEPS_SYSTEM}-${ARCH}-${DEPS_COMPILER}_${DEPS_VERSION})
set_deps_dir()

if (DEPS_SYSTEM AND DEPS_ARCH IN_LIST SUPPORTED_${DEPS_SYSTEM}_ARCH)
set(HAS_NACL ON)

if (DAEMON_PARENT_SCOPE_DIR)
set(DEPS_DIR ${DEPS_DIR} PARENT_SCOPE)
endif()
else()
message(WARNING "No dependencies are provided for this system, Native Client is likely unsupported.")
message(WARNING "No prebuilt dependencies are available for this platform, Native Client is likely unsupported.")

if (NOT EXISTS ${DEPS_DIR})
unset(DEPS_DIR)
endif()
endif()
endif()

option(USE_EXTERNAL_DEPS_LIBS "Build and link against libraries from the EXTERNAL_DEPS_DIR" ${DEFAULT_USE_EXTERNAL_DEPS_LIBS})

if (USE_EXTERNAL_DEPS AND NOT NACL)
if (DEPS_DIR)
message(STATUS "Using external deps dir: ${DEPS_DIR}")

if (USE_EXTERNAL_DEPS_LIBS)
message(STATUS "Building against libraries from external deps dir")
else()
message(STATUS "Not building against libraries from external deps dir")
endif()
else()
message(STATUS "Not using any external deps dir")
endif()
endif()

Expand Down Expand Up @@ -499,17 +549,19 @@ if (DEPS_DIR)
endif()
endif()

# Add to paths
set(CMAKE_FIND_ROOT_PATH ${DEPS_DIR} ${CMAKE_FIND_ROOT_PATH})
set(CMAKE_INCLUDE_PATH ${DEPS_DIR} ${DEPS_DIR}/include ${CMAKE_INCLUDE_PATH})
set(CMAKE_FRAMEWORK_PATH ${DEPS_DIR}/lib ${CMAKE_FRAMEWORK_PATH})
set(CMAKE_PREFIX_PATH ${DEPS_DIR} ${CMAKE_PREFIX_PATH})
if (DAEMON_PARENT_SCOPE_DIR)
# Also set parent scope so the top level CMakeLists can find precompiled deps
set(CMAKE_FIND_ROOT_PATH ${DEPS_DIR} ${CMAKE_FIND_ROOT_PATH} PARENT_SCOPE)
set(CMAKE_INCLUDE_PATH ${DEPS_DIR} ${DEPS_DIR}/include ${CMAKE_INCLUDE_PATH} PARENT_SCOPE)
set(CMAKE_FRAMEWORK_PATH ${DEPS_DIR} ${CMAKE_FRAMEWORK_PATH} PARENT_SCOPE)
set(CMAKE_PREFIX_PATH ${DEPS_DIR} ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
if (USE_EXTERNAL_DEPS_LIBS)
# Add to paths
set(CMAKE_FIND_ROOT_PATH ${DEPS_DIR} ${CMAKE_FIND_ROOT_PATH})
set(CMAKE_INCLUDE_PATH ${DEPS_DIR} ${DEPS_DIR}/include ${CMAKE_INCLUDE_PATH})
set(CMAKE_FRAMEWORK_PATH ${DEPS_DIR}/lib ${CMAKE_FRAMEWORK_PATH})
set(CMAKE_PREFIX_PATH ${DEPS_DIR} ${CMAKE_PREFIX_PATH})
if (DAEMON_PARENT_SCOPE_DIR)
# Also set parent scope so the top level CMakeLists can find precompiled deps
set(CMAKE_FIND_ROOT_PATH ${DEPS_DIR} ${CMAKE_FIND_ROOT_PATH} PARENT_SCOPE)
set(CMAKE_INCLUDE_PATH ${DEPS_DIR} ${DEPS_DIR}/include ${CMAKE_INCLUDE_PATH} PARENT_SCOPE)
set(CMAKE_FRAMEWORK_PATH ${DEPS_DIR} ${CMAKE_FRAMEWORK_PATH} PARENT_SCOPE)
set(CMAKE_PREFIX_PATH ${DEPS_DIR} ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
endif()
endif()
endif()

Expand Down Expand Up @@ -871,7 +923,7 @@ macro(AddApplicationInternal Target Executable)
add_executable(${Target} ${Sources})
target_link_libraries(${Target} ${A_Target}-objects ${CPP23SupportLibrary})

if (DEPS_DIR)
if (DEPS_DIR AND HAS_NACL)
add_dependencies(${Target} runtime_deps)
endif()

Expand Down Expand Up @@ -1024,7 +1076,7 @@ endif()
# Runtime dependencies
################################################################################

if (DEPS_DIR AND (BUILD_CLIENT OR BUILD_TTY_CLIENT OR BUILD_SERVER OR BUILD_DUMMY_APP))
if (DEPS_DIR AND HAS_NACL AND (BUILD_CLIENT OR BUILD_TTY_CLIENT OR BUILD_SERVER OR BUILD_DUMMY_APP))
add_custom_target(runtime_deps)
set_target_properties(runtime_deps PROPERTIES FOLDER "CMakePlumbing")

Expand Down
7 changes: 6 additions & 1 deletion cmake/DaemonFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,9 @@ elseif (NOT NACL)
set(GCC_GENERIC_ARCH "armv6")
# There is no generic tuning option for armv6.
unset(GCC_GENERIC_TUNE)
elseif (ARCH STREQUAL "riscv64")
unset(GCC_GENERIC_ARCH)
unset(GCC_GENERIC_TUNE)
else()
message(WARNING "Unknown architecture ${ARCH}")
endif()
Expand All @@ -642,7 +645,9 @@ elseif (NOT NACL)

option(USE_CPU_GENERIC_ARCHITECTURE "Enforce generic -march and -mtune compiler options" ON)
if (USE_CPU_GENERIC_ARCHITECTURE)
try_c_cxx_flag_werror(MARCH "-march=${GCC_GENERIC_ARCH}")
if (GCC_GENERIC_ARCH)
try_c_cxx_flag_werror(MARCH "-march=${GCC_GENERIC_ARCH}")
endif()

if (GCC_GENERIC_TUNE)
try_c_cxx_flag_werror(MTUNE "-mtune=${GCC_GENERIC_TUNE}")
Expand Down
Loading