Files
OpenCellular/Makefile
Randall Spangler d48828757d Fix extracting CONFIG tokens from config.h
We need to use cpp -dM instead of -dN, because -dN doesn't process #undef
statements.  That is, if you have
"  #define CONFIG_FOO"
"  #undef CONFIG_FOO"
then -dN will happily print both lines, which results in CONFIG_FOO being
defined when processing the makefile.  -dM processes the defines and undefs
so that the resulting list of macros only includes those that are defined.

We didn't notice this before, because we temporarily commented out
config statements instead of #undef'ing them - or the configs which
were undef'd only resulted in conditional non-compilation of pieces of
code inside a file instead of the whole file not being compiled.

This change also tidily alphabetizes the resulting configs.

It also better filters CONFIGs to ensure that
"  #define __CROS_EC_CONFIG_CHIP_H"
does not show up as a CONFIG_CHIP_H token, as it did previously.

BUG=chrome-os-partner:20985
BRANCH=none (though may be needed if any future cherry-picked change requires
             undefining a CONFIG)
TEST=Add #undef CONFIG_ADC to the end of config.h and see that the ADC module
     is not compiled.  Also helps to add
         $(info $(_flag_cfg))
     to the Makefile to see the list of tokens, and verify that CONFIG_ADC is
     not among them.

Change-Id: I18db60099e87857473ba54c3c9fff1116d4f1a93
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/62230
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-07-17 10:49:47 -07:00

70 lines
2.1 KiB
Makefile

# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Embedded Controller firmware build system
#
BOARD ?= bds
PROJECT?=ec
# output directory for build objects
out?=build/$(BOARD)
include Makefile.toolchain
# Get CHIP name
include board/$(BOARD)/build.mk
# Get test configuration
include test/test_config.mk
# Transform the configuration into make variables
includes=include core/$(CORE)/include $(dirs) $(out)
ifeq "$(TEST_BUILD)" "y"
_tsk_lst:=$(shell echo "CONFIG_TASK_LIST CONFIG_TEST_TASK_LIST" | \
$(CPP) -P -Iboard/$(BOARD) -Itest \
-D"TASK_NOTEST(n, r, d, s)=" -D"TASK_ALWAYS(n, r, d, s)=n" \
-D"TASK_TEST(n, r, d, s)=n" -imacros ec.tasklist \
-imacros $(PROJECT).tasklist)
else
_tsk_lst:=$(shell echo "CONFIG_TASK_LIST" | $(CPP) -P \
-Iboard/$(BOARD) -D"TASK_NOTEST(n, r, d, s)=n" \
-D"TASK_ALWAYS(n, r, d, s)=n" -imacros ec.tasklist)
endif
_tsk_cfg:=$(foreach t,$(_tsk_lst) ,HAS_TASK_$(t))
CPPFLAGS+=$(foreach t,$(_tsk_cfg),-D$(t))
_flag_cfg:=$(shell $(CPP) $(CPPFLAGS) -P -dM -Ichip/$(CHIP) -Iboard/$(BOARD) \
include/config.h | grep -o "\#define CONFIG_[A-Za-z0-9_]*" | \
cut -c9- | sort)
$(foreach c,$(_tsk_cfg) $(_flag_cfg),$(eval $(c)=y))
$(eval BOARD_$(BOARD)=y)
# Get build configuration from sub-directories
-include private/build.mk
include board/$(BOARD)/build.mk
include chip/$(CHIP)/build.mk
include core/$(CORE)/build.mk
include common/build.mk
include test/build.mk
include util/build.mk
include util/lock/build.mk
includes+=$(includes-y)
objs_from_dir=$(foreach obj, $($(2)-y), \
$(out)/$(1)/$(firstword $($(2)-mock-$(PROJECT)-$(obj)) $(obj)))
# Get all sources to build
all-y=$(call objs_from_dir,core/$(CORE),core)
all-y+=$(call objs_from_dir,chip/$(CHIP),chip)
all-y+=$(call objs_from_dir,board/$(BOARD),board)
all-y+=$(call objs_from_dir,private,private)
all-y+=$(call objs_from_dir,common,common)
all-y+=$(call objs_from_dir,test,$(PROJECT))
dirs=core/$(CORE) chip/$(CHIP) board/$(BOARD) private common test util
include Makefile.rules