Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Smoothing gem #48

Merged
merged 2 commits into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added Gems/Smoothing/.gitignore
Empty file.
22 changes: 22 additions & 0 deletions Gems/Smoothing/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

# Query the gem name from the gem.json file if possible
# otherwise fallback to using SensorDebug
o3de_find_ancestor_gem_root(gem_path gem_name "${CMAKE_CURRENT_SOURCE_DIR}")
if (NOT gem_name)
set(gem_name "Smoothing")
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}")

ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)

add_subdirectory(Code)
249 changes: 249 additions & 0 deletions Gems/Smoothing/Code/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@

# Currently we are in the Code folder: ${CMAKE_CURRENT_LIST_DIR}
# Get the platform specific folder ${pal_dir} for the current folder: ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}
# Note: o3de_pal_dir will take care of the details for us, as this may be a restricted platform
# in which case it will see if that platform is present here or in the restricted folder.
# i.e. It could here in our gem : Gems/Smoothing/Code/Platform/<platorm_name> or
# <restricted_folder>/<platform_name>/Gems/Smoothing/Code
o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")

# Now that we have the platform abstraction layer (PAL) folder for this folder, thats where we will find the
# traits for this platform. Traits for a platform are defines for things like whether or not something in this gem
# is supported by this platform.
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)

# Check to see if building the Gem Modules are supported for the current platform
if(NOT PAL_TRAIT_SMOOTHING_SUPPORTED)
return()
endif()

# The ${gem_name}.API target declares the common interface that users of this gem should depend on in their targets
ly_add_target(
NAME ${gem_name}.API INTERFACE
NAMESPACE Gem
FILES_CMAKE
smoothing_api_files.cmake
${pal_dir}/smoothing_api_files.cmake
INCLUDE_DIRECTORIES
INTERFACE
Include
BUILD_DEPENDENCIES
INTERFACE
AZ::AzCore
)

# The ${gem_name}.Private.Object target is an internal target
# It should not be used outside of this Gems CMakeLists.txt
ly_add_target(
NAME ${gem_name}.Private.Object STATIC
NAMESPACE Gem
FILES_CMAKE
smoothing_private_files.cmake
${pal_dir}/smoothing_private_files.cmake
TARGET_PROPERTIES
O3DE_PRIVATE_TARGET TRUE
INCLUDE_DIRECTORIES
PRIVATE
Include
Source
Source/3rdParty/
BUILD_DEPENDENCIES
PUBLIC
AZ::AzCore
AZ::AzFramework
)

# Here add ${gem_name} target, it depends on the Private Object library and Public API interface
ly_add_target(
NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
NAMESPACE Gem
FILES_CMAKE
smoothing_shared_files.cmake
${pal_dir}/smoothing_shared_files.cmake
INCLUDE_DIRECTORIES
PUBLIC
Include
PRIVATE
Source
BUILD_DEPENDENCIES
PUBLIC
Gem::${gem_name}.API
PRIVATE
Gem::${gem_name}.Private.Object
)
find_package (Eigen3 3.3 NO_MODULE)

target_link_libraries(${gem_name}.Private.Object PUBLIC Eigen3::Eigen)

# Include the gem name into the Client Module source file
# for use with the AZ_DECLARE_MODULE_CLASS macro
# This is to allow renaming of the gem to also cause
# the CreateModuleClass_Gem_<gem-name> function which
# is used to bootstrap the gem in monolithic builds to link to the new gem name
ly_add_source_properties(
SOURCES
Source/Clients/SmoothingModule.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:
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})

# For the Client and Server variants of ${gem_name} Gem, an alias to the ${gem_name}.API target will be made
ly_create_alias(NAME ${gem_name}.Clients.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)
ly_create_alias(NAME ${gem_name}.Servers.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)
ly_create_alias(NAME ${gem_name}.Unified.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)

# Add in CMake dependencies for each gem dependency listed in this gem's gem.json file
# for the Clients, Servers, Unified gem variants
o3de_add_variant_dependencies_for_gem_dependencies(GEM_NAME ${gem_name} VARIANTS Clients Servers Unified)

