2
0
Эх сурвалжийг харах

O3DE engine Gem rename support (#17059)

* O3DE engine Gem rename support

The following changes have been made to all of the Gems that come with
the O3DE engine source code to make it easier to rename a Gem.

Updated all of the Gems CMakeLists.txt to use the "${gem_name}" variable
when referencing the Gem in CMake Targets.

This allows the name of the CMake targets to update whenever the
"gem_name" in the gem.json is changed.

Updated all of the `AZ_DECLARE_MODULE_CLASS` macro invocations to
reference the `O3DE_GEM_NAME` preprocessor token which is use to
substitute the "gem_name" in the gem.json for the extern "C"
`CreateModuleClass_Gem_*` function which the launcher_generator.cmake
invokes in Monolithic builds to create an AZ::Module derived class instance for each active gem.

resolves #17034

Signed-off-by: lumberyard-employee-dm <[email protected]>

* Removed the boilerplate comments from Gems AZ_DECLARE_MODULE_CLASS

All the comments that started with "DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM" have been removed.

The externed "C" function that instantiates an AZ::Module derived class
in monolithic build now automatically adjust account for a rename of the
Gem.

Signed-off-by: lumberyard-employee-dm <[email protected]>

* Replace all O3DE engine Gems and Gem Templates Gem variable boilerplate

The repeat boilerplate logic in each Gem has been replaced with a CMake
macro called "o3de_gem_setup" which uses the directory of the calling
CMakeLists.txt file to locate the nearest ancestor gem.json file.

It uses that directory of that gem.json file as the `${gem_path}` value.
It reads the "gem_name" field from that gem.json and sets that as the
`${gem_name}` variable.
It also reads the "version" field from that gem.json and sets that as
the `${gem_version}` variable.

Finally it sets the `${pal_dir}` variable based to the equivalent
`<CMakeLists.txt directory>/Platform/<configured platform>/` directory
using the directory of the calling CMakeLists.txt and the current
platform that CMake is being configured for(Windows, Linux, Android,
MacOS, iOS, or a "restricted platform").

Signed-off-by: lumberyard-employee-dm <[email protected]>

* Updated the SimpleSchema, ChildAllocatorSchema `NumAllocateBytes`
function to also output the name of the Allocator when the Assert
Triggers

Signed-off-by: lumberyard-employee-dm <[email protected]>

* Fixed memory tracking issue with the `HpAllocator::deallocate` function
returning a different value for the amount of bytes deallocated, than
were allocated.

The issue is that when the HpAllocator is used for aligned allocation of
>=32 bytes, it could find a block that could fulfill the allocation
request, but wasn't aligned.

If the block need to be adjusted for a size that was >0 but less than
the size of block header(16 bytes) + the size of the free node(40
bytes), than instead of being to split the block into two blocks where
the first block would be a free block that gets added to the free list
and the second block would be the actual aligned block, the code would
try to shift the previous block to be large enough such that the next
block would start aligned on the specified alignent using the
`shift_block` function.

This would result in previous block storing a larger size value.

So when the memory associated with the block was deallocated, it would
report a size larger than the size reported when it was allocated.

This fixes an issue where the Tracking the number of allocated bytes in
the ChildAllocatorSchema and SimpleAllocatorSchema would result in a
non-zero value after all of the allocations have been deleted.

This because the `ChildAllocatorSchema::allocate` function relies on
amount of bytes returned from the actual child allocator `allocate()` call
to be matched when the pointer that was allocated is deallocated via the
`ChildAllocatorSchema::deallocate` function which uses the child
allocator `deallocate()` call.

```
20:28:39  [----------] 1 test from MotionSetFixture

20:28:39  [ RUN      ] MotionSetFixture.MeshLoadTest

20:28:39
   D:\workspace\o3de\Code\Framework\AzCore\AzCore/Memory/ChildAllocatorSchema.h(155):
   error: Child Allocator "EMotionFXAllocator": Total allocated bytes is
   less than zero with a value of -16. Was deallocate() invoked with an
   address that is not associated with this allocator? This should never
   occur

   20:28:39
      D:\workspace\o3de\Code\Framework\AzCore\AzCore/UnitTest/TestTypes.h(76):
      error: Expected equality of these values:

      20:28:39    sizeBeforeTestRan

      20:28:39      Which is: 0

      20:28:39    sizeAfterTestRan

      20:28:39      Which is: 18446744073709551600

      20:28:39  for allocator EMotionFXAllocator with 0 allocation
	 records
```

Signed-off-by: lumberyard-employee-dm <[email protected]>

* Update Code/Framework/AzCore/AzCore/Memory/HphaAllocator.cpp

Co-authored-by: Steve Pham <[email protected]>
Signed-off-by: lumberyard-employee-dm <[email protected]>

---------

Signed-off-by: lumberyard-employee-dm <[email protected]>
Co-authored-by: Steve Pham <[email protected]>
lumberyard-employee-dm 1 жил өмнө
parent
commit
324c0317e9
100 өөрчлөгдсөн 1071 нэмэгдсэн , 577 устгасан
  1. 5 4
      AutomatedTesting/Gem/CMakeLists.txt
  2. 16 7
      AutomatedTesting/Gem/Code/CMakeLists.txt
  3. 4 3
      AutomatedTesting/Gem/Code/Source/AutomatedTestingModule.cpp
  4. 3 3
      AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt
  5. 15 6
      AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt
  6. 5 1
      AutomatedTesting/Gem/PythonCoverage/Code/Source/PythonCoverageEditorModule.cpp
  7. 2 2
      Code/Framework/AzCore/AzCore/Memory/ChildAllocatorSchema.h
  8. 171 48
      Code/Framework/AzCore/AzCore/Memory/HphaAllocator.cpp
  9. 2 2
      Code/Framework/AzCore/AzCore/Memory/SimpleSchemaAllocator.h
  10. 4 3
      Gems/AWSClientAuth/CMakeLists.txt
  11. 28 19
      Gems/AWSClientAuth/Code/CMakeLists.txt
  12. 4 3
      Gems/AWSClientAuth/Code/Source/AWSClientAuthModule.cpp
  13. 4 3
      Gems/AWSCore/CMakeLists.txt
  14. 53 35
      Gems/AWSCore/Code/CMakeLists.txt
  15. 4 3
      Gems/AWSCore/Code/Source/AWSCoreEditorModule.cpp
  16. 4 3
      Gems/AWSCore/Code/Source/AWSCoreModule.cpp
  17. 4 3
      Gems/AWSCore/Code/Source/AWSCoreResourceMappingToolModule.cpp
  18. 2 11
      Gems/AWSGameLift/CMakeLists.txt
  19. 23 14
      Gems/AWSGameLift/Code/AWSGameLiftClient/CMakeLists.txt
  20. 4 0
      Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientModule.cpp
  21. 16 7
      Gems/AWSGameLift/Code/AWSGameLiftServer/CMakeLists.txt
  22. 4 0
      Gems/AWSGameLift/Code/AWSGameLiftServer/Source/AWSGameLiftServerModule.cpp
  23. 4 0
      Gems/AWSMetrics/CMakeLists.txt
  24. 29 20
      Gems/AWSMetrics/Code/CMakeLists.txt
  25. 4 3
      Gems/AWSMetrics/Code/Source/AWSMetricsModule.cpp
  26. 4 3
      Gems/Achievements/CMakeLists.txt
  27. 13 4
      Gems/Achievements/Code/CMakeLists.txt
  28. 4 3
      Gems/Achievements/Code/Source/AchievementsModule.cpp
  29. 1 17
      Gems/Archive/CMakeLists.txt
  30. 18 0
      Gems/Archive/Code/CMakeLists.txt
  31. 4 0
      Gems/Archive/Code/Source/Clients/ArchiveModule.cpp
  32. 5 1
      Gems/Archive/Code/Source/Tools/ArchiveEditorModule.cpp
  33. 5 0
      Gems/AssetValidation/CMakeLists.txt
  34. 17 8
      Gems/AssetValidation/Code/CMakeLists.txt
  35. 4 3
      Gems/AssetValidation/Code/Source/AssetValidationModule.cpp
  36. 4 3
      Gems/Atom/Asset/ImageProcessingAtom/CMakeLists.txt
  37. 16 7
      Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt
  38. 4 3
      Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessingModule.cpp
  39. 4 3
      Gems/Atom/Asset/Shader/CMakeLists.txt
  40. 29 9
      Gems/Atom/Asset/Shader/Code/CMakeLists.txt
  41. 5 4
      Gems/Atom/Asset/Shader/Code/Source/Editor/AzslShaderBuilderModule.cpp
  42. 5 4
      Gems/Atom/Asset/Shader/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp
  43. 9 9
      Gems/Atom/Asset/Shader/Code/Source/Platform/Linux/platform_builders_linux.cmake
  44. 9 9
      Gems/Atom/Asset/Shader/Code/Source/Platform/Mac/platform_builders_mac.cmake
  45. 9 9
      Gems/Atom/Asset/Shader/Code/Source/Platform/Windows/platform_builders_windows.cmake
  46. 4 3
      Gems/Atom/Bootstrap/CMakeLists.txt
  47. 14 5
      Gems/Atom/Bootstrap/Code/CMakeLists.txt
  48. 4 3
      Gems/Atom/Bootstrap/Code/Source/BootstrapModule.cpp
  49. 3 3
      Gems/Atom/Component/DebugCamera/CMakeLists.txt
  50. 12 3
      Gems/Atom/Component/DebugCamera/Code/CMakeLists.txt
  51. 4 3
      Gems/Atom/Component/DebugCamera/Code/Source/Module.cpp
  52. 3 3
      Gems/Atom/Feature/Common/CMakeLists.txt
  53. 35 17
      Gems/Atom/Feature/Common/Code/CMakeLists.txt
  54. 5 4
      Gems/Atom/Feature/Common/Code/Source/Builders/BuilderModule.cpp
  55. 10 5
      Gems/Atom/Feature/Common/Code/Source/CommonModule.cpp
  56. 2 4
      Gems/Atom/RHI/CMakeLists.txt
  57. 24 15
      Gems/Atom/RHI/Code/CMakeLists.txt
  58. 4 3
      Gems/Atom/RHI/Code/Source/Module.cpp
  59. 3 5
      Gems/Atom/RHI/DX12/CMakeLists.txt
  60. 40 13
      Gems/Atom/RHI/DX12/Code/CMakeLists.txt
  61. 4 3
      Gems/Atom/RHI/DX12/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp
  62. 5 4
      Gems/Atom/RHI/DX12/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp
  63. 5 4
      Gems/Atom/RHI/DX12/Code/Source/Platform/Mac/RHI.Builders/BuilderModule_Mac.cpp
  64. 5 4
      Gems/Atom/RHI/DX12/Code/Source/RHI.Builders/BuilderModule.cpp
  65. 4 3
      Gems/Atom/RHI/DX12/Code/Source/RHI/Module.cpp
  66. 4 4
      Gems/Atom/RHI/Metal/CMakeLists.txt
  67. 49 21
      Gems/Atom/RHI/Metal/Code/CMakeLists.txt
  68. 4 0
      Gems/Atom/RHI/Metal/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp
  69. 5 4
      Gems/Atom/RHI/Metal/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp
  70. 5 4
      Gems/Atom/RHI/Metal/Code/Source/Platform/Windows/RHI.Builders/BuilderModule_Windows.cpp
  71. 5 4
      Gems/Atom/RHI/Metal/Code/Source/RHI.Builders/BuilderModule.cpp
  72. 4 0
      Gems/Atom/RHI/Metal/Code/Source/RHI/Module.cpp
  73. 3 3
      Gems/Atom/RHI/Null/CMakeLists.txt
  74. 27 9
      Gems/Atom/RHI/Null/Code/CMakeLists.txt
  75. 4 0
      Gems/Atom/RHI/Null/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp
  76. 5 4
      Gems/Atom/RHI/Null/Code/Source/RHI.Builders/BuilderModule.cpp
  77. 4 0
      Gems/Atom/RHI/Null/Code/Source/RHI/Module.cpp
  78. 3 5
      Gems/Atom/RHI/Vulkan/CMakeLists.txt
  79. 22 14
      Gems/Atom/RHI/Vulkan/Code/CMakeLists.txt
  80. 4 0
      Gems/Atom/RHI/Vulkan/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp
  81. 5 4
      Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp
  82. 5 4
      Gems/Atom/RHI/Vulkan/Code/Source/Platform/Mac/RHI.Builders/BuilderModule_Mac.cpp
  83. 5 4
      Gems/Atom/RHI/Vulkan/Code/Source/Platform/Windows/RHI.Builders/BuilderModule_Windows.cpp
  84. 4 3
      Gems/Atom/RHI/Vulkan/Code/Source/RHI/Module.cpp
  85. 3 3
      Gems/Atom/RPI/CMakeLists.txt
  86. 67 31
      Gems/Atom/RPI/Code/CMakeLists.txt
  87. 5 4
      Gems/Atom/RPI/Code/Source/Platform/Common/Unimplemented/BuilderModule_Stub.cpp
  88. 5 4
      Gems/Atom/RPI/Code/Source/RPI.Builders/BuilderModule.cpp
  89. 5 4
      Gems/Atom/RPI/Code/Source/RPI.Editor/EditorModule.cpp
  90. 5 4
      Gems/Atom/RPI/Code/Source/RPI.Private/Module.cpp
  91. 3 3
      Gems/Atom/Tools/AtomToolsFramework/CMakeLists.txt
  92. 18 9
      Gems/Atom/Tools/AtomToolsFramework/Code/CMakeLists.txt
  93. 5 4
      Gems/Atom/Tools/AtomToolsFramework/Code/Source/AtomToolsFrameworkModule.cpp
  94. 3 3
      Gems/Atom/Tools/MaterialCanvas/CMakeLists.txt
  95. 1 1
      Gems/Atom/Tools/MaterialCanvas/Code/CMakeLists.txt
  96. 3 3
      Gems/Atom/Tools/MaterialEditor/CMakeLists.txt
  97. 1 1
      Gems/Atom/Tools/MaterialEditor/Code/CMakeLists.txt
  98. 3 3
      Gems/Atom/Tools/PassCanvas/CMakeLists.txt
  99. 1 1
      Gems/Atom/Tools/PassCanvas/Code/CMakeLists.txt
  100. 3 3
      Gems/Atom/Tools/ShaderManagementConsole/CMakeLists.txt

+ 5 - 4
AutomatedTesting/Gem/CMakeLists.txt

@@ -6,9 +6,10 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("AutomatedTesting")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
-add_subdirectory(PythonTests)
+
+add_subdirectory(PythonTests)

+ 16 - 7
AutomatedTesting/Gem/Code/CMakeLists.txt

@@ -9,7 +9,7 @@
 o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
 
 ly_add_target(
-    NAME AutomatedTesting ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         automatedtesting_files.cmake
@@ -36,14 +36,23 @@ ly_add_target(
         *.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AutomatedTestingModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 # if enabled, AutomatedTesting is used by all kinds of applications
-ly_create_alias(NAME AutomatedTesting.Builders NAMESPACE Gem TARGETS Gem::AutomatedTesting)
-ly_create_alias(NAME AutomatedTesting.Tools    NAMESPACE Gem TARGETS Gem::AutomatedTesting)
-ly_create_alias(NAME AutomatedTesting.Clients  NAMESPACE Gem TARGETS Gem::AutomatedTesting)
-ly_create_alias(NAME AutomatedTesting.Servers  NAMESPACE Gem TARGETS Gem::AutomatedTesting)
-ly_create_alias(NAME AutomatedTesting.Unified  NAMESPACE Gem TARGETS Gem::AutomatedTesting)
+ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Tools    NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Clients  NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Servers  NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Unified  NAMESPACE Gem TARGETS Gem::${gem_name})
 
-# Add project to the list server projects to create the AutomatedTesting.ServerLauncher
+# Add project to the list server projects to create the ${gem_name}.ServerLauncher
 if(PAL_TRAIT_BUILD_SERVER_SUPPORTED)
     set_property(GLOBAL APPEND PROPERTY LY_LAUNCHER_SERVER_PROJECTS AutomatedTesting)
 endif()

+ 4 - 3
AutomatedTesting/Gem/Code/Source/AutomatedTestingModule.cpp

@@ -44,7 +44,8 @@ namespace AutomatedTesting
     };
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AutomatedTesting::AutomatedTestingModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AutomatedTesting, AutomatedTesting::AutomatedTestingModule)
+#endif

