external_argon_transformer.cmake 6.2 KB
Newer Older
1
# ******************************************************************************
2 3
# Copyright 2017-2018 Intel Corporation
#
4 5 6 7 8 9 10 11 12 13 14
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
15
# ******************************************************************************
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

# To build ngraph with Argon transformer using pre-build Argon API
# ```
# cmake -DNGRAPH_ARGON_ENABLE=True -DNGRAPH_PREBUILD_ARGON_API_PATH=$HOME/dev/system/_out/debug-x86_64-Linux ..
# make -j
# ```

# Enable ExternalProject CMake module
include(ExternalProject)

if (NGRAPH_ARGON_ENABLE)
    # We require pre-build Argon API library
    if (NOT DEFINED NGRAPH_PREBUILD_ARGON_API_PATH)
        message(FATAL_ERROR "NGRAPH_PREBUILD_ARGON_API_PATH not defined, set it with -DNGRAPH_PREBUILD_ARGON_API_PATH=")
    endif()

    # Repository
    set(ARGON_TRANSFORMER_CMAKE_GIT_REPOSITORY git@github.com:NervanaSystems/argon-transformer.git)

    # Set argon_transformer tag
    # Notes:
    # - Before we have ngraph CI job for argon transformer, ngraph master might not be
    #   compatible with argon transformer. To ensure compatibility, checkout the ngraph commit point
    #   where the following `ARGON_TRANSFORMER_CMAKE_GIT_TAG` is set and build ngraph with argon using this
    #   commit.
    # - After we have ngraph CI job for argon transformer, ngraph master will be compatible with
    #   argon transformer guaranteed by CI.
    set(ARGON_TRANSFORMER_CMAKE_GIT_TAG cpp-master)

    # Determines where argon-transformer will be located
    set(ARGON_TRANSFORMER_CMAKE_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/argon_transformer)

    # Print
    message(STATUS "NGRAPH_INCLUDE_PATH: ${NGRAPH_INCLUDE_PATH}")
    message(STATUS "LLVM_INCLUDE_DIR: ${LLVM_INCLUDE_DIR}")
    message(STATUS "NGRAPH_PREBUILD_ARGON_API_PATH: ${NGRAPH_PREBUILD_ARGON_API_PATH}")

    # The 'BUILD_BYPRODUCTS' argument was introduced in CMake 3.2
    if (${CMAKE_VERSION} VERSION_LESS 3.2)
        if (DEFINED CUSTOM_ARGON_TRANSFORMER_DIR)
            ExternalProject_Add(
                ext_argon_transformer
                SOURCE_DIR ${CUSTOM_ARGON_TRANSFORMER_DIR}
                PREFIX ${ARGON_TRANSFORMER_CMAKE_PREFIX}
                UPDATE_COMMAND ""
                CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                        -DNGRAPH_INSTALL_PREFIX=${ARGON_TRANSFORMER_CMAKE_PREFIX}
                        -DPREBUILD_ARGON_API_PATH=${NGRAPH_PREBUILD_ARGON_API_PATH}
                        -DEXTERNAL_NGRAPH_INCLUDE_DIR=${NGRAPH_INCLUDE_PATH}
Yixing Lao's avatar
Yixing Lao committed
65
                        -DINSTALLED_HEADERS_PATH=${CMAKE_INSTALL_PREFIX}/include
66 67 68 69 70 71 72 73 74 75 76 77 78
                BUILD_ALWAYS 1
            )
        else()
            ExternalProject_Add(
                ext_argon_transformer
                GIT_REPOSITORY ${ARGON_TRANSFORMER_CMAKE_GIT_REPOSITORY}
                GIT_TAG ${ARGON_TRANSFORMER_CMAKE_GIT_TAG}
                PREFIX ${ARGON_TRANSFORMER_CMAKE_PREFIX}
                UPDATE_COMMAND ""
                CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                        -DNGRAPH_INSTALL_PREFIX=${ARGON_TRANSFORMER_CMAKE_PREFIX}
                        -DPREBUILD_ARGON_API_PATH=${NGRAPH_PREBUILD_ARGON_API_PATH}
                        -DEXTERNAL_NGRAPH_INCLUDE_DIR=${NGRAPH_INCLUDE_PATH}
Yixing Lao's avatar
Yixing Lao committed
79
                        -DINSTALLED_HEADERS_PATH=${CMAKE_INSTALL_PREFIX}/include
80 81 82 83 84 85 86 87 88 89 90 91 92 93
                BUILD_ALWAYS 1
            )
        endif()
    else()
        if (DEFINED CUSTOM_ARGON_TRANSFORMER_DIR)
            ExternalProject_Add(
                ext_argon_transformer
                SOURCE_DIR ${CUSTOM_ARGON_TRANSFORMER_DIR}
                PREFIX ${ARGON_TRANSFORMER_CMAKE_PREFIX}
                UPDATE_COMMAND ""
                CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                        -DNGRAPH_INSTALL_PREFIX=${ARGON_TRANSFORMER_CMAKE_PREFIX}
                        -DPREBUILD_ARGON_API_PATH=${NGRAPH_PREBUILD_ARGON_API_PATH}
                        -DEXTERNAL_NGRAPH_INCLUDE_DIR=${NGRAPH_INCLUDE_PATH}
Yixing Lao's avatar
Yixing Lao committed
94
                        -DINSTALLED_HEADERS_PATH=${CMAKE_INSTALL_PREFIX}/include
95 96 97 98 99 100 101 102 103 104 105 106 107 108
                BUILD_BYPRODUCTS ${ARGON_TRANSFORMER_CMAKE_PREFIX}
                BUILD_ALWAYS 1
            )
        else()
            ExternalProject_Add(
                ext_argon_transformer
                GIT_REPOSITORY ${ARGON_TRANSFORMER_CMAKE_GIT_REPOSITORY}
                GIT_TAG ${ARGON_TRANSFORMER_CMAKE_GIT_TAG}
                PREFIX ${ARGON_TRANSFORMER_CMAKE_PREFIX}
                UPDATE_COMMAND ""
                CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                        -DNGRAPH_INSTALL_PREFIX=${ARGON_TRANSFORMER_CMAKE_PREFIX}
                        -DPREBUILD_ARGON_API_PATH=${NGRAPH_PREBUILD_ARGON_API_PATH}
                        -DEXTERNAL_NGRAPH_INCLUDE_DIR=${NGRAPH_INCLUDE_PATH}
Yixing Lao's avatar
Yixing Lao committed
109
                        -DINSTALLED_HEADERS_PATH=${CMAKE_INSTALL_PREFIX}/include
110 111 112 113 114 115 116
                BUILD_BYPRODUCTS ${ARGON_TRANSFORMER_CMAKE_PREFIX}
                BUILD_ALWAYS 1
            )
        endif()
    endif()

    ExternalProject_Get_Property(ext_argon_transformer source_dir)
117
    set(ARGON_TRANSFORMER_SOURCE_DIR ${source_dir} PARENT_SCOPE)
Yixing Lao's avatar
Yixing Lao committed
118
    set(ARGON_TRANSFORMER_INCLUDE_DIR ${ARGON_TRANSFORMER_CMAKE_PREFIX}/include PARENT_SCOPE)
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
    set(ARGON_TRANSFORMER_LIB_DIR ${ARGON_TRANSFORMER_CMAKE_PREFIX}/lib PARENT_SCOPE)
    set(ARGON_API_INCLUDE_DIR ${NGRAPH_PREBUILD_ARGON_API_PATH}/include PARENT_SCOPE)
    set(ARGON_API_LIB_DIR ${NGRAPH_PREBUILD_ARGON_API_PATH}/lib) # Used by find_library below
    set(ARGON_API_LIB_DIR ${NGRAPH_PREBUILD_ARGON_API_PATH}/lib PARENT_SCOPE)

    # Find prebuild argon library
    find_library(ARGON_API_LIBS
        NAMES
        argon_api
        optimizer
        ir_builder
        umd
        flex
        disasm
        HINTS
        ${ARGON_API_LIB_DIR}
        $ENV{LD_LIBRARY_PATH}
    )

endif()