release configs for msan + flags for sanitizers (#25)

- Move msan configs from experimental
- Add targets to generate the msan configs in configs/debian8_clang/BUILD
- add new configs to toolchains.bazelrc for sanitizers (msan, asan, tsan)
- Also refactor the docker_toolchain autoconf targets from rules->configs/debian8_clang/BUILD
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index 772549d..79e7f8d 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -11,7 +11,7 @@
     - "//test/configs:ubuntu-xenial-custom-bazel-version-autoconfig_test"
     - "//test/configs:ubuntu-xenial-custom-bazel-rc-version-autoconfig_test"
     - "//test/configs:debian8_clang_autoconfig_test"
-    - "//rules:debian8-clang-0.3.0-bazel_0.10.0-autoconfig_test"
+    - "//configs/debian8_clang:debian8-clang-0.3.0-bazel_0.10.0-autoconfig_test"
     - "//configs/experimental:msan-debian8-clang-0.3.0-bazel_0.11.0-autoconfig_test"
     - "//container/rbe-debian8:toolchain-test"
     - "//container/experimental/rbe-debian9:toolchain-test"
@@ -27,7 +27,7 @@
     - "//test/configs:ubuntu-xenial-custom-bazel-version-autoconfig_test"
     - "//test/configs:ubuntu-xenial-custom-bazel-rc-version-autoconfig_test"
     - "//test/configs:debian8_clang_autoconfig_test"
-    - "//rules:debian8-clang-0.3.0-bazel_0.10.0-autoconfig_test"
+    - "//configs/debian8_clang:debian8-clang-0.3.0-bazel_0.10.0-autoconfig_test"
     - "//configs/experimental:msan-debian8-clang-0.3.0-bazel_0.11.0-autoconfig_test"
     - "//container/rbe-debian8:toolchain-test"
     - "//container/experimental/rbe-debian9:toolchain-test"
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.11.0/msan/BUILD b/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/BUILD
similarity index 100%
rename from configs/experimental/debian8_clang/0.3.0/bazel_0.11.0/msan/BUILD
rename to configs/debian8_clang/0.3.0/bazel_0.11.0/msan/BUILD
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.11.0/msan/CROSSTOOL b/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/CROSSTOOL
similarity index 100%
rename from configs/experimental/debian8_clang/0.3.0/bazel_0.11.0/msan/CROSSTOOL
rename to configs/debian8_clang/0.3.0/bazel_0.11.0/msan/CROSSTOOL
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.11.0/msan/cc_wrapper.sh b/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/cc_wrapper.sh
similarity index 100%
rename from configs/experimental/debian8_clang/0.3.0/bazel_0.11.0/msan/cc_wrapper.sh
rename to configs/debian8_clang/0.3.0/bazel_0.11.0/msan/cc_wrapper.sh
diff --git a/configs/experimental/debian8_clang/0.3.0/bazel_0.11.0/msan/dummy_toolchain.bzl b/configs/debian8_clang/0.3.0/bazel_0.11.0/msan/dummy_toolchain.bzl
similarity index 100%
rename from configs/experimental/debian8_clang/0.3.0/bazel_0.11.0/msan/dummy_toolchain.bzl
rename to configs/debian8_clang/0.3.0/bazel_0.11.0/msan/dummy_toolchain.bzl
diff --git a/configs/debian8_clang/0.3.0/toolchain.bazelrc b/configs/debian8_clang/0.3.0/toolchain.bazelrc
index 1973067..05e73d6 100644
--- a/configs/debian8_clang/0.3.0/toolchain.bazelrc
+++ b/configs/debian8_clang/0.3.0/toolchain.bazelrc
@@ -3,3 +3,22 @@
 build:remote --javabase=@bazel_toolchains//configs/debian8_clang/0.3.0:jdk8
 build:remote --crosstool_top=@bazel_toolchains//configs/debian8_clang/0.3.0/bazel_0.10.0:toolchain
 build:remote --experimental_remote_platform_override='properties:{ name:"container-image" value:"docker://gcr.io/cloud-marketplace/google/rbe-debian8@sha256:1ede2a929b44d629ec5abe86eee6d7ffea1d5a4d247489a8867d46cfde3e38bd" }'
+
+# Experimental configs for sanitizers, use --config=remote,remote-xxsan,remote-<asan/tsan/msan> (in that order)
+build:remote-xxsan --copt=-gmlt
+build:remote-xxsan --strip=never
+
+build:remote-asan --copt=-fsanitize=address
+build:remote-asan --linkopt=-fsanitize=address
+
+build:remote-tsan --copt=-fsanitize=thread
+build:remote-tsan --linkopt=-fsanitize=thread
+
+build:remote-msan --copt=-fsanitize=memory
+build:remote-msan --linkopt=-fsanitize=memory
+build:remote-msan --cxxopt=--stdlib=libc++
+build:remote-msan --copt=-fsanitize-memory-track-origins
+build:remote-msan --host_crosstool_top=@bazel_toolchains//configs/debian8_clang/0.3.0/bazel_0.10.0:toolchain
+build:remote-msan --crosstool_top=@bazel_toolchains//configs/debian8_clang/0.3.0/bazel_0.11.0/msan:toolchain
+# TODO: experimental container to be removed once rbe-debian8 includes msan instrumented libc++
+build:remote --experimental_remote_platform_override='properties:{ name:"container-image" value:"docker://gcr.io/asci-toolchain/nosla-debian8-clang-msan@sha256:8f381d55c0456fb65821c90ada902c2584977e03a1eaca8fba8ce77e644c775b" }'
diff --git a/configs/debian8_clang/BUILD b/configs/debian8_clang/BUILD
new file mode 100644
index 0000000..0e567a5
--- /dev/null
+++ b/configs/debian8_clang/BUILD
@@ -0,0 +1,110 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# 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.
+
+licenses(["notice"])  # Apache 2.0
+
+package(default_visibility = ["//visibility:public"])
+
+load("@bazel_toolchains//rules:docker_config.bzl", "docker_toolchain_autoconfig")
+load("@bazel_toolchains//rules:environments.bzl", 
+    "clang_env",
+    "debian8_clang_default_keys",
+    "debian8_clang_default_packages",
+    "debian8_clang_default_repos"
+)
+
+# Created on 2017.10.18
+docker_toolchain_autoconfig(
+    name = "debian8-clang-0.2.0-bazel_0.7.0-autoconfig",
+    additional_repos = debian8_clang_default_repos(),
+    base = "@debian8-clang//image",
+    bazel_version = "0.7.0",
+    env = clang_env(),
+    keys = debian8_clang_default_keys(),
+    packages = debian8_clang_default_packages(),
+    tags = ["manual"],
+    test = False,
+)
+
+# Created on 2017.11.28
+docker_toolchain_autoconfig(
+    name = "debian8-clang-0.2.0-bazel_0.8.0-autoconfig",
+    additional_repos = debian8_clang_default_repos(),
+    base = "@debian8-clang//image",
+    bazel_version = "0.8.0",
+    env = clang_env(),
+    keys = debian8_clang_default_keys(),
+    packages = debian8_clang_default_packages(),
+    tags = ["manual"],
+    test = False,
+)
+
+# Created on 2018.01.10
+# Container: gcr.io/cloud-marketplace/google/clang-debian8@sha256:62ad7c44890792fdb2c2593fc24cfab7132e3a112d55bd453e09387906ae5e2f
+docker_toolchain_autoconfig(
+    name = "debian8-clang-0.2.0-bazel_0.9.0-autoconfig",
+    additional_repos = debian8_clang_default_repos(),
+    base = "@debian8-clang//image",
+    bazel_version = "0.9.0",
+    env = clang_env(),
+    keys = debian8_clang_default_keys(),
+    packages = debian8_clang_default_packages(),
+    tags = ["manual"],
+    test = False,
+)
+
+# Created on 2018.02.05
+# Container: gcr.io/cloud-marketplace/google/clang-debian8@sha256:e57978199c9eb156bd7f63773387f3a238adf61acd71c4942ad91da50b4f241f
+docker_toolchain_autoconfig(
+    name = "debian8-clang-0.2.0-bazel_0.10.0-autoconfig",
+    additional_repos = debian8_clang_default_repos(),
+    base = "@debian8-clang//image",
+    bazel_version = "0.10.0",
+    env = clang_env(),
+    keys = debian8_clang_default_keys(),
+    packages = debian8_clang_default_packages(),
+    tags = ["manual"],
+    test = False,
+)
+
+# Created on 2018.02.13
+# Container: gcr.io/cloud-marketplace/google/clang-debian8@sha256:ac3b1fdc22c0f2b95abe67f2daf33788425fab52d4e6845900bfe1a42443098f
+docker_toolchain_autoconfig(
+    name = "debian8-clang-0.3.0-bazel_0.10.0-autoconfig",
+    additional_repos = debian8_clang_default_repos(),
+    base = "@debian8-clang//image",
+    bazel_version = "0.10.0",
+    env = clang_env(),
+    keys = debian8_clang_default_keys(),
+    packages = debian8_clang_default_packages(),
+    tags = ["manual"],
+    test = True,
+)
+
+# Created on 2018.04.06
+# Container: gcr.io/cloud-marketplace/google/clang-debian8@sha256:ac3b1fdc22c0f2b95abe67f2daf33788425fab52d4e6845900bfe1a42443098f
+docker_toolchain_autoconfig(
+    name = "msan-debian8-clang-0.3.0-bazel_0.11.0-autoconfig",
+    additional_repos = debian8_clang_default_repos(),
+    base = "@debian8-clang//image",
+    bazel_version = "0.11.0",
+    env = clang_env() + {
+      "BAZEL_LINKOPTS": "-lc++:-lc++abi:-lm",
+    },
+    keys = debian8_clang_default_keys(),
+    packages = debian8_clang_default_packages(),
+    tags = ["manual"],
+    test = True,
+)
+
diff --git a/rules/BUILD b/rules/BUILD
index d2c15a3..c58757d 100644
--- a/rules/BUILD
+++ b/rules/BUILD
@@ -19,17 +19,11 @@
 exports_files([
     "install_bazel_head.sh",
     "install_bazel_version.sh",
+    "install_bazel_rc_version.sh",
     "docker_config.sh.tpl",
 ])
 
 load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
-load("@bazel_toolchains//rules:docker_config.bzl", "docker_toolchain_autoconfig")
-load("@bazel_toolchains//rules:environments.bzl", 
-    "clang_env",
-    "debian8_clang_default_keys",
-    "debian8_clang_default_packages",
-    "debian8_clang_default_repos"
-)
 
 pkg_tar(
     name = "cc-sample-project-tar",
@@ -39,71 +33,3 @@
     ],
 )
 
