diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template index 1591e1c81f..13b8213d1d 100755 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -282,7 +282,7 @@ $(OUTPUT_DIR)(+)$(MODULE_NAME)rust.lib - $(CARGO) make $(CARGOMAKE_FLAGS) -e RUSTFLAGS="-C link-arg=/MAP:$(DEBUG_DIR)(+)$(MODULE_NAME).map $(RUST_FLAGS)" build $(MODULE_NAME) + $(CARGO) make $(CARGOMAKE_FLAGS) -e FEATURES=$(CARGO_FEATURES) -e RUSTFLAGS="-C link-arg=/MAP:$(DEBUG_DIR)(+)$(MODULE_NAME).map $(RUST_FLAGS)" build $(MODULE_NAME) $(CP) $(DEBUG_DIR)(+)$(TARGET_TRIPLE)(+)$(RUST_TARGET)(+)*.a $(DEBUG_DIR)(+)$(MODULE_NAME)rust.lib $(CP) $(DEBUG_DIR)(+)$(TARGET_TRIPLE)(+)$(RUST_TARGET)(+)*.a $(OUTPUT_DIR)(+)$(MODULE_NAME)rust.lib @@ -294,7 +294,7 @@ $(OUTPUT_DIR)(+)$(MODULE_NAME).efi - $(CARGO) make $(CARGOMAKE_FLAGS) -e RUSTFLAGS="-C link-arg=/MAP:$(DEBUG_DIR)(+)$(MODULE_NAME).map $(RUST_FLAGS)" build $(MODULE_NAME) + $(CARGO) make $(CARGOMAKE_FLAGS) -e FEATURES=$(CARGO_FEATURES) -e RUSTFLAGS="-C link-arg=/MAP:$(DEBUG_DIR)(+)$(MODULE_NAME).map $(RUST_FLAGS)" build $(MODULE_NAME) "$(GENFW)" -e $(MODULE_TYPE) -o $(DEBUG_DIR)(+)$(MODULE_NAME).efi $(DEBUG_DIR)(+)$(TARGET_TRIPLE)(+)$(RUST_TARGET)(+)$(MODULE_NAME).efi $(GENFW_FLAGS) $(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).map $(OUTPUT_DIR)(+)$(MODULE_NAME).map $(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).efi $(OUTPUT_DIR)(+)$(MODULE_NAME).efi diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 12122fc6f9..21864a555f 100755 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -314,6 +314,7 @@ class ModuleMakefile(BuildFile): # MU_CHANGE [BEGIN] - Add Rust build support CARGO_OUTPUT_DIR = ${cargo_module_output_directory} +CARGO_FEATURES = ${cargo_module_enabled_features} # MU_CHANGE [END] - Add Rust build support # @@ -729,6 +730,7 @@ def _TemplateDict(self): "module_output_directory" : MyAgo.OutputDir, # MU_CHANGE [BEGIN] - Add Rust build support "cargo_module_output_directory": MyAgo.OutputDir, + "cargo_module_enabled_features": self.GetModuleEnabledRustFeatures(), # MU_CHANGE [END] - Add Rust build support "module_debug_directory" : MyAgo.DebugDir, @@ -1196,6 +1198,18 @@ def GetFileDependency(self, FileList, ForceInculeList, SearchPathList): Dependency[F] = GetDependencyList(self._AutoGenObject, self.FileCache, F, ForceInculeList, SearchPathList) return Dependency + # MU_CHANGE [BEGIN] - Add Rust build support + ## Returns a comma delimited string of enabled cargo features for this module + # + # @retval str comma delimited string of cargo feature flags + # + def GetModuleEnabledRustFeatures(self): + features = "" + for pcd in self._AutoGenObject.ModulePcdList: + if pcd.Type == "FeatureFlag" and bool(pcd.DefaultValue): + features += f'{pcd.TokenCName},' + return features + # MU_CHANGE [END] - Add Rust build support ## CustomMakefile class #