#  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.


build --genrule_strategy=standalone
build --host_force_python=PY2
build --ignore_unsupported_sandboxing
build --spawn_strategy=standalone
build --workspace_status_command scripts/release/status.sh

# For centos
# To use it: bazel build --config=centos
build:centos --experimental_action_listener=tools/cpp:compile_cpp
build:centos --experimental_action_listener=tools/java:compile_java
build:centos --experimental_action_listener=tools/python:compile_python
build:centos --genrule_strategy=standalone
build:centos --ignore_unsupported_sandboxing
build:centos --linkopt -lm
build:centos --linkopt -lpthread
build:centos --linkopt -lrt
build:centos --spawn_strategy=standalone
build:centos --workspace_status_command scripts/release/status.sh

# For debian
# To use it: bazel build --config=debian
build:debian --experimental_action_listener=tools/cpp:compile_cpp
build:debian --experimental_action_listener=tools/java:compile_java
build:debian --experimental_action_listener=tools/python:compile_python
build:debian --genrule_strategy=standalone
build:debian --ignore_unsupported_sandboxing
build:debian --linkopt -lm
build:debian --linkopt -lpthread
build:debian --linkopt -lrt
build:debian --spawn_strategy=standalone
build:debian --workspace_status_command scripts/release/status.sh

# For Mac
# To use it: bazel build --config=darwin
build:darwin --experimental_action_listener=tools/cpp:compile_cpp
build:darwin --experimental_action_listener=tools/java:compile_java
build:darwin --experimental_action_listener=tools/python:compile_python
build:darwin --genrule_strategy=standalone
build:darwin --ignore_unsupported_sandboxing
build:darwin --spawn_strategy=standalone
build:darwin --workspace_status_command scripts/release/status.sh

# For Ubuntu
# To use it: bazel build --config=ubuntu
build:ubuntu --experimental_action_listener=tools/java:compile_java
build:ubuntu --experimental_action_listener=tools/cpp:compile_cpp
build:ubuntu --experimental_action_listener=tools/python:compile_python
build:ubuntu --genrule_strategy=standalone
build:ubuntu --ignore_unsupported_sandboxing
build:ubuntu --linkopt -lm
build:ubuntu --linkopt -lpthread
build:ubuntu --linkopt -lrt
build:ubuntu --spawn_strategy=standalone
build:ubuntu --workspace_status_command scripts/release/status.sh


### Disabled checkstyle

# For centos
# To use it: bazel build --config=centos_nostyle
build:centos_nostyle --genrule_strategy=standalone
build:centos_nostyle --ignore_unsupported_sandboxing
build:centos_nostyle --linkopt -lm
build:centos_nostyle --linkopt -lpthread
build:centos_nostyle --linkopt -lrt
build:centos_nostyle --spawn_strategy=standalone
build:centos_nostyle --workspace_status_command scripts/release/status.sh

# For debian
# To use it: bazel build --config=debian_nostyle
build:debian_nostyle --genrule_strategy=standalone
build:debian_nostyle --ignore_unsupported_sandboxing
build:debian_nostyle --linkopt -lm
build:debian_nostyle --linkopt -lpthread
build:debian_nostyle --linkopt -lrt
build:debian_nostyle --spawn_strategy=standalone
build:debian_nostyle --workspace_status_command scripts/release/status.sh

# For Mac
# To use it: bazel build --config=darwin_nostyle
build:darwin_nostyle --genrule_strategy=standalone
build:darwin_nostyle --ignore_unsupported_sandboxing
build:darwin_nostyle --spawn_strategy=standalone
build:darwin_nostyle --workspace_status_command scripts/release/status.sh

# For Ubuntu
# To use it: bazel build --config=ubuntu_nostyle
build:ubuntu_nostyle --genrule_strategy=standalone
build:ubuntu_nostyle --ignore_unsupported_sandboxing
build:ubuntu_nostyle --linkopt -lm
build:ubuntu_nostyle --linkopt -lpthread
build:ubuntu_nostyle --linkopt -lrt
build:ubuntu_nostyle --spawn_strategy=standalone
build:ubuntu_nostyle --workspace_status_command scripts/release/status.sh