+ 3 - 3
AutomatedTesting/Gem/PythonCoverage/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("PythonCoverage")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 15 - 6
AutomatedTesting/Gem/PythonCoverage/Code/CMakeLists.txt

@@ -12,7 +12,7 @@ include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
 if(PAL_TRAIT_PYTHONCOVERAGE_SUPPORTED)
     if(PAL_TRAIT_BUILD_HOST_TOOLS)
         ly_add_target(
-            NAME PythonCoverage.Editor.Static STATIC
+            NAME ${gem_name}.Editor.Static STATIC
             NAMESPACE Gem
             FILES_CMAKE
                 pythoncoverage_editor_files.cmake
@@ -34,10 +34,10 @@ if(PAL_TRAIT_PYTHONCOVERAGE_SUPPORTED)
         )
 
         ly_add_target(
-            NAME PythonCoverage.Editor GEM_MODULE
+            NAME ${gem_name}.Editor GEM_MODULE
             NAMESPACE Gem
             AUTOMOC
-            OUTPUT_NAME Gem.PythonCoverage.Editor
+            OUTPUT_NAME Gem.${gem_name}.Editor
             FILES_CMAKE
                 pythoncoverage_editor_shared_files.cmake
             COMPILE_DEFINITIONS
@@ -50,10 +50,19 @@ if(PAL_TRAIT_PYTHONCOVERAGE_SUPPORTED)
                     Include
             BUILD_DEPENDENCIES
                 PUBLIC
-                    Gem::PythonCoverage.Editor.Static
+                    Gem::${gem_name}.Editor.Static
         )
 
-        ly_create_alias(NAME PythonCoverage.Tools    NAMESPACE Gem TARGETS Gem::PythonCoverage.Editor)
-        ly_create_alias(NAME PythonCoverage.Builders NAMESPACE Gem TARGETS Gem::PythonCoverage.Editor)
+        # Inject the gem name into the Module source file
+        ly_add_source_properties(
+            SOURCES
+                Source/PythonCoverageEditorModule.cpp
+            PROPERTY COMPILE_DEFINITIONS
+                VALUES
+                    O3DE_GEM_NAME=${gem_name}
+                    O3DE_GEM_VERSION=${gem_version})
+
+        ly_create_alias(NAME ${gem_name}.Tools    NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
+        ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
     endif()
 endif()

+ 5 - 1
AutomatedTesting/Gem/PythonCoverage/Code/Source/PythonCoverageEditorModule.cpp

@@ -31,4 +31,8 @@ namespace PythonCoverage
     }
 } // namespace PythonCoverage
 
-AZ_DECLARE_MODULE_CLASS(Gem_PythonCoverageEditor, PythonCoverage::PythonCoverageEditorModule)
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Editor), PythonCoverage::PythonCoverageEditorModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_PythonCoverage_Editor, PythonCoverage::PythonCoverageEditorModule)
+#endif

+ 2 - 2
Code/Framework/AzCore/AzCore/Memory/ChildAllocatorSchema.h

@@ -150,9 +150,9 @@ namespace AZ
         {
             AZ_Assert(
                 m_totalAllocatedBytes >= 0,
-                "Total allocated bytes is less than zero with a value of %td. Was deallocate() invoked with an address "
+                R"(Child Allocator "%s": Total allocated bytes is less than zero with a value of %td. Was deallocate() invoked with an address )"
                 "that is not associated with this allocator? This should never occur",
-                m_totalAllocatedBytes.load());
+                GetName(), m_totalAllocatedBytes.load());
             return static_cast<size_type>(m_totalAllocatedBytes);
         }
 

+ 171 - 48
Code/Framework/AzCore/AzCore/Memory/HphaAllocator.cpp

@@ -406,7 +406,6 @@ namespace AZ
 
         // helper functions to manipulate block headers
         void split_block(block_header* bl, size_t size);
-        block_header* shift_block(block_header* bl, size_t offs);
         block_header* coalesce_block(block_header* bl);
 
         void* tree_system_alloc(size_t size);
@@ -416,6 +415,7 @@ namespace AZ
         block_header* tree_extract_bucket_page();
         block_header* tree_add_block(void* mem, size_t size);
         block_header* tree_grow(size_t size);
+        block_header* tree_grow_aligned(size_t size, size_t alignment);
         void tree_attach(block_header* bl);
         void tree_detach(block_header* bl);
         void tree_purge_block(block_header* bl);
@@ -1457,26 +1457,6 @@ namespace AZ
         newBl->set_unused();
     }
 
-    template<bool DebugAllocatorEnable>
-    auto HphaSchemaBase<DebugAllocatorEnable>::HpAllocator::shift_block(block_header* bl, size_t offs) -> block_header*
-    {
-        HPPA_ASSERT(offs > 0);
-        block_header* prev = bl->prev();
-        bl->unlink();
-        bl = (block_header*)((char*)bl + offs);
-        bl->link_after(prev);
-        bl->set_unused();
-
-        // Shifting this block increased the size of the previous block. If
-        // that block is in use, add that extra offset to the total in use
-        // bytes for the tree
-        if (prev->used())
-        {
-            mTotalAllocatedSizeTree += offs;
-        }
-        return bl;
-    }
-
     template<bool DebugAllocatorEnable>
     auto HphaSchemaBase<DebugAllocatorEnable>::HpAllocator::coalesce_block(block_header* bl) -> block_header*
     {
@@ -1556,6 +1536,116 @@ namespace AZ
         return nullptr;
     }
 
