Work in Progress: template changes, getting external projects w/ SDK to work
This commit is contained in:
@@ -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")
|
||||
|
||||
# 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})
|
||||
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()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user