Work in Progress: template changes, getting external projects w/ SDK to work

main
phistere 5 years ago
parent 0a8621ba0a
commit f30b1f2c75

@ -23,64 +23,121 @@ function(add_vs_debugger_arguments)
endforeach()
endfunction()
set(o3de_project_path ${CMAKE_CURRENT_LIST_DIR})
set(o3de_project_json ${o3de_project_path}/project.json)
if(NOT PROJECT_NAME)
cmake_minimum_required(VERSION 3.19)
project(${Name}
LANGUAGES C CXX
VERSION 1.0.0.0
)
include(EngineFinder.cmake OPTIONAL)
find_package(o3de REQUIRED)
o3de_initialize()
add_vs_debugger_arguments()
else()
# Add the project_name to global LY_PROJECTS_TARGET_NAME property
file(READ "${CMAKE_CURRENT_LIST_DIR}/project.json" project_json)
# set this project as the only project
set(LY_PROJECTS ${CMAKE_CURRENT_LIST_DIR})
# o3de manifest
include(o3de_manifest.cmake)
################################################################################
# Set the engine_path and resolve this engines restricted path if it has one
################################################################################
o3de_engine_path(${o3de_project_json} o3de_engine_path)
o3de_project_name(${o3de_project_json} o3de_project_name)
o3de_restricted_path(${o3de_project_json} o3de_project_restricted_path)
message(STATUS "O3DE Project Name: ${o3de_project_name}")
message(STATUS "O3DE Project Path: ${o3de_project_path}")
if(o3de_project_restricted_path)
message(STATUS "O3DE Project Restricted Path: ${o3de_project_restricted_path}")
string(JSON project_target_name ERROR_VARIABLE json_error GET ${project_json} "project_name")
if(json_error)
message(FATAL_ERROR "Unable to read key 'project_name' from 'project.json'")
endif()
# add the engines cmake folder to the CMAKE_MODULE_PATH
list(APPEND CMAKE_MODULE_PATH "${o3de_engine_path}/cmake")
set_property(GLOBAL APPEND PROPERTY LY_PROJECTS_TARGET_NAME ${project_target_name})
add_subdirectory(Code)
endif()
# #! Adds the --project-path argument to the VS IDE debugger command arguments
# function(add_vs_debugger_arguments)
# # Inject the project root into the --project-path argument into the Visual Studio Debugger arguments by defaults
# list(APPEND app_targets ${Name}.GameLauncher ${Name}.ServerLauncher)
# list(APPEND app_targets AssetBuilder AssetProcessor AssetProcessorBatch Editor)
# foreach(app_target IN LISTS app_targets)
# if (TARGET ${app_target})
# set_property(TARGET ${app_target} APPEND PROPERTY VS_DEBUGGER_COMMAND_ARGUMENTS "--project-path=\"${CMAKE_CURRENT_LIST_DIR}\"")
# endif()
# endforeach()
# endfunction()
# set(o3de_project_path ${CMAKE_CURRENT_LIST_DIR})
# set(o3de_project_json ${o3de_project_path}/project.json)
# if(NOT PROJECT_NAME)
# cmake_minimum_required(VERSION 3.19)
# project(${Name}
# LANGUAGES C CXX
# VERSION 1.0.0.0
# )
# # set this project as the only project
# set(LY_PROJECTS ${CMAKE_CURRENT_LIST_DIR})
# # o3de manifest
# include(o3de_manifest.cmake)
# ################################################################################
# # Set the engine_path and resolve this engines restricted path if it has one
# ################################################################################
# o3de_engine_path(${o3de_project_json} o3de_engine_path)
# o3de_project_name(${o3de_project_json} o3de_project_name)
# o3de_restricted_path(${o3de_project_json} o3de_project_restricted_path)
# message(STATUS "O3DE Project Name: ${o3de_project_name}")
# message(STATUS "O3DE Project Path: ${o3de_project_path}")
# if(o3de_project_restricted_path)
# message(STATUS "O3DE Project Restricted Path: ${o3de_project_restricted_path}")
# endif()
# # add the engines cmake folder to the CMAKE_MODULE_PATH
# list(APPEND CMAKE_MODULE_PATH "${o3de_engine_path}/cmake")
# # add subdirectory on the engine path for this project
# #add_subdirectory(${o3de_engine_path} o3de)
# find_package(o3de REQUIRED)
# o3de_initialize()
# # add this --project-path arguments to visual studio debugger
# add_vs_debugger_arguments()
# else()
# ######################################################
# # the engine is calling add sub_directory() on us
# ######################################################
# o3de_project_name(${o3de_project_json} o3de_project_name)
# o3de_restricted_path(${o3de_project_json} o3de_project_restricted_path)
# # Currently we are in the folder: ${CMAKE_CURRENT_LIST_DIR}
# # Get the platform specific folder ${pal_dir} for the folder: ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}
# # Note: ly_get_list_relative_pal_filename 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: TestDP/Platform/<platorm_name> or
# # <restricted_folder>/<platform_name>/TestDP
# ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${o3de_project_restricted_path} ${o3de_project_path} ${o3de_project_name})
# # Now that we have the platform abstraction layer (PAL) folder for this folder, thats where we will find the
# # project cmake for this platform.
# include(${pal_dir}/${PAL_PLATFORM_NAME_LOWERCASE}_project.cmake)
# # Add the project_name to global LY_PROJECTS_TARGET_NAME property
# set_property(GLOBAL APPEND PROPERTY LY_PROJECTS_TARGET_NAME ${o3de_project_name})
# add_subdirectory(Code)
# endif()
# add subdirectory on the engine path for this project
add_subdirectory(${o3de_engine_path} o3de)
# add this --project-path arguments to visual studio debugger
add_vs_debugger_arguments()
else()
######################################################
# the engine is calling add sub_directory() on us
######################################################
o3de_project_name(${o3de_project_json} o3de_project_name)
o3de_restricted_path(${o3de_project_json} o3de_project_restricted_path)
# Currently we are in the folder: ${CMAKE_CURRENT_LIST_DIR}
# Get the platform specific folder ${pal_dir} for the folder: ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}
# Note: ly_get_list_relative_pal_filename 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: TestDP/Platform/<platorm_name> or
# <restricted_folder>/<platform_name>/TestDP
ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} ${o3de_project_restricted_path} ${o3de_project_path} ${o3de_project_name})
# Now that we have the platform abstraction layer (PAL) folder for this folder, thats where we will find the
# project cmake for this platform.
include(${pal_dir}/${PAL_PLATFORM_NAME_LOWERCASE}_project.cmake)
# Add the project_name to global LY_PROJECTS_TARGET_NAME property
set_property(GLOBAL APPEND PROPERTY LY_PROJECTS_TARGET_NAME ${o3de_project_name})
add_subdirectory(Code)
endif()