+    template<bool DebugAllocatorEnable>
+    auto HphaSchemaBase<DebugAllocatorEnable>::HpAllocator::tree_grow_aligned(size_t size, size_t alignment) -> block_header*
+    {
+        const size_t sizeWithBlockHeaders = size + 3 * sizeof(block_header); // two fences plus one fake
+
+        // tree_system_alloc() will return an offset that is a multiple of OS_VIRTUAL_PAGE_SIZE which is 64KiB
+        // The following tree_add_block() call will add a dummy block at the beginning of the allocated offset
+        // which has a size of 0 which including the block header would put the offset of the real block header at
+        // a multiple of 16(sizeof block_header) and the actual memory address for use at a multiple of 32
+        //
+        // So tree_system_alloc will return an address of the form (0x10000 * N) where is N some integer
+        // mem_offset = (0x10000 * N) (multiple of 64KiB)
+        //
+        // tree_add_block() then creates a dummy_block of size 0, followed by a real_block of the actual size
+        // dummy_block_header_offset = (0x10000 * N) (multiple of 64KiB and also a multiple of 16 as well)
+        // real_block_header_offset = (0x10000 * N) + 16 (multiple of 16)
+        // real_block_memory_offset = (0x10000 * N) + 32 (multiple of 32)
+        //
+        // This means the return result tree_add_block() is a 32-byte aligned memory address
+        // So any alignment <= 32 doesn't need any additional padding memory to be supplied to tree_system_alloc to work
+
+        // Now if the alignment is 64, then a real_block_memory_offset needs to be adjusted to be a multiple of 64
+        // In order for that to occur another block(a free block) needs to be inserted between the dummy block and the real block
+        // to be at an offset that is a multiple of 64 - sizeof(block_header)
+        // The first candidate for the real block would be to have a block header at offset 48
+        // free_block_header_offset = (0x10000 * N) + 16
+        // free_block_memory_offset = (0x10000 * N) + 32
+        // real_block_header_offset = (0x10000 * N) + 48
+        // real_block_memory_offset = (0x10000 * N) + 64
+        // However there is a problem here where a free block is re-used as a free node in an intrusive_multiset
+        // to make it easier to find the memory allocation free blocks when not in use.
+        // Now because a node in an intrusive_multiset is 40 bytes(see `sizeof free_node`) then this enforces
+        // that the minimum distance between the free_block_header_offset and real_block_header_offset must be
+        // 56 bytes (sizeof(block_header) + sizeof(free_node))
+        // But as can be seen the distance from the `free_block_memory_offset` to the `real_block_header_offset`
+        // is only 16 bytes.
+        // 
+        // So the next candidate for the real block would be to have a block header at offset 112 (128 - sizeof(block_header))
+        // free_block_header_offset = (0x10000 * N) + 112
+        // free_block_memory_offset = (0x10000 * N) + 128
+        // This allow the actual real memory address to be to be 64 byte aligned, while making sure the free block
+        // has enough space(>= 40 bytes) to store a free node
+        //
+        // Now once for alignments >=128, the same amount of padding memory that is used for an alignment of 64 would work
+        // since the free_block_memory_offset would have 80 bytes of space which is greater than the 40 bytes that is required
+        // Ex. alignment=128
+        // free_block_header_offset = (0x10000 * N) + 16
+        // free_block_memory_offset = (0x10000 * N) + 32
+        // real_block_header_offset = (0x10000 * N) + 112
+        // real_block_memory_offset = (0x10000 * N) + 128
+        // Ex. alignment=256
+        // free_block_header_offset = (0x10000 * N) + 16
+        // free_block_memory_offset = (0x10000 * N) + 32
+        // real_block_header_offset = (0x10000 * N) + 244
+        // real_block_memory_offset = (0x10000 * N) + 256
+        //
+        // Now these *_aligned version of functions are only called when the alignment is > DEFAULT_ALIGNMENT (8)
+        // So when the alignment 16 or 32 the `sizeWithBlockHeaders` variable above is sufficient
+        // If the alignment is 64, then `sizeWithBlockHeaders` variable needs to make sure it account for at least an alignment of
+        // `alignment + 2 * sizeof(block header)` which is 96 bytes to allow a free_block to be inserted
+        // before the aligned offset
+        // If the alignment >= 128 , then `sizeWithBlockHeaders` variables needs to account for `alignment - 2 *sizeof(block_header)`
+        size_t sizeWithBlockHeadersAndAlignmentPadding = sizeWithBlockHeaders;
+        if (alignment == 64)
+        {
+            sizeWithBlockHeadersAndAlignmentPadding += alignment + 2 * sizeof(block_header);
+        }
+        else if (alignment > 64)
+        {
+            sizeWithBlockHeadersAndAlignmentPadding += alignment - 2 * sizeof(block_header);
+        }
+
+        const size_t newSize =
+            (sizeWithBlockHeadersAndAlignmentPadding < m_treePageSize)
+            ? AZ::SizeAlignUp(sizeWithBlockHeadersAndAlignmentPadding, m_treePageSize)
+            : sizeWithBlockHeadersAndAlignmentPadding;
+        HPPA_ASSERT(newSize >= sizeWithBlockHeaders);
+
+        if (void* mem = tree_system_alloc(newSize))
+        {
+            constexpr size_t MinRequiredSize = sizeof(block_header) + sizeof(free_node);
+            block_header* newBl = tree_add_block(mem, newSize);
+            // new block memory is only 32-byte aligned at this point
+            size_t alignmentOffs = AZ::PointerAlignUp((char*)newBl->mem(), alignment) - (char*)newBl->mem();
+            if (alignmentOffs > 0 && alignmentOffs < MinRequiredSize)
+            {
+                // Make sure the alignment offset is large enough, that a free block
+                // can be created between the new block and the previous block
+                alignmentOffs = AZ::PointerAlignUp((char*)newBl->mem() + MinRequiredSize, alignment) - (char*)newBl->mem();
+            }
+
+            if (alignmentOffs >= MinRequiredSize)
+            {
+                split_block(newBl, alignmentOffs - sizeof(block_header));
+                tree_attach(newBl);
+                newBl = newBl->next();
+            }
+
+            AZ_Assert(
+                reinterpret_cast<uintptr_t>(newBl->mem()) % alignment == 0,
+                "The allocated memory address %p is not aligned to %zu",
+                newBl->mem(),
+                alignment);
+            AZ_Assert(newBl->size() >= size, "The allocated memory size %zu is less than %zu", newBl->size(), size);
+
+            return newBl;
+        }
+        return nullptr;
+    }
+
     template<bool DebugAllocatorEnable>
     auto HphaSchemaBase<DebugAllocatorEnable>::HpAllocator::tree_extract(size_t size) -> block_header*
     {
@@ -1574,15 +1664,26 @@ namespace AZ
     template<bool DebugAllocatorEnable>
     auto HphaSchemaBase<DebugAllocatorEnable>::HpAllocator::tree_extract_aligned(size_t size, size_t alignment) -> block_header*
     {
-        // get the sequence of nodes from size to (size + alignment - 1) including
-        size_t sizeUpper = size + alignment;
+        // get the sequence of nodes from size to (size + sizeof(block_header) + sizeof(free_node) + (alignment - 1)) including
+        constexpr size_t MinRequiredSize = sizeof(block_header) + sizeof(free_node);
+
+        size_t sizeUpper = size + alignment + MinRequiredSize;
         auto bestNode = mFreeTree.lower_bound(size);
         auto lastNode = mFreeTree.upper_bound(sizeUpper);
         while (bestNode != lastNode)
         {
             free_node* node = &*bestNode;
-            size_t alignmentOffs = AZ::PointerAlignUp((char*)node, alignment) - (char*)node;
-            if (node->get_block()->size() >= size + alignmentOffs)
+            block_header* candidateBlock = bestNode->get_block();
+
+            size_t  alignmentOffs = AZ::PointerAlignUp((char*)node, alignment) - (char*)node;
+            if (alignmentOffs > 0 && alignmentOffs < MinRequiredSize)
+            {
+                // Make sure the alignment offset is large enough, that a free block
+                // can be created between the new block and the previous block
+                alignmentOffs = AZ::PointerAlignUp((char*)node + MinRequiredSize, alignment) - (char*)node;
+            }
+            // The alignmentOffs at this point is either 0 or >= sizeof(block_header) + sizeof(free_node)
+            if (candidateBlock->size() >= size + alignmentOffs)
             {
                 break;
             }
@@ -1598,8 +1699,29 @@ namespace AZ
         {
             bestNode = bestNode->next(); // improves removal time
         }
+
+        // Re-query the alignment offset needed to get to a block that is aligned
+        free_node* bestNodeAddress = &*bestNode;
+        size_t alignmentOffs = AZ::PointerAlignUp((char*)bestNodeAddress, alignment) - (char*)bestNodeAddress;
+        if (alignmentOffs > 0 && alignmentOffs < MinRequiredSize)
+        {
+            // Make sure the alignment offset is large enough, that a free block
+            // can be created between the new block and the previous block
+            alignmentOffs = AZ::PointerAlignUp((char*)bestNodeAddress + MinRequiredSize, alignment) - (char*)bestNodeAddress;
+        }
+
         block_header* bestBlock = bestNode->get_block();
         tree_detach(bestBlock);
+
+        // Return an block_header that points to aligned block that can be used
+        // split_block is used to create a free block for the section
+        // between the best block current memory address and the aligned memory address
+        if (alignmentOffs >= MinRequiredSize)
+        {
+            split_block(bestBlock, alignmentOffs - sizeof(block_header));
+            tree_attach(bestBlock);
+            bestBlock = bestBlock->next();
+        }
         return bestBlock;
     }
 
@@ -1698,29 +1820,26 @@ namespace AZ
             size = sizeof(free_node);
         }
         size = AZ::SizeAlignUp(size, sizeof(block_header));
-        block_header* newBl = tree_extract_aligned(size, alignment);
-        if (!newBl)
+
+        constexpr size_t MinRequiredSize = sizeof(block_header) + sizeof(free_node);
+
+        // The block header + free_node size is the minimum amount
+        // of bytes needed for a block
+        block_header* alignedBlockHeader = tree_extract_aligned(size, alignment);
+        if (alignedBlockHeader == nullptr)
         {
-            newBl = tree_grow(size + alignment);
-            if (!newBl)
+            alignedBlockHeader = tree_grow_aligned(size, alignment);
+            if (alignedBlockHeader == nullptr)
             {
                 return AllocateAddress{};
             }
         }
+
+        block_header* newBl = alignedBlockHeader;
+
         HPPA_ASSERT(newBl && newBl->size() >= size);
-        size_t alignmentOffs = AZ::PointerAlignUp((char*)newBl->mem(), alignment) - (char*)newBl->mem();
-        HPPA_ASSERT(newBl->size() >= size + alignmentOffs);
-        if (alignmentOffs >= sizeof(block_header) + sizeof(free_node))
-        {
-            split_block(newBl, alignmentOffs - sizeof(block_header));
-            tree_attach(newBl);
-            newBl = newBl->next();
-        }
-        else if (alignmentOffs > 0)
-        {
-            newBl = shift_block(newBl, alignmentOffs);
-        }
-        if (newBl->size() >= size + sizeof(block_header) + sizeof(free_node))
+
+        if (newBl->size() >= size + MinRequiredSize)
         {
             split_block(newBl, size);
             tree_attach(newBl->next());
@@ -1859,6 +1978,14 @@ namespace AZ
         block_header* prev = bl->prev();
         size_t prevSize = prev->used() ? 0 : prev->size() + sizeof(block_header);
         size_t alignmentOffs = prev->used() ? 0 : AZ::PointerAlignUp((char*)prev->mem(), alignment) - (char*)prev->mem();
+
+        constexpr size_t MinRequiredSize = sizeof(free_node) + sizeof(block_header);
+        if (alignmentOffs > 0 && alignmentOffs < MinRequiredSize)
+        {
+            // Make sure the alignment offset is large enough, that a free block
+            // can be created between the new block and the previous block
+            alignmentOffs = AZ::PointerAlignUp((char*)prev->mem() + MinRequiredSize, alignment) - (char*)prev->mem();
+        }
         if (blSize + prevSize + nextSize >= size + alignmentOffs)
         {
             HPPA_ASSERT(!prev->used());
@@ -1869,22 +1996,18 @@ namespace AZ
                 tree_detach(next);
                 next->unlink();
             }
-            if (alignmentOffs >= sizeof(block_header) + sizeof(free_node))
+            if (alignmentOffs >= MinRequiredSize)
             {
                 split_block(prev, alignmentOffs - sizeof(block_header));
                 tree_attach(prev);
                 prev = prev->next();
             }
-            else if (alignmentOffs > 0)
-            {
-                prev = shift_block(prev, alignmentOffs);
-            }
             bl = prev;
             bl->set_used();
             HPPA_ASSERT(bl->size() >= size && ((size_t)bl->mem() & (alignment - 1)) == 0);
             void* newPtr = bl->mem();
             memmove(newPtr, ptr, blSize - MEMORY_GUARD_SIZE);
-            if (bl->size() >= size + sizeof(block_header) + sizeof(free_node))
+            if (bl->size() >= size + MinRequiredSize)
             {
                 split_block(bl, size);
                 tree_attach(bl->next());

+ 2 - 2
Code/Framework/AzCore/AzCore/Memory/SimpleSchemaAllocator.h

@@ -159,9 +159,9 @@ namespace AZ
         {
             AZ_Assert(
                 m_totalAllocatedBytes >= 0,
-                "Total allocated bytes is less than zero with a value of %td. Was deallocate() invoked with an address "
+                R"(SchemaAllocator "%s": Total allocated bytes is less than zero with a value of %td. Was deallocate() invoked with an address )"
                 "that is not associated with the allocator? This should never occur",
-                m_totalAllocatedBytes.load());
+                GetName(), m_totalAllocatedBytes.load());
             return static_cast<size_type>(m_totalAllocatedBytes);
         }
 

+ 4 - 3
Gems/AWSClientAuth/CMakeLists.txt

@@ -6,10 +6,11 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("AWSClientAuth")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
 
+
 ly_install_directory(DIRECTORIES cdk)

+ 28 - 19
Gems/AWSClientAuth/Code/CMakeLists.txt

@@ -9,7 +9,7 @@
 o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
 
 ly_add_target(
-    NAME AWSClientAuth.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         awsclientauth_files.cmake
@@ -29,7 +29,7 @@ ly_add_target(
 )
 
 ly_add_target( 
-    NAME AWSClientAuth ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         awsclientauth_shared_files.cmake
@@ -44,13 +44,22 @@ ly_add_target(
             3rdParty::AWSNativeSDK::AWSClientAuth
             3rdParty::AWSNativeSDK::Core
         PUBLIC
-            Gem::AWSClientAuth.Static
+            Gem::${gem_name}.Static
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AWSClientAuthModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 if(PAL_TRAIT_BUILD_HOST_TOOLS)
 
 ly_add_target( 
-    NAME AWSClientAuth.Editor ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Editor ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         awsclientauth_editor_files.cmake
@@ -72,55 +81,55 @@ ly_add_target(
             3rdParty::AWSNativeSDK::AWSClientAuth
             3rdParty::AWSNativeSDK::Core
     RUNTIME_DEPENDENCIES
-        Gem::AWSClientAuth
+        Gem::${gem_name}
 )
 
 endif()
 
 
-# Load the "Gem::AWSClientAuth" module in all types of applications.
+# Load the "Gem::${gem_name}" module in all types of applications.
 ly_create_alias(
-    NAME AWSClientAuth.Servers
+    NAME ${gem_name}.Servers
     NAMESPACE Gem
     TARGETS
-        Gem::AWSClientAuth
+        Gem::${gem_name}
         Gem::AWSCore.Servers
         Gem::HttpRequestor.Servers
 )
 
 ly_create_alias(
-    NAME AWSClientAuth.Clients
+    NAME ${gem_name}.Clients
     NAMESPACE Gem
     TARGETS
-        Gem::AWSClientAuth
+        Gem::${gem_name}
         Gem::AWSCore.Clients
         Gem::HttpRequestor.Clients
 )
 
 ly_create_alias(
-    NAME AWSClientAuth.Unified
+    NAME ${gem_name}.Unified
     NAMESPACE Gem
     TARGETS
-        Gem::AWSClientAuth
+        Gem::${gem_name}
         Gem::AWSCore.Unified
         Gem::HttpRequestor.Unified
 )
 
 if (PAL_TRAIT_BUILD_HOST_TOOLS)
     ly_create_alias(
-        NAME AWSClientAuth.Tools
+        NAME ${gem_name}.Tools
         NAMESPACE Gem
         TARGETS
-            Gem::AWSClientAuth.Editor
+            Gem::${gem_name}.Editor
             Gem::AWSCore.Tools
             Gem::HttpRequestor.Tools
     )
 
     ly_create_alias(
-        NAME AWSClientAuth.Builders
+        NAME ${gem_name}.Builders
         NAMESPACE Gem
         TARGETS
-            Gem::AWSClientAuth
+            Gem::${gem_name}
             Gem::AWSCore.Builders
             Gem::HttpRequestor.Builders
     )
@@ -131,7 +140,7 @@ endif()
 ################################################################################
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     ly_add_target(
-        NAME AWSClientAuth.Tests MODULE
+        NAME ${gem_name}.Tests MODULE
         NAMESPACE Gem
         FILES_CMAKE
             awsclientauth_test_files.cmake
@@ -147,7 +156,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 AZ::AzCore
                 AZ::AzFramework
                 AZ::AWSNativeSDKTestLibs
-                Gem::AWSClientAuth.Static
+                Gem::${gem_name}.Static
                 Gem::AWSCore
                 Gem::HttpRequestor
         RUNTIME_DEPENDENCIES
@@ -155,7 +164,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
             Gem::HttpRequestor
    )
    ly_add_googletest(
-        NAME Gem::AWSClientAuth.Tests
+        NAME Gem::${gem_name}.Tests
         LABELS REQUIRES_tiaf
     )
 endif()

+ 4 - 3
Gems/AWSClientAuth/Code/Source/AWSClientAuthModule.cpp

@@ -44,7 +44,8 @@ namespace AWSClientAuth
 
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AWSClientAuth::AWSClientAuthModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AWSClientAuth, AWSClientAuth::AWSClientAuthModule)
+#endif

+ 4 - 3
Gems/AWSCore/CMakeLists.txt

@@ -6,10 +6,11 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("AWSCore")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
 
+
 ly_install_directory(DIRECTORIES cdk)

+ 53 - 35
Gems/AWSCore/Code/CMakeLists.txt

@@ -14,7 +14,7 @@ endif()
 
 
 ly_add_target(
-    NAME AWSCore.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         awscore_files.cmake
@@ -35,7 +35,7 @@ ly_add_target(
 )
 
 ly_add_target( 
-    NAME AWSCore ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         awscore_shared_files.cmake
@@ -46,29 +46,38 @@ ly_add_target(
         PRIVATE
             AZ::AzCore
         PUBLIC
-            Gem::AWSCore.Static
+            Gem::${gem_name}.Static
 )
 
-# clients and servers will use the above Gem::AWSCore module.
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AWSCoreModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
+# clients and servers will use the above Gem::${gem_name} module.
 ly_create_alias(
-    NAME AWSCore.Servers
+    NAME ${gem_name}.Servers
     NAMESPACE Gem
     TARGETS
-        Gem::AWSCore
+        Gem::${gem_name}
 )
 
 ly_create_alias(
-    NAME AWSCore.Clients
+    NAME ${gem_name}.Clients
     NAMESPACE Gem
     TARGETS
-        Gem::AWSCore
+        Gem::${gem_name}
 )
 
 ly_create_alias(
-    NAME AWSCore.Unified
+    NAME ${gem_name}.Unified
     NAMESPACE Gem
     TARGETS
-        Gem::AWSCore
+        Gem::${gem_name}
 )
 
 if (PAL_TRAIT_BUILD_HOST_TOOLS)
@@ -76,7 +85,7 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
     include(${pal_dir}/PAL_traits_editor_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
 
     ly_add_target(
-        NAME AWSCore.Editor.Static STATIC
+        NAME ${gem_name}.Editor.Static STATIC
         NAMESPACE Gem
         FILES_CMAKE
             awscore_editor_files.cmake
@@ -92,14 +101,14 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AzQtComponents
                 3rdParty::Qt::Core
                 3rdParty::Qt::Widgets
-                Gem::AWSCore.Static
+                Gem::${gem_name}.Static
             PUBLIC
                 ${additional_tool_deps}
                 3rdParty::AWSNativeSDK::AWSCore
     )
 
     ly_add_target(
-        NAME AWSCore.Editor GEM_MODULE
+        NAME ${gem_name}.Editor GEM_MODULE
         NAMESPACE Gem
         FILES_CMAKE
             awscore_editor_shared_files.cmake
@@ -109,15 +118,24 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
         BUILD_DEPENDENCIES
             PRIVATE
                 AZ::AzCore
-                Gem::AWSCore.Editor.Static
+                Gem::${gem_name}.Editor.Static
     )
 
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/AWSCoreEditorModule.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
+
     if (PAL_TRAIT_ENABLE_RESOURCE_MAPPING_TOOL)
 
         # This target is not a real gem module
         # It is not meant to be loaded by the ModuleManager in C++
         ly_add_target(
-            NAME AWSCore.ResourceMappingTool MODULE
+            NAME ${gem_name}.ResourceMappingTool MODULE
             NAMESPACE Gem
             OUTPUT_SUBDIRECTORY AWSCoreEditorQtBin
             FILES_CMAKE
@@ -127,32 +145,32 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
                     Source
             BUILD_DEPENDENCIES
                 PRIVATE
-                    Gem::AWSCore.Editor.Static
+                    Gem::${gem_name}.Editor.Static
             RUNTIME_DEPENDENCIES
                 3rdParty::pyside2
 
         )
-        ly_add_dependencies(AWSCore.Editor AWSCore.ResourceMappingTool)
+        ly_add_dependencies(${gem_name}.Editor ${gem_name}.ResourceMappingTool)
 
         ly_install_directory(DIRECTORIES Tools/ResourceMappingTool)
         
     endif()
 
-    # Builders and Tools (such as the Editor use AWSCore.Editor) use the .Editor module above.
+    # Builders and Tools (such as the Editor use ${gem_name}.Editor) use the .Editor module above.
     ly_create_alias(
-        NAME AWSCore.Tools
+        NAME ${gem_name}.Tools
         NAMESPACE Gem
         TARGETS
-            Gem::AWSCore
-            Gem::AWSCore.Editor
+            Gem::${gem_name}
+            Gem::${gem_name}.Editor
     )
 
     ly_create_alias(
-        NAME AWSCore.Builders
+        NAME ${gem_name}.Builders
         NAMESPACE Gem
         TARGETS
-            Gem::AWSCore
-            Gem::AWSCore.Editor
+            Gem::${gem_name}
+            Gem::${gem_name}.Editor
     )
 
 endif()
@@ -162,7 +180,7 @@ endif()
 ################################################################################
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     ly_add_target(
-        NAME AWSCore.Tests MODULE
+        NAME ${gem_name}.Tests MODULE
         NAMESPACE Gem
         FILES_CMAKE
             awscore_tests_files.cmake
@@ -176,26 +194,26 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 AZ::AzTest
                 AZ::AzFramework
                 AZ::AWSNativeSDKTestLibs
-                Gem::AWSCore.Static
+                Gem::${gem_name}.Static
     )
 
     ly_add_googletest(
-        NAME Gem::AWSCore.Tests
+        NAME Gem::${gem_name}.Tests
         LABELS REQUIRES_tiaf
     )
 
     ly_add_target_files(
         TARGETS
-            AWSCore.Tests
+            ${gem_name}.Tests
         FILES
             ${CMAKE_CURRENT_SOURCE_DIR}/../Assets/resource_mapping_schema.json
         OUTPUT_SUBDIRECTORY
-            Gems/AWSCore
+            Gems/${gem_name}
     )
 
     if (PAL_TRAIT_BUILD_HOST_TOOLS)
         ly_add_target(
-            NAME AWSCore.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+            NAME ${gem_name}.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
             NAMESPACE Gem
             FILES_CMAKE
                 awscore_editor_tests_files.cmake
@@ -216,13 +234,13 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                     3rdParty::Qt::Widgets
                     AZ::AzTest
                     AZ::AWSNativeSDKTestLibs
-                    Gem::AWSCore.Static
-                    Gem::AWSCore.Editor.Static
+                    Gem::${gem_name}.Static
+                    Gem::${gem_name}.Editor.Static
         )
         set(SUPPORTED_PLATFORMS "Windows")
         if ("${PAL_PLATFORM_NAME}" IN_LIST SUPPORTED_PLATFORMS)
             ly_add_googletest(
-                NAME Gem::AWSCore.Editor.Tests
+                NAME Gem::${gem_name}.Editor.Tests
                 LABELS REQUIRES_tiaf
             )
         endif()
@@ -231,11 +249,11 @@ endif()
 
 ly_add_target_files(
     TARGETS
-        AWSCore
+        ${gem_name}
     FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/../Assets/resource_mapping_schema.json
     OUTPUT_SUBDIRECTORY
-        Gems/AWSCore
+        Gems/${gem_name}
 )
 
 ly_install_directory(DIRECTORIES Tools/ResourceMappingTool)

+ 4 - 3
Gems/AWSCore/Code/Source/AWSCoreEditorModule.cpp

@@ -34,7 +34,8 @@ namespace AWSCore
 
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Editor), AWSCore::AWSCoreEditorModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AWSCore_Editor, AWSCore::AWSCoreEditorModule)
+#endif

+ 4 - 3
Gems/AWSCore/Code/Source/AWSCoreModule.cpp

@@ -37,7 +37,8 @@ namespace AWSCore
 
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AWSCore::AWSCoreModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AWSCore, AWSCore::AWSCoreModule)
+#endif

+ 4 - 3
Gems/AWSCore/Code/Source/AWSCoreResourceMappingToolModule.cpp

@@ -35,7 +35,8 @@ namespace AWSCore
     };
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _ResourceMappingTool), AWSCore::AWSCoreResourceMappingToolModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AWSCore_ResourceMappingTool, AWSCore::AWSCoreResourceMappingToolModule)
+#endif

+ 2 - 11
Gems/AWSGameLift/CMakeLists.txt

@@ -6,18 +6,9 @@
 #
 #
 
-if (NOT gem_name)
-    set(gem_name "AWSGameLift")
-endif()
+o3de_gem_setup("AWSGameLift")
 
-# Fallback to using the current source CMakeLists.txt directory as the gem root path
-if (NOT gem_path)
-    set(gem_path ${CMAKE_CURRENT_SOURCE_DIR})
-endif()
-
-set(gem_json ${gem_path}/gem.json)
-
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
 

+ 23 - 14
Gems/AWSGameLift/Code/AWSGameLiftClient/CMakeLists.txt

@@ -7,7 +7,7 @@
 #
 
 ly_add_target(
-    NAME AWSGameLift.Client.Static STATIC
+    NAME ${gem_name}.Client.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         awsgamelift_client_files.cmake
@@ -30,7 +30,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME AWSGameLift.Clients ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Clients ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         awsgamelift_client_shared_files.cmake
@@ -43,15 +43,24 @@ ly_add_target(
             Gem::Multiplayer.Common.Static
             3rdParty::AWSNativeSDK::GameLiftClient
         PUBLIC
-            Gem::AWSGameLift.Client.Static
+            Gem::${gem_name}.Client.Static
     RUNTIME_DEPENDENCIES
         Gem::AWSCore.Clients
 )
 
-# Load the "Gem::AWSGameLift" module in all types of applications.
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AWSGameLiftClientModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
+# Load the "Gem::${gem_name}" module in all types of applications.
 if (PAL_TRAIT_BUILD_HOST_TOOLS)
     ly_add_target(
-        NAME AWSGameLift.Editor ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+        NAME ${gem_name}.Editor ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             awsgamelift_client_editor_files.cmake
@@ -75,23 +84,23 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
                 Gem::Multiplayer.Unified.Static
                 3rdParty::AWSNativeSDK::GameLiftClient
         RUNTIME_DEPENDENCIES
-                Gem::AWSGameLift.Clients
+                Gem::${gem_name}.Clients
     )
 
     ly_create_alias(
-        NAME AWSGameLift.Tools
+        NAME ${gem_name}.Tools
         NAMESPACE Gem
         TARGETS
-            Gem::AWSGameLift.Editor
+            Gem::${gem_name}.Editor
             Gem::AWSCore.Tools
     )
 
     ly_create_alias(
-        NAME AWSGameLift.Builders
+        NAME ${gem_name}.Builders
         NAMESPACE Gem
         TARGETS
             Gem::AWSCore.Builders
-            Gem::AWSGameLift.Clients
+            Gem::${gem_name}.Clients
     )
 endif()
 
@@ -100,7 +109,7 @@ endif()
 ################################################################################
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     ly_add_target(
-        NAME AWSGameLift.Client.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Client.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             awsgamelift_client_tests_files.cmake
@@ -116,14 +125,14 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 AZ::AzCore
                 AZ::AzTest
                 Gem::AWSCore
-                Gem::AWSGameLift.Client.Static
+                Gem::${gem_name}.Client.Static
                 Gem::Multiplayer.Unified.Static
                 3rdParty::AWSNativeSDK::GameLiftClient
                 AZ::AWSNativeSDKTestLibs
     )
-    # Add AWSGameLift.Client.Tests to googletest
+    # Add ${gem_name}.Client.Tests to googletest
     ly_add_googletest(
-        NAME Gem::AWSGameLift.Client.Tests
+        NAME Gem::${gem_name}.Client.Tests
         LABELS REQUIRES_tiaf
     )
 endif()

+ 4 - 0
Gems/AWSGameLift/Code/AWSGameLiftClient/Source/AWSGameLiftClientModule.cpp

@@ -57,4 +57,8 @@ namespace AWSGameLift
     };
 }// namespace AWSGameLift
 
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Clients), AWSGameLift::AWSGameLiftClientModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AWSGameLift_Clients, AWSGameLift::AWSGameLiftClientModule)
+#endif