-# Created on 2017.10.18
-docker_toolchain_autoconfig(
-    name = "debian8-clang-0.2.0-bazel_0.7.0-autoconfig",
-    additional_repos = debian8_clang_default_repos(),
-    base = "@debian8-clang//image",
-    bazel_version = "0.7.0",
-    env = clang_env(),
-    keys = debian8_clang_default_keys(),
-    packages = debian8_clang_default_packages(),
-    tags = ["manual"],
-    test = False,
-)
-
-# Created on 2017.11.28
-docker_toolchain_autoconfig(
-    name = "debian8-clang-0.2.0-bazel_0.8.0-autoconfig",
-    additional_repos = debian8_clang_default_repos(),
-    base = "@debian8-clang//image",
-    bazel_version = "0.8.0",
-    env = clang_env(),
-    keys = debian8_clang_default_keys(),
-    packages = debian8_clang_default_packages(),
-    tags = ["manual"],
-    test = False,
-)
-
-# Created on 2018.01.10
-# Container: gcr.io/cloud-marketplace/google/clang-debian8@sha256:62ad7c44890792fdb2c2593fc24cfab7132e3a112d55bd453e09387906ae5e2f
-docker_toolchain_autoconfig(
-    name = "debian8-clang-0.2.0-bazel_0.9.0-autoconfig",
-    additional_repos = debian8_clang_default_repos(),
-    base = "@debian8-clang//image",
-    bazel_version = "0.9.0",
-    env = clang_env(),
-    keys = debian8_clang_default_keys(),
-    packages = debian8_clang_default_packages(),
-    tags = ["manual"],
-    test = False,
-)
-
-# Created on 2018.02.05
-# Container: gcr.io/cloud-marketplace/google/clang-debian8@sha256:e57978199c9eb156bd7f63773387f3a238adf61acd71c4942ad91da50b4f241f
-docker_toolchain_autoconfig(
-    name = "debian8-clang-0.2.0-bazel_0.10.0-autoconfig",
-    additional_repos = debian8_clang_default_repos(),
-    base = "@debian8-clang//image",
-    bazel_version = "0.10.0",
-    env = clang_env(),
-    keys = debian8_clang_default_keys(),
-    packages = debian8_clang_default_packages(),
-    tags = ["manual"],
-    test = False,
-)
-
-# Created on 2018.02.13
-# Container: gcr.io/cloud-marketplace/google/clang-debian8@sha256:ac3b1fdc22c0f2b95abe67f2daf33788425fab52d4e6845900bfe1a42443098f
-docker_toolchain_autoconfig(
-    name = "debian8-clang-0.3.0-bazel_0.10.0-autoconfig",
-    additional_repos = debian8_clang_default_repos(),
-    base = "@debian8-clang//image",
-    bazel_version = "0.10.0",
-    env = clang_env(),
-    keys = debian8_clang_default_keys(),
-    packages = debian8_clang_default_packages(),
-    tags = ["manual"],
-    test = True,
-)
-
diff --git a/test/configs/BUILD b/test/configs/BUILD
index 8ac22c7..a4be573 100644
--- a/test/configs/BUILD
+++ b/test/configs/BUILD
@@ -140,7 +140,7 @@
     timeout = "long",
     srcs = ["debian8_clang_autoconfig_test.sh"],
     data = [
-      "//rules:debian8-clang-0.3.0-bazel_0.10.0-autoconfig",
+      "//configs/debian8_clang:debian8-clang-0.3.0-bazel_0.10.0-autoconfig",
       "@bazel_toolchains_test//file",
     ],
 )
diff --git a/test/configs/debian8_clang_autoconfig_test.sh b/test/configs/debian8_clang_autoconfig_test.sh
index df2be79..b58a7b8 100755
--- a/test/configs/debian8_clang_autoconfig_test.sh
+++ b/test/configs/debian8_clang_autoconfig_test.sh
@@ -28,7 +28,7 @@
 BAZEL_VERSION=0.10.0
 CONFIG_VERSION=0.3.0
 TEST_CONFIGS_DIR=${TEST_TMPDIR}/bazel-toolchains-${COMMIT}/configs/debian8_clang/${CONFIG_VERSION}/bazel_${BAZEL_VERSION}/
-AUTOCONFIG_SCRIPT=${WORKSPACE_ROOT}/rules/debian8-clang-${CONFIG_VERSION}-bazel_${BAZEL_VERSION}-autoconfig
+AUTOCONFIG_SCRIPT=${WORKSPACE_ROOT}/configs/debian8_clang/debian8-clang-${CONFIG_VERSION}-bazel_${BAZEL_VERSION}-autoconfig
 
 # Helper function for always delete the containers / temporary files on exit
 function cleanup_on_finish {