소스 검색

Refactor define_dependency_libs macro.

Change to remove the references to engine's sub-library targets which are now defunct. General cleanup of the build scripts.
Yao Wei Tjong 姚伟忠 12 년 전
부모
커밋
8ff3348503

+ 6 - 6
Docs/GettingStarted.dox

@@ -281,7 +281,7 @@ if (COMMAND cmake_policy)
 endif ()
 
 # Add cmake modules search path
-set (CMAKE_MODULE_PATH ${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-magic)
@@ -294,11 +294,11 @@ include_directories (${URHO3D_INCLUDE_DIR})
 set (TARGET_NAME Main)
 
 # Define source files
-file (GLOB CPP_FILES *.cpp)
-file (GLOB H_FILES *.h)
-set (SOURCE_FILES ${CPP_FILES} ${H_FILES})
-# Alternatively remove three lines above and uncomment below macro
-# define_source_files ()
+define_source_files ()
+# Which is equivalent to below three lines:
+# file (GLOB CPP_FILES *.cpp)
+# file (GLOB H_FILES *.h)
+# set (SOURCE_FILES ${CPP_FILES} ${H_FILES})
 
 # Setup target with resource copying
 setup_main_executable ()

+ 1 - 1
Source/CMake/Modules/FindBCM_VC.cmake

@@ -47,7 +47,7 @@ find_library (BCM_VC_LIB_EGL EGL PATHS ${BCM_VC_LIB_SEARCH_PATH} PATH_SUFFIXES v
 find_library (BCM_VC_LIB_GLES2 GLESv2 PATHS ${BCM_VC_LIB_SEARCH_PATH} PATH_SUFFIXES vc)
 
 if (BCM_VC_INCLUDE_DIR AND BCM_VC_LIB_BCM_HOST AND BCM_VC_LIB_EGL AND BCM_VC_LIB_GLES2)
-    set (BCM_VC_INCLUDE_DIR ${BCM_VC_INCLUDE_DIR} ${BCM_VC_INCLUDE_DIR}/interface/vcos/pthreads)
+    list (APPEND BCM_VC_INCLUDE_DIR ${BCM_VC_INCLUDE_DIR}/interface/vcos/pthreads)  # Note: variable change to list context after this
     set (BCM_VC_LIBRARIES ${BCM_VC_LIB_BCM_HOST} ${BCM_VC_LIB_EGL} ${BCM_VC_LIB_GLES2})
     set (BCM_VC_FOUND 1)
 endif ()

+ 4 - 4
Source/CMake/Modules/FindUrho3D.cmake

@@ -45,7 +45,7 @@ endif ()
 
 set (URHO3D_LIB_NAMES Urho3D)
 if (WIN32)
-    set (URHO3D_LIB_NAMES ${URHO3D_LIB_NAMES} Urho3D_d)
+    list (APPEND URHO3D_LIB_NAMES Urho3D_d)
 endif ()
 
 if (CMAKE_PROJECT_NAME MATCHES Urho3D.* AND PROJECT_ROOT_DIR)
@@ -86,13 +86,13 @@ if (URHO3D_HOME)
         )
 
         if (ANDROID)
-            set (URHO3D_INCLUDE_DIR ${URHO3D_INCLUDE_DIR} ${URHO3D_HOME}/android-Build/Engine)
+            list (APPEND URHO3D_INCLUDE_DIR ${URHO3D_HOME}/android-Build/Engine)
             set (URHO3D_LIB_SEARCH_PATH ${URHO3D_HOME}/android-Build/libs/${ANDROID_NDK_ABI_NAME})
         elseif (RASPI AND CMAKE_CROSSCOMPILING)
-            set (URHO3D_INCLUDE_DIR ${URHO3D_INCLUDE_DIR} ${URHO3D_HOME}/raspi-Build/Engine)
+            list (APPEND URHO3D_INCLUDE_DIR ${URHO3D_HOME}/raspi-Build/Engine)
             set (URHO3D_LIB_SEARCH_PATH ${URHO3D_HOME}/Lib-CC)
         else ()
-            set (URHO3D_INCLUDE_DIR ${URHO3D_INCLUDE_DIR} ${URHO3D_HOME}/Build/Engine)
+            list (APPEND URHO3D_INCLUDE_DIR ${URHO3D_HOME}/Build/Engine)
             set (URHO3D_LIB_SEARCH_PATH ${URHO3D_HOME}/Lib)
         endif ()
         if (TARGET Urho3D_lib)

+ 49 - 38
Source/CMake/Modules/Urho3D-CMake-magic.cmake

@@ -25,7 +25,7 @@ if (CMAKE_GENERATOR STREQUAL Xcode)
     set (XCODE TRUE)
 endif ()
 if (NOT MSVC AND NOT XCODE AND NOT CMAKE_BUILD_TYPE)
-    set (CMAKE_BUILD_TYPE "Release")
+    set (CMAKE_BUILD_TYPE Release)
 endif ()
 
 # Enable SSE instruction set. Requires Pentium III or Athlon XP processor at minimum.
@@ -50,8 +50,8 @@ endif ()
 # this can be switched off if not using Urho3D as a shared library.
 if (MSVC)
     if (USE_STATIC_RUNTIME)
-        set (RELEASE_RUNTIME "/MT")
-        set (DEBUG_RUNTIME "/MTd")
+        set (RELEASE_RUNTIME /MT)
+        set (DEBUG_RUNTIME /MTd)
     else ()
         set (RELEASE_RUNTIME "")
         set (DEBUG_RUNTIME "")
@@ -116,28 +116,29 @@ if (IOS)
     else ()
         set (CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_32_BIT))
     endif ()
