subprojects.rake 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. SUBPROJECTS_PATHS.each do |subproj|
  2. subproj_source = subproj[:source]
  3. subproj_include = subproj[:include]
  4. subproj_name = subproj[:name]
  5. subproj_build_root = subproj[:build_root]
  6. subproj_build_out = "#{subproj[:build_root]}/out"
  7. subproj_build_c = "#{subproj[:build_root]}/out/c"
  8. subproj_build_asm = "#{subproj[:build_root]}/out/asm"
  9. subproj_directories = [ subproj_build_root, subproj_build_out, subproj_build_c, subproj_build_asm ]
  10. subproj_directories.each do |subdir|
  11. directory(subdir)
  12. end
  13. CLEAN.include(File.join(subproj_build_root, '*'))
  14. CLEAN.include(File.join(subproj_build_out, '*'))
  15. CLOBBER.include(File.join(subproj_build_root, '**/*'))
  16. # Add a rule for building the actual static library from our object files
  17. rule(/#{subproj_build_root}#{'.+\\'+EXTENSION_SUBPROJECTS}$/ => [
  18. proc do |task_name|
  19. @ceedling[SUBPROJECTS_SYM].list_all_object_files_for_subproject(task_name)
  20. end
  21. ]) do |bin_file|
  22. @ceedling[:generator].generate_executable_file(
  23. TOOLS_SUBPROJECTS_LINKER,
  24. SUBPROJECTS_SYM,
  25. bin_file.prerequisites,
  26. bin_file.name,
  27. @ceedling[:file_path_utils].form_test_build_map_filepath(bin_file.name))
  28. end
  29. # Add a rule for building object files from assembly files to link into a library
  30. if (RELEASE_BUILD_USE_ASSEMBLY)
  31. rule(/#{subproj_build_asm}#{'.+\\'+EXTENSION_OBJECT}$/ => [
  32. proc do |task_name|
  33. @ceedling[SUBPROJECTS_SYM].find_library_assembly_file_for_object(task_name)
  34. end
  35. ]) do |object|
  36. @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_PATHS_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_paths(object.source, :asm))
  37. @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_DEFINES_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_defines(object.source, :asm))
  38. @ceedling[:generator].generate_object_file(
  39. TOOLS_SUBPROJECTS_ASSEMBLER,
  40. OPERATION_ASSEMBLE_SYM,
  41. SUBPROJECTS_SYM,
  42. object.source,
  43. object.name )
  44. end
  45. end
  46. # Add a rule for building object files from C files to link into a library
  47. rule(/#{subproj_build_c}#{'.+\\'+EXTENSION_OBJECT}$/ => [
  48. proc do |task_name|
  49. @ceedling[SUBPROJECTS_SYM].find_library_source_file_for_object(task_name)
  50. end
  51. ]) do |object|
  52. @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_PATHS_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_paths(object.source, :c))
  53. @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_DEFINES_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_defines(object.source, :c))
  54. @ceedling[:generator].generate_object_file(
  55. TOOLS_SUBPROJECTS_COMPILER,
  56. OPERATION_COMPILE_SYM,
  57. SUBPROJECTS_SYM,
  58. object.source,
  59. object.name,
  60. @ceedling[:file_path_utils].form_release_build_c_list_filepath( object.name ) )
  61. end
  62. # Add the subdirectories involved to our list of those that should be autogenerated
  63. task :directories => subproj_directories.clone
  64. # Finally, add the static library to our RELEASE build dependency list
  65. task RELEASE_SYM => ["#{subproj_build_root}/#{subproj_name}#{EXTENSION_SUBPROJECTS}"]
  66. end