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

The gem that allows to expose o3de to console to ROS 2 #59

Merged
merged 5 commits into from
Sep 17, 2024
Merged
Show file tree
Hide file tree
Changes from 2 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.
6 changes: 6 additions & 0 deletions Gems/ExposeConsoleToRos/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

o3de_gem_setup("ExposeConsoleToRos")

ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)

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

# 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/ExposeConsoleToRos/Code/Platform/<platorm_name> or
# <restricted_folder>/<platform_name>/Gems/ExposeConsoleToRos/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_EXPOSECONSOLETOROS_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
exposeconsoletoros_api_files.cmake
${pal_dir}/exposeconsoletoros_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
exposeconsoletoros_private_files.cmake
${pal_dir}/exposeconsoletoros_private_files.cmake
TARGET_PROPERTIES
O3DE_PRIVATE_TARGET TRUE
INCLUDE_DIRECTORIES
PRIVATE
Include
Source
BUILD_DEPENDENCIES
PUBLIC
AZ::AzCore
AZ::AzFramework
Gem::ROS2.Static
Gem::ROS2.API
)

# 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
exposeconsoletoros_shared_files.cmake
${pal_dir}/exposeconsoletoros_shared_files.cmake
INCLUDE_DIRECTORIES
PUBLIC
Include
PRIVATE
Source
BUILD_DEPENDENCIES
PUBLIC
Gem::${gem_name}.API
PRIVATE
Gem::${gem_name}.Private.Object
)

# 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/ExposeConsoleToRosModule.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
exposeconsoletoros_editor_api_files.cmake
${pal_dir}/exposeconsoletoros_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
exposeconsoletoros_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
exposeconsoletoros_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/ExposeConsoleToRosEditorModule.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_EXPOSECONSOLETOROS_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
exposeconsoletoros_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_EXPOSECONSOLETOROS_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
exposeconsoletoros_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()
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

#pragma once

namespace ExposeConsoleToRos
{
// System Component TypeIds
inline constexpr const char* ExposeConsoleToRosSystemComponentTypeId = "{7D8DB10F-7B2C-4E91-9922-F1EBD3F1430A}";
inline constexpr const char* ExposeConsoleToRosEditorSystemComponentTypeId = "{27D3FF8B-B6BF-4865-B238-8EE292911C6C}";

// Module derived classes TypeIds
inline constexpr const char* ExposeConsoleToRosModuleInterfaceTypeId = "{209AEF62-0F20-48F0-88F0-89CDE002900E}";
inline constexpr const char* ExposeConsoleToRosModuleTypeId = "{147C9841-688C-4DE3-BE64-765F7B4D5219}";
// The Editor Module by default is mutually exclusive with the Client Module
// so they use the Same TypeId
inline constexpr const char* ExposeConsoleToRosEditorModuleTypeId = ExposeConsoleToRosModuleTypeId;

// Interface TypeIds
inline constexpr const char* ExposeConsoleToRosRequestsTypeId = "{BF7FDA4A-BF1E-4DFD-9F11-8BE4AC3834A4}";
} // namespace ExposeConsoleToRos
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

set(PAL_TRAIT_EXPOSECONSOLETOROS_SUPPORTED TRUE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_TEST_SUPPORTED FALSE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_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/ExposeConsoleToRosAndroid.cpp
# ../Source/Android/ExposeConsoleToRosAndroid.h
# ../Include/Android/ExposeConsoleToRosAndroid.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/ExposeConsoleToRosAndroid.cpp
# ../Source/Android/ExposeConsoleToRosAndroid.h
# ../Include/Android/ExposeConsoleToRosAndroid.h

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

set(PAL_TRAIT_EXPOSECONSOLETOROS_SUPPORTED TRUE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_TEST_SUPPORTED FALSE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_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,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/ExposeConsoleToRosLinux.cpp
# ../Source/Linux/ExposeConsoleToRosLinux.h
# ../Include/Linux/ExposeConsoleToRosLinux.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/ExposeConsoleToRosLinux.cpp
# ../Source/Linux/ExposeConsoleToRosLinux.h
# ../Include/Linux/ExposeConsoleToRosLinux.h

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

set(PAL_TRAIT_EXPOSECONSOLETOROS_SUPPORTED TRUE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_TEST_SUPPORTED FALSE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_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,3 @@

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

# Platform specific files for Mac
# i.e. ../Source/Mac/ExposeConsoleToRosMac.cpp
# ../Source/Mac/ExposeConsoleToRosMac.h
# ../Include/Mac/ExposeConsoleToRosMac.h

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

# Platform specific files for Mac
# i.e. ../Source/Mac/ExposeConsoleToRosMac.cpp
# ../Source/Mac/ExposeConsoleToRosMac.h
# ../Include/Mac/ExposeConsoleToRosMac.h

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

set(PAL_TRAIT_EXPOSECONSOLETOROS_SUPPORTED TRUE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_TEST_SUPPORTED FALSE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_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,3 @@

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

# Platform specific files for Windows
# i.e. ../Source/Windows/ExposeConsoleToRosWindows.cpp
# ../Source/Windows/ExposeConsoleToRosWindows.h
# ../Include/Windows/ExposeConsoleToRosWindows.h

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

# Platform specific files for Windows
# i.e. ../Source/Windows/ExposeConsoleToRosWindows.cpp
# ../Source/Windows/ExposeConsoleToRosWindows.h
# ../Include/Windows/ExposeConsoleToRosWindows.h

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

set(PAL_TRAIT_EXPOSECONSOLETOROS_SUPPORTED TRUE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_TEST_SUPPORTED FALSE)
set(PAL_TRAIT_EXPOSECONSOLETOROS_EDITOR_TEST_SUPPORTED FALSE)
Loading
Loading