+ 16 - 7
Gems/AWSGameLift/Code/AWSGameLiftServer/CMakeLists.txt

@@ -21,7 +21,7 @@ endif()
 
 
 ly_add_target(
-    NAME AWSGameLift.Server.Static STATIC
+    NAME ${gem_name}.Server.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         awsgamelift_server_files.cmake
@@ -41,7 +41,7 @@ ly_add_target(
     )
 
 ly_add_target(
-    NAME AWSGameLift.Servers ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Servers ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         awsgamelift_server_shared_files.cmake
@@ -51,16 +51,25 @@ ly_add_target(
     BUILD_DEPENDENCIES
         PUBLIC
             AZ::AzCore
-            Gem::AWSGameLift.Server.Static
+            Gem::${gem_name}.Server.Static
             3rdParty::AWSGameLiftServerSDK
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AWSGameLiftServerModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 ################################################################################
 # Tests
 ################################################################################
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     ly_add_target(
-        NAME AWSGameLift.Server.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Server.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             awsgamelift_server_tests_files.cmake
@@ -75,12 +84,12 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 AZ::AzCore
                 AZ::AzTest
                 Gem::Multiplayer.Unified.Static
-                Gem::AWSGameLift.Server.Static
+                Gem::${gem_name}.Server.Static
                 3rdParty::AWSGameLiftServerSDK
     )
-    # Add AWSGameLift.Server.Tests to googletest
+    # Add ${gem_name}.Server.Tests to googletest
     ly_add_googletest(
-        NAME Gem::AWSGameLift.Server.Tests
+        NAME Gem::${gem_name}.Server.Tests
         LABELS REQUIRES_tiaf
     )
 endif()

+ 4 - 0
Gems/AWSGameLift/Code/AWSGameLiftServer/Source/AWSGameLiftServerModule.cpp

@@ -42,4 +42,8 @@ namespace AWSGameLift
     };
 }// namespace AWSGameLift
 
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Servers), AWSGameLift::AWSGameLiftServerModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AWSGameLift_Servers, AWSGameLift::AWSGameLiftServerModule)
+#endif

+ 4 - 0
Gems/AWSMetrics/CMakeLists.txt

@@ -6,6 +6,10 @@
 #
 #
 
+o3de_gem_setup("AWSMetrics")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
+
 add_subdirectory(Code)
 
 ly_install_directory(DIRECTORIES cdk)

+ 29 - 20
Gems/AWSMetrics/Code/CMakeLists.txt

@@ -7,7 +7,7 @@
 #
 
 ly_add_target(
-    NAME AWSMetrics.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         awsmetrics_files.cmake
@@ -26,7 +26,7 @@ ly_add_target(
 )
 
 ly_add_target( 
-    NAME AWSMetrics ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         awsmetrics_shared_files.cmake
@@ -39,55 +39,64 @@ ly_add_target(
         PRIVATE
             AZ::AzCore
             AZ::AzFramework
-            Gem::AWSMetrics.Static
+            Gem::${gem_name}.Static
 )
 
-# Load the "Gem::AWSMetrics" module in all types of applications.
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AWSMetricsModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
+# Load the "Gem::${gem_name}" module in all types of applications.
 ly_create_alias(
-    NAME AWSMetrics.Servers
+    NAME ${gem_name}.Servers
     NAMESPACE Gem
     TARGETS
         Gem::AWSCore.Servers
-        Gem::AWSMetrics
+        Gem::${gem_name}
 )
 
 ly_create_alias(
-    NAME AWSMetrics.Clients
+    NAME ${gem_name}.Clients
     NAMESPACE Gem
     TARGETS
         Gem::AWSCore.Clients
-        Gem::AWSMetrics
+        Gem::${gem_name}
 )
 
 ly_create_alias(
-    NAME AWSMetrics.Unified
+    NAME ${gem_name}.Unified
     NAMESPACE Gem
     TARGETS
         Gem::AWSCore.Unified
-        Gem::AWSMetrics
+        Gem::${gem_name}
 )
 
 if (PAL_TRAIT_BUILD_HOST_TOOLS)
     ly_create_alias(
-        NAME AWSMetrics.Tools
+        NAME ${gem_name}.Tools
         NAMESPACE Gem
         TARGETS
             Gem::AWSCore.Tools
-            Gem::AWSMetrics.Editor
+            Gem::${gem_name}.Editor
     )
 
     ly_create_alias(
-        NAME AWSMetrics.Builders
+        NAME ${gem_name}.Builders
         NAMESPACE Gem
         TARGETS
             Gem::AWSCore.Builders
-            Gem::AWSMetrics
+            Gem::${gem_name}
     )
 endif()
 
 if(PAL_TRAIT_BUILD_HOST_TOOLS)
     ly_add_target( 
-    NAME AWSMetrics.Editor ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Editor ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         awsmetrics_editor_files.cmake
@@ -108,8 +117,8 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
             Gem::AWSCore
             3rdParty::AWSNativeSDK::Core
     RUNTIME_DEPENDENCIES
-            Gem::AWSMetrics
-)
+            Gem::${gem_name}
+    )
 endif()
 
 ################################################################################
@@ -117,7 +126,7 @@ endif()
 ################################################################################
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     ly_add_target(
-        NAME AWSMetrics.Tests MODULE
+        NAME ${gem_name}.Tests MODULE
         NAMESPACE Gem
         FILES_CMAKE
             awsmetrics_tests_files.cmake
@@ -131,12 +140,12 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 AZ::AzTest
                 AZ::AzCore
                 AZ::AzFramework
-                Gem::AWSMetrics.Static
+                Gem::${gem_name}.Static
         RUNTIME_DEPENDENCIES
             Gem::AWSCore
     )
     ly_add_googletest(
-        NAME Gem::AWSMetrics.Tests
+        NAME Gem::${gem_name}.Tests
         LABELS REQUIRES_tiaf
     )
 endif()

+ 4 - 3
Gems/AWSMetrics/Code/Source/AWSMetricsModule.cpp

@@ -46,7 +46,8 @@ namespace AWSMetrics
     }
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AWSMetrics::AWSMetricsModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AWSMetrics, AWSMetrics::AWSMetricsModule)
+#endif

+ 4 - 3
Gems/Achievements/CMakeLists.txt

@@ -6,8 +6,9 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Acheivements")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
+

+ 13 - 4
Gems/Achievements/Code/CMakeLists.txt

@@ -9,7 +9,7 @@
 o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
 
 ly_add_target(
-    NAME Achievements.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     PLATFORM_INCLUDE_FILES
         ${pal_source_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}.cmake
@@ -28,7 +28,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Achievements ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         achievements_shared_files.cmake
@@ -39,8 +39,17 @@ ly_add_target(
             Source
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::Achievements.Static
+            Gem::${gem_name}.Static
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AchievementsModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 # we'll load the above "Gem::Achievements" module in clients only.
-ly_create_alias(NAME Achievements.Clients NAMESPACE Gem TARGETS Gem::Achievements)
+ly_create_alias(NAME ${gem_name}.Clients NAMESPACE Gem TARGETS Gem::${gem_name})

+ 4 - 3
Gems/Achievements/Code/Source/AchievementsModule.cpp

@@ -41,7 +41,8 @@ namespace Achievements
     };
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), Achievements::AchievementsModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Achievements, Achievements::AchievementsModule)
+#endif

+ 1 - 17
Gems/Archive/CMakeLists.txt

@@ -4,23 +4,7 @@
 # SPDX-License-Identifier: Apache-2.0 OR MIT
 #
 
