## @file
#  GNU/Linux makefile for C tools build.
#
#  Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>
#
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution.  The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#

ifndef ARCH
  #
  # If ARCH is not defined, then we use 'uname -m' to attempt
  # try to figure out the appropriate ARCH.
  #
  uname_m = $(shell uname -m)
  $(info Attempting to detect ARCH from 'uname -m': $(uname_m))
  ifneq (,$(strip $(filter $(uname_m), x86_64 amd64)))
    ARCH=X64
  endif
  ifeq ($(patsubst i%86,IA32,$(uname_m)),IA32)
    ARCH=IA32
  endif
  ifndef ARCH
    $(info Could not detected ARCH from uname results)
    $(error ARCH is not defined!)
  endif
  $(info Detected ARCH of $(ARCH) using uname.)
endif

export ARCH

MAKEROOT = .

include Makefiles/header.makefile

all: makerootdir subdirs $(MAKEROOT)/libs
	@echo Finished building BaseTools C Tools with ARCH=$(ARCH)

LIBRARIES = Common
# NON_BUILDABLE_APPLICATIONS = GenBootSector BootSectImage
APPLICATIONS = \
  GnuGenBootSector \
  BootSectImage \
  EfiLdrImage \
  EfiRom \
  GenFfs \
  GenFv \
  GenFw \
  GenPage \
  GenSec \
  GenCrc32 \
  GenVtf \
  LzmaCompress \
  Split \
  TianoCompress \
  VolInfo \
  VfrCompile

SUBDIRS := $(LIBRARIES) $(APPLICATIONS)

.PHONY: outputdirs
makerootdir:
	-mkdir -p $(MAKEROOT)

.PHONY: subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
	$(MAKE) -C $@

.PHONY: $(patsubst %,%-clean,$(sort $(SUBDIRS)))
$(patsubst %,%-clean,$(sort $(SUBDIRS))):
	-$(MAKE) -C $(@:-clean=) clean

clean:  $(patsubst %,%-clean,$(sort $(SUBDIRS)))

clean: localClean

localClean:
	rm -f $(MAKEROOT)/bin/*
	-rmdir $(MAKEROOT)/libs $(MAKEROOT)/bin

include Makefiles/footer.makefile
