#
# 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: /path to/incubator-singa/
  git_url: https://github.com/apache/incubator-singa.git

build:
  number: 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
