Skip to content

Commit fa4a391

Browse files
author
Vano
committed
cmake version update, macos config ready, custom godot-cpp target
properties
1 parent aa1f7a5 commit fa4a391

File tree

11 files changed

+71
-30
lines changed

11 files changed

+71
-30
lines changed

CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
# TODO:
5656
# Test builds for MacOS/IOS
5757

58-
cmake_minimum_required(VERSION 3.12)
58+
cmake_minimum_required(VERSION 3.13)
5959
project(godot-cpp LANGUAGES CXX)
6060

6161
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
@@ -111,7 +111,7 @@ target_compile_features(${PROJECT_NAME} PUBLIC
111111
)
112112

113113
target_compile_options(${PROJECT_NAME} PRIVATE
114-
${GODOT_CC_FLAGS}
114+
${GODOT_C_FLAGS}
115115
${GODOT_CXX_FLAGS}
116116
${GODOT_COMPILE_WARNING_FLAGS}
117117
)
@@ -124,6 +124,11 @@ set_target_properties(${PROJECT_NAME}
124124
PROPERTIES
125125
CXX_EXTENSIONS OFF
126126
POSITION_INDEPENDENT_CODE ON
127+
GODOT_C_FLAGS "${GODOT_C_FLAGS}"
128+
GODOT_CXX_FLAGS "${GODOT_CXX_FLAGS}"
129+
GODOT_COMPILE_WARNING_FLAGS "${GODOT_COMPILE_WARNING_FLAGS}"
130+
GODOT_LINK_FLAGS "${GODOT_LINK_FLAGS}"
131+
LIBRARY_SUFFIX "${LIBRARY_SUFFIX}"
127132
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
128133
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
129134
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"

cmake/android.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ list(APPEND GODOT_DEFINITIONS
2121
UNIX_ENABLED
2222
)
2323

24-
list(APPEND GODOT_CC_FLAGS
24+
list(APPEND GODOT_C_FLAGS
2525
$<$<STREQUAL:${ARCH},arm32>:
2626
--target=armv7a-linux-androideabi${ANDROID_PLATFORM}
2727
-march=armv7-a

cmake/godotcpp.cmake

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
1010
endif()
1111

1212
set(TARGET "TEMPLATE_DEBUG" CACHE STRING "Target platform (EDITOR, TEMPLATE_DEBUG, TEMPLATE_RELEASE)")
13+
1314
# Auto-detect platform
1415
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
1516
set(DEFAULT_GODOT_PLATFORM "LINUX")
@@ -22,7 +23,9 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
2223
elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") # Set by providing Emscripten toolchain
2324
set(DEFAULT_GODOT_PLATFORM "WEB")
2425
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") # Set by providing Android toolchain
25-
set(DEFAULT_GODOT_PLATFORM "NOTFOUND")
26+
set(DEFAULT_GODOT_PLATFORM "ANDROID")
27+
else()
28+
set(DEFAULT_GODOT_PLATFORM "NOTFOUND")
2629
endif()
2730

2831
set(GODOT_PLATFORM "${DEFAULT_GODOT_PLATFORM}" CACHE STRING "[Auto-detected] Target platform (LINUX, MACOS, WINDOWS, ANDROID, IOS, WEB)")
@@ -31,9 +34,8 @@ if("${GODOT_PLATFORM}" STREQUAL "NOTFOUND")
3134
message(FATAL_ERROR "Could not auto-detect platform for \"${CMAKE_SYSTEM_NAME}\" automatically, please specify with -DGODOT_PLATFORM=<platform>")
3235
endif()
3336

34-
set(GODOT_PLATFORM "${DEFAULT_GODOT_PLATFORM}" CACHE STRING "[Auto-detected] Target platform (LINUX, MACOS, WINDOWS, ANDROID, IOS, WEB)")
35-
3637
message(STATUS "Platform detected: ${GODOT_PLATFORM}")
38+
3739
set(GDEXTENSION_DIR "${CMAKE_CURRENT_SOURCE_DIR}/gdextension" CACHE FILEPATH "Path to a directory containing GDExtension interface header")
3840

3941
set(GDEXTENSION_API_FILE "${CMAKE_CURRENT_SOURCE_DIR}/gdextension/extension_api.json" CACHE FILEPATH "Path to GDExtension API JSON file")
@@ -98,7 +100,7 @@ set(DEFAULT_OPTIMIZATION "$<NOT:${DEFAULT_OPTIMIZATION_DEBUG_FEATURES}>")
98100

99101
set(DEBUG_SYMBOLS_ENABLED "$<OR:$<BOOL:${DEBUG_SYMBOLS}>,$<IN_LIST:${CONFIG},${CONFIGS_WITH_DEBUG}>>")
100102

101-
# Clean default options
103+
# Clear default options
102104
set(CMAKE_CXX_FLAGS_DEBUG "")
103105
set(CMAKE_CXX_FLAGS_RELEASE "")
104106
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "")
@@ -136,7 +138,7 @@ list(APPEND GODOT_DEFINITIONS
136138
>
137139
)
138140

139-
list(APPEND GODOT_CC_FLAGS
141+
list(APPEND GODOT_C_FLAGS
140142
$<${compiler_is_msvc}:
141143
$<${DEBUG_SYMBOLS_ENABLED}:
142144
/Zi
@@ -302,6 +304,6 @@ endif()
302304
# Write all flags to file for cmake configuration debug
303305
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/flags-${CONFIG}.txt"
304306
CONTENT
305-
"C_FLAGS '${GODOT_CC_FLAGS}'\nCXX_FLAGS '${GODOT_CXX_FLAGS}'\nLINK_FLAGS '${GODOT_LINK_FLAGS}'\nCOMPILE_WARNING_FLAGS '${GODOT_COMPILE_WARNING_FLAGS}'\nDEFINITIONS '${GODOT_DEFINITIONS}'"
307+
"C_FLAGS '${GODOT_C_FLAGS}'\nCXX_FLAGS '${GODOT_CXX_FLAGS}'\nLINK_FLAGS '${GODOT_LINK_FLAGS}'\nCOMPILE_WARNING_FLAGS '${GODOT_COMPILE_WARNING_FLAGS}'\nDEFINITIONS '${GODOT_DEFINITIONS}'"
306308
TARGET ${PROJECT_NAME}
307309
)

cmake/ios.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ list(APPEND GODOT_DEFINITIONS
1919
UNIX_ENABLED
2020
)
2121

22-
list(APPEND GODOT_CC_FLAGS
22+
list(APPEND GODOT_C_FLAGS
2323
$<$<STREQUAL:${CMAKE_SYSTEM_NAME},Darwin>:
2424
-stdlib=libc++
2525
>

cmake/linux.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ list(APPEND GODOT_DEFINITIONS
99
UNIX_ENABLED
1010
)
1111

12-
list(APPEND GODOT_CC_FLAGS
12+
list(APPEND GODOT_C_FLAGS
1313
# -fPIC is controlled by POSITION_INDEPENDENT_CODE property
1414

1515
$<$<STREQUAL:${ARCH},x86_64>:

cmake/macos.cmake

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
message(WARNING "MacOS configuration is not tested and may not work.")
2-
31
set(ARCH "universal" CACHE STRING "Target architecture (universal, arm64, x86_64, CUSTOM)")
42

53
set(MACOS_DEPLOYMENT_TARGET "DEFAULT" CACHE STRING "")
@@ -17,7 +15,7 @@ list(APPEND GODOT_DEFINITIONS
1715
UNIX_ENABLED
1816
)
1917

20-
list(APPEND GODOT_CC_FLAGS
18+
list(APPEND GODOT_C_FLAGS
2119
$<$<STREQUAL:${ARCH},universal>:
2220
"SHELL:-arch x86_64"
2321
"SHELL:-arch arm64"

cmake/web.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ list(APPEND GODOT_DEFINITIONS
1111
UNIX_ENABLED
1212
)
1313

14-
list(APPEND GODOT_CC_FLAGS
14+
list(APPEND GODOT_C_FLAGS
1515
-sUSE_PTHREADS=1
1616
)
1717

cmake/windows.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ list(APPEND GODOT_DEFINITIONS
1515
>
1616
)
1717

18-
list(APPEND GODOT_CC_FLAGS
18+
list(APPEND GODOT_C_FLAGS
1919
$<${compiler_is_msvc}:
2020
/utf-8
2121

test/CMakeLists.txt

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Configuration can be used as a template for custom project, read comments
2-
cmake_minimum_required(VERSION 3.6)
2+
cmake_minimum_required(VERSION 3.13)
33
project(gdexample LANGUAGES CXX)
44

55
set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo;MinSizeRel")
@@ -14,7 +14,7 @@ add_subdirectory(
1414
file(GLOB_RECURSE SOURCES src/*.c**)
1515
file(GLOB_RECURSE HEADERS src/*.h**)
1616

17-
get_directory_property(LIBRARY_SUFFIX DIRECTORY ${GODOT_CPP_PATH} DEFINITION LIBRARY_SUFFIX)
17+
get_target_property(LIBRARY_SUFFIX godot-cpp LIBRARY_SUFFIX)
1818

1919
# Define our godot-cpp library
2020
if(${GODOT_PLATFORM} STREQUAL "WEB")
@@ -26,17 +26,27 @@ if(${GODOT_PLATFORM} STREQUAL "WEB")
2626
OUTPUT_NAME "${PROJECT_NAME}${LIBRARY_SUFFIX}"
2727
)
2828
elseif(${GODOT_PLATFORM} STREQUAL "MACOS")
29-
# TODO: create framework with cmake FRAMEWORK property
30-
# or with template file
31-
message(WARNING "Mac/IOS framework configuration is not tested and may not work.")
32-
3329
add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS})
30+
set(OUTPUT_NAME "lib${PROJECT_NAME}${LIBRARY_SUFFIX}")
3431
set_target_properties(${PROJECT_NAME} PROPERTIES
3532
FRAMEWORK TRUE
36-
MACOSX_FRAMEWORK_IDENTIFIER com.godotengine.${PROJECT_NAME}
37-
MACOSX_FRAMEWORK_INFO_PLIST ${GODOT_CPP_PATH}/cmake/Info.plist.in
38-
OUTPUT_NAME "lib${PROJECT_NAME}${LIBRARY_SUFFIX}"
33+
MACOSX_FRAMEWORK_IDENTIFIER "org.godotengine.lib${PROJECT_NAME}"
34+
MACOSX_BUNDLE_BUNDLE_NAME "lib${PROJECT_NAME}${LIBRARY_SUFFIX}"
35+
MACOSX_BUNDLE_SHORT_VERSION_STRING "1.0.0"
36+
MACOS_BUNDLE_BUNDLE_VERSION "1.0.0"
37+
38+
OUTPUT_NAME "${OUTPUT_NAME}"
3939
)
40+
41+
# Workaround of 'bin/***.framework/Resources' existing in godot-cpp repo by default'
42+
set(RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/project/bin/${OUTPUT_NAME}.framework/Resources")
43+
if(IS_DIRECTORY ${RESOURCES_DIR} AND NOT IS_SYMLINK ${RESOURCES_DIR})
44+
message(STATUS "Removing '${RESOURCES_DIR}' to create symlink ...")
45+
file(REMOVE_RECURSE ${RESOURCES_DIR})
46+
endif()
47+
48+
# TODO: IOS configuration
49+
#elseif(${GODOT_PLATFORM} STREQUAL "IOS")
4050
else()
4151
add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS})
4252
set_target_properties(${PROJECT_NAME} PROPERTIES
@@ -46,18 +56,18 @@ endif()
4656

4757
target_link_libraries(${PROJECT_NAME} PUBLIC godot-cpp)
4858

49-
get_directory_property(GODOT_CC_FLAGS DIRECTORY ${GODOT_CPP_PATH} DEFINITION GODOT_CC_FLAGS)
50-
get_directory_property(GODOT_CXX_FLAGS DIRECTORY ${GODOT_CPP_PATH} DEFINITION GODOT_CXX_FLAGS)
59+
get_target_property(GODOT_C_FLAGS godot-cpp GODOT_C_FLAGS)
60+
get_target_property(GODOT_CXX_FLAGS godot-cpp GODOT_CXX_FLAGS)
5161
target_compile_options(${PROJECT_NAME} PRIVATE
52-
${GODOT_CC_FLAGS}
62+
${GODOT_C_FLAGS}
5363
${GODOT_CXX_FLAGS}
5464
)
5565

56-
get_directory_property(GODOT_LINK_FLAGS DIRECTORY ${GODOT_CPP_PATH} DEFINITION GODOT_LINK_FLAGS)
66+
get_target_property(GODOT_LINK_FLAGS godot-cpp GODOT_LINK_FLAGS)
5767
target_link_options(${PROJECT_NAME} PRIVATE ${GODOT_LINK_FLAGS})
5868

5969

60-
get_directory_property(LIBRARY_SUFFIX DIRECTORY ${GODOT_CPP_PATH} DEFINITION LIBRARY_SUFFIX)
70+
get_target_property(LIBRARY_SUFFIX godot-cpp LIBRARY_SUFFIX)
6171
set_target_properties(${PROJECT_NAME}
6272
PROPERTIES
6373
PREFIX "lib"

0 commit comments

Comments
 (0)