|
@@ -44,61 +44,59 @@ endif ()
|
|
|
|
|
|
|
|
# Define generated object files
|
|
# Define generated object files
|
|
|
# This is a hack as it relies on internal working of CMake
|
|
# This is a hack as it relies on internal working of CMake
|
|
|
-if (WIN32)
|
|
|
|
|
- set (CMAKE_DEBUG_POSTFIX _d)
|
|
|
|
|
- set (OBJ_EXT .obj)
|
|
|
|
|
-else ()
|
|
|
|
|
- set (OBJ_EXT .o)
|
|
|
|
|
-endif ()
|
|
|
|
|
-foreach (TARGET ${STATIC_LIBRARY_TARGETS})
|
|
|
|
|
- get_target_property (SOURCES ${TARGET} SOURCES)
|
|
|
|
|
- get_target_property (INT_DIR ${TARGET} LOCATION)
|
|
|
|
|
- get_filename_component (INT_DIR ${INT_DIR} PATH)
|
|
|
|
|
- if (MSVC)
|
|
|
|
|
- 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})
|
|
|
|
|
- endif ()
|
|
|
|
|
|
|
+if (NOT APPLE)
|
|
|
|
|
+ if (WIN32)
|
|
|
|
|
+ set (CMAKE_DEBUG_POSTFIX _d)
|
|
|
|
|
+ set (OBJ_EXT .obj)
|
|
|
else ()
|
|
else ()
|
|
|
- set (INT_DIR ${INT_DIR}/CMakeFiles/${TARGET}.dir)
|
|
|
|
|
- endif ()
|
|
|
|
|
- if (XCODE)
|
|
|
|
|
- string (REPLACE /$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) "" INT_DIR ${INT_DIR})
|
|
|
|
|
- string (REGEX REPLACE \\.dir$ .lnk INT_DIR ${INT_DIR})
|
|
|
|
|
|
|
+ set (OBJ_EXT .o)
|
|
|
endif ()
|
|
endif ()
|
|
|
- foreach (SOURCE ${SOURCES})
|
|
|
|
|
- get_filename_component (NAME ${SOURCE} NAME)
|
|
|
|
|
- if (NAME MATCHES \\.c.*$|\\.mm?$|\\.S$|\\.s$)
|
|
|
|
|
- if (MSVC OR XCODE)
|
|
|
|
|
- string (REGEX REPLACE \\.c.*$|\\.mm?$|\\.S$|\\.s$ "" NAME ${NAME})
|
|
|
|
|
- endif ()
|
|
|
|
|
- unset (DIR_SUFFIX)
|
|
|
|
|
- if (NOT MSVC AND NOT XCODE)
|
|
|
|
|
- get_filename_component (PATH ${SOURCE} PATH)
|
|
|
|
|
- foreach (DIR source src generated)
|
|
|
|
|
- if (PATH MATCHES \(ThirdParty|Engine\)/.*/${DIR}$)
|
|
|
|
|
- set (DIR_SUFFIX /${DIR})
|
|
|
|
|
- break ()
|
|
|
|
|
- elseif (PATH MATCHES ThirdParty/.*/${DIR}/)
|
|
|
|
|
- string (REGEX REPLACE .*/${DIR}/ "" DIR_SUFFIX ${PATH})
|
|
|
|
|
- set (DIR_SUFFIX /${DIR}/${DIR_SUFFIX})
|
|
|
|
|
- break ()
|
|
|
|
|
- elseif (PATH MATCHES ^${DIR}/|^${DIR}$)
|
|
|
|
|
- set (DIR_SUFFIX /${PATH})
|
|
|
|
|
- break ()
|
|
|
|
|
- endif ()
|
|
|
|
|
- endforeach ()
|
|
|
|
|
|
|
+ foreach (TARGET ${STATIC_LIBRARY_TARGETS})
|
|
|
|
|
+ get_target_property (SOURCES ${TARGET} SOURCES)
|
|
|
|
|
+ get_target_property (INT_DIR ${TARGET} LOCATION)
|
|
|
|
|
+ get_filename_component (INT_DIR ${INT_DIR} PATH)
|
|
|
|
|
+ if (MSVC)
|
|
|
|
|
+ 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})
|
|
|
endif ()
|
|
endif ()
|
|
|
- list (APPEND OBJ_FILES ${INT_DIR}${DIR_SUFFIX}/${NAME}${OBJ_EXT})
|
|
|
|
|
- elseif (NAME MATCHES \\.o.*$)
|
|
|
|
|
- list (APPEND OBJ_FILES ${SOURCE})
|
|
|
|
|
|
|
+ else ()
|
|
|
|
|
+ set (INT_DIR ${INT_DIR}/CMakeFiles/${TARGET}.dir)
|
|
|
endif ()
|
|
endif ()
|
|
|
|
|
+ foreach (SOURCE ${SOURCES})
|
|
|
|
|
+ get_filename_component (NAME ${SOURCE} NAME)
|
|
|
|
|
+ if (NAME MATCHES \\.c.*$|\\.mm?$|\\.S$|\\.s$)
|
|
|
|
|
+ if (MSVC)
|
|
|
|
|
+ string (REGEX REPLACE \\.c.*$|\\.mm?$|\\.S$|\\.s$ "" NAME ${NAME})
|
|
|
|
|
+ endif ()
|
|
|
|
|
+ unset (DIR_SUFFIX)
|
|
|
|
|
+ if (NOT MSVC)
|
|
|
|
|
+ get_filename_component (PATH ${SOURCE} PATH)
|
|
|
|
|
+ foreach (DIR source src generated)
|
|
|
|
|
+ if (PATH MATCHES \(ThirdParty|Engine\)/.*/${DIR}$)
|
|
|
|
|
+ set (DIR_SUFFIX /${DIR})
|
|
|
|
|
+ break ()
|
|
|
|
|
+ elseif (PATH MATCHES ThirdParty/.*/${DIR}/)
|
|
|
|
|
+ string (REGEX REPLACE .*/${DIR}/ "" DIR_SUFFIX ${PATH})
|
|
|
|
|
+ set (DIR_SUFFIX /${DIR}/${DIR_SUFFIX})
|
|
|
|
|
+ break ()
|
|
|
|
|
+ elseif (PATH MATCHES ^${DIR}/|^${DIR}$)
|
|
|
|
|
+ set (DIR_SUFFIX /${PATH})
|
|
|
|
|
+ break ()
|
|
|
|
|
+ endif ()
|
|
|
|
|
+ endforeach ()
|
|
|
|
|
+ endif ()
|
|
|
|
|
+ list (APPEND OBJ_FILES ${INT_DIR}${DIR_SUFFIX}/${NAME}${OBJ_EXT})
|
|
|
|
|
+ elseif (NAME MATCHES \\.o.*$)
|
|
|
|
|
+ list (APPEND OBJ_FILES ${SOURCE})
|
|
|
|
|
+ endif ()
|
|
|
|
|
+ endforeach ()
|
|
|
|
|
+ source_group ("Object Files\\${TARGET}" FILES ${OBJ_FILES})
|
|
|
|
|
+ list (APPEND ALL_OBJ_FILES ${OBJ_FILES})
|
|
|
|
|
+ unset (OBJ_FILES)
|
|
|
endforeach ()
|
|
endforeach ()
|
|
|
- source_group ("Object Files\\${TARGET}" FILES ${OBJ_FILES})
|
|
|
|
|
- list (APPEND ALL_OBJ_FILES ${OBJ_FILES})
|
|
|
|
|
- unset (OBJ_FILES)
|
|
|
|
|
-endforeach ()
|
|
|
|
|
|
|
+endif ()
|
|
|
|
|
|
|
|
# Define source files
|
|
# Define source files
|
|
|
set (SOURCES Audio Container Core Engine Graphics Input IO Math Navigation Network Physics Resource Scene UI)
|
|
set (SOURCES Audio Container Core Engine Graphics Input IO Math Navigation Network Physics Resource Scene UI)
|
|
@@ -126,11 +124,10 @@ endforeach ()
|
|
|
list (APPEND INCLUDE_DIRS_ONLY ${CMAKE_CURRENT_BINARY_DIR} ../ThirdParty/SDL/include)
|
|
list (APPEND INCLUDE_DIRS_ONLY ${CMAKE_CURRENT_BINARY_DIR} ../ThirdParty/SDL/include)
|
|
|
|
|
|
|
|
# Setup library output path
|
|
# Setup library output path
|
|
|
-set (OUTPUT_PATH ${PROJECT_ROOT_DIR}/Lib)
|
|
|
|
|
if (ANDROID)
|
|
if (ANDROID)
|
|
|
set (OUTPUT_PATH ${ANDROID_LIBRARY_OUTPUT_PATH})
|
|
set (OUTPUT_PATH ${ANDROID_LIBRARY_OUTPUT_PATH})
|
|
|
-elseif (CMAKE_CROSSCOMPILING)
|
|
|
|
|
- set (OUTPUT_PATH ${OUTPUT_PATH}-CC)
|
|
|
|
|
|
|
+else ()
|
|
|
|
|
+ set (OUTPUT_PATH ${PROJECT_ROOT_DIR}/${PLATFORM_PREFIX}Lib) # ${PLATFORM_PREFIX} is empty for native build
|
|
|
endif ()
|
|
endif ()
|
|
|
set_output_directories (${OUTPUT_PATH} ARCHIVE LIBRARY)
|
|
set_output_directories (${OUTPUT_PATH} ARCHIVE LIBRARY)
|
|
|
|
|
|
|
@@ -141,17 +138,31 @@ if (NOT GIT_EXIT_CODE EQUAL 0)
|
|
|
add_dependencies (${TARGET_NAME} ${STATIC_LIBRARY_TARGETS})
|
|
add_dependencies (${TARGET_NAME} ${STATIC_LIBRARY_TARGETS})
|
|
|
endif ()
|
|
endif ()
|
|
|
|
|
|
|
|
-# Setup the frameworks for Mac OS X platform
|
|
|
|
|
|
|
+# Setup the frameworks and libraries for Mac OS X and iOS platforms
|
|
|
if (APPLE)
|
|
if (APPLE)
|
|
|
if (IOS)
|
|
if (IOS)
|
|
|
setup_ios_linker_flags (LINKER_FLAGS)
|
|
setup_ios_linker_flags (LINKER_FLAGS)
|
|
|
|
|
+ # Add a custom target to build Mach-O universal binary consisting of iphoneos (universal ARM archs) and iphonesimulator (i386 arch)
|
|
|
|
|
+ add_custom_target (${TARGET_NAME}_universal
|
|
|
|
|
+ COMMAND xcodebuild -target ${TARGET_NAME} -configuration $(CONFIGURATION) -sdk iphonesimulator
|
|
|
|
|
+ COMMAND mv \"$<TARGET_FILE:${TARGET_NAME}>\"{,.iphonesimulator}
|
|
|
|
|
+ COMMAND xcodebuild -target ${TARGET_NAME} -configuration $(CONFIGURATION) -sdk iphoneos
|
|
|
|
|
+ COMMAND mv \"$<TARGET_FILE:${TARGET_NAME}>\"{,.iphoneos}
|
|
|
|
|
+ COMMAND lipo -create -output \"$<TARGET_FILE:${TARGET_NAME}>\" \"$<TARGET_FILE:${TARGET_NAME}>\"{.iphonesimulator,.iphoneos}
|
|
|
|
|
+ COMMAND rm \"$<TARGET_FILE:${TARGET_NAME}>\"{.iphonesimulator,.iphoneos}
|
|
|
|
|
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
|
|
|
+ COMMENT "Creating Mach-O universal binary library")
|
|
|
else ()
|
|
else ()
|
|
|
# Intentionally use built-in CMAKE_EXE_LINKER_FLAGS here although CMake does not use it when building library, but the variable would be used later when configuring Urho3D.pc for MacOSX platform
|
|
# Intentionally use built-in CMAKE_EXE_LINKER_FLAGS here although CMake does not use it when building library, but the variable would be used later when configuring Urho3D.pc for MacOSX platform
|
|
|
setup_macosx_linker_flags (CMAKE_EXE_LINKER_FLAGS)
|
|
setup_macosx_linker_flags (CMAKE_EXE_LINKER_FLAGS)
|
|
|
# LuaJIT 64-bit specific - replace EXE linker flags with flags for building shared library (adapted from LuaJIT's original Makefile)
|
|
# LuaJIT 64-bit specific - replace EXE linker flags with flags for building shared library (adapted from LuaJIT's original Makefile)
|
|
|
string (REPLACE "-pagezero_size 10000 -image_base 100000000" "-image_base 7fff04c4a000" LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
|
|
string (REPLACE "-pagezero_size 10000 -image_base 100000000" "-image_base 7fff04c4a000" LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
|
|
|
endif ()
|
|
endif ()
|
|
|
- set_target_properties (${TARGET_NAME} PROPERTIES LINK_FLAGS ${LINKER_FLAGS})
|
|
|
|
|
|
|
+ set_target_properties (${TARGET_NAME} PROPERTIES LINK_FLAGS "${LINKER_FLAGS} -all_load")
|
|
|
|
|
+ foreach (TARGET ${STATIC_LIBRARY_TARGETS})
|
|
|
|
|
+ list (APPEND ARCHIVES $<TARGET_FILE:${TARGET}>)
|
|
|
|
|
+ endforeach ()
|
|
|
|
|
+ set_property (TARGET ${TARGET_NAME} APPEND PROPERTY LINK_LIBRARIES ${ARCHIVES})
|
|
|
endif ()
|
|
endif ()
|
|
|
|
|
|
|
|
# Generate platform specific export header file automatically
|
|
# Generate platform specific export header file automatically
|