| # 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 ${CMAKE_SYSROOT}) |
| |
| 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) |