blob: 9adfac0a5198bfcd4a859ac786424c4f3d9fa117 [file] [log] [blame]
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
cmake_minimum_required(VERSION 3.13.4)
if(NOT FUCHSIA_SOURCE_DIR)
get_filename_component(FUCHSIA_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
endif()
string(TOLOWER ${CMAKE_HOST_SYSTEM_PROCESSOR} HOST_CPU)
if(HOST_CPU STREQUAL "x86_64")
set(HOST_CPU "x64")
elseif(HOST_CPU STREQUAL "aarch64")
set(HOST_CPU "arm64")
endif()
string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} HOST_OS)
if(HOST_OS STREQUAL "darwin")
set(HOST_OS "mac")
endif()
set(HOST_PLATFORM "${HOST_OS}-${HOST_CPU}")
set(CLANG_PREFIX "${FUCHSIA_SOURCE_DIR}/prebuilt/third_party/clang/${HOST_PLATFORM}/bin")
set(GOMA_DIR "${FUCHSIA_SOURCE_DIR}/prebuilt/third_party/goma/${HOST_PLATFORM}")
set(PYTHON_DIR "${FUCHSIA_SOURCE_DIR}/prebuilt/third_party/python3/${HOST_PLATFORM}")
if(NOT CLANG_TARGET)
exec_program("${CLANG_PREFIX}/clang" ARGS --version OUTPUT_VARIABLE CLANG_VERSION)
if("${CLANG_VERSION}" MATCHES "Target: ([A-Za-z0-9._-]+)")
set(CLANG_TARGET "${CMAKE_MATCH_1}")
else()
message(FATAL_ERROR "Could not determine CLANG_TARGET")
endif()
endif()
if(NOT CMAKE_SYSROOT)
# NOTE: Match compiler target to our prebuilt sysroot/linux/usr/lib/<target>/ directories.
if("${CLANG_TARGET}" MATCHES "(x86_64|aarch64|arm|i386)-(.*-)?linux(-gnu|-gnueabihf)?")
set(CMAKE_SYSROOT "${FUCHSIA_SOURCE_DIR}/prebuilt/third_party/sysroot/linux")
else()
message(FATAL_ERROR "No sysroot available for ${CLANG_TARGET}")
endif()
endif()
if(NOT CMAKE_SYSTEM_NAME)
if("${CLANG_TARGET}" MATCHES ".*-linux(-gnu)?")
set(SYSTEM_NAME "Linux")
elseif("${CLANG_TARGET}" MATCHES ".*-darwin")
set(SYSTEM_NAME "Darwin")
elseif("${CLANG_TARGET}" MATCHES ".*-fuchsia")
set(SYSTEM_NAME "Fuchsia")
else()
message(FATAL_ERROR "Could not determine system name")
endif()
# NOTE: We don't set this value if it matches host to avoid setting CMAKE_CROSSCOMPILING.
if(NOT SYSTEM_NAME STREQUAL CMAKE_HOST_SYSTEM_NAME)
set(CMAKE_SYSTEM_NAME ${SYSTEM_NAME})
endif()
endif()
if(NOT CMAKE_SYSTEM_PROCESSOR)
string(REGEX REPLACE "([A-Za-z0-9]*)-.*" "\\1" CMAKE_SYSTEM_PROCESSOR "${CLANG_TARGET}")
endif()
if(NOT CMAKE_SYSTEM_VERSION)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
# NOTE: This matches Debian jessie.
set(CMAKE_SYSTEM_VERSION "3.16.0")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# NOTE: This matches macOS High Sierra.
set(CMAKE_SYSTEM_VERSION "17.0.0")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Fuchsia")
set(CMAKE_SYSTEM_VERSION "1")
endif()
endif()
set(CMAKE_C_COMPILER "${CLANG_PREFIX}/clang")
set(CMAKE_C_CLANG_TARGET ${CLANG_TARGET} CACHE STRING "")
set(CMAKE_CXX_COMPILER "${CLANG_PREFIX}/clang++")
set(CMAKE_CXX_CLANG_TARGET ${CLANG_TARGET} CACHE STRING "")
set(CMAKE_ASM_COMPILER "${CLANG_PREFIX}/clang")
set(CMAKE_ASM_CLANG_TARGET ${CLANG_TARGET} CACHE STRING "")
set(CMAKE_ADDR2LINE "${CLANG_PREFIX}/llvm-addr2line" CACHE PATH "")
set(CMAKE_AR "${CLANG_PREFIX}/llvm-ar" CACHE PATH "")
set(CMAKE_LINKER "${CLANG_PREFIX}/ld.lld" CACHE PATH "")
set(CMAKE_LIPO "${CLANG_PREFIX}/llvm-lipo" CACHE PATH "")
set(CMAKE_NM "${CLANG_PREFIX}/llvm-nm" CACHE PATH "")
set(CMAKE_OBJCOPY "${CLANG_PREFIX}/llvm-objcopy" CACHE PATH "")
set(CMAKE_OBJDUMP "${CLANG_PREFIX}/llvm-objdump" CACHE PATH "")
set(CMAKE_RANLIB "${CLANG_PREFIX}/llvm-ranlib" CACHE PATH "")
set(CMAKE_READELF "${CLANG_PREFIX}/llvm-readelf" CACHE PATH "")
set(CMAKE_STRIP "${CLANG_PREFIX}/llvm-strip" CACHE PATH "")
if(USE_GOMA)
set(CMAKE_C_COMPILER_LAUNCHER "${GOMA_DIR}/gomacc" CACHE PATH "")
set(CMAKE_CXX_COMPILER_LAUNCHER "${GOMA_DIR}/gomacc" CACHE PATH "")
set(CMAKE_ASM_COMPILER_LAUNCHER "${GOMA_DIR}/gomacc" CACHE PATH "")
endif()
set(Python3_ROOT_DIR "${PYTHON_DIR}" CACHE PATH "")
set(Python3_FIND_STRATEGY LOCATION CACHE STRING "")
set(Python3_FIND_REGISTRY NEVER CACHE STRING "")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)