fw/build: Allow applications to filter environments

We use an external python script to solve which env to build, to
mix board and app env list

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
This commit is contained in:
Sylvain Munaut 2012-12-10 21:07:18 +01:00
parent 3ee1beb8bf
commit adfc622cc1
3 changed files with 47 additions and 1 deletions

View File

@ -86,6 +86,11 @@ BOARD_se_j100_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS)
# List of all applications (meant to be overridden on command line)
APPLICATIONS?=hello_world compal_dsp_dump layer1 loader chainload rssi
# Applications specific env requirements
APP_chainload_ENVIRONMENTS=compalram
APP_loader_ENVIRONMENTS=compalram highram
APP_rssi_ENVIRONMENTS=* -compalram
# Various objects that are currently linked into all applications
FLASH_OBJS=flash/cfi_flash.o
ABB_OBJS=abb/twl3025.o

View File

@ -134,7 +134,7 @@ $(foreach app,$(APPLICATIONS), \
$(foreach app,$(APPLICATIONS), \
$(foreach brd,$(BOARDS), \
$(foreach env,$(BOARD_$(brd)_ENVIRONMENTS), \
$(foreach env,$(shell ./solve_envs.py "$(BOARD_$(brd)_ENVIRONMENTS)" "$(APP_$(app)_ENVIRONMENTS)"), \
$(eval $(call APPLICATION_BOARD_ENVIRONMENT_template,$(app),$(brd),$(env))))))

View File

@ -0,0 +1,41 @@
#!/usr/bin/env python
import sys
def parse(s):
return set([x.strip() for x in s.split() if x.strip()])
def solve(board_envs, app_envs):
if not app_envs:
return board_envs
envs = set()
if '*' in app_envs:
envs.update(board_envs)
app_envs.discard('*')
for e in app_envs:
if e.startswith('-'):
envs.discard(e[1:])
elif e in board_envs:
envs.add(e)
return envs
def main(name, board_envs, app_envs):
# Parse args
board_envs = parse(board_envs)
app_envs = parse(app_envs)
# Solve
envs = solve(board_envs, app_envs)
# Result
print ' '.join(envs)
if __name__ == '__main__':
main(*sys.argv)