sconsmodular.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import posixpath
  2. import os
  3. def BuildModule(env, module):
  4. src_dir = str(env.Dir(".").srcdir or os.getcwd())
  5. module_sconscript = posixpath.join(src_dir, module, "SConscript")
  6. if not os.path.exists(module_sconscript):
  7. module_sconscript = posixpath.join(src_dir, f"{module}.scons")
  8. if not os.path.exists(module_sconscript):
  9. print(f"Cannot build module {module}: scons file not found")
  10. Exit(2)
  11. return env.SConscript(
  12. module_sconscript,
  13. variant_dir=posixpath.join(env.subst("$BUILD_DIR"), module),
  14. duplicate=0,
  15. )
  16. def BuildModules(env, modules):
  17. result = []
  18. for module in modules:
  19. build_res = env.BuildModule(module)
  20. # print("module ", module, build_res)
  21. if build_res is None:
  22. continue
  23. result.append(build_res)
  24. return result
  25. def PhonyTarget(env, name, action, source=None, **kw):
  26. if not source:
  27. source = []
  28. phony_name = "phony_" + name
  29. env.Pseudo(phony_name)
  30. return env.AlwaysBuild(
  31. env.Alias(name, env.Command(phony_name, source, action, **kw))
  32. )
  33. def generate(env):
  34. env.AddMethod(BuildModule)
  35. env.AddMethod(BuildModules)
  36. env.AddMethod(PhonyTarget)
  37. def exists(env):
  38. return True