Browse Source

* Feature: Dynamic library checker and installer.
* BugFix: Minor fixes for compilation.

Robert MacGregor 3 years ago
parent
commit
49204fa88d
2 changed files with 31 additions and 21 deletions
  1. 3 0
      CMakeLists.txt
  2. 28 21
      Engine/source/CMakeLists.txt

+ 3 - 0
CMakeLists.txt

@@ -9,6 +9,9 @@ if("${TORQUE_APP_NAME}" STREQUAL "")
 	message(FATAL_ERROR "Please set TORQUE_APP_NAME first")
 	message(FATAL_ERROR "Please set TORQUE_APP_NAME first")
 endif()
 endif()
 
 
+# Set the CMake install prefix. For now we override what the user or some other system may specify.
+set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/My Projects/${TORQUE_APP_NAME}")
+
 # Detect CPU Information
 # Detect CPU Information
 if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
 if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
     if( CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8 )
     if( CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8 )

+ 28 - 21
Engine/source/CMakeLists.txt

@@ -115,12 +115,13 @@ endif (WIN32)
 # Handle platformSDL
 # Handle platformSDL
 file(GLOB TORQUE_PLATFORM_SDL_SOURCES "platformSDL/*.cpp" "platformSDL/threads/*.cpp")
 file(GLOB TORQUE_PLATFORM_SDL_SOURCES "platformSDL/*.cpp" "platformSDL/threads/*.cpp")
 
 
+
+################# Start building libs ###################
+
 set(TORQUE_COMPILE_DEFINITIONS ICE_NO_DLL PCRE_STATIC TORQUE_ADVANCED_LIGHTING TORQUE_SHADERGEN
 set(TORQUE_COMPILE_DEFINITIONS ICE_NO_DLL PCRE_STATIC TORQUE_ADVANCED_LIGHTING TORQUE_SHADERGEN
 							   TORQUE_OPENGL TORQUE_OPCODE TORQUE_ASSIMP TORQUE_SDL TORQUE_COLLADA
 							   TORQUE_OPENGL TORQUE_OPCODE TORQUE_ASSIMP TORQUE_SDL TORQUE_COLLADA
 							   TORQUE_UNICODE UNICODE _UNICODE)
 							   TORQUE_UNICODE UNICODE _UNICODE)
 
 
-################# Start building libs ###################
-
 # Set common linkages
 # Set common linkages
 set(TORQUE_LINK_LIBRARIES tinyxml collada ljpeg squish png_static opcode assimp
 set(TORQUE_LINK_LIBRARIES tinyxml collada ljpeg squish png_static opcode assimp
                           SDL2 glad pcre convexDecomp zlib)
                           SDL2 glad pcre convexDecomp zlib)
@@ -154,7 +155,6 @@ endif (APPLE)
 # Search module directories
 # Search module directories
 set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules")
 set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules")
 
 
-message("PATH: ${TORQUE_MODULE_USER_PATH}")
 if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "")
 if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "")
   list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}")
   list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}")
 endif()
 endif()
@@ -176,7 +176,6 @@ foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS})
     get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}"
     get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}"
                        REALPATH BASE_DIR "${TORQUE_MODULE_PATH}")
                        REALPATH BASE_DIR "${TORQUE_MODULE_PATH}")
 
 
-    message("SCANNING: ${POSSIBLE_PROJECT_ABSOLUTEPATH}")
     if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt")
     if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt")
       add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL)
       add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL)
     endif()
     endif()
@@ -202,25 +201,33 @@ if (WIN32)
 endif (WIN32)
 endif (WIN32)
 
 
 if (APPLE)
 if (APPLE)
+  # Parameters used for the plist configuration
   set(EXECUTABLE_NAME "Game")
   set(EXECUTABLE_NAME "Game")
 
 
   CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${CMAKE_BINARY_DIR}/temp/Info.plist" COPYONLY)
   CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${CMAKE_BINARY_DIR}/temp/Info.plist" COPYONLY)
   set_target_properties(Game PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_BINARY_DIR}/temp/Info.plist")
   set_target_properties(Game PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_BINARY_DIR}/temp/Info.plist")
-
-  install(TARGETS Game
-      BUNDLE DESTINATION game COMPONENT Runtime
-      RUNTIME DESTINATION bin COMPONENT Runtime
-  )
-
-  # Note Mac specific extension .app
-  set(APPS "\${CMAKE_INSTALL_PREFIX}/game/Game.app")
-
-  # Directories to look for dependencies
-  # FIXME: Auto detect?
-  set(DIRS ${CMAKE_BINARY_DIR}/temp/sdl2 ${CMAKE_BINARY_DIR}/temp/openal-soft ${CMAKE_BINARY_DIR}/temp/assimp/bin)
-
-  install(CODE "include(BundleUtilities)
-      fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")")
-else()
-  install(TARGETS Game DESTINATION game)
+  set_target_properties(Game PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/My Projects/${TORQUE_APP_NAME}/game")
 endif (APPLE)
 endif (APPLE)
+
+if (UNIX AND NOT APPLE)
+  target_link_options(Game PUBLIC "-Wl,-rpath,./")
+endif (UNIX AND NOT APPLE)
+
+# Process link libraries for dynamic links
+get_target_property(GAME_LINK_LIBRARIES Game LINK_LIBRARIES)
+foreach (GAME_LINK_LIBRARY ${GAME_LINK_LIBRARIES})
+  # For eg. OSX some links are not valid targets - for example frameworks provided by OS
+  if (TARGET ${GAME_LINK_LIBRARY})
+    get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE)
+
+    # Only pay attention to shared libraries
+    if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY")
+      # On eg. OSX we are creating a bundle directory, so shared libs need to be handled differently here
+      IF (APPLE)
+        install(FILES $<TARGET_FILE:${GAME_LINK_LIBRARY}> DESTINATION "game/Game.app/Resources")
+      else()
+        install(FILES $<TARGET_FILE:${GAME_LINK_LIBRARY}> DESTINATION "game")
+      endif (APPLE)
+    endif()
+  endif()
+endforeach()