Skip to content

Commit

Permalink
defining the platform and architecture variables is a real pain.
Browse files Browse the repository at this point in the history
delete accidental debug code
  • Loading branch information
enetheru committed Nov 3, 2024
1 parent 6dcc9c3 commit 3602c1b
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 13 deletions.
42 changes: 33 additions & 9 deletions cmake/godotcpp.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ include(ProcessorCount)
ProcessorCount(PROC_N)
message( "Auto-detected ${PROC_N} CPU cores available for build parallelism." )

set( PLATFORM_LIST linux macos windows android ios web )
set( ARCH_LIST universal x86_32 x86_64 arm32 arm64 rv64 ppc32 ppc64 wasm32 )

set( ARCH_ALIAS w64 amd64 armv7 armv8 arm64v8 aarch64 rv riscv riscv64 ppcle ppc ppc64le )
set( ARCH_ALIAS_VALUE x86_64 x86_64 arm32 arm64 arm64 arm64 rv64 rv64 rv64 ppc32 ppc32 ppc64 )

# include lists of sources and generic configure function
include( cmake/sources.cmake )
include( cmake/common_compiler_flags.cmake)
Expand Down Expand Up @@ -36,7 +42,10 @@ function( godotcpp_options )
set(GODOT_PRECISION "single" CACHE STRING
"Set the floating-point precision level (single|double)")

#NOTE: arch - is managed using toolchain files
# The arch is typically set by the toolchain
# however for Apple multi-arch setting it here will override.
set( GODOT_ARCH "" CACHE STRING "Target CPU Architecture")
set_property( CACHE GODOT_ARCH PROPERTY STRINGS ${ARCH_LIST} )

#TODO threads
#TODO compiledb
Expand Down Expand Up @@ -128,14 +137,29 @@ function( godotcpp_generate )
COMMENT "Generating bindings"
)

### Create the correct name (name.os.build_type.arch)
set( ARCH_KEYS "w64;x86_64;amd64" )
set( ARCH_VALUES "x86_64;x86_64;x86_64" )
set( SYSTEM_ARCH "$<LOWER_CASE:${CMAKE_SYSTEM_PROCESSOR}>")
set( ARCH_INDEX "$<LIST:FIND,${ARCH_KEYS},${SYSTEM_ARCH}>")
set( SYSTEM_ARCH "$<LIST:GET,${ARCH_VALUES},${ARCH_INDEX}>")

set( SYSTEM_NAME "$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>$<$<BOOL:${ANDROID}>:.${ANDROID_ABI}>")
### Platform is derived from the toolchain target
# See GeneratorExpressions PLATFORM_ID and CMAKE_SYSTEM_NAME
set( SYSTEM_NAME
$<$<PLATFORM_ID:Android>:android.${ANDROID_ABI}>
$<$<PLATFORM_ID:iOS>:ios>
$<$<PLATFORM_ID:Linux>:linux>
$<$<PLATFORM_ID:Darwin>:macos>
$<$<PLATFORM_ID:Emscripten>:web>
$<$<PLATFORM_ID:Windows>:windows>
)
string(REPLACE ";" "" SYSTEM_NAME "${SYSTEM_NAME}")

### Derive SYSTEM_ARCH
# from the toolchain first
if (NOT GODOT_ARCH)
set( SYSTEM_PROCESSOR "$<LOWER_CASE:${CMAKE_SYSTEM_PROCESSOR}>")
set( ARCH_IN_LIST "$<IN_LIST:${SYSTEM_PROCESSOR},${ARCH_LIST}>" )
set( ARCH_INDEX "$<LIST:FIND,${ARCH_ALIAS},${SYSTEM_PROCESSOR}>")
set( SYSTEM_ARCH "$<IF:${ARCH_IN_LIST},${SYSTEM_PROCESSOR},$<LIST:GET,${ARCH_ALIAS_VALUE},${ARCH_INDEX}>>")
else ()
# override from manually specified GODOT_ARCH variable
set(SYSTEM_ARCH ${GODOT_ARCH})
endif ()

### Define our godot-cpp library targets
foreach ( TARGET_NAME template_debug;template_release;editor )
Expand Down
10 changes: 9 additions & 1 deletion cmake/macos.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ endfunction()

function( macos_generate TARGET_NAME )

# OSX_ARCHITECTURES does not support generator expressions.
if( NOT GODOT_ARCH OR GODOT_ARCH STREQUAL universal )
set( OSX_ARCH "x86_64;arm64" )
set( SYSTEM_ARCH universal )
else()
set( OSX_ARCH ${GODOT_ARCH} )
endif()

set_target_properties( ${TARGET_NAME}
PROPERTIES

Expand All @@ -18,7 +26,7 @@ function( macos_generate TARGET_NAME )
ARCHIVE_OUTPUT_DIRECTORY "$<1:${CMAKE_SOURCE_DIR}/bin>"

#MACOS options
OSX_ARCHITECTURES "arm64;x86_64"
OSX_ARCHITECTURES "${OSX_ARCHS}"
)

target_compile_definitions(${TARGET_NAME}
Expand Down
13 changes: 10 additions & 3 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ target_link_libraries( godot-cpp-test

### Get the name parts from the godot-cpp library
get_target_property( NAME_SUFFIX godot-cpp::template_release NAME_SUFFIX )
get_target_property( OSX_ARCHS godot-cpp::template_release OSX_ARCHITECTURES )

set( DEFAULT_OUTPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/project/bin/" )
set( OSX_OUTPUT_DIR "${DEFAULT_OUTPUT_DIR}/libgdexample.${NAME_SUFFIX}.framework")

set_target_properties( godot-cpp-test
PROPERTIES
Expand All @@ -28,12 +32,15 @@ set_target_properties( godot-cpp-test
BUILD_RPATH_USE_ORIGIN ON
LINK_SEARCH_START_STATIC ON
LINK_SEARCH_END_STATIC ON
LIBRARY_OUTPUT_DIRECTORY "$<1:${CMAKE_CURRENT_SOURCE_DIR}/project/bin/>"
RUNTIME_OUTPUT_DIRECTORY "$<1:${CMAKE_CURRENT_SOURCE_DIR}/project/bin/>"
LIBRARY_OUTPUT_DIRECTORY "$<IF:$<PLATFORM_ID:Darwin>,${OSX_OUTPUT_DIR},${DEFAULT_OUTPUT_DIR}>"
RUNTIME_OUTPUT_DIRECTORY "$<IF:$<PLATFORM_ID:Darwin>,${OSX_OUTPUT_DIR},${DEFAULT_OUTPUT_DIR}>"

PREFIX lib
OUTPUT_NAME "gdexample.${NAME_SUFFIX}"

#MSVC Options
PDB_OUTPUT_DIRECTORY "$<1:${CMAKE_CURRENT_SOURCE_DIR}/project/bin/>"
PDB_OUTPUT_DIRECTORY "$<1:${DEFAULT_OUTPUT_DIR}>"

#macos options
OSX_ARCHITECTURES ${OSX_ARCHS}
)

0 comments on commit 3602c1b

Please sign in to comment.