-# Query the gem name from the gem.json file if possible
-# otherwise fallback to using Archive
-o3de_find_ancestor_gem_root(gem_path gem_name "${CMAKE_CURRENT_SOURCE_DIR}")
-if (NOT gem_name)
-    set(gem_name "Archive")
-endif()
-
-# Fallback to using the current source CMakeLists.txt directory as the gem root path
-if (NOT gem_path)
-    set(gem_path ${CMAKE_CURRENT_SOURCE_DIR})
-endif()
-
-set(gem_json ${gem_path}/gem.json)
-
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
-
-o3de_pal_dir(pal_dir ${CMAKE_CURRENT_SOURCE_DIR}/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
+o3de_gem_setup("Archive")
 
 ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 

+ 18 - 0
Gems/Archive/Code/CMakeLists.txt

@@ -78,6 +78,15 @@ ly_add_target(
             Gem::${gem_name}.Private.Object
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/Clients/ArchiveModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 # By default, we will specify that the above target ${gem_name} would be used by
 # Client and Server type targets when this gem is enabled.  If you don't want it
 # active in Clients or Servers by default, delete one of both of the following lines:
@@ -147,6 +156,15 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 Gem::${gem_name}.Editor.Private.Object
     )
 
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/Tools/ArchiveEditorModule.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
+
     # By default, we will specify that the above target ${gem_name} would be used by
     # Tool and Builder type targets when this gem is enabled.  If you don't want it
     # active in Tools or Builders by default, delete one of both of the following lines:

+ 4 - 0
Gems/Archive/Code/Source/Clients/ArchiveModule.cpp

@@ -21,4 +21,8 @@ namespace Archive
     };
 }// namespace Archive
 
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), Archive::ArchiveModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Archive, Archive::ArchiveModule)
+#endif

+ 5 - 1
Gems/Archive/Code/Source/Tools/ArchiveEditorModule.cpp

@@ -57,4 +57,8 @@ namespace Archive
     };
 }// namespace Archive
 
-AZ_DECLARE_MODULE_CLASS(Gem_Archive, Archive::ArchiveEditorModule)
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Editor), Archive::ArchiveEditorModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Archive_Editor, Archive::ArchiveEditorModule)
+#endif

+ 5 - 0
Gems/AssetValidation/CMakeLists.txt

@@ -6,4 +6,9 @@
 #
 #
 
+o3de_gem_setup("AssetValidation")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
+
 add_subdirectory(Code)
+

+ 17 - 8
Gems/AssetValidation/Code/CMakeLists.txt

@@ -7,7 +7,7 @@
 #
 
 ly_add_target(
-    NAME AssetValidation.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         assetvalidation_files.cmake
@@ -24,7 +24,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME AssetValidation ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         assetvalidation_shared_files.cmake
@@ -35,15 +35,24 @@ ly_add_target(
             Include
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::AssetValidation.Static
+            Gem::${gem_name}.Static
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AssetValidationModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 ################################################################################
 # Tests
 ################################################################################
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
     ly_add_target(
-        NAME AssetValidation.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             assetvalidation_tests_files.cmake
@@ -54,17 +63,17 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
         BUILD_DEPENDENCIES
             PRIVATE
                 AZ::AzTest
-                Gem::AssetValidation.Static
+                Gem::${gem_name}.Static
                 AZ::AzFramework
                 AZ::AzFrameworkTestShared
     )
     ly_add_googletest(
-        NAME Gem::AssetValidation.Tests
+        NAME Gem::${gem_name}.Tests
         LABELS REQUIRES_tiaf
     )
 endif()
 
 # AssetValidation should be active in all clients plus tools
-ly_create_alias(NAME AssetValidation.Clients NAMESPACE Gem TARGETS Gem::AssetValidation)
-ly_create_alias(NAME AssetValidation.Tools   NAMESPACE Gem TARGETS Gem::AssetValidation)
+ly_create_alias(NAME ${gem_name}.Clients NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Tools   NAMESPACE Gem TARGETS Gem::${gem_name})
 

+ 4 - 3
Gems/AssetValidation/Code/Source/AssetValidationModule.cpp

@@ -52,7 +52,8 @@ namespace AssetValidation
     };
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AssetValidation::AssetValidationModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_AssetValidation, AssetValidation::AssetValidationModule)
+#endif

+ 4 - 3
Gems/Atom/Asset/ImageProcessingAtom/CMakeLists.txt

@@ -7,8 +7,9 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("ImageProcessingAtom")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
+

+ 16 - 7
Gems/Atom/Asset/ImageProcessingAtom/Code/CMakeLists.txt

@@ -7,7 +7,7 @@
 #
 
 ly_add_target(
-    NAME ImageProcessingAtom.Headers HEADERONLY
+    NAME ${gem_name}.Headers HEADERONLY
     NAMESPACE Gem
     FILES_CMAKE
         imageprocessingatom_headers_files.cmake
@@ -37,7 +37,7 @@ o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLAT
 set(common_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/Common)
 
 ly_add_target(
-    NAME ImageProcessingAtom.Editor.Static STATIC
+    NAME ${gem_name}.Editor.Static STATIC
     NAMESPACE Gem
     AUTOMOC
     AUTOUIC
@@ -87,7 +87,7 @@ ly_add_source_properties(
 )
 
 ly_add_target(
-    NAME ImageProcessingAtom.Editor GEM_MODULE
+    NAME ${gem_name}.Editor GEM_MODULE
 
     NAMESPACE Gem
     FILES_CMAKE
@@ -99,15 +99,24 @@ ly_add_target(
             Include
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::ImageProcessingAtom.Editor.Static
+            Gem::${gem_name}.Editor.Static
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/ImageProcessingModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 ################################################################################
 # Tests
 ################################################################################
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     ly_add_target(
-        NAME ImageProcessingAtom.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             imageprocessing_tests_files.cmake
@@ -117,10 +126,10 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
         BUILD_DEPENDENCIES
             PRIVATE
                 AZ::AzTest
-                Gem::ImageProcessingAtom.Editor.Static
+                Gem::${gem_name}.Editor.Static
     )
     ly_add_googletest(
-        NAME Gem::ImageProcessingAtom.Editor.Tests
+        NAME Gem::${gem_name}.Editor.Tests
         LABELS REQUIRES_tiaf
     )
 endif()

+ 4 - 3
Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessingModule.cpp

@@ -43,7 +43,8 @@ namespace ImageProcessingAtom
     };
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), ImageProcessingAtom::ImageProcessingModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_ImageProcessingAtom, ImageProcessingAtom::ImageProcessingModule)
+#endif

+ 4 - 3
Gems/Atom/Asset/Shader/CMakeLists.txt

@@ -6,8 +6,9 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("AtomShader")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
+

+ 29 - 9
Gems/Atom/Asset/Shader/Code/CMakeLists.txt

@@ -19,7 +19,7 @@ if(NOT PAL_TRAIT_BUILD_ATOM_ASSET_SHADER_SUPPORTED)
 
     # Create a stub
     ly_add_target(
-        NAME Atom_Asset_Shader.Builders GEM_MODULE
+        NAME ${gem_name}.Builders GEM_MODULE
 
         NAMESPACE Gem
         FILES_CMAKE
@@ -32,13 +32,24 @@ if(NOT PAL_TRAIT_BUILD_ATOM_ASSET_SHADER_SUPPORTED)
                 AZ::AzCore
     )
 
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
+    
+    # Create an alias to the old Atom_Asset_Shader.Builders target for backwards compatiblity
+    ly_create_alias(NAME Atom_Asset_Shader.Builders NAMESPACE Gem TARGETS Gem::${gem_name}.Builders)
     return()
 
 endif()
 
 
 ly_add_target(
-    NAME Atom_Asset_Shader.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_asset_shader_builders_files.cmake
@@ -77,7 +88,7 @@ foreach(enabled_platform ${LY_PAL_TOOLS_ENABLED})
 endforeach()
 
 ly_add_target(
-    NAME Atom_Asset_Shader.Builders GEM_MODULE
+    NAME ${gem_name}.Builders GEM_MODULE
 
     NAMESPACE Gem
     FILES_CMAKE
@@ -92,7 +103,7 @@ ly_add_target(
     BUILD_DEPENDENCIES
         PRIVATE
             3rdParty::mcpp
-            Gem::Atom_Asset_Shader.Static
+            Gem::${gem_name}.Static
             Gem::Atom_RPI.Edit
     RUNTIME_DEPENDENCIES
         3rdParty::DirectXShaderCompilerDxc
@@ -100,8 +111,17 @@ ly_add_target(
         3rdParty::azslc
 )
 
-# The Atom_Asset_Shader is a required gem for Builders in order to process the assets that come WITHOUT
-# the Atom_Feature_Common required gem
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/Editor/AzslShaderBuilderModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
+# Create an alias to the old Atom_Asset_Shader.Builders target for backwards compatiblity
+ly_create_alias(NAME Atom_Asset_Shader.Builders NAMESPACE Gem TARGETS Gem::${gem_name}.Builders)
 
 ################################################################################
 # Tests
@@ -109,7 +129,7 @@ ly_add_target(
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
 
     ly_add_target(
-        NAME Atom_Asset_Shader.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             atom_asset_shader_builders_tests_files.cmake
@@ -128,10 +148,10 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 Gem::Atom_RPI.Public
                 Gem::Atom_RHI.Public
                 Gem::Atom_RPI.Edit
-                Gem::Atom_Asset_Shader.Static
+                Gem::${gem_name}.Static
     )
     ly_add_googletest(
-        NAME Gem::Atom_Asset_Shader.Tests
+        NAME Gem::${gem_name}.Tests
         LABELS REQUIRES_tiaf
     )
 

+ 5 - 4
Gems/Atom/Asset/Shader/Code/Source/Editor/AzslShaderBuilderModule.cpp

@@ -42,7 +42,8 @@ namespace AZ
     } // namespace ShaderBuilder
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_AzslShaderBuilder, AZ::ShaderBuilder::AzslShaderBuilderModule)
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::ShaderBuilder::AzslShaderBuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_AtomShader_Builders, AZ::ShaderBuilder::AzslShaderBuilderModule)
+#endif

+ 5 - 4
Gems/Atom/Asset/Shader/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp

@@ -29,7 +29,8 @@ namespace AZ
     }
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_AzslShaderBuilder, AZ::ShaderBuilder::AzslShaderBuilderModule)
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::ShaderBuilder::AzslShaderBuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_AtomShader_Builders, AZ::ShaderBuilder::AzslShaderBuilderModule)
+#endif

+ 9 - 9
Gems/Atom/Asset/Shader/Code/Source/Platform/Linux/platform_builders_linux.cmake

@@ -8,7 +8,7 @@
 
 #Shader asset include headers
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/DX12/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/DX12/PlatformHeader.hlsli
@@ -17,7 +17,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Vulkan/PlatformHeader.hlsli
@@ -26,7 +26,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY
@@ -34,7 +34,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Metal/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Metal/PlatformHeader.hlsli
@@ -43,7 +43,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY
@@ -51,7 +51,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/iOS/Metal/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/iOS/Metal/PlatformHeader.hlsli
@@ -60,7 +60,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Android/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Android/Vulkan/PlatformHeader.hlsli
@@ -69,7 +69,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Vulkan/PlatformHeader.hlsli
@@ -78,7 +78,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY

+ 9 - 9
Gems/Atom/Asset/Shader/Code/Source/Platform/Mac/platform_builders_mac.cmake

@@ -8,7 +8,7 @@
 
 # Shader Headers
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/DX12/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/DX12/PlatformHeader.hlsli
@@ -17,7 +17,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Vulkan/PlatformHeader.hlsli
@@ -26,7 +26,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY
@@ -34,7 +34,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Metal/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Metal/PlatformHeader.hlsli
@@ -43,7 +43,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY
@@ -51,7 +51,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/iOS/Metal/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/iOS/Metal/PlatformHeader.hlsli
@@ -60,7 +60,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Android/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Android/Vulkan/PlatformHeader.hlsli
@@ -69,7 +69,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Vulkan/PlatformHeader.hlsli
@@ -78,7 +78,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY

+ 9 - 9
Gems/Atom/Asset/Shader/Code/Source/Platform/Windows/platform_builders_windows.cmake

@@ -8,7 +8,7 @@
 
 #Shader asset include headers
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/DX12/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/DX12/PlatformHeader.hlsli
@@ -17,7 +17,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Vulkan/PlatformHeader.hlsli
@@ -26,7 +26,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Windows/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY
@@ -34,7 +34,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Metal/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Metal/PlatformHeader.hlsli
@@ -43,7 +43,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Mac/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY
@@ -51,7 +51,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/iOS/Metal/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/iOS/Metal/PlatformHeader.hlsli
@@ -60,7 +60,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Android/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Android/Vulkan/PlatformHeader.hlsli
@@ -69,7 +69,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Vulkan/AzslcHeader.azsli
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Vulkan/PlatformHeader.hlsli
@@ -78,7 +78,7 @@ ly_add_target_files(
 )
 
 ly_add_target_files(
-   TARGETS Atom_Asset_Shader.Builders
+   TARGETS ${gem_name}.Builders
    FILES 
        ${CMAKE_CURRENT_SOURCE_DIR}/AZSL/Platform/Linux/Null/AzslcHeader.azsli
    OUTPUT_SUBDIRECTORY

+ 4 - 3
Gems/Atom/Bootstrap/CMakeLists.txt

@@ -6,8 +6,9 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_Bootstrap")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
+

+ 14 - 5
Gems/Atom/Bootstrap/Code/CMakeLists.txt

@@ -9,7 +9,7 @@
 o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
 
 ly_add_target(
-    NAME Atom_Bootstrap.Headers HEADERONLY
+    NAME ${gem_name}.Headers HEADERONLY
     NAMESPACE Gem
     FILES_CMAKE
         bootstrap_headers_files.cmake
@@ -19,7 +19,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_Bootstrap ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         bootstrap_files.cmake
@@ -40,9 +40,18 @@ ly_add_target(
             Gem::Atom_RPI.Public
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/BootstrapModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 # Atom_Bootstrap is only used in Launchers
-ly_create_alias(NAME Atom_Bootstrap.Clients NAMESPACE Gem TARGETS Gem::Atom_Bootstrap)
-ly_create_alias(NAME Atom_Bootstrap.Servers NAMESPACE Gem TARGETS Gem::Atom_Bootstrap)
-ly_create_alias(NAME Atom_Bootstrap.Unified NAMESPACE Gem TARGETS Gem::Atom_Bootstrap)
+ly_create_alias(NAME ${gem_name}.Clients NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Servers NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Unified NAMESPACE Gem TARGETS Gem::${gem_name})
 
 # The Atom_Bootstrap gem is responsible for making the NativeWindow handle in the launcher applications

+ 4 - 3
Gems/Atom/Bootstrap/Code/Source/BootstrapModule.cpp

@@ -47,7 +47,8 @@ namespace AZ
     } // namespace Render
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AZ::Render::Bootstrap::BootstrapModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_Bootstrap, AZ::Render::Bootstrap::BootstrapModule)
+#endif

+ 3 - 3
Gems/Atom/Component/DebugCamera/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_Component_DebugCamera")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 12 - 3
Gems/Atom/Component/DebugCamera/Code/CMakeLists.txt

@@ -7,7 +7,7 @@
 #
 
 ly_add_target(
-    NAME Atom_Component_DebugCamera.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_component_debugcamera_files.cmake
@@ -25,7 +25,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_Component_DebugCamera ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_component_debugcamera_shared_files.cmake
@@ -36,5 +36,14 @@ ly_add_target(
             Include
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::Atom_Component_DebugCamera.Static
+            Gem::${gem_name}.Static
 )
+
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/Module.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})