# If we are on a host platform, we want to add the host tools targets like the ${gem_name}.Editor MODULE target
if(PAL_TRAIT_BUILD_HOST_TOOLS)
# The ${gem_name}.Editor.API target can be used by other gems that want to interact with the ${gem_name}.Editor module
ly_add_target(
NAME ${gem_name}.Editor.API INTERFACE
NAMESPACE Gem
FILES_CMAKE
smoothing_editor_api_files.cmake
${pal_dir}/smoothing_editor_api_files.cmake
INCLUDE_DIRECTORIES
INTERFACE
Include
BUILD_DEPENDENCIES
INTERFACE
AZ::AzToolsFramework
)

# The ${gem_name}.Editor.Private.Object target is an internal target
# which is only to be used by this gems CMakeLists.txt and any subdirectories
# Other gems should not use this target
ly_add_target(
NAME ${gem_name}.Editor.Private.Object STATIC
NAMESPACE Gem
FILES_CMAKE
smoothing_editor_private_files.cmake
TARGET_PROPERTIES
O3DE_PRIVATE_TARGET TRUE
INCLUDE_DIRECTORIES
PRIVATE
Include
Source
BUILD_DEPENDENCIES
PUBLIC
AZ::AzToolsFramework
${gem_name}.Private.Object
)

ly_add_target(
NAME ${gem_name}.Editor GEM_MODULE
NAMESPACE Gem
AUTOMOC
FILES_CMAKE
smoothing_editor_shared_files.cmake
INCLUDE_DIRECTORIES
PRIVATE
Source
PUBLIC
Include
BUILD_DEPENDENCIES
PUBLIC
Gem::${gem_name}.Editor.API
PRIVATE
Gem::${gem_name}.Editor.Private.Object
)

# Include the gem name into the Editor Module source file
# for use with the AZ_DECLARE_MODULE_CLASS macro
# This is to allow renaming of the gem to also cause
# the CreateModuleClass_Gem_<gem-name> function which
# is used to bootstrap the gem in monolithic builds to link to the new gem name
ly_add_source_properties(
SOURCES
Source/Tools/SmoothingEditorModule.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:
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)

# For the Tools and Builders variants of ${gem_name} Gem, an alias to the ${gem_name}.Editor API target will be made
ly_create_alias(NAME ${gem_name}.Tools.API NAMESPACE Gem TARGETS Gem::${gem_name}.Editor.API)
ly_create_alias(NAME ${gem_name}.Builders.API NAMESPACE Gem TARGETS Gem::${gem_name}.Editor.API)

# Add in CMake dependencies for each gem dependency listed in this gem's gem.json file
# for the Tools and Builders gem variants
o3de_add_variant_dependencies_for_gem_dependencies(GEM_NAME ${gem_name} VARIANTS Tools Builders)
endif()

################################################################################
# Tests
################################################################################
# See if globally, tests are supported
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
# We globally support tests, see if we support tests on this platform for ${gem_name}.Tests
if(PAL_TRAIT_SMOOTHING_TEST_SUPPORTED)
# We support ${gem_name}.Tests on this platform, add dependency on the Private Object target
ly_add_target(
NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
NAMESPACE Gem
FILES_CMAKE
smoothing_tests_files.cmake
INCLUDE_DIRECTORIES
PRIVATE
Tests
Source
Include
BUILD_DEPENDENCIES
PRIVATE
AZ::AzTest
AZ::AzFramework
Gem::${gem_name}.Private.Object
)

# Add ${gem_name}.Tests to googletest
ly_add_googletest(
NAME Gem::${gem_name}.Tests
)
endif()

# If we are a host platform we want to add tools test like editor tests here
if(PAL_TRAIT_BUILD_HOST_TOOLS)
# We are a host platform, see if Editor tests are supported on this platform
if(PAL_TRAIT_SMOOTHING_EDITOR_TEST_SUPPORTED)
# We support ${gem_name}.Editor.Tests on this platform, add ${gem_name}.Editor.Tests target which depends on
# private ${gem_name}.Editor.Private.Object target
ly_add_target(
NAME ${gem_name}.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
NAMESPACE Gem
FILES_CMAKE
smoothing_editor_tests_files.cmake
INCLUDE_DIRECTORIES
PRIVATE
Tests
Source
Include
BUILD_DEPENDENCIES
PRIVATE
AZ::AzTest
Gem::${gem_name}.Editor.Private.Object
)

# Add ${gem_name}.Editor.Tests to googletest
ly_add_googletest(
NAME Gem::${gem_name}.Editor.Tests
)
endif()
endif()
endif()
25 changes: 25 additions & 0 deletions Gems/Smoothing/Code/Include/Smoothing/SmoothingTypeIds.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

