# Copyright 2019 The Pigweed Authors
#
# 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
#
#     https://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.

config("default_config") {
  include_dirs = [ "public" ]
}

source_set("pw_preprocessor") {
  public_configs = [
    "$dir_pw_build:pw_default_cpp",
    ":default_config",
  ]
  public = [
    "public/pw_preprocessor/boolean.h",
    "public/pw_preprocessor/compiler.h",
    "public/pw_preprocessor/concat.h",
    "public/pw_preprocessor/macro_arg_count.h",
    "public/pw_preprocessor/util.h",
  ]
  sources = public
}

group("pw_preprocessor_tests") {
  deps = [
    ":boolean_test",
    ":concat_test",
    ":macro_arg_count_test",
    ":util_test",
  ]
}

group("pw_preprocessor_tests_linux") {
  deps = [
    ":pw_preprocessor_tests($dir_pw_toolchain:x86_linux_o2)",
  ]
}

# TODO(frolv): Change these to special unit test executables.
executable("boolean_test") {
  deps = [
    ":pw_preprocessor",
    "$dir_pw_unit_test:main",
  ]
  sources = [
    "boolean_test.cc",
  ]
}

executable("concat_test") {
  deps = [
    ":pw_preprocessor",
    "$dir_pw_unit_test:main",
  ]
  sources = [
    "concat_test.cc",
  ]
}

executable("macro_arg_count_test") {
  deps = [
    ":pw_preprocessor",
    "$dir_pw_unit_test:main",
  ]
  sources = [
    "macro_arg_count_test.cc",
  ]
}

executable("util_test") {
  deps = [
    ":pw_preprocessor",
    "$dir_pw_unit_test:main",
  ]
  sources = [
    "util_test.cc",
  ]
}