+ 4 - 3
Gems/Atom/Component/DebugCamera/Code/Source/Module.cpp

@@ -45,7 +45,8 @@ namespace AZ
     } // namespace Debug
 } // namespace AZ
 
-  // DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-  // The first parameter should be GemName_GemIdLower
-  // The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AZ::Debug::CameraModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_Component_DebugCamera, AZ::Debug::CameraModule)
+#endif

+ 3 - 3
Gems/Atom/Feature/Common/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_Feature_Common")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 35 - 17
Gems/Atom/Feature/Common/Code/CMakeLists.txt

@@ -10,7 +10,7 @@ o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLAT
 set(common_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/Common)
 
 ly_add_target(
-    NAME Atom_Feature_Common.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_feature_common_files.cmake
@@ -36,7 +36,7 @@ ly_add_target(
         PUBLIC
             Gem::Atom_RPI.Public
             Gem::Atom_Utils.Static
-            Gem::Atom_Feature_Common.Public
+            Gem::${gem_name}.Public
             Gem::ImGui.imguilib
             3rdParty::TIFF
     RUNTIME_DEPENDENCIES
@@ -44,7 +44,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_Feature_Common.Public STATIC
+    NAME ${gem_name}.Public STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_feature_common_public_files.cmake
@@ -69,7 +69,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_Feature_Common ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_feature_common_shared_files.cmake
@@ -87,12 +87,12 @@ ly_add_target(
         PRIVATE
             AZ::AzCore
             AZ::AzFramework
-            Gem::Atom_Feature_Common.Static
-            Gem::Atom_Feature_Common.Public
+            Gem::${gem_name}.Static
+            Gem::${gem_name}.Public
 )
 
 ly_add_target(
-    NAME Atom_Feature_Common.Headless ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Headless ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_feature_common_shared_files.cmake
@@ -111,10 +111,19 @@ ly_add_target(
         PRIVATE
             AZ::AzCore
             AZ::AzFramework
-            Gem::Atom_Feature_Common.Static
-            Gem::Atom_Feature_Common.Public
+            Gem::${gem_name}.Static
+            Gem::${gem_name}.Public
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/CommonModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 if(PAL_TRAIT_BUILD_HOST_TOOLS)
 
     set(runtime_dependencies_tools ${pal_source_dir}/runtime_dependencies_tools.cmake)
@@ -124,7 +133,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
     endforeach()
 
     ly_add_target(
-        NAME Atom_Feature_Common.Editor GEM_MODULE
+        NAME ${gem_name}.Editor GEM_MODULE
 
         NAMESPACE Gem
         FILES_CMAKE
@@ -152,13 +161,13 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 Gem::Atom_RPI.Edit
                 Gem::Atom_RPI.Public
                 Gem::Atom_Utils.Static
-                Gem::Atom_Feature_Common.Static
-                Gem::Atom_Feature_Common.Public
+                Gem::${gem_name}.Static
+                Gem::${gem_name}.Public
     )
 
     set(runtime_dependencies_builders ${pal_source_dir}/runtime_dependencies_builders.cmake)
     ly_add_target(
-        NAME Atom_Feature_Common.Builders GEM_MODULE
+        NAME ${gem_name}.Builders GEM_MODULE
 
         NAMESPACE Gem
         FILES_CMAKE
@@ -174,6 +183,15 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
         RUNTIME_DEPENDENCIES
             Gem::Atom_RHI.Private
     )
+
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/Builders/BuilderModule.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
 endif()
 
 ################################################################################
@@ -181,7 +199,7 @@ endif()
 ################################################################################
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     ly_add_target(
-        NAME Atom_Feature_Common.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             atom_feature_common_tests_files.cmake
@@ -194,11 +212,11 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
             PRIVATE
                 AZ::AzFramework
                 AZ::AzTest
-                Gem::Atom_Feature_Common.Static
-                Gem::Atom_Feature_Common.Public
+                Gem::${gem_name}.Static
+                Gem::${gem_name}.Public
     )
     ly_add_googletest(
-        NAME Gem::Atom_Feature_Common.Tests
+        NAME Gem::${gem_name}.Tests
         LABELS REQUIRES_tiaf
     )
 endif()

+ 5 - 4
Gems/Atom/Feature/Common/Code/Source/Builders/BuilderModule.cpp

@@ -34,7 +34,8 @@ namespace AZ
     } // namespace RPI
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_Feature_Common_Builders, AZ::Render::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::Render::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_Feature_Common_Builders, AZ::Render::BuilderModule)
+#endif

+ 10 - 5
Gems/Atom/Feature/Common/Code/Source/CommonModule.cpp

@@ -74,11 +74,16 @@ namespace AZ
     } // namespace Render
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
 #if O3DE_HEADLESS_SERVER
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_Feature_Common_Headless, AZ::Render::CommonModule)
+    #if defined(O3DE_GEM_NAME)
+    AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Headless), AZ::Render::CommonModule)
+    #else
+    AZ_DECLARE_MODULE_CLASS(Gem_Atom_Feature_Common_Headless, AZ::Render::CommonModule)
+    #endif
 #else
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_Feature_Common, AZ::Render::CommonModule)
+    #if defined(O3DE_GEM_NAME)
+    AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AZ::Render::CommonModule)
+    #else
+    AZ_DECLARE_MODULE_CLASS(Gem_Atom_Feature_Common, AZ::Render::CommonModule)
+    #endif
 #endif // O3DE_HEADLESS_SERVER

+ 2 - 4
Gems/Atom/RHI/CMakeLists.txt

@@ -6,10 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_RHI")
 
-ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty)
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 24 - 15
Gems/Atom/RHI/Code/CMakeLists.txt

@@ -20,7 +20,7 @@ if(PAL_TRAIT_BUILD_RENDERDOC_SUPPORTED)
 endif()
 
 ly_add_target(
-    NAME Atom_RHI.Reflect STATIC
+    NAME ${gem_name}.Reflect STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_reflect_files.cmake
@@ -38,7 +38,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI.Public STATIC
+    NAME ${gem_name}.Public STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_public_files.cmake
@@ -54,13 +54,13 @@ ly_add_target(
         PRIVATE
             AZ::AzCore
             AZ::AzFramework
-            Gem::Atom_RHI.Reflect
+            Gem::${gem_name}.Reflect
         PUBLIC
             ${RENDERDOC_DEPENDENCY}
 )
 
 ly_add_target(
-    NAME Atom_RHI.Private.Static STATIC
+    NAME ${gem_name}.Private.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_private_files.cmake
@@ -74,11 +74,11 @@ ly_add_target(
             AZ::AzCore
             AZ::AzFramework
             AZ::AtomCore
-            Gem::Atom_RHI.Public
+            Gem::${gem_name}.Public
 )
 
 ly_add_target(
-    NAME Atom_RHI.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_private_shared_files.cmake
@@ -90,14 +90,23 @@ ly_add_target(
     BUILD_DEPENDENCIES
         PRIVATE
             AZ::AzCore
-            Gem::Atom_RHI.Public
-            Gem::Atom_RHI.Private.Static
+            Gem::${gem_name}.Public
+            Gem::${gem_name}.Private.Static
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/Module.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 if(PAL_TRAIT_BUILD_HOST_TOOLS)
     if (ATOM_RHI_TRAIT_BUILD_SUPPORTS_EDIT)
         ly_add_target(
-            NAME Atom_RHI.Edit STATIC
+            NAME ${gem_name}.Edit STATIC
             NAMESPACE Gem
             FILES_CMAKE
                 atom_rhi_edit_files.cmake
@@ -110,7 +119,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 PRIVATE
                     AZ::AzToolsFramework
                     AZ::AtomCore
-                    Gem::Atom_RHI.Public
+                    Gem::${gem_name}.Public
         )
     endif()
 endif()
@@ -122,7 +131,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
 
     if (ATOM_RHI_TRAIT_BUILD_SUPPORTS_TEST)
         ly_add_target(
-            NAME Atom_RHI.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+            NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
             NAMESPACE Gem
             FILES_CMAKE
                 atom_rhi_tests_files.cmake
@@ -134,18 +143,18 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 PRIVATE
                     AZ::AzTest
                     AZ::AzFramework
-                    Gem::Atom_RHI.Edit
-                    Gem::Atom_RHI.Public
+                    Gem::${gem_name}.Edit
+                    Gem::${gem_name}.Public
                     Gem::Atom_Feature_Common.Public
         )
         ly_add_googletest(
-            NAME Gem::Atom_RHI.Tests
+            NAME Gem::${gem_name}.Tests
             LABELS REQUIRES_tiaf
         )
 
         ly_add_target_files(
             TARGETS
-                Atom_RHI.Tests
+                ${gem_name}.Tests
             FILES
                 ${CMAKE_CURRENT_SOURCE_DIR}/Tests/UtilsTestsData/DummyTransformColor.MainPS.dx12.dxil.txt
                 ${CMAKE_CURRENT_SOURCE_DIR}/Tests/UtilsTestsData/DummyTransformColor.MainPS.vulkan.spirv.txt

+ 4 - 3
Gems/Atom/RHI/Code/Source/Module.cpp

@@ -42,7 +42,8 @@ namespace AZ::RHI
     };
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::RHI::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Private, AZ::RHI::PlatformModule)
+#endif

+ 3 - 5
Gems/Atom/RHI/DX12/CMakeLists.txt

@@ -6,12 +6,10 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_RHI_DX12")
 
-ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty)
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
 
-ly_create_alias(NAME Atom_RHI_DX12.HeadlessServers NAMESPACE Gem)
+ly_create_alias(NAME ${gem_name}.HeadlessServers NAMESPACE Gem)

+ 40 - 13
Gems/Atom/RHI/DX12/Code/CMakeLists.txt

@@ -33,7 +33,7 @@ if(NOT PAL_TRAIT_ATOM_RHI_DX12_SUPPORTED)
     
     # Create stub modules. Once we support gem loading configuration, we can remove this stubbed targets
     ly_add_target(
-        NAME Atom_RHI_DX12.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+        NAME ${gem_name}.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             atom_rhi_dx12_stub_module.cmake
@@ -42,9 +42,18 @@ if(NOT PAL_TRAIT_ATOM_RHI_DX12_SUPPORTED)
                 AZ::AzCore
     )
 
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
+
     if(PAL_TRAIT_BUILD_HOST_TOOLS)
         ly_add_target(
-            NAME Atom_RHI_DX12.Builders GEM_MODULE
+            NAME ${gem_name}.Builders GEM_MODULE
 
             NAMESPACE Gem
             FILES_CMAKE
@@ -82,7 +91,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI_DX12.Reflect STATIC
+    NAME ${gem_name}.Reflect STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_dx12_reflect_common_files.cmake
@@ -100,7 +109,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI_DX12.Private.Static STATIC
+    NAME ${gem_name}.Private.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_dx12_private_common_files.cmake
@@ -118,7 +127,7 @@ ly_add_target(
             AZ::AzCore
             AZ::AzFramework
             Gem::Atom_RHI.Reflect
-            Gem::Atom_RHI_DX12.Reflect
+            Gem::${gem_name}.Reflect
             Gem::Amd_DX12MA
             3rdParty::d3dx12
             ${AFTERMATH_BUILD_DEPENDENCY}
@@ -129,7 +138,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI_DX12.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_dx12_private_common_shared_files.cmake
@@ -144,13 +153,22 @@ ly_add_target(
             AZ::AzCore
             Gem::Atom_RHI.Reflect
             Gem::Atom_RHI.Public
-            Gem::Atom_RHI_DX12.Reflect
-            Gem::Atom_RHI_DX12.Private.Static
+            Gem::${gem_name}.Reflect
+            Gem::${gem_name}.Private.Static
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/RHI/Module.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 if(PAL_TRAIT_BUILD_HOST_TOOLS)
     ly_add_target(
-        NAME Atom_RHI_DX12.Builders.Static STATIC
+        NAME ${gem_name}.Builders.Static STATIC
         NAMESPACE Gem
         FILES_CMAKE
             ${pal_source_dir}/platform_builders_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
@@ -167,11 +185,11 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AzCore
                 AZ::AssetBuilderSDK
                 Gem::Atom_RHI.Reflect
-                Gem::Atom_RHI_DX12.Reflect
+                Gem::${gem_name}.Reflect
     )
 
     ly_add_target(
-        NAME Atom_RHI_DX12.Builders GEM_MODULE
+        NAME ${gem_name}.Builders GEM_MODULE
 
         NAMESPACE Gem
         FILES_CMAKE
@@ -188,7 +206,16 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 Gem::Atom_RHI.Edit
                 Gem::Atom_RHI.Reflect
                 Gem::Atom_RHI.Public
-                Gem::Atom_RHI_DX12.Reflect
-                Gem::Atom_RHI_DX12.Builders.Static
+                Gem::${gem_name}.Reflect
+                Gem::${gem_name}.Builders.Static
     )
+
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/RHI.Builders/BuilderModule.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
 endif()

+ 4 - 3
Gems/Atom/RHI/DX12/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp

@@ -29,7 +29,8 @@ namespace AZ
     } // namespace DX12
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::DX12::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_DX12_Private, AZ::DX12::PlatformModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/DX12/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp

@@ -31,7 +31,8 @@ namespace AZ
     } // namespace DX12
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_DX12_Builders, AZ::DX12::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::DX12::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_DX12_Builders, AZ::DX12::BuilderModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/DX12/Code/Source/Platform/Mac/RHI.Builders/BuilderModule_Mac.cpp

@@ -31,7 +31,8 @@ namespace AZ
     } // namespace DX12
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_DX12_Builders, AZ::DX12::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::DX12::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_DX12_Builders, AZ::DX12::BuilderModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/DX12/Code/Source/RHI.Builders/BuilderModule.cpp

@@ -42,7 +42,8 @@ namespace AZ
     } // namespace DX12
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_DX12_Builders, AZ::DX12::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::DX12::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_DX12_Builders, AZ::DX12::BuilderModule)
+#endif

+ 4 - 3
Gems/Atom/RHI/DX12/Code/Source/RHI/Module.cpp

@@ -42,7 +42,8 @@ namespace AZ
     } // namespace RHI
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::DX12::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_DX12_Private, AZ::DX12::PlatformModule)
+#endif

+ 4 - 4
Gems/Atom/RHI/Metal/CMakeLists.txt

@@ -6,10 +6,10 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_RHI_Metal")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
 
-ly_create_alias(NAME Atom_RHI_Metal.HeadlessServers NAMESPACE Gem)
+ly_create_alias(NAME ${gem_name}.HeadlessServers NAMESPACE Gem)

