瀏覽代碼

Add 'install' option (currently only available for native build).

Also enhance FindUrho3D.cmake module to find Urho3D library in the Urho3D SDK installation location.
Yao Wei Tjong 姚伟忠 12 年之前
父節點
當前提交
52ff881c54

+ 1 - 1
Docs/GettingStarted.dox

@@ -281,7 +281,7 @@ if (COMMAND cmake_policy)
 endif ()
 endif ()
 
 
 # Add cmake modules search path
 # Add cmake modules search path
-list (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake/Modules/")
+list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules)
 
 
 # Include Urho3D cmake module
 # Include Urho3D cmake module
 include (Urho3D-CMake-magic)
 include (Urho3D-CMake-magic)

+ 19 - 28
Source/CMake/Modules/FindUrho3D.cmake

@@ -20,7 +20,7 @@
 # THE SOFTWARE.
 # THE SOFTWARE.
 #
 #
 
 
-# Find Urho3D library and include directories in the project root tree or installed location (although there is no install option at the moment)
+# Find Urho3D library and include directories in the project root tree or installed location
 # For project root tree detection to work, Urho3D library must be already been built
 # For project root tree detection to work, Urho3D library must be already been built
 #
 #
 #  URHO3D_FOUND
 #  URHO3D_FOUND
@@ -60,30 +60,13 @@ if (URHO3D_HOME)
     find_file (SOURCE_TREE_PATH Urho3D.h.in ${URHO3D_HOME}/Source/Engine NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
     find_file (SOURCE_TREE_PATH Urho3D.h.in ${URHO3D_HOME}/Source/Engine NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
     if (SOURCE_TREE_PATH)
     if (SOURCE_TREE_PATH)
         get_filename_component (SOURCE_TREE_PATH ${SOURCE_TREE_PATH} PATH)
         get_filename_component (SOURCE_TREE_PATH ${SOURCE_TREE_PATH} PATH)
-        set (URHO3D_INCLUDE_DIR
-            ${SOURCE_TREE_PATH}
-            ${SOURCE_TREE_PATH}/Audio
-            ${SOURCE_TREE_PATH}/Container
-            ${SOURCE_TREE_PATH}/Core
-            ${SOURCE_TREE_PATH}/Engine
-            ${SOURCE_TREE_PATH}/Graphics
-            ${SOURCE_TREE_PATH}/Input
-            ${SOURCE_TREE_PATH}/IO
-            ${SOURCE_TREE_PATH}/LuaScript
-            ${SOURCE_TREE_PATH}/Math
-            ${SOURCE_TREE_PATH}/Navigation
-            ${SOURCE_TREE_PATH}/Network
-            ${SOURCE_TREE_PATH}/Physics
-            ${SOURCE_TREE_PATH}/Resource
-            ${SOURCE_TREE_PATH}/Scene
-            ${SOURCE_TREE_PATH}/Script
-            ${SOURCE_TREE_PATH}/UI
-            ${URHO3D_HOME}/Source/ThirdParty/Bullet/src
-            ${URHO3D_HOME}/Source/ThirdParty/kNet/include
-            ${URHO3D_HOME}/Source/ThirdParty/LZ4
-            ${URHO3D_HOME}/Source/ThirdParty/SDL/include
-            ${URHO3D_HOME}/Source/ThirdParty/STB
-        )
+        set (URHO3D_INCLUDE_DIR ${SOURCE_TREE_PATH})
+        foreach (DIR Audio Container Core Engine Graphics Input IO LuaScript Math Navigation Network Physics Resource Scene Script UI)
+            list (APPEND URHO3D_INCLUDE_DIR ${SOURCE_TREE_PATH}/${DIR})
+        endforeach ()
+        foreach (DIR Bullet/src kNet/include LZ4 SDL/include STB)
+            list (APPEND URHO3D_INCLUDE_DIR ${URHO3D_HOME}/Source/ThirdParty/${DIR})
+        endforeach ()
 
 
         if (ANDROID)
         if (ANDROID)
             list (APPEND URHO3D_INCLUDE_DIR ${URHO3D_HOME}/android-Build/Engine)
             list (APPEND URHO3D_INCLUDE_DIR ${URHO3D_HOME}/android-Build/Engine)
@@ -103,10 +86,18 @@ if (URHO3D_HOME)
         endif ()
         endif ()
     endif ()
     endif ()
 else ()
 else ()
-    set (URHO3D_INC_SEARCH_PATH /opt/include)
+    # If Urho3D SDK is not being installed in the default system location, use the URHO3D_INSTALL_PREFIX environment to specify the prefix path to that location
+    # Note that the prefix path should not usually contain the "/include" or "/lib"
+    # For example on Linux platform: URHO3D_INSTALL_PREFIX=/home/john/usr/local if the SDK is installed using DESTDIR=/home/john and CMAKE_INSTALL_PREFIX=/usr/local (default)
+    set (CMAKE_PREFIX_PATH $ENV{URHO3D_INSTALL_PREFIX})
+    if (WIN32)
+        set (URHO3D_INC_SEARCH_PATH "${CMAKE_INSTALL_PREFIX}/Urho3D SDK/Include")
+        set (URHO3D_LIB_SEARCH_PATH "${CMAKE_INSTALL_PREFIX}/Urho3D SDK/Lib")
+    else ()
+        set (URHO3D_INC_SEARCH_PATH /opt/include)
+        set (URHO3D_LIB_SEARCH_PATH /opt/lib)
+    endif ()
     find_path (URHO3D_INCLUDE_DIR Urho3D.h PATHS ${URHO3D_INC_SEARCH_PATH} PATH_SUFFIXES Urho3D)
     find_path (URHO3D_INCLUDE_DIR Urho3D.h PATHS ${URHO3D_INC_SEARCH_PATH} PATH_SUFFIXES Urho3D)
-    
-    set (URHO3D_LIB_SEARCH_PATH /opt/lib)
     find_library (URHO3D_LIBRARIES NAMES ${URHO3D_LIB_NAMES} PATHS ${URHO3D_LIB_SEARCH_PATH} PATH_SUFFIXES Urho3D)
     find_library (URHO3D_LIBRARIES NAMES ${URHO3D_LIB_NAMES} PATHS ${URHO3D_LIB_SEARCH_PATH} PATH_SUFFIXES Urho3D)
 endif ()
 endif ()
 
 

+ 4 - 1
Source/CMake/Modules/Urho3D-CMake-magic.cmake

@@ -371,6 +371,9 @@ macro (setup_executable)
     elseif (RASPI AND SCP_TO_TARGET)
     elseif (RASPI AND SCP_TO_TARGET)
         add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND scp $<TARGET_FILE:${TARGET_NAME}> ${SCP_TO_TARGET} || exit 0)
         add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND scp $<TARGET_FILE:${TARGET_NAME}> ${SCP_TO_TARGET} || exit 0)
     endif ()
     endif ()
+    if (DEST_RUNTIME_DIR)
+        install (TARGETS ${TARGET_NAME} RUNTIME DESTINATION ${DEST_RUNTIME_DIR})
+    endif ()
 endmacro ()
 endmacro ()
 
 
 # Macro for setting up linker flags for Mac OS X desktop build
 # Macro for setting up linker flags for Mac OS X desktop build
@@ -411,7 +414,7 @@ macro (setup_main_executable)
             if (TARGET_NAME STREQUAL Urho3D AND URHO3D_LIB_TYPE STREQUAL SHARED)
             if (TARGET_NAME STREQUAL Urho3D AND URHO3D_LIB_TYPE STREQUAL SHARED)
                 set (TARGET_NAME Urho3Dapp)
                 set (TARGET_NAME Urho3Dapp)
             endif ()
             endif ()
-        elseif ($ENV{URHO3D_HOME}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
+        elseif (EXISTS $ENV{URHO3D_HOME}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
             set (URHO3D_HOME $ENV{URHO3D_HOME})
             set (URHO3D_HOME $ENV{URHO3D_HOME})
         else ()
         else ()
             message (FATAL_ERROR "Could not find URHO3D_HOME environment variable or it is not point to a Urho3D project root tree")
             message (FATAL_ERROR "Could not find URHO3D_HOME environment variable or it is not point to a Urho3D project root tree")

+ 25 - 0
Source/CMakeLists.txt

@@ -71,6 +71,31 @@ if (URHO3D_LIB_TYPE STREQUAL SHARED)
     set (CMAKE_POSITION_INDEPENDENT_CODE true)
     set (CMAKE_POSITION_INDEPENDENT_CODE true)
 endif ()
 endif ()
 
 
+# Setup install destinations for native build only (Win, Mac, Linux, and Raspberry Pi)
+if (NOT CMAKE_CROSSCOMPILING AND NOT IOS)
+    if (WIN32)
+        set (DEST_INCLUDE_DIR "Urho3D SDK/Include")
+        set (DEST_RUNTIME_DIR "Urho3D SDK/Bin")
+        set (DEST_LIBRARY_DIR "Urho3D SDK/Lib")
+        set (DEST_ARCHIVE_DIR "Urho3D SDK/Lib")
+        set (SCRIPT_PATTERN *.bat)
+    else ()
+        set (DEST_INCLUDE_DIR include/Urho3D)
+        set (DEST_RUNTIME_DIR share/Urho3D)
+        if (ENABLE_64BIT)
+            if (EXISTS /usr/lib64)
+                # Probably target system is a RedHat-based distro
+                set (LIB_BITS_SUFFIX 64)
+            endif ()
+        endif ()
+        set (DEST_LIBRARY_DIR lib${LIB_BITS_SUFFIX}/Urho3D)
+        set (DEST_ARCHIVE_DIR lib${LIB_BITS_SUFFIX}/Urho3D)
+        set (SCRIPT_PATTERN *.sh)
+    endif ()
+    install (DIRECTORY ${PROJECT_ROOT_DIR}/Bin/ DESTINATION ${DEST_RUNTIME_DIR} USE_SOURCE_PERMISSIONS FILES_MATCHING PATTERN ${SCRIPT_PATTERN})    # Note: the trailing slash is significant
+    install (DIRECTORY ${PROJECT_ROOT_DIR}/Bin/CoreData ${PROJECT_ROOT_DIR}/Bin/Data DESTINATION ${DEST_RUNTIME_DIR} USE_SOURCE_PERMISSIONS)
+endif ()
+
 # Add targets
 # Add targets
 foreach (TARGET AngelScript Bullet Civetweb Detour FreeType JO kNet LZ4 PugiXml Recast SDL StanHull STB)
 foreach (TARGET AngelScript Bullet Civetweb Detour FreeType JO kNet LZ4 PugiXml Recast SDL StanHull STB)
     add_subdirectory (ThirdParty/${TARGET})
     add_subdirectory (ThirdParty/${TARGET})

+ 14 - 2
Source/Engine/CMakeLists.txt

@@ -103,12 +103,18 @@ endforeach ()
 # Define source files
 # Define source files
 foreach (SOURCE Audio Container Core Engine Graphics Input IO Math Navigation Network Physics Resource Scene Script UI)
 foreach (SOURCE Audio Container Core Engine Graphics Input IO Math Navigation Network Physics Resource Scene Script UI)
     add_subdirectory (${SOURCE})
     add_subdirectory (${SOURCE})
+    if (DEST_INCLUDE_DIR)
+        install (FILES ${${SOURCE}_H_FILES} DESTINATION ${DEST_INCLUDE_DIR})
+    endif ()
     source_group ("Source Files\\${SOURCE}" FILES ${${SOURCE}_CPP_FILES})
     source_group ("Source Files\\${SOURCE}" FILES ${${SOURCE}_CPP_FILES})
     source_group ("Header Files\\${SOURCE}" FILES ${${SOURCE}_H_FILES})
     source_group ("Header Files\\${SOURCE}" FILES ${${SOURCE}_H_FILES})
     list (APPEND ENGINE_SOURCE_FILES ${${SOURCE}_CPP_FILES} ${${SOURCE}_H_FILES})
     list (APPEND ENGINE_SOURCE_FILES ${${SOURCE}_CPP_FILES} ${${SOURCE}_H_FILES})
     list (APPEND ENGINE_INCLUDE_DIRS_ONLY ${SOURCE})
     list (APPEND ENGINE_INCLUDE_DIRS_ONLY ${SOURCE})
 endforeach ()
 endforeach ()
-define_source_files (EXTRA_CPP_FILES ${ENGINE_SOURCE_FILES} EXTRA_H_FILES gitversion.h PCH)
+define_source_files (EXTRA_CPP_FILES ${ENGINE_SOURCE_FILES} EXTRA_H_FILES ${CMAKE_CURRENT_BINARY_DIR}/gitversion.h PCH)
+if (DEST_INCLUDE_DIR)
+    install (FILES ${H_FILES} DESTINATION ${DEST_INCLUDE_DIR})
+endif ()
 list (APPEND SOURCE_FILES ${ALL_OBJ_FILES})
 list (APPEND SOURCE_FILES ${ALL_OBJ_FILES})
 set_source_files_properties (${ALL_OBJ_FILES} PROPERTIES GENERATED TRUE)
 set_source_files_properties (${ALL_OBJ_FILES} PROPERTIES GENERATED TRUE)
 
 
@@ -129,6 +135,9 @@ set_output_directories (${OUTPUT_PATH} ARCHIVE LIBRARY)
 # Setup target
 # Setup target
 setup_library (${URHO3D_LIB_TYPE})
 setup_library (${URHO3D_LIB_TYPE})
 adjust_library_name ()
 adjust_library_name ()
+if (DEST_RUNTIME_DIR AND DEST_LIBRARY_DIR AND DEST_ARCHIVE_DIR)
+    install (TARGETS ${TARGET_NAME} RUNTIME DESTINATION ${DEST_RUNTIME_DIR} LIBRARY DESTINATION ${DEST_LIBRARY_DIR} ARCHIVE DESTINATION ${DEST_ARCHIVE_DIR})
+endif ()
 if (NOT GIT_EXIT_CODE EQUAL 0)
 if (NOT GIT_EXIT_CODE EQUAL 0)
     add_dependencies (${TARGET_NAME} ${STATIC_LIBRARY_TARGETS})
     add_dependencies (${TARGET_NAME} ${STATIC_LIBRARY_TARGETS})
 endif ()
 endif ()
@@ -151,7 +160,10 @@ if (NOT URHO3D_LIB_TYPE STREQUAL URHO3D_EXPORTS_LIB_TYPE OR ${CMAKE_CURRENT_SOUR
     
     
     # Append Urho3D license notice to the export header file
     # Append Urho3D license notice to the export header file
     file (READ ${CMAKE_CURRENT_BINARY_DIR}/Urho3D.h EXPORT_DEFINE)
     file (READ ${CMAKE_CURRENT_BINARY_DIR}/Urho3D.h EXPORT_DEFINE)
-    configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Urho3D.h.in ${CMAKE_CURRENT_BINARY_DIR}/Urho3D.h) 
+    configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Urho3D.h.in ${CMAKE_CURRENT_BINARY_DIR}/Urho3D.h)
+endif ()
+if (DEST_INCLUDE_DIR)
+    install (FILES ${CMAKE_CURRENT_BINARY_DIR}/Urho3D.h DESTINATION ${DEST_INCLUDE_DIR})
 endif ()
 endif ()
 
 
 # Define post build steps
 # Define post build steps

+ 3 - 0
Source/Engine/LuaScript/CMakeLists.txt

@@ -57,6 +57,9 @@ endforeach ()
 
 
 # Define source files
 # Define source files
 define_source_files (EXTRA_CPP_FILES ${GEN_CPP_FILES})
 define_source_files (EXTRA_CPP_FILES ${GEN_CPP_FILES})
+if (DEST_INCLUDE_DIR)
+    install (FILES ${H_FILES} DESTINATION ${DEST_INCLUDE_DIR})
+endif ()
 
 
 # Define dependency libs
 # Define dependency libs
 set (LIBS ../../ThirdParty/Lua${JIT}/src)
 set (LIBS ../../ThirdParty/Lua${JIT}/src)

+ 3 - 0
Source/ThirdParty/Bullet/CMakeLists.txt

@@ -15,6 +15,9 @@ file (GLOB H_FILES *.h src/BulletCollision/BroadphaseCollision/*.h
     src/BulletDynamics/Dynamics/*.h src/BulletDynamics/Vehicle/*.h src/BulletSoftBody/*.h 
     src/BulletDynamics/Dynamics/*.h src/BulletDynamics/Vehicle/*.h src/BulletSoftBody/*.h 
     src/LinearMath/*.h)
     src/LinearMath/*.h)
 set (SOURCE_FILES ${CPP_FILES} ${H_FILES})
 set (SOURCE_FILES ${CPP_FILES} ${H_FILES})
+if (DEST_INCLUDE_DIR)
+    install (FILES ${H_FILES} DESTINATION ${DEST_INCLUDE_DIR}/Bullet)
+endif ()
 
 
 # Define dependency libs
 # Define dependency libs
 set (INCLUDE_DIRS_ONLY src)
 set (INCLUDE_DIRS_ONLY src)

+ 3 - 0
Source/ThirdParty/LZ4/CMakeLists.txt

@@ -5,6 +5,9 @@ set (TARGET_NAME LZ4)
 file (GLOB C_FILES *.c)
 file (GLOB C_FILES *.c)
 file (GLOB H_FILES *.h)
 file (GLOB H_FILES *.h)
 set (SOURCE_FILES ${C_FILES} ${H_FILES})
 set (SOURCE_FILES ${C_FILES} ${H_FILES})
+if (DEST_INCLUDE_DIR)
+    install (FILES ${H_FILES} DESTINATION ${DEST_INCLUDE_DIR}/LZ4)
+endif ()
 
 
 # Setup target
 # Setup target
 setup_library ()
 setup_library ()

+ 3 - 0
Source/ThirdParty/SDL/CMakeLists.txt

@@ -105,6 +105,9 @@ file (GLOB H_FILES include/*.h)
 set_source_files_properties (${C_FILES} PROPERTIES LANGUAGE C)
 set_source_files_properties (${C_FILES} PROPERTIES LANGUAGE C)
 set_source_files_properties (${SYS_C_FILES} PROPERTIES LANGUAGE C)
 set_source_files_properties (${SYS_C_FILES} PROPERTIES LANGUAGE C)
 set (SOURCE_FILES ${C_FILES} ${SYS_C_FILES} ${H_FILES})
 set (SOURCE_FILES ${C_FILES} ${SYS_C_FILES} ${H_FILES})
+if (DEST_INCLUDE_DIR)
+    install (FILES ${H_FILES} DESTINATION ${DEST_INCLUDE_DIR}/SDL)
+endif ()
 
 
 # Setup target
 # Setup target
 setup_library ()
 setup_library ()

+ 3 - 0
Source/ThirdParty/STB/CMakeLists.txt

@@ -5,6 +5,9 @@ set (TARGET_NAME STB)
 file (GLOB C_FILES *.c)
 file (GLOB C_FILES *.c)
 file (GLOB H_FILES *.h)
 file (GLOB H_FILES *.h)
 set (SOURCE_FILES ${C_FILES} ${H_FILES})
 set (SOURCE_FILES ${C_FILES} ${H_FILES})
+if (DEST_INCLUDE_DIR)
+    install (FILES ${H_FILES} DESTINATION ${DEST_INCLUDE_DIR}/STB)
+endif ()
 
 
 # Setup target
 # Setup target
 setup_library ()
 setup_library ()

+ 5 - 0
Source/ThirdParty/kNet/CMakeLists.txt

@@ -58,6 +58,11 @@ endif ()
 
 
 # Define source files
 # Define source files
 set (SOURCE_FILES ${kNetSourceFiles} ${kNetHeaderFiles})
 set (SOURCE_FILES ${kNetSourceFiles} ${kNetHeaderFiles})
+if (DEST_INCLUDE_DIR)
+    install (FILES ${kNetHeaderFiles} DESTINATION ${DEST_INCLUDE_DIR}/kNet)
+endif ()
+
+# Define dependency libs
 set (INCLUDE_DIRS_ONLY include)
 set (INCLUDE_DIRS_ONLY include)
 
 
 # Setup target
 # Setup target