##===- tools/Makefile --------------------------------------*- Makefile -*-===##
#
#                     The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##

LEVEL := ..

include $(LEVEL)/Makefile.config

# Build clang if present.

ifneq ($(CLANG_SRC_ROOT),)
  OPTIONAL_PARALLEL_DIRS := $(CLANG_SRC_ROOT)
else
  OPTIONAL_PARALLEL_DIRS := clang
endif

OPTIONAL_PARALLEL_DIRS += $(SUBZERO_SRC_ROOT) # @LOCALMOD

# Build LLD and LLDB if present. Note LLDB must be built last as it depends on
# the wider LLVM infrastructure (including Clang).
OPTIONAL_PARALLEL_DIRS += lld
OPTIONAL_DIRS := lldb

# NOTE: The tools are organized into five groups of four consisting of one
# large and three small executables. This is done to minimize memory load
# in parallel builds.  Please retain this ordering.
DIRS := llvm-config
PARALLEL_DIRS := pnacl-llc pnacl-abicheck pnacl-bcanalyzer pnacl-freeze \
                 pnacl-thaw pnacl-bccompress pnacl-bcdis \
                 opt llvm-as llvm-dis llc llvm-ar llvm-nm llvm-link \
                 lli llvm-extract llvm-mc bugpoint llvm-bcanalyzer llvm-diff \
                 macho-dump llvm-objdump llvm-readobj llvm-rtdyld \
                 llvm-dwarfdump llvm-cov llvm-size llvm-stress llvm-mcmarkup \
                 llvm-profdata llvm-symbolizer obj2yaml yaml2obj llvm-c-test \
                 llvm-cxxdump verify-uselistorder dsymutil llvm-pdbdump

# If Intel JIT Events support is configured, build an extra tool to test it.
ifeq ($(USE_INTEL_JITEVENTS), 1)
  PARALLEL_DIRS += llvm-jitlistener
endif

# Let users override the set of tools to build from the command line.
ifdef ONLY_TOOLS
  OPTIONAL_PARALLEL_DIRS :=
  # @LOCALMOD-BEGIN -- Allow subzero to be built as a tool if requested.
  ifneq ($(findstring subzero,$(ONLY_TOOLS)),)
    OPTIONAL_PARALLEL_DIRS += $(SUBZERO_SRC_ROOT)
  endif
  # @LOCALMOD-END
  OPTIONAL_DIRS := $(findstring lldb,$(ONLY_TOOLS))
  PARALLEL_DIRS := $(filter-out lldb subzero,$(ONLY_TOOLS)) # @LOCALMOD
endif

# These libraries build as dynamic libraries (.dylib /.so), they can only be
# built if ENABLE_PIC is set.
ifndef ONLY_TOOLS
ifeq ($(ENABLE_PIC),1)
  # gold only builds if binutils is around.  It requires "lto" to build before
  # it so it is added to DIRS. llvm-lto also requires lto
  DIRS += lto llvm-lto
  ifdef BINUTILS_INCDIR
    DIRS += gold
  endif

  PARALLEL_DIRS += bugpoint-passes
endif

ifdef LLVM_HAS_POLLY
  PARALLEL_DIRS += polly
endif
endif

# On Win32, loadable modules can be built with ENABLE_SHARED.
ifneq ($(ENABLE_SHARED),1)
  ifneq (,$(filter $(HOST_OS), Cygwin MingW))
    PARALLEL_DIRS := $(filter-out bugpoint-passes, \
                        $(PARALLEL_DIRS))
  endif
endif

ifneq (,$(filter go,$(BINDINGS_TO_BUILD)))
  PARALLEL_DIRS += llvm-go
endif

include $(LEVEL)/Makefile.common