-    set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos;-iphonesimulator")
+    set (CMAKE_XCODE_EFFECTIVE_PLATFORMS -iphoneos -iphonesimulator)
     if (NOT MACOSX_BUNDLE_GUI_IDENTIFIER)
-        set (MACOSX_BUNDLE_GUI_IDENTIFIER "com.googlecode.urho3d")
+        set (MACOSX_BUNDLE_GUI_IDENTIFIER com.googlecode.urho3d)
     endif ()
-    set (CMAKE_OSX_SYSROOT "iphoneos")    # Set to "Latest iOS"
+    set (CMAKE_OSX_SYSROOT iphoneos)    # Set to "Latest iOS"
 elseif (XCODE)
     # MacOSX-Xcode-specific setup
     if (NOT ENABLE_64BIT)
         set (CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_32_BIT))
     endif ()
     set (CMAKE_OSX_SYSROOT "")        # Set to "Current OS X"
-    #set (CMAKE_OSX_SYSROOT "macosx") # Set to "Latest OS X"
+    #set (CMAKE_OSX_SYSROOT macosx) # Uncomment to set to "Latest OS X"
 endif ()
 if (MSVC)
     # Visual Studio-specific setup
     add_definitions (-D_CRT_SECURE_NO_WARNINGS)
+    # Note: All CMAKE_xxx_FLAGS variables are not in list context (although they should be)
     set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${DEBUG_RUNTIME}")
     set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} ${RELEASE_RUNTIME} /fp:fast /Zi /GS-")
-    set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
+    set (CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELWITHDEBINFO})
     set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${DEBUG_RUNTIME}")
     set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} ${RELEASE_RUNTIME} /fp:fast /Zi /GS- /D _SECURE_SCL=0")