+ 49 - 21
Gems/Atom/RHI/Metal/Code/CMakeLists.txt

@@ -13,7 +13,7 @@ include(${pal_source_dir}/PAL2_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
 
 if(NOT PAL_TRAIT_ATOM_RHI_METAL_SUPPORTED)
     ly_add_target(
-        NAME Atom_RHI_Metal.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+        NAME ${gem_name}.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             atom_rhi_metal_stub_module.cmake
@@ -29,9 +29,18 @@ if(NOT PAL_TRAIT_ATOM_RHI_METAL_SUPPORTED)
                 Gem::Atom_RHI.Reflect
     )
 
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+        Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
+
     if(PAL_TRAIT_BUILD_HOST_TOOLS)
         ly_add_target(
-            NAME Atom_RHI_Metal.Builders GEM_MODULE
+            NAME ${gem_name}.Builders GEM_MODULE
             NAMESPACE Gem
             FILES_CMAKE
                 Source/Platform/${PAL_PLATFORM_NAME}/platform_builders_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
@@ -54,7 +63,7 @@ if(NOT PAL_TRAIT_ATOM_RHI_METAL_SUPPORTED)
 endif()
 
 ly_add_target(
-    NAME Atom_RHI_Metal.Reflect STATIC
+    NAME ${gem_name}.Reflect STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_metal_reflect_common_files.cmake
@@ -69,7 +78,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI_Metal.Private.Static STATIC
+    NAME ${gem_name}.Private.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_metal_private_common_files.cmake
@@ -89,11 +98,11 @@ ly_add_target(
             AZ::AzCore
             AZ::AzFramework
             Gem::Atom_RHI.Reflect
-            Gem::Atom_RHI_Metal.Reflect
+            Gem::${gem_name}.Reflect
 )
 
 ly_add_target(
-    NAME Atom_RHI_Metal.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_metal_private_common_shared_files.cmake
@@ -110,14 +119,23 @@ ly_add_target(
             AZ::AzCore
             Gem::Atom_RHI.Reflect
             Gem::Atom_RHI.Public
-            Gem::Atom_RHI_Metal.Reflect
-            Gem::Atom_RHI_Metal.Private.Static
+            Gem::${gem_name}.Reflect
+            Gem::${gem_name}.Private.Static
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/RHI/Module.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 if (PAL_TRAIT_BUILD_HOST_TOOLS)
 
     ly_add_target(
-        NAME Atom_RHI_Metal.Builders.Static STATIC
+        NAME ${gem_name}.Builders.Static STATIC
         NAMESPACE Gem
         FILES_CMAKE
             atom_rhi_metal_builders_common_files.cmake
@@ -135,11 +153,11 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AssetBuilderSDK
                 Gem::Atom_RHI.Edit
                 Gem::Atom_RHI.Reflect
-                Gem::Atom_RHI_Metal.Reflect
+                Gem::${gem_name}.Reflect
     )
 
    ly_add_target(
-        NAME Atom_RHI_Metal.Builders GEM_MODULE
+        NAME ${gem_name}.Builders GEM_MODULE
 
         NAMESPACE Gem
         FILES_CMAKE
@@ -155,13 +173,23 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AssetBuilderSDK
                 Gem::Atom_RHI.Edit
                 Gem::Atom_RHI.Reflect
-                Gem::Atom_RHI_Metal.Reflect
-                Gem::Atom_RHI_Metal.Builders.Static
+                Gem::${gem_name}.Reflect
+                Gem::${gem_name}.Builders.Static
     )
+
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/RHI.Builders/BuilderModule.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
+
     if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
 
         ly_add_target(
-            NAME Atom_RHI_Metal.Builders.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+            NAME ${gem_name}.Builders.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
             NAMESPACE Gem
             FILES_CMAKE
                 atom_rhi_metal_builders_tests_files.cmake
@@ -177,19 +205,19 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
                 PRIVATE
                     AZ::AzTest
                     Gem::Atom_RHI.Reflect
-                    Gem::Atom_RHI_Metal.Reflect
-                    Gem::Atom_RHI_Metal.Builders.Static
+                    Gem::${gem_name}.Reflect
+                    Gem::${gem_name}.Builders.Static
         )
 
         ly_add_googletest(
-            NAME Gem::Atom_RHI_Metal.Builders.Tests
+            NAME Gem::${gem_name}.Builders.Tests
         )
     endif()
 endif()
 
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
     ly_add_target(
-        NAME Atom_RHI_Metal.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             atom_rhi_metal_private_tests_files.cmake
@@ -205,11 +233,11 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
             PRIVATE
                 AZ::AzTest
                 Gem::Atom_RHI.Reflect
-                Gem::Atom_RHI_Metal.Reflect
-                Gem::Atom_RHI_Metal.Private.Static
+                Gem::${gem_name}.Reflect
+                Gem::${gem_name}.Private.Static
     )
 
     ly_add_googletest(
-        NAME Gem::Atom_RHI_Metal.Tests
+        NAME Gem::${gem_name}.Tests
     )
 endif()

+ 4 - 0
Gems/Atom/RHI/Metal/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp

@@ -29,4 +29,8 @@ namespace AZ
     }
 }
 
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::Metal::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Metal_Private, AZ::Metal::PlatformModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/Metal/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp

@@ -31,7 +31,8 @@ namespace AZ
     } // namespace Metal
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Metal_Builders, AZ::Metal::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::Metal::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Metal_Builders, AZ::Metal::BuilderModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/Metal/Code/Source/Platform/Windows/RHI.Builders/BuilderModule_Windows.cpp

@@ -31,7 +31,8 @@ namespace AZ
     } // namespace Metal
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Metal_Builders, AZ::Metal::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::Metal::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Metal_Builders, AZ::Metal::BuilderModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/Metal/Code/Source/RHI.Builders/BuilderModule.cpp

@@ -42,7 +42,8 @@ namespace AZ
     } // namespace Metal
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Metal_Builders, AZ::Metal::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::Metal::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Metal_Builders, AZ::Metal::BuilderModule)
+#endif

+ 4 - 0
Gems/Atom/RHI/Metal/Code/Source/RHI/Module.cpp

@@ -41,4 +41,8 @@ namespace AZ
     }
 }
 
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::Metal::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Metal_Private, AZ::Metal::PlatformModule)
+#endif

+ 3 - 3
Gems/Atom/RHI/Null/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_RHI_Null")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 27 - 9
Gems/Atom/RHI/Null/Code/CMakeLists.txt

@@ -11,7 +11,7 @@ o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLAT
 
 
 ly_add_target(
-    NAME Atom_RHI_Null.Reflect STATIC
+    NAME ${gem_name}.Reflect STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_null_reflect_common_files.cmake
@@ -26,7 +26,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI_Null.Private.Static STATIC
+    NAME ${gem_name}.Private.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_null_private_common_files.cmake
@@ -47,7 +47,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI_Null.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_null_private_common_shared_files.cmake
@@ -58,14 +58,23 @@ ly_add_target(
             ${pal_source_dir}
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::Atom_RHI_Null.Reflect
-            Gem::Atom_RHI_Null.Private.Static
+            Gem::${gem_name}.Reflect
+            Gem::${gem_name}.Private.Static
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/RHI/Module.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 if (PAL_TRAIT_BUILD_HOST_TOOLS)
 
     ly_add_target(
-        NAME Atom_RHI_Null.Builders.Static STATIC
+        NAME ${gem_name}.Builders.Static STATIC
         NAMESPACE Gem
         FILES_CMAKE
             atom_rhi_null_builders_common_files.cmake
@@ -81,11 +90,11 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AssetBuilderSDK
                 Gem::Atom_RHI.Edit
                 Gem::Atom_RHI.Reflect
-                Gem::Atom_RHI_Null.Reflect
+                Gem::${gem_name}.Reflect
     )
 
    ly_add_target(
-        NAME Atom_RHI_Null.Builders GEM_MODULE
+        NAME ${gem_name}.Builders GEM_MODULE
         NAMESPACE Gem
         FILES_CMAKE
             atom_rhi_null_builders_shared_files.cmake
@@ -97,6 +106,15 @@ if (PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AssetBuilderSDK
                 Gem::Atom_RHI.Edit
                 Gem::Atom_RHI.Reflect
-                Gem::Atom_RHI_Null.Builders.Static
+                Gem::${gem_name}.Builders.Static
     )
+
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/RHI.Builders/BuilderModule.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
 endif()

+ 4 - 0
Gems/Atom/RHI/Null/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp

@@ -29,4 +29,8 @@ namespace AZ
     }
 }
 
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::Null::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Null_Private, AZ::Null::PlatformModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/Null/Code/Source/RHI.Builders/BuilderModule.cpp

@@ -40,7 +40,8 @@ namespace AZ
     } // namespace Null
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Null_Builders, AZ::Null::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::Null::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Null_Builders, AZ::Null::BuilderModule)
+#endif

+ 4 - 0
Gems/Atom/RHI/Null/Code/Source/RHI/Module.cpp

@@ -40,4 +40,8 @@ namespace AZ
     }
 }
 
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::Null::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Null_Private, AZ::Null::PlatformModule)
+#endif

+ 3 - 5
Gems/Atom/RHI/Vulkan/CMakeLists.txt

@@ -6,12 +6,10 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_RHI_Vulkan")
 
-ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty)
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
 
-ly_create_alias(NAME Atom_RHI_Vulkan.HeadlessServers NAMESPACE Gem)
+ly_create_alias(NAME ${gem_name}.HeadlessServers NAMESPACE Gem)

+ 22 - 14
Gems/Atom/RHI/Vulkan/Code/CMakeLists.txt

@@ -25,7 +25,7 @@ endif()
 
 
 ly_add_target(
-    NAME Atom_RHI_Vulkan.Glad.Static STATIC
+    NAME ${gem_name}.Glad.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_vulkan_glad_files.cmake
@@ -44,7 +44,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI_Vulkan.Reflect STATIC
+    NAME ${gem_name}.Reflect STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_vulkan_reflect_common_files.cmake
@@ -60,12 +60,12 @@ ly_add_target(
         PRIVATE
             AZ::AzCore
             Gem::Atom_RHI.Reflect
-            Gem::Atom_RHI_Vulkan.Glad.Static
+            Gem::${gem_name}.Glad.Static
 )
 
 if(PAL_TRAIT_BUILD_HOST_TOOLS)
     ly_add_target(
-        NAME Atom_RHI_Vulkan.Builders.Static STATIC
+        NAME ${gem_name}.Builders.Static STATIC
         NAMESPACE Gem
         FILES_CMAKE
             atom_rhi_vulkan_builders_common_files.cmake
@@ -80,11 +80,11 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AzCore
                 AZ::AssetBuilderSDK
                 Gem::Atom_RHI.Reflect
-                Gem::Atom_RHI_Vulkan.Reflect
+                Gem::${gem_name}.Reflect
     )
 
     ly_add_target(
-        NAME Atom_RHI_Vulkan.Builders GEM_MODULE
+        NAME ${gem_name}.Builders GEM_MODULE
 
         NAMESPACE Gem
         FILES_CMAKE
@@ -100,8 +100,8 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AzCore
                 Gem::Atom_RHI.Reflect
                 Gem::Atom_RHI.Public
-                Gem::Atom_RHI_Vulkan.Reflect
-                Gem::Atom_RHI_Vulkan.Builders.Static
+                Gem::${gem_name}.Reflect
+                Gem::${gem_name}.Builders.Static
                 Gem::Atom_RHI.Edit
         )
 
@@ -110,7 +110,7 @@ endif()
 if(NOT PAL_TRAIT_ATOM_RHI_VULKAN_SUPPORTED)
 
     # Create alias for Atom RHI Vulkan private Gem Module
-    ly_create_alias(NAME Atom_RHI_Vulkan.Private NAMESPACE Gem)
+    ly_create_alias(NAME ${gem_name}.Private NAMESPACE Gem)
 
     return() # Do not create the rest of the targets
 
@@ -119,7 +119,7 @@ endif()
 
 
 ly_add_target(
-    NAME Atom_RHI_Vulkan.Private.Static STATIC
+    NAME ${gem_name}.Private.Static STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_vulkan_private_common_files.cmake
@@ -140,8 +140,8 @@ ly_add_target(
             AZ::AzFramework
             AZ::AzFramework.NativeUI
             Gem::Atom_RHI.Reflect
-            Gem::Atom_RHI_Vulkan.Reflect
-            Gem::Atom_RHI_Vulkan.Glad.Static
+            Gem::${gem_name}.Reflect
+            Gem::${gem_name}.Glad.Static
             3rdParty::amd_vma
             ${AFTERMATH_BUILD_DEPENDENCY}
     COMPILE_DEFINITIONS 
@@ -150,7 +150,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME Atom_RHI_Vulkan.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_rhi_vulkan_private_common_shared_files.cmake
@@ -162,8 +162,16 @@ ly_add_target(
             Include
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::Atom_RHI_Vulkan.Private.Static
+            Gem::${gem_name}.Private.Static
             Gem::Atom_RHI.Public
             ${VULKAN_VALIDATION_LAYER}
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/RHI/Module.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})

+ 4 - 0
Gems/Atom/RHI/Vulkan/Code/Source/Platform/Common/Unimplemented/ModuleStub_Unimplemented.cpp

@@ -28,4 +28,8 @@ namespace AZ
     }
 }
 
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::Vulkan::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Private, AZ::Vulkan::PlatformModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp

@@ -41,7 +41,8 @@ namespace AZ
     } // namespace Vulkan
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Builders, AZ::Vulkan::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::Vulkan::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Builders, AZ::Vulkan::BuilderModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/Vulkan/Code/Source/Platform/Mac/RHI.Builders/BuilderModule_Mac.cpp

@@ -42,7 +42,8 @@ namespace AZ
     } // namespace Vulkan
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Builders, AZ::Vulkan::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::Vulkan::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Builders, AZ::Vulkan::BuilderModule)
+#endif

+ 5 - 4
Gems/Atom/RHI/Vulkan/Code/Source/Platform/Windows/RHI.Builders/BuilderModule_Windows.cpp

@@ -42,7 +42,8 @@ namespace AZ
     } // namespace Vulkan
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Builders, AZ::Vulkan::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::Vulkan::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Builders, AZ::Vulkan::BuilderModule)
+#endif

+ 4 - 3
Gems/Atom/RHI/Vulkan/Code/Source/RHI/Module.cpp

@@ -41,7 +41,8 @@ namespace AZ
     }
 }
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::Vulkan::PlatformModule)
+#else
 AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Private, AZ::Vulkan::PlatformModule)
+#endif

+ 3 - 3
Gems/Atom/RPI/CMakeLists.txt

@@ -6,9 +6,9 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("Atom_RPI")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)
 add_subdirectory(Tools)

+ 67 - 31
Gems/Atom/RPI/Code/CMakeLists.txt

