external_argon_transformer.cmake 7.11 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

# 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
33 34 35 36 37
    if (DEFINED CUSTOM_ARGON_TRANSFORMER_GIT_REPOSITORY)
        set(ARGON_TRANSFORMER_GIT_REPOSITORY ${CUSTOM_ARGON_TRANSFORMER_GIT_REPOSITORY})
    else()
        set(ARGON_TRANSFORMER_GIT_REPOSITORY git@github.com:NervanaSystems/argon-transformer.git)
    endif()
38 39 40 41 42

    # 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
43
    #   where the following `ARGON_TRANSFORMER_GIT_TAG` is set and build ngraph with argon using this
44 45 46
    #   commit.
    # - After we have ngraph CI job for argon transformer, ngraph master will be compatible with
    #   argon transformer guaranteed by CI.
47
    set(ARGON_TRANSFORMER_GIT_TAG cpp-master)
48 49

    # Determines where argon-transformer will be located
50
    set(ARGON_TRANSFORMER_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/argon_transformer)
51 52 53 54 55 56 57 58 59 60 61 62

    # 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}
63
                PREFIX ${ARGON_TRANSFORMER_PREFIX}
64
                UPDATE_COMMAND ""
65 66 67 68 69
                CMAKE_ARGS
                        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
                        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
                        -DNGRAPH_INSTALL_PREFIX=${ARGON_TRANSFORMER_PREFIX}
70 71
                        -DPREBUILD_ARGON_API_PATH=${NGRAPH_PREBUILD_ARGON_API_PATH}
                        -DEXTERNAL_NGRAPH_INCLUDE_DIR=${NGRAPH_INCLUDE_PATH}
Yixing Lao's avatar
Yixing Lao committed
72
                        -DINSTALLED_HEADERS_PATH=${CMAKE_INSTALL_PREFIX}/include
73
                        -DMKLDNN_INCLUDE_DIR=${MKLDNN_INCLUDE_DIR}
74 75 76 77 78
                BUILD_ALWAYS 1
            )
        else()
            ExternalProject_Add(
                ext_argon_transformer
79 80 81
                GIT_REPOSITORY ${ARGON_TRANSFORMER_GIT_REPOSITORY}
                GIT_TAG ${ARGON_TRANSFORMER_GIT_TAG}
                PREFIX ${ARGON_TRANSFORMER_PREFIX}
82
                UPDATE_COMMAND ""
83 84 85 86 87
                CMAKE_ARGS
                        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
                        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
                        -DNGRAPH_INSTALL_PREFIX=${ARGON_TRANSFORMER_PREFIX}
88 89
                        -DPREBUILD_ARGON_API_PATH=${NGRAPH_PREBUILD_ARGON_API_PATH}
                        -DEXTERNAL_NGRAPH_INCLUDE_DIR=${NGRAPH_INCLUDE_PATH}
Yixing Lao's avatar
Yixing Lao committed
90
                        -DINSTALLED_HEADERS_PATH=${CMAKE_INSTALL_PREFIX}/include
91
                        -DMKLDNN_INCLUDE_DIR=${MKLDNN_INCLUDE_DIR}
92 93 94 95 96 97 98 99
                BUILD_ALWAYS 1
            )
        endif()
    else()
        if (DEFINED CUSTOM_ARGON_TRANSFORMER_DIR)
            ExternalProject_Add(
                ext_argon_transformer
                SOURCE_DIR ${CUSTOM_ARGON_TRANSFORMER_DIR}
100
                PREFIX ${ARGON_TRANSFORMER_PREFIX}
101
                UPDATE_COMMAND ""
102 103 104 105 106
                CMAKE_ARGS
                        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
                        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
                        -DNGRAPH_INSTALL_PREFIX=${ARGON_TRANSFORMER_PREFIX}
107 108
                        -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
                        -DMKLDNN_INCLUDE_DIR=${MKLDNN_INCLUDE_DIR}
                BUILD_BYPRODUCTS ${ARGON_TRANSFORMER_PREFIX}
112 113 114 115 116
                BUILD_ALWAYS 1
            )
        else()
            ExternalProject_Add(
                ext_argon_transformer
117 118 119
                GIT_REPOSITORY ${ARGON_TRANSFORMER_GIT_REPOSITORY}
                GIT_TAG ${ARGON_TRANSFORMER_GIT_TAG}
                PREFIX ${ARGON_TRANSFORMER_PREFIX}
120
                UPDATE_COMMAND ""
121 122 123 124 125
                CMAKE_ARGS
                        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
                        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
                        -DNGRAPH_INSTALL_PREFIX=${ARGON_TRANSFORMER_PREFIX}
126 127
                        -DPREBUILD_ARGON_API_PATH=${NGRAPH_PREBUILD_ARGON_API_PATH}
                        -DEXTERNAL_NGRAPH_INCLUDE_DIR=${NGRAPH_INCLUDE_PATH}
Yixing Lao's avatar
Yixing Lao committed
128
                        -DINSTALLED_HEADERS_PATH=${CMAKE_INSTALL_PREFIX}/include
129 130
                        -DMKLDNN_INCLUDE_DIR=${MKLDNN_INCLUDE_DIR}
                BUILD_BYPRODUCTS ${ARGON_TRANSFORMER_PREFIX}
131 132 133 134 135 136
                BUILD_ALWAYS 1
            )
        endif()
    endif()

    ExternalProject_Get_Property(ext_argon_transformer source_dir)
137
    set(ARGON_TRANSFORMER_SOURCE_DIR ${source_dir} PARENT_SCOPE)
138 139
    set(ARGON_TRANSFORMER_INCLUDE_DIR ${ARGON_TRANSFORMER_PREFIX}/include PARENT_SCOPE)
    set(ARGON_TRANSFORMER_LIB_DIR ${ARGON_TRANSFORMER_PREFIX}/lib PARENT_SCOPE)
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
    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()