@ -0,0 +1,64 @@
#
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
# its licensors.
#
# For complete copyright and license terms please see the LICENSE at the root of this
# distribution (the "License"). All use of this software is governed by the License,
# or, if provided, by the license below or the license accompanying this file. Do not
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#
# This file is copied during engine registration. Edits to this file will be lost next
# time a registration happens.
include_guard()
# Read the engine name from the project_json file
file(READ ${CMAKE_CURRENT_LIST_DIR}/project.json project_json)
string(JSON LY_ENGINE_NAME_TO_USE ERROR_VARIABLE json_error GET ${project_json} engine)
if(json_error)
message(FATAL_ERROR "Unable to read key 'engine' from 'project.json', error: ${json_error}")
endif()
# Read the list of paths from ~.o3de/o3de_manifest.json
if($ENV{USERPROFILE} AND EXISTS $ENV{USERPROFILE})
set(manifest_path $ENV{USERPROFILE}/.o3de/o3de_manifest.json) # Windows
else()
set(manifest_path $ENV{HOME}/.o3de/o3de_manifest.json) # Unix
endif()
if(EXISTS ${manifest_path})
file(READ ${manifest_path} manifest_json)
string(JSON engine_paths_count ERROR_VARIABLE json_error LENGTH ${manifest_json} engine_paths)
if(json_error)
message(FATAL_ERROR "Unable to read key 'engine_paths' from '${manifest_path}', error: ${json_error}")
endif()
string(JSON engine_paths_type ERROR_VARIABLE json_error TYPE ${manifest_json} engine_paths)
if(json_error OR NOT ${engine_paths_type} STREQUAL "OBJECT")
message(FATAL_ERROR "Type of 'engine_paths' in '${manifest_path}' is not a JSON Object, error: ${json_error}")
endif()
math(EXPR engine_paths_count "${engine_paths_count}-1")
foreach(engine_path_index RANGE ${engine_paths_count})
string(JSON engine_name ERROR_VARIABLE json_error MEMBER ${manifest_json} engine_paths ${engine_path_index})
if(json_error)
message(FATAL_ERROR "Unable to read 'engine_paths/${engine_path_index}' from '${manifest_path}', error: ${json_error}")
endif()
if(LY_ENGINE_NAME_TO_USE STREQUAL engine_name)
string(JSON engine_path ERROR_VARIABLE json_error GET ${manifest_json} engine_paths ${engine_name})
if(json_error)
message(FATAL_ERROR "Unable to read value from 'engine_paths/${engine_name}', error: ${json_error}")
endif()
if(engine_path)
list(APPEND CMAKE_MODULE_PATH "${engine_path}/cmake")
break()
endif()
endif()
endforeach()
else()
message(FATAL_ERROR "Engine registration is required before configuring a project. Please register an engine by running 'scripts/o3de register --this-engine'")
endif()

@ -24,6 +24,12 @@
"isTemplated": true,
"isOptional": false
},
{
"file": "EngineFinder.cmake",
"origin": "EngineFinder.cmake",
"isTemplated": false,
"isOptional": false
},
{
"file": "Code/${NameLower}_files.cmake",
"origin": "Code/${NameLower}_files.cmake",

Loading…
Cancel
Save