@@ -18,7 +18,7 @@ else()
 endif()
 
 ly_add_target(
-    NAME Atom_RPI.Public STATIC
+    NAME ${gem_name}.Public STATIC
     NAMESPACE Gem
     FILES_CMAKE
         atom_rpi_reflect_files.cmake
@@ -48,7 +48,7 @@ ly_add_target(
 # Private
 ################################################################################
 ly_add_target(
-    NAME Atom_RPI.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAME ${gem_name}.Private ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
     NAMESPACE Gem
     FILES_CMAKE
         atom_rpi_private_files.cmake
@@ -62,17 +62,26 @@ ly_add_target(
             AZ::AtomCore
             AZ::AzCore
             AZ::AzFramework
-            Gem::Atom_RPI.Public
+            Gem::${gem_name}.Public
             Gem::Atom_RHI.Public
             Gem::Atom_RHI.Reflect
     RUNTIME_DEPENDENCIES
         Gem::Atom_RHI.Private
 )
 
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/RPI.Private/Module.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
 if(PAL_TRAIT_BUILD_HOST_TOOLS)
 
     ly_add_target(
-        NAME Atom_RPI.Edit STATIC
+        NAME ${gem_name}.Edit STATIC
         NAMESPACE Gem
         FILES_CMAKE
             atom_rpi_edit_files.cmake
@@ -86,11 +95,11 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AtomCore
                 AZ::AzToolsFramework
                 Gem::Atom_RHI.Edit
-                Gem::Atom_RPI.Public
+                Gem::${gem_name}.Public
     )
 
     ly_add_target(
-        NAME Atom_RPI.Editor.Static STATIC
+        NAME ${gem_name}.Editor.Static STATIC
         NAMESPACE Gem
         FILES_CMAKE
             atom_rpi_private_files.cmake
@@ -107,12 +116,12 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AtomCore
                 AZ::AzCore
                 AZ::AzFramework
-                Gem::Atom_RPI.Public
+                Gem::${gem_name}.Public
                 Gem::Atom_RHI.Public
     )
 
     ly_add_target(
-        NAME Atom_RPI.Editor GEM_MODULE
+        NAME ${gem_name}.Editor GEM_MODULE
 
         NAMESPACE Gem
         FILES_CMAKE
@@ -127,12 +136,21 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AtomCore
                 AZ::AzCore
                 AZ::AzToolsFramework
-                Gem::Atom_RPI.Editor.Static
-                Gem::Atom_RPI.Edit
-                Gem::Atom_RPI.Public
+                Gem::${gem_name}.Editor.Static
+                Gem::${gem_name}.Edit
+                Gem::${gem_name}.Public
         RUNTIME_DEPENDENCIES
             Gem::Atom_RHI.Private
     )
+
+    # Inject the gem name into the Module source file
+    ly_add_source_properties(
+        SOURCES
+            Source/RPI.Editor/EditorModule.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
 endif()
 
 ################################################################################
@@ -141,7 +159,7 @@ endif()
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
 
     ly_add_target(
-        NAME Atom_RPI.TestUtils.Static STATIC
+        NAME ${gem_name}.TestUtils.Static STATIC
         NAMESPACE Gem
         FILES_CMAKE
             atom_rpi_test_utils_files.cmake
@@ -154,14 +172,14 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 AZ::AzTest
                 AZ::AzTestShared
                 AZ::AzFramework
-                Gem::Atom_RPI.Public
+                Gem::${gem_name}.Public
                 Gem::Atom_RHI.Public
     )
 endif()
 
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
     ly_add_target(
-        NAME Atom_RPI.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             atom_rpi_tests_files.cmake
@@ -177,14 +195,14 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::AzFramework
                 AZ::AzToolsFramework
                 Legacy::CryCommon
-                Gem::Atom_RPI.Public
+                Gem::${gem_name}.Public
                 Gem::Atom_RHI.Public
-                Gem::Atom_RPI.Edit
-                Gem::Atom_RPI.TestUtils.Static
+                Gem::${gem_name}.Edit
+                Gem::${gem_name}.TestUtils.Static
                 Gem::Atom_Utils.TestUtils.Static
     )
     ly_add_googletest(
-        NAME Gem::Atom_RPI.Tests
+        NAME Gem::${gem_name}.Tests
         LABELS REQUIRES_tiaf
     )
 
@@ -205,7 +223,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
 
         # Create a stub
         ly_add_target(
-            NAME Atom_RPI.Builders GEM_MODULE
+            NAME ${gem_name}.Builders GEM_MODULE
 
             NAMESPACE Gem
             FILES_CMAKE
@@ -220,12 +238,21 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                     AZ::AzCore
         )
 
+        # Inject the gem name into the Module source file
+        ly_add_source_properties(
+            SOURCES
+                Source/Platform/Common/Unimplemented/BuilderModule_Stub.cpp
+            PROPERTY COMPILE_DEFINITIONS
+                VALUES
+                    O3DE_GEM_NAME=${gem_name}
+                    O3DE_GEM_VERSION=${gem_version})
+
         return()
 
     endif()
     
     ly_add_target(
-        NAME Atom_RPI.Builders.Static STATIC
+        NAME ${gem_name}.Builders.Static STATIC
         NAMESPACE Gem
         FILES_CMAKE
             atom_rpi_builders_files.cmake
@@ -243,13 +270,13 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::SceneCore
                 AZ::SceneData
                 AZ::AssetBuilderSDK
-                Gem::Atom_RPI.Edit
-                Gem::Atom_RPI.Public
+                Gem::${gem_name}.Edit
+                Gem::${gem_name}.Public
                 Gem::Atom_RHI.Public
     )
 
     ly_add_target(
-        NAME Atom_RPI.Builders GEM_MODULE
+        NAME ${gem_name}.Builders GEM_MODULE
 
         NAMESPACE Gem
         FILES_CMAKE
@@ -268,15 +295,24 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                 AZ::SceneCore
                 AZ::AssetBuilderSDK
                 Gem::Atom_RHI.Public
-                Gem::Atom_RPI.Edit
-                Gem::Atom_RPI.Public
-                Gem::Atom_RPI.Builders.Static
+                Gem::${gem_name}.Edit
+                Gem::${gem_name}.Public
+                Gem::${gem_name}.Builders.Static
     )
 
+     # Inject the gem name into the Module source file
+     ly_add_source_properties(
+        SOURCES
+            Source/RPI.Builders/BuilderModule.cpp
+        PROPERTY COMPILE_DEFINITIONS
+            VALUES
+                O3DE_GEM_NAME=${gem_name}
+                O3DE_GEM_VERSION=${gem_version})
+
     if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
 
         ly_add_target(
-            NAME Atom_RPI.Builders.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+            NAME ${gem_name}.Builders.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
             NAMESPACE Gem
             FILES_CMAKE
                 atom_rpi_builders_tests_files.cmake
@@ -294,13 +330,13 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
                     AZ::AssetBuilderSDK
                     AZ::SceneCore
                     Legacy::CryCommon
-                    Gem::Atom_RPI.Public
+                    Gem::${gem_name}.Public
                     Gem::Atom_RHI.Public
-                    Gem::Atom_RPI.Edit
-                    Gem::Atom_RPI.Builders.Static
+                    Gem::${gem_name}.Edit
+                    Gem::${gem_name}.Builders.Static
         )
         ly_add_googletest(
-            NAME Gem::Atom_RPI.Builders.Tests
+            NAME Gem::${gem_name}.Builders.Tests
             LABELS REQUIRES_tiaf
         )
     endif()

+ 5 - 4
Gems/Atom/RPI/Code/Source/Platform/Common/Unimplemented/BuilderModule_Stub.cpp

@@ -29,7 +29,8 @@ namespace AZ
     } // namespace RPI
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RPI_Edit_Builders, AZ::RPI::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::RPI::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RPI_Edit_Builders, AZ::RPI::BuilderModule)
+#endif

+ 5 - 4
Gems/Atom/RPI/Code/Source/RPI.Builders/BuilderModule.cpp

@@ -46,7 +46,8 @@ namespace AZ
     } // namespace RPI
 } // namespace AZ
 
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RPI_Edit_Builders, AZ::RPI::BuilderModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Builders), AZ::RPI::BuilderModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RPI_Edit_Builders, AZ::RPI::BuilderModule)
+#endif

+ 5 - 4
Gems/Atom/RPI/Code/Source/RPI.Editor/EditorModule.cpp

@@ -38,7 +38,8 @@ namespace AZ
 } // namespace RPI
 
 
-  // DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-  // The first parameter should be GemName_GemIdLower
-  // The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RPI_Editor, AZ::RPI::EditorModule);
+#if defined(O3DE_GEM_NAME)
+AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Editor), AZ::RPI::EditorModule)
+#else
+AZ_DECLARE_MODULE_CLASS(Gem_Atom_RPI_Editor, AZ::RPI::EditorModule)
+#endif

+ 5 - 4
Gems/Atom/RPI/Code/Source/RPI.Private/Module.cpp

@@ -33,8 +33,9 @@ AZ::ComponentTypeList AZ::RPI::Module::GetRequiredSystemComponents() const
 
 
 #ifndef RPI_EDITOR
-  // DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-  // The first parameter should be GemName_GemIdLower
-  // The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_Atom_RPI_Private, AZ::RPI::Module);
+    #if defined(O3DE_GEM_NAME)
+    AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME, _Private), AZ::RPI::Module)
+    #else
+    AZ_DECLARE_MODULE_CLASS(Gem_Atom_RPI_Private, AZ::RPI::Module)
+    #endif
 #endif // RPI_EDITOR

+ 3 - 3
Gems/Atom/Tools/AtomToolsFramework/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("AtomToolsFramework")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 18 - 9
Gems/Atom/Tools/AtomToolsFramework/Code/CMakeLists.txt

@@ -13,7 +13,7 @@ endif()
 o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
 
 ly_add_target(
-    NAME AtomToolsFramework.Static STATIC
+    NAME ${gem_name}.Static STATIC
     NAMESPACE Gem
     AUTOMOC
     AUTOUIC
@@ -52,7 +52,7 @@ ly_add_target(
 )
 
 ly_add_target(
-    NAME AtomToolsFramework.Editor GEM_MODULE
+    NAME ${gem_name}.Editor GEM_MODULE
 
     NAMESPACE Gem
     AUTOMOC
@@ -66,7 +66,7 @@ ly_add_target(
             Include
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::AtomToolsFramework.Static
+            Gem::${gem_name}.Static
     RUNTIME_DEPENDENCIES
         Gem::Atom_Bootstrap
         Gem::Atom_Component_DebugCamera
@@ -81,9 +81,18 @@ ly_add_target(
         Gem::ImageProcessingAtom.Editor
 )
 
-# Add a 'builders' alias to allow the AtomToolsFramework root gem path to be added to the generated
+# Inject the gem name into the Module source file
+ly_add_source_properties(
+    SOURCES
+        Source/AtomToolsFrameworkModule.cpp
+    PROPERTY COMPILE_DEFINITIONS
+        VALUES
+            O3DE_GEM_NAME=${gem_name}
+            O3DE_GEM_VERSION=${gem_version})
+
+# Add a 'builders' alias to allow the ${gem_name} root gem path to be added to the generated
 # cmake_dependencies.<project>.assetprocessor.setreg to allow the asset scan folder for it to be added
-ly_create_alias(NAME AtomToolsFramework.Builders NAMESPACE Gem)
+ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem)
 
 ################################################################################
 # Tests
@@ -91,7 +100,7 @@ ly_create_alias(NAME AtomToolsFramework.Builders NAMESPACE Gem)
 if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
 
     ly_add_target(
-        NAME AtomToolsFramework.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+        NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
         NAMESPACE Gem
         FILES_CMAKE
             atomtoolsframework_tests_files.cmake
@@ -106,12 +115,12 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
                 AZ::AzTest
                 AZ::AzTestShared
                 Gem::Atom_Utils.TestUtils.Static
-                Gem::AtomToolsFramework.Static
+                Gem::${gem_name}.Static
     )
 
     ly_add_googletest(
-        NAME Gem::AtomToolsFramework.Tests
+        NAME Gem::${gem_name}.Tests
         LABELS REQUIRES_tiaf
     )
 
-endif()
+endif()

+ 5 - 4
Gems/Atom/Tools/AtomToolsFramework/Code/Source/AtomToolsFrameworkModule.cpp

@@ -36,8 +36,9 @@ namespace AtomToolsFramework
 }
 
 #if !defined(AtomToolsFramework_EDITOR)
-// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM
-// The first parameter should be GemName_GemIdLower
-// The second should be the fully qualified name of the class above
-AZ_DECLARE_MODULE_CLASS(Gem_AtomToolsFramework, AtomToolsFramework::AtomToolsFrameworkModule)
+    #if defined(O3DE_GEM_NAME)
+    AZ_DECLARE_MODULE_CLASS(AZ_JOIN(Gem_, O3DE_GEM_NAME), AtomToolsFramework::AtomToolsFrameworkModule)
+    #else
+    AZ_DECLARE_MODULE_CLASS(Gem_AtomToolsFramework, AtomToolsFramework::AtomToolsFrameworkModule)
+    #endif
 #endif

+ 3 - 3
Gems/Atom/Tools/MaterialCanvas/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("MaterialCanvas")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 1 - 1
Gems/Atom/Tools/MaterialCanvas/Code/CMakeLists.txt

@@ -37,7 +37,7 @@ ly_add_target(
             Include
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::AtomLyIntegration_CommonFeatures.Static
+            Gem::CommonFeaturesAtom.Static
             Gem::AtomToolsFramework.Editor
             Gem::AtomToolsFramework.Static
     RUNTIME_DEPENDENCIES

+ 3 - 3
Gems/Atom/Tools/MaterialEditor/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("MaterialEditor")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 1 - 1
Gems/Atom/Tools/MaterialEditor/Code/CMakeLists.txt

@@ -37,7 +37,7 @@ ly_add_target(
             Include
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::AtomLyIntegration_CommonFeatures.Static
+            Gem::CommonFeaturesAtom.Static
             Gem::AtomToolsFramework.Editor
             Gem::AtomToolsFramework.Static
     RUNTIME_DEPENDENCIES

+ 3 - 3
Gems/Atom/Tools/PassCanvas/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("PassCanvas")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

+ 1 - 1
Gems/Atom/Tools/PassCanvas/Code/CMakeLists.txt

@@ -37,7 +37,7 @@ ly_add_target(
             Include
     BUILD_DEPENDENCIES
         PRIVATE
-            Gem::AtomLyIntegration_CommonFeatures.Static
+            Gem::CommonFeaturesAtom.Static
             Gem::AtomToolsFramework.Static
     RUNTIME_DEPENDENCIES
         Gem::AtomToolsFramework.Editor

+ 3 - 3
Gems/Atom/Tools/ShaderManagementConsole/CMakeLists.txt

@@ -6,8 +6,8 @@
 #
 #
 
-set(gem_path ${CMAKE_CURRENT_LIST_DIR})
-set(gem_json ${gem_path}/gem.json)
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+o3de_gem_setup("ShaderManagementConsole")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
 
 add_subdirectory(Code)

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно