#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
#

package:
  name: singa
  version: "{{ GIT_DESCRIBE_TAG }}"

source:
  # path: ../../../
  git_url: https://github.com/apache/incubator-singa.git

build:
  number: 0
  script_env:
    - CUDA   # E.g., export CUDA=9.0
  string: {{ build_str }}
  # py{{py}}_{{ environ.get('BUILD_STR', 'cpu') }}

requirements:
  build:
    - {{ compiler('cxx') }}
    - {{ compiler('c') }}
    - cmake >=3.12.2
    - make # [unix]

  host:
    - swig 3.0.12
    - openblas 0.3.3
    - protobuf 3.4.0
    - glog 0.3.5
    - python 3.6*
    - numpy 1.16.0
    - cudnn {{ cudnn }}       # ['cudnn' in str(build_str)]
    - mkl-dnn {{ mkldnn }}

  run:
    - {{ pin_compatible('libopenblas', max_pin='x.x') }}
    - {{ pin_compatible('libprotobuf', max_pin='x.x') }}
    - {{ pin_compatible('glog', max_pin='x.x') }}
    - {{ pin_compatible('numpy', max_pin='x.x') }}
    - {{ pin_compatible('mkl-dnn', max_pin='x.x') }}
    - cudnn {{ cudnn }}       # ['cudnn' in str(build_str)]
    - python 3.6*
    - pillow
    - future
    - tqdm
    - onnx >=1.3.0


test:
  source_files:
    - test/python/*.py
  test:
    - python run.py

about:
  home: http://singa.apache.org/
  license: Apache V2
  license_file: LICENSE
  summary: SINGA is an Apache Incubating project for providing distributed deep learning. Apache disclaimers http://singa.apache.org/en/index.html#disclaimers