#pragma once

namespace Smoothing
{
// System Component TypeIds
inline constexpr const char* SmoothingSystemComponentTypeId = "{FC39BBB4-C723-4994-9923-6EAF200891C1}";
inline constexpr const char* SmoothingEditorSystemComponentTypeId = "{5B96FFF8-A18E-4373-B96A-56250A4ABA8B}";

// Components, controllers and configs TypeIds
inline constexpr const char* SmoothingComponentTypeId = "{2FAF0D38-4EEE-4351-96D5-089242B5D5B5}";
inline constexpr const char* SmoothingComponentEditorComponentTypeId = "{A27AA1A4-9178-40B3-8079-F8486A7CE544}";
inline constexpr const char* SmoothingComponentControllerTypeId = "{5A0DD7CE-1651-4751-8EEB-46FFFAD8E9EB}";
inline constexpr const char* SmoothingConfigTypeId = "{142F6B91-F088-40DB-8409-7C2BE07E0286}";

// Module derived classes TypeIds
inline constexpr const char* SmoothingModuleInterfaceTypeId = "{86F9681F-2F29-486B-ABA7-B2152FB8A08C}";
inline constexpr const char* SmoothingModuleTypeId = "{2B284F2F-270D-4CB2-956C-EC2B835D144E}";
// The Editor Module by default is mutually exclusive with the Client Module
// so they use the Same TypeId
inline constexpr const char* SmoothingEditorModuleTypeId = SmoothingModuleTypeId;

// Interface TypeIds
inline constexpr const char* SmoothingRequestsTypeId = "{897472A7-6396-476D-82E2-CD05FDCD681E}";
} // namespace Smoothing
4 changes: 4 additions & 0 deletions Gems/Smoothing/Code/Platform/Android/PAL_android.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

set(PAL_TRAIT_SMOOTHING_SUPPORTED TRUE)
set(PAL_TRAIT_SMOOTHING_TEST_SUPPORTED FALSE)
set(PAL_TRAIT_SMOOTHING_EDITOR_TEST_SUPPORTED FALSE)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

set(FILES
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

# Platform specific files for Android
# i.e. ../Source/Android/SmoothingAndroid.cpp
# ../Source/Android/SmoothingAndroid.h
# ../Include/Android/SmoothingAndroid.h

set(FILES
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

# Platform specific files for Android
# i.e. ../Source/Android/SmoothingAndroid.cpp
# ../Source/Android/SmoothingAndroid.h
# ../Include/Android/SmoothingAndroid.h

set(FILES
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#

set(LY_COMPILE_OPTIONS
PRIVATE
-fexceptions
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#

set(LY_COMPILE_OPTIONS
PRIVATE
-fexceptions
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#
# Copyright (c) Contributors to the Open 3D Engine Project.
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
#
# SPDX-License-Identifier: Apache-2.0 OR MIT
#

set(LY_COMPILE_OPTIONS
PRIVATE
/EHsc
)
4 changes: 4 additions & 0 deletions Gems/Smoothing/Code/Platform/Linux/PAL_linux.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

set(PAL_TRAIT_SMOOTHING_SUPPORTED TRUE)
set(PAL_TRAIT_SMOOTHING_TEST_SUPPORTED FALSE)
set(PAL_TRAIT_SMOOTHING_EDITOR_TEST_SUPPORTED FALSE)
3 changes: 3 additions & 0 deletions Gems/Smoothing/Code/Platform/Linux/smoothing_api_files.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

set(FILES
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

set(FILES
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

# Platform specific files for Linux
# i.e. ../Source/Linux/SmoothingLinux.cpp
# ../Source/Linux/SmoothingLinux.h
# ../Include/Linux/SmoothingLinux.h

set(FILES
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

# Platform specific files for Linux
# i.e. ../Source/Linux/SmoothingLinux.cpp
# ../Source/Linux/SmoothingLinux.h
# ../Include/Linux/SmoothingLinux.h

set(FILES
)
4 changes: 4 additions & 0 deletions Gems/Smoothing/Code/Platform/Mac/PAL_mac.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

set(PAL_TRAIT_SMOOTHING_SUPPORTED TRUE)
set(PAL_TRAIT_SMOOTHING_TEST_SUPPORTED FALSE)
set(PAL_TRAIT_SMOOTHING_EDITOR_TEST_SUPPORTED FALSE)
Loading