|
|
@@ -156,15 +156,46 @@ if (MINGW AND CMAKE_CROSSCOMPILING)
|
|
|
set (MINGW_PREFIX "" CACHE STRING "Prefix path to MinGW cross-compiler tools (MinGW cross-compiling build only)")
|
|
|
set (MINGW_SYSROOT "" CACHE PATH "Path to MinGW system root (MinGW cross-compiling build only)")
|
|
|
endif ()
|
|
|
-if (RPI AND CMAKE_CROSSCOMPILING)
|
|
|
- set (RPI_PREFIX "" CACHE STRING "Prefix path to Raspberry Pi cross-compiler tools (RPI cross-compiling build only)")
|
|
|
- set (RPI_SYSROOT "" CACHE PATH "Path to Raspberry Pi system root (RPI cross-compiling build only)")
|
|
|
+if (RPI)
|
|
|
+ if (NOT RPI_SUPPORTED_ABIS)
|
|
|
+ set (RPI_SUPPORTED_ABIS armeabi-v6)
|
|
|
+ if (CMAKE_CROSSCOMPILING)
|
|
|
+ # We have no way to know for sure so just give all the available options to user
|
|
|
+ list (APPEND RPI_SUPPORTED_ABIS armeabi-v7a "armeabi-v7a with NEON" "armeabi-v7a with VFPV4")
|
|
|
+ else ()
|
|
|
+ execute_process (COMMAND uname -m OUTPUT_VARIABLE HOST_MACHINE ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
+ if (HOST_MACHINE MATCHES ^armv7)
|
|
|
+ set (RPI_SUPPORTED_ABIS armeabi-v6 armeabi-v7a "armeabi-v7a with NEON" "armeabi-v7a with VFPV4")
|
|
|
+ if (NOT RPI_ABI)
|
|
|
+ set (RPI_ABI armeabi-v7a)
|
|
|
+ endif ()
|
|
|
+ endif ()
|
|
|
+ endif ()
|
|
|
+ set (RPI_SUPPORTED_ABIS ${RPI_SUPPORTED_ABIS} CACHE INTERNAL "Supported target ABIs for RPI build")
|
|
|
+ endif ()
|
|
|
+ if (CMAKE_CROSSCOMPILING)
|
|
|
+ set (RPI_PREFIX "" CACHE STRING "Prefix path to Raspberry Pi cross-compiler tools (RPI cross-compiling build only)")
|
|
|
+ set (RPI_SYSROOT "" CACHE PATH "Path to Raspberry Pi system root (RPI cross-compiling build only)")
|
|
|
+ endif ()
|
|
|
+ if (RPI_ABI)
|
|
|
+ list (FIND RPI_SUPPORTED_ABIS ${RPI_ABI} RPI_ABI_FOUND_INDEX)
|
|
|
+ if (RPI_ABI_FOUND_INDEX EQUAL -1)
|
|
|
+ string (REPLACE ";" "\", \"" PRINTABLE_RPI_SUPPORTED_ABIS "${RPI_SUPPORTED_ABIS}") # Stringify for string replace to work
|
|
|
+ if (NOT CMAKE_CROSSCOMPILING)
|
|
|
+ set (MSG_STR " by this Raspberry Pi device")
|
|
|
+ endif ()
|
|
|
+ message (FATAL_ERROR "Specified RPI_ABI = \"${RPI_ABI}\" is not supported${MSG_STR}. Supported values are: \"${PRINTABLE_RPI_SUPPORTED_ABIS}\".")
|
|
|
+ endif()
|
|
|
+ else ()
|
|
|
+ set (RPI_ABI armeabi-v6)
|
|
|
+ endif ()
|
|
|
+ set (RPI_ABI ${RPI_ABI} CACHE STRING "Specify target ABI (RPI build only), possible values are armeabi-v6 (*default for RPI 1), armeabi-v7a (*default for RPI 2), armeabi-v7a with NEON, and armeabi-v7a with VFPV4" FORCE)
|
|
|
endif ()
|
|
|
if (EMSCRIPTEN) # CMAKE_CROSSCOMPILING is always true for Emscripten
|
|
|
set (EMSCRIPTEN_ROOT_PATH "" CACHE PATH "Root path to Emscripten cross-compiler tools (Emscripten cross-compiling build only)")
|
|
|
set (EMSCRIPTEN_SYSROOT "" CACHE PATH "Path to Emscripten system root (Emscripten cross-compiling build only)")
|
|
|
option (EMSCRIPTEN_ALLOW_MEMORY_GROWTH "Enable memory growing based on application demand (Emscripten cross-compiling build only)")
|
|
|
- set (EMSCRIPTEN_TOTAL_MEMORY 268435456) # This option is ignored when EMSCRIPTEN_ALLOW_MEMORY_GROWTH=1
|
|
|
+ set (EMSCRIPTEN_TOTAL_MEMORY 268435456) # This option is ignored when EMSCRIPTEN_ALLOW_MEMORY_GROWTH option is set
|
|
|
endif ()
|
|
|
# Constrain the build option values in cmake-gui, if applicable
|
|
|
if (CMAKE_VERSION VERSION_GREATER 2.8 OR CMAKE_VERSION VERSION_EQUAL 2.8)
|
|
|
@@ -172,6 +203,9 @@ if (CMAKE_VERSION VERSION_GREATER 2.8 OR CMAKE_VERSION VERSION_EQUAL 2.8)
|
|
|
if (NOT CMAKE_CONFIGURATION_TYPES)
|
|
|
set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${URHO3D_BUILD_CONFIGURATIONS})
|
|
|
endif ()
|
|
|
+ if (RPI)
|
|
|
+ set_property (CACHE RPI_ABI PROPERTY STRINGS ${RPI_SUPPORTED_ABIS})
|
|
|
+ endif ()
|
|
|
endif()
|
|
|
|
|
|
# Enable testing
|
|
|
@@ -365,8 +399,21 @@ else ()
|
|
|
else ()
|
|
|
if (RPI)
|
|
|
add_definitions (-DRPI)
|
|
|
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -Wno-psabi")
|
|
|
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -Wno-psabi")
|
|
|
+ set (RPI_CFLAGS "-pipe -mfloat-abi=hard -Wno-psabi") # We only support armhf distros, so turn on hard-float by default
|
|
|
+ if (RPI_ABI MATCHES ^armeabi-v7a)
|
|
|
+ set (RPI_CFLAGS "${RPI_CFLAGS} -mcpu=cortex-a7")
|
|
|
+ if (RPI_ABI MATCHES NEON)
|
|
|
+ set (RPI_CFLAGS "${RPI_CFLAGS} -mfpu=neon-vfpv4")
|
|
|
+ elseif (RPI_ABI MATCHES VFPV4)
|
|
|
+ set (RPI_CFLAGS "${RPI_CFLAGS} -mfpu=vfpv4")
|
|
|
+ else ()
|
|
|
+ set (RPI_CFLAGS "${RPI_CFLAGS} -mfpu=vfpv4-d16")
|
|
|
+ endif ()
|
|
|
+ else ()
|
|
|
+ set (RPI_CFLAGS "${RPI_CFLAGS} -mcpu=arm1176jzf-s -mfpu=vfp")
|
|
|
+ endif ()
|
|
|
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${RPI_CFLAGS}")
|
|
|
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${RPI_CFLAGS}")
|
|
|
else ()
|
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math")
|
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
|
|
|
@@ -439,32 +486,39 @@ set_output_directories (${CMAKE_BINARY_DIR}/bin RUNTIME PDB)
|
|
|
|
|
|
# Macro for setting symbolic link on platform that supports it
|
|
|
macro (create_symlink SOURCE DESTINATION)
|
|
|
+ # Make absolute paths so they work more reliably on cmake-gui
|
|
|
+ if (IS_ABSOLUTE ${SOURCE})
|
|
|
+ set (ABS_SOURCE ${SOURCE})
|
|
|
+ else ()
|
|
|
+ set (ABS_SOURCE ${CMAKE_SOURCE_DIR}/${SOURCE})
|
|
|
+ endif ()
|
|
|
+ if (IS_ABSOLUTE ${DESTINATION})
|
|
|
+ set (ABS_DESTINATION ${DESTINATION})
|
|
|
+ else ()
|
|
|
+ set (ABS_DESTINATION ${CMAKE_BINARY_DIR}/${DESTINATION})
|
|
|
+ endif ()
|
|
|
if (CMAKE_HOST_WIN32)
|
|
|
- if (IS_DIRECTORY ${SOURCE})
|
|
|
+ if (IS_DIRECTORY ${ABS_SOURCE})
|
|
|
set (SLASH_D /D)
|
|
|
else ()
|
|
|
unset (SLASH_D)
|
|
|
endif ()
|
|
|
if (URHO3D_MKLINK)
|
|
|
- if (NOT EXISTS ${DESTINATION})
|
|
|
- # Have to use string-REPLACE as file-TO_NATIVE_PATH does not work as expected with MinGW on "backward host" system
|
|
|
- string (REPLACE / \\ BACKWARD_DESTINATION ${DESTINATION})
|
|
|
- string (REPLACE / \\ BACKWARD_SOURCE ${SOURCE})
|
|
|
- execute_process (COMMAND cmd /C mklink ${SLASH_D} ${BACKWARD_DESTINATION} ${BACKWARD_SOURCE} OUTPUT_QUIET ERROR_QUIET)
|
|
|
+ if (NOT EXISTS ${ABS_DESTINATION})
|
|
|
+ # Have to use string-REPLACE as file-TO_NATIVE_PATH does not work as expected with MinGW on "backward slash" host system
|
|
|
+ string (REPLACE / \\ BACKWARD_ABS_DESTINATION ${ABS_DESTINATION})
|
|
|
+ string (REPLACE / \\ BACKWARD_ABS_SOURCE ${ABS_SOURCE})
|
|
|
+ execute_process (COMMAND cmd /C mklink ${SLASH_D} ${BACKWARD_ABS_DESTINATION} ${BACKWARD_ABS_SOURCE} OUTPUT_QUIET ERROR_QUIET)
|
|
|
endif ()
|
|
|
elseif (${ARGN} STREQUAL FALLBACK_TO_COPY)
|
|
|
- if (NOT IS_ABSOLUTE ${SOURCE})
|
|
|
- get_filename_component (PATH ${DESTINATION} PATH)
|
|
|
- set (SOURCE ${PATH}/${SOURCE})
|
|
|
- endif ()
|
|
|
if (SLASH_D)
|
|
|
- set (COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${SOURCE} ${DESTINATION})
|
|
|
+ set (COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${ABS_SOURCE} ${ABS_DESTINATION})
|
|
|
else ()
|
|
|
- set (COMMAND COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SOURCE} ${DESTINATION})
|
|
|
+ set (COMMAND COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ABS_SOURCE} ${ABS_DESTINATION})
|
|
|
endif ()
|
|
|
if (TARGET ${TARGET_NAME})
|
|
|
# Fallback to copy everytime the target is built
|
|
|
- add_custom_command (TARGET ${TARGET_NAME} POST_BUILD ${COMMAND} WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
|
|
+ add_custom_command (TARGET ${TARGET_NAME} POST_BUILD ${COMMAND})
|
|
|
else ()
|
|
|
# Fallback to copy only one time
|
|
|
execute_process (${COMMAND})
|
|
|
@@ -473,7 +527,7 @@ macro (create_symlink SOURCE DESTINATION)
|
|
|
message (WARNING "Unable to create symbolic link on this host system, you may need to manually copy file/dir from \"${SOURCE}\" to \"${DESTINATION}\"")
|
|
|
endif ()
|
|
|
else ()
|
|
|
- execute_process (COMMAND ${CMAKE_COMMAND} -E create_symlink ${SOURCE} ${DESTINATION})
|
|
|
+ execute_process (COMMAND ${CMAKE_COMMAND} -E create_symlink ${ABS_SOURCE} ${ABS_DESTINATION})
|
|
|
endif ()
|
|
|
endmacro ()
|
|
|
|