79 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | 
 | ||
|  | 
 | ||
|  | SUBPROJECTS_PATHS.each do |subproj| | ||
|  | 
 | ||
|  |   subproj_source     = subproj[:source] | ||
|  |   subproj_include    = subproj[:include] | ||
|  |   subproj_name       = subproj[:name] | ||
|  |   subproj_build_root = subproj[:build_root] | ||
|  |   subproj_build_out  = "#{subproj[:build_root]}/out" | ||
|  |   subproj_build_c    = "#{subproj[:build_root]}/out/c" | ||
|  |   subproj_build_asm  = "#{subproj[:build_root]}/out/asm" | ||
|  |   subproj_directories = [ subproj_build_root, subproj_build_out, subproj_build_c, subproj_build_asm ] | ||
|  | 
 | ||
|  |   subproj_directories.each do |subdir| | ||
|  |     directory(subdir) | ||
|  |   end | ||
|  | 
 | ||
|  |   CLEAN.include(File.join(subproj_build_root, '*')) | ||
|  |   CLEAN.include(File.join(subproj_build_out, '*')) | ||
|  | 
 | ||
|  |   CLOBBER.include(File.join(subproj_build_root, '**/*')) | ||
|  | 
 | ||
|  |   # Add a rule for building the actual static library from our object files | ||
|  |   rule(/#{subproj_build_root}#{'.+\\'+EXTENSION_SUBPROJECTS}$/ => [ | ||
|  |       proc do |task_name| | ||
|  |         @ceedling[SUBPROJECTS_SYM].list_all_object_files_for_subproject(task_name) | ||
|  |       end | ||
|  |     ]) do |bin_file| | ||
|  |     @ceedling[:generator].generate_executable_file( | ||
|  |       TOOLS_SUBPROJECTS_LINKER, | ||
|  |       SUBPROJECTS_SYM, | ||
|  |       bin_file.prerequisites, | ||
|  |       bin_file.name, | ||
|  |       @ceedling[:file_path_utils].form_test_build_map_filepath(bin_file.name)) | ||
|  |   end | ||
|  | 
 | ||
|  |   # Add a rule for building object files from assembly files to link into a library | ||
|  |   if (RELEASE_BUILD_USE_ASSEMBLY) | ||
|  |     rule(/#{subproj_build_asm}#{'.+\\'+EXTENSION_OBJECT}$/ => [ | ||
|  |         proc do |task_name| | ||
|  |           @ceedling[SUBPROJECTS_SYM].find_library_assembly_file_for_object(task_name) | ||
|  |         end | ||
|  |       ]) do |object| | ||
|  |       @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_PATHS_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_paths(object.source, :asm)) | ||
|  |       @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_DEFINES_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_defines(object.source, :asm)) | ||
|  |       @ceedling[:generator].generate_object_file( | ||
|  |         TOOLS_SUBPROJECTS_ASSEMBLER, | ||
|  |         OPERATION_ASSEMBLE_SYM, | ||
|  |         SUBPROJECTS_SYM, | ||
|  |         object.source, | ||
|  |         object.name ) | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   # Add a rule for building object files from C files to link into a library | ||
|  |   rule(/#{subproj_build_c}#{'.+\\'+EXTENSION_OBJECT}$/ => [ | ||
|  |       proc do |task_name| | ||
|  |         @ceedling[SUBPROJECTS_SYM].find_library_source_file_for_object(task_name) | ||
|  |       end | ||
|  |     ]) do |object| | ||
|  |     @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_PATHS_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_paths(object.source, :c)) | ||
|  |     @ceedling[SUBPROJECTS_SYM].replace_constant(:COLLECTION_DEFINES_SUBPROJECTS, @ceedling[SUBPROJECTS_SYM].find_my_defines(object.source, :c)) | ||
|  |     @ceedling[:generator].generate_object_file( | ||
|  |       TOOLS_SUBPROJECTS_COMPILER, | ||
|  |       OPERATION_COMPILE_SYM, | ||
|  |       SUBPROJECTS_SYM, | ||
|  |       object.source, | ||
|  |       object.name, | ||
|  |       @ceedling[:file_path_utils].form_release_build_c_list_filepath( object.name ) ) | ||
|  |   end | ||
|  | 
 | ||
|  |   # Add the subdirectories involved to our list of those that should be autogenerated | ||
|  |   task :directories => subproj_directories.clone | ||
|  | 
 | ||
|  |   # Finally, add the static library to our RELEASE build dependency list | ||
|  |   task RELEASE_SYM => ["#{subproj_build_root}/#{subproj_name}#{EXTENSION_SUBPROJECTS}"]  | ||
|  | end | ||
|  | 
 |