-    set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
+    set (CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
     # SSE flag is redundant if already compiling as 64bit
     if (ENABLE_SSE AND NOT ENABLE_64BIT)
         set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:SSE")
@@ -410,8 +411,10 @@ macro (setup_main_executable)
             if (TARGET_NAME STREQUAL Urho3D AND URHO3D_LIB_TYPE STREQUAL SHARED)
                 set (TARGET_NAME Urho3Dapp)
             endif ()
-        elseif (EXISTS $ENV{URHO3D_HOME}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
+        elseif ($ENV{URHO3D_HOME}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
             set (URHO3D_HOME $ENV{URHO3D_HOME})
+        else ()
+            message (FATAL_ERROR "Could not find URHO3D_HOME environment variable or it is not point to a Urho3D project root tree")
         endif ()
         list (APPEND SOURCE_FILES ${URHO3D_HOME}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
         # Setup shared library output path
@@ -449,7 +452,7 @@ macro (setup_main_executable)
     if (IOS)
         get_target_property (TARGET_LOC ${TARGET_NAME} LOCATION)
         # Define a custom target to check for resource modification
-        string (REGEX REPLACE "/Contents/MacOS" "" TARGET_LOC ${TARGET_LOC})    # The regex replacement is temporary workaround to correct the wrong location caused by CMake/Xcode generator bug
+        string (REGEX REPLACE /Contents/MacOS "" TARGET_LOC ${TARGET_LOC})    # The regex replacement is temporary workaround to correct the wrong location caused by CMake/Xcode generator bug
         add_custom_target (RESOURCE_CHECK_${TARGET_NAME} ALL
             \(\( `find ${RESOURCE_FILES} -newer ${TARGET_LOC} 2>/dev/null |wc -l` \)\) && touch -cm ${SOURCE_FILES} || exit 0
             COMMENT "Checking for changes in the Resource folders")
@@ -459,7 +462,7 @@ endmacro ()
 
 # Macro for adjusting library output name by dropping _suffix from the target name
 macro (adjust_library_name)
-    string (REGEX REPLACE "_.*$" "" LIB_NAME ${TARGET_NAME})
+    string (REGEX REPLACE _.*$ "" LIB_NAME ${TARGET_NAME})
     set_target_properties (${TARGET_NAME} PROPERTIES OUTPUT_NAME ${LIB_NAME})
 endmacro ()
 
@@ -470,15 +473,16 @@ macro (define_dependency_libs TARGET)
     # ThirdParty/SDL external dependency
     if (${TARGET} MATCHES SDL|Urho3D_lib)
         if (WIN32)
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} user32 gdi32 winmm imm32 ole32 oleaut32 version uuid)
+            list (APPEND LINK_LIBS_ONLY user32 gdi32 winmm imm32 ole32 oleaut32 version uuid)
         elseif (APPLE)
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} dl pthread)
+            list (APPEND LINK_LIBS_ONLY dl pthread)
         elseif (ANDROID)
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} dl log)
+            list (APPEND LINK_LIBS_ONLY dl log)
         else ()
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} dl pthread rt)
+            # Linux
+            list (APPEND LINK_LIBS_ONLY dl pthread rt)
             if (RASPI)
-                set (ABSOLUTE_PATH_LIBS ${ABSOLUTE_PATH_LIBS} ${BCM_VC_LIBRARIES})
+                list (APPEND ABSOLUTE_PATH_LIBS ${BCM_VC_LIBRARIES})
             endif ()
         endif ()
     endif ()
@@ -486,52 +490,52 @@ macro (define_dependency_libs TARGET)
     # ThirdParty/kNet & ThirdParty/Civetweb external dependency
     if (${TARGET} MATCHES Civetweb|kNet|Urho3D_lib)
         if (WIN32)
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} ws2_32)
+            list (APPEND LINK_LIBS_ONLY ws2_32)
         elseif (NOT ANDROID)
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} pthread)
+            list (APPEND LINK_LIBS_ONLY pthread)
         endif ()
     endif ()
 
-    # ThirdParty/LuaJIT external dependency
+    # Engine/LuaJIT external dependency
     if (ENABLE_LUAJIT AND ${TARGET} MATCHES LuaJIT|Urho3D_lib)
         if (NOT WIN32)
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} dl m)
+            list (APPEND LINK_LIBS_ONLY dl m)
             if (NOT APPLE)
                 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-E")
             endif ()
         endif ()
     endif ()
 
-    # Engine/Core external dependency
-    if (${TARGET} MATCHES Core|Urho3D_lib)
+    # Engine external dependency
+    if (${TARGET} STREQUAL Urho3D_lib)
+        # Core
         if (WIN32)
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} winmm)
+            list (APPEND LINK_LIBS_ONLY winmm)
             if (ENABLE_MINIDUMPS)
-                set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} dbghelp)
+                list (APPEND LINK_LIBS_ONLY dbghelp)
             endif ()
         elseif (NOT ANDROID)
-            set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} pthread)
+            list (APPEND LINK_LIBS_ONLY pthread)
         endif ()
-    endif ()
 
-    # Engine/Graphics external dependency
-    if (${TARGET} MATCHES Graphics|Urho3D_lib)
+        # Graphics
         if (USE_OPENGL)
             if (WIN32)
-                set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} opengl32)
+                list (APPEND LINK_LIBS_ONLY opengl32)
             elseif (ANDROID)
-                set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} GLESv1_CM GLESv2)
+                list (APPEND LINK_LIBS_ONLY GLESv1_CM GLESv2)
             elseif (NOT APPLE AND NOT RASPI)
-                set (LINK_LIBS_ONLY ${LINK_LIBS_ONLY} GL)
+                list (APPEND LINK_LIBS_ONLY GL)
             endif ()
         else ()
-            set (ABSOLUTE_PATH_LIBS ${ABSOLUTE_PATH_LIBS} ${DIRECT3D_LIBRARY})
+            list (APPEND ABSOLUTE_PATH_LIBS ${DIRECT3D_LIBRARY})
         endif ()
-    endif ()
 
-    # Urho3D_lib external dependency
-    if (${TARGET} STREQUAL Urho3D_lib AND URHO3D_LIBRARIES)
-        set (ABSOLUTE_PATH_LIBS ${ABSOLUTE_PATH_LIBS} ${URHO3D_LIBRARIES})
+        # This variable value can either be 'Urho3D_lib' target or an absolute path to an actual static/shared Urho3D library
+        # The former would cause CMake not only to link against the Urho3D library but also to add a dependency to Urho3D_lib target
+        if (URHO3D_LIBRARIES)
+            list (APPEND ABSOLUTE_PATH_LIBS ${URHO3D_LIBRARIES})
+        endif ()
     endif ()
 
     if (LINK_LIBS_ONLY)
@@ -553,7 +557,14 @@ macro (set_list TO_LIST FROM_LIST)
     endif ()
 endmacro ()
 
-# Macro for defining source files
+# Macro for defining source files with optional arguments as follows:
+#  GROUP <value> - Group source files into a sub-group folder in VS and Xcode (only works in curent scope context)
+#  GLOB_CPP_PATTERNS <list> - Use the provided globbing patterns for CPP_FILES instead of the default *.cpp
+#  GLOB_H_PATTERNS <list> - Use the provided globbing patterns for H_FILES instead of the default *.h
+#  EXTRA_CPP_FILES <list> - Include the provided list of files into CPP_FILES result
+#  EXTRA_H_FILES <list> - Include the provided list of files into H_FILES result
+#  PCH - Enable precompiled header on the defined source files
+#  PARENT_SCOPE - Glob source files in current directory but set the result in parent-scope's variable ${DIR}_CPP_FILES and ${DIR}_H_FILES instead
 macro (define_source_files)
     # Parse extra arguments
     cmake_parse_arguments (ARG "PCH;PARENT_SCOPE" "GROUP" "EXTRA_CPP_FILES;EXTRA_H_FILES;GLOB_CPP_PATTERNS;GLOB_H_PATTERNS" ${ARGN})

+ 2 - 2
Source/CMakeLists.txt

@@ -31,7 +31,7 @@ if (COMMAND cmake_policy)
 endif ()
 
 # Add cmake modules search path
-set (CMAKE_MODULE_PATH ${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-magic)
@@ -52,7 +52,7 @@ endif ()
 # Add definition for Lua and LuaJIT
 if (ENABLE_LUAJIT)
     add_definitions (-DENABLE_LUAJIT)
-    set (JIT "JIT")
+    set (JIT JIT)
     # Implied ENABLE_LUA
     set (ENABLE_LUA 1)
 endif ()

+ 1 - 1
Source/Engine/CMakeLists.txt

@@ -55,7 +55,7 @@ foreach (TARGET ${STATIC_LIBRARY_TARGETS})
     get_target_property (INT_DIR ${TARGET} LOCATION)
     get_filename_component (INT_DIR ${INT_DIR} PATH)
     if (MSVC)
-        if (CMAKE_GENERATOR MATCHES "2008")
+        if (CMAKE_GENERATOR MATCHES 2008)
             string (REPLACE /$(OutDir) /${TARGET}.dir/$(ConfigurationName) INT_DIR ${INT_DIR})
         else ()
             string (REPLACE /$(Configuration) /${TARGET}.dir/$(ConfigurationName) INT_DIR ${INT_DIR})