Browse Source

CMake Improvements (+5 squashed commits)
Squashed commits:
[3c95e72] Fix binding builds on mobile platforms
[d0efa82] EMSCRIPTEN -> WEB in our own build scripts (for consistency)
[fa184da] CMake ThirdParty libs cleanup
[6445b64] CMake formatting
[c6a045e] CMake scripts rework:
Fixes sdl build when dlopen() is available but dlerror() is not. Regardless of missing dlerror() application builds and works.
Added multiple cmake options for specifying build configuration. This exposes options to cmake GUI on windows.
Moved some libAtomic-specific things into CMakeLists.txt file of that lib.
Other misc fixes that make engine more add_subdirectory() friendly in general and for android builds.
Got rid of `_exported` macros - targets define their definitions, include dirs and dependencies now.

Rokas Kupstys 8 years ago
parent
commit
a35d061eff
71 changed files with 974 additions and 935 deletions
  1. 3 12
      Build/CMake/Modules/AtomicAndroid.cmake
  2. 68 112
      Build/CMake/Modules/AtomicCommon.cmake
  3. 15 27
      Build/CMake/Modules/AtomicDesktop.cmake
  4. 13 13
      Build/CMake/Modules/AtomicDoc.cmake
  5. 5 5
      Build/CMake/Modules/AtomicDocList.cmake
  6. 12 21
      Build/CMake/Modules/AtomicGit.cmake
  7. 14 17
      Build/CMake/Modules/AtomicIOS.cmake
  8. 5 10
      Build/CMake/Modules/AtomicLinux.cmake
  9. 13 18
      Build/CMake/Modules/AtomicMac.cmake
  10. 20 26
      Build/CMake/Modules/AtomicPlatform.cmake
  11. 18 28
      Build/CMake/Modules/AtomicUtils.cmake
  12. 9 16
      Build/CMake/Modules/AtomicWeb.cmake
  13. 14 34
      Build/CMake/Modules/AtomicWindows.cmake
  14. 77 77
      Build/CMake/Modules/GetGitRevisionDescription.cmake
  15. 32 49
      CMakeLists.txt
  16. 133 31
      Source/Atomic/CMakeLists.txt
  17. 4 7
      Source/AtomicApp/CMakeLists.txt
  18. 139 170
      Source/AtomicEditor/CMakeLists.txt
  19. 5 10
      Source/AtomicJS/CMakeLists.txt
  20. 20 41
      Source/AtomicNET/NETNative/CMakeLists.txt
  21. 5 6
      Source/AtomicNET/NETScript/CMakeLists.txt
  22. 4 13
      Source/AtomicPlayer/Application/CMakeLists.txt
  23. 1 5
      Source/AtomicPlayer/CMakeLists.txt
  24. 3 1
      Source/AtomicPlayerJS/CMakeLists.txt
  25. 8 9
      Source/AtomicTool/CMakeLists.txt
  26. 1 3
      Source/AtomicWebView/CMakeLists.txt
  27. 23 16
      Source/CMakeLists.txt
  28. 23 0
      Source/ThirdParty/ASIO/CMakeLists.txt
  29. 22 0
      Source/ThirdParty/ASIO/INTERFACE.cpp
  30. 3 0
      Source/ThirdParty/Assimp/CMakeLists.txt
  31. 0 3
      Source/ThirdParty/Box2D/CMakeLists.txt
  32. 0 3
      Source/ThirdParty/Bullet/CMakeLists.txt
  33. 47 20
      Source/ThirdParty/CMakeLists.txt
  34. 0 3
      Source/ThirdParty/Civetweb/CMakeLists.txt
  35. 0 3
      Source/ThirdParty/Detour/CMakeLists.txt
  36. 0 3
      Source/ThirdParty/DetourCrowd/CMakeLists.txt
  37. 0 3
      Source/ThirdParty/DetourTileCache/CMakeLists.txt
  38. 2 2
      Source/ThirdParty/Duktape/CMakeLists.txt
  39. 0 4
      Source/ThirdParty/FreeType/CMakeLists.txt
  40. 5 2
      Source/ThirdParty/GLEW/CMakeLists.txt
  41. 4 3
      Source/ThirdParty/JO/CMakeLists.txt
  42. 4 3
      Source/ThirdParty/LZ4/CMakeLists.txt
  43. 0 3
      Source/ThirdParty/LibCpuId/CMakeLists.txt
  44. 4 3
      Source/ThirdParty/MojoShader/CMakeLists.txt
  45. 3 10
      Source/ThirdParty/Mustache/CMakeLists.txt
  46. 22 0
      Source/ThirdParty/Mustache/INTERFACE.cpp
  47. 6 2
      Source/ThirdParty/Poco/CMakeLists.txt
  48. 4 3
      Source/ThirdParty/PugiXml/CMakeLists.txt
  49. 0 3
      Source/ThirdParty/Recast/CMakeLists.txt
  50. 7 9
      Source/ThirdParty/SDL/CMakeLists.txt
  51. 1 1
      Source/ThirdParty/SDL/cmake/sdlchecks.cmake
  52. 4 3
      Source/ThirdParty/SQLite/CMakeLists.txt
  53. 4 3
      Source/ThirdParty/STB/CMakeLists.txt
  54. 4 3
      Source/ThirdParty/StanHull/CMakeLists.txt
  55. 1 0
      Source/ThirdParty/TurboBadger/CMakeLists.txt
  56. 23 0
      Source/ThirdParty/WebSocketPP/CMakeLists.txt
  57. 22 0
      Source/ThirdParty/WebSocketPP/INTERFACE.cpp
  58. 5 4
      Source/ThirdParty/kNet/CMakeLists.txt
  59. 1 1
      Source/ThirdParty/libcurl/CMakeLists.txt
  60. 1 1
      Source/ThirdParty/libcurl/LibCurl.cmake
  61. 17 18
      Source/ThirdParty/libcurl/LibCurlWindows.cmake
  62. 4 2
      Source/ThirdParty/libcurl/lib/CMakeLists.txt
  63. 22 1
      Source/ThirdParty/libsquish/CMakeLists.txt
  64. 5 7
      Source/ThirdParty/nanodbc/CMakeLists.txt
  65. 3 2
      Source/ThirdParty/nativefiledialog/CMakeLists.txt
  66. 3 10
      Source/ThirdParty/rapidjson/CMakeLists.txt
  67. 22 0
      Source/ThirdParty/rapidjson/INTERFACE.cpp
  68. 3 4
      Source/ThirdParty/zlib/CMakeLists.txt
  69. 6 8
      Source/ToolCore/CMakeLists.txt
  70. 1 3
      Source/ToolCoreJS/CMakeLists.txt
  71. 2 2
      Source/Tools/PackageTool/CMakeLists.txt

+ 3 - 12
Build/CMake/Modules/AtomicAndroid.cmake

@@ -1,12 +1,3 @@
-
-include(AtomicCommon)
-
-set (JAVASCRIPT_BINDINGS_PLATFORM "ANDROID")
-
-add_definitions(-DATOMIC_PLATFORM_ANDROID)
-add_definitions(-DATOMIC_OPENGL -DKNET_UNIX -DATOMIC_TBUI)
-
-set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x -fstack-protector")
-
-list (APPEND ATOMIC_LINK_LIBRARIES dl log android GLESv1_CM GLESv2)
+set(JAVASCRIPT_BINDINGS_PLATFORM "ANDROID")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x -fstack-protector")

+ 68 - 112
Build/CMake/Modules/AtomicCommon.cmake

@@ -20,59 +20,20 @@
 # THE SOFTWARE.
 #
 
-include (CMakeParseArguments)
-
-# Following three `*_exported()` macros are used defining global cmake variables with game engine include directories,
-# link libraries and definitions. These variables are "CACHE INTERNAL" therefore they are visible through entire build
-# system and by projects that add engine using `add_subdirectory()`.
-
-# Macro for including and exporting game engine include directories. Behaves exactly like include_directories(). Adds
-# specified directories to ATOMIC_INCLUDE_DIRS cache variable.
-# Macro arguments:
-#  List of include directories
-macro (include_directories_exported)
-    include_directories(${ARGV})
-    set (ATOMIC_INCLUDE_DIRS ${ATOMIC_INCLUDE_DIRS} ${ARGV} CACHE INTERNAL "Atomic game engine include directories" FORCE)
-endmacro ()
-
-# Macro for adding and exporting game engine definitions. Behaves exactly like add_definitions(). Adds
-# specified definitions to ATOMIC_DEFINITIONS cache variable.
-# Macro arguments:
-#  List of definitions
-macro (add_definitions_exported)
-    add_definitions(${ARGV})
-    set (ATOMIC_DEFINITIONS ${ATOMIC_DEFINITIONS} ${ARGV} CACHE INTERNAL "Atomic game engine definitions" FORCE)
-endmacro ()
-
-# Macro for exporting game engine link libraries. Adds specified targets/libraries to ATOMIC_LINK_LIBRARIES cache
-# variable. This macro does not implicitly add link libraries to any target.
-# Macro arguments:
-#  List of definitions
-macro (add_link_libraries_exported)
-    set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES} ${ARGV} CACHE INTERNAL "Atomic game engine link libraries" FORCE)
-endmacro ()
+include(CMakeParseArguments)
 
 if ($ENV{ATOMIC_BUILD_DIST})
-  add_definitions_exported(-DATOMIC_BUILD_DIST=1)
-endif()
-
-# Urho compatibility
-add_definitions_exported(-DATOMIC_CXX11=1)
-
-set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DATOMIC_DEBUG")
-set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DATOMIC_DEBUG")
-if(CMAKE_SIZEOF_VOID_P MATCHES 8)
-  set(ATOMIC_PROJECT_ARCH "x86_64")
-  set(ATOMIC_64BIT 1)
-  add_definitions_exported(-DATOMIC_64BIT=1)
-else()
-  set(ATOMIC_PROJECT_ARCH "x86")
-endif()
-
-# THIS IS JUST TO KEEP COMPATIBILITY WITH URHO3D CMAKE
-macro (install_header_files)
-
-endmacro()
+    add_definitions(-DATOMIC_BUILD_DIST=1)
+endif ()
+
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DATOMIC_DEBUG")
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DATOMIC_DEBUG")
+if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+    set(ATOMIC_PROJECT_ARCH "x86_64")
+    set(ATOMIC_64BIT 1)
+else ()
+    set(ATOMIC_PROJECT_ARCH "x86")
+endif ()
 
 # Macro for defining source files with optional arguments as follows:
 #  GLOB_CPP_PATTERNS <list> - Use the provided globbing patterns for CPP_FILES instead of the default *.cpp
@@ -84,95 +45,94 @@ endmacro()
 #  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
 #  RECURSE - Option to glob recursively
 #  GROUP - Option to group source files based on its relative path to the corresponding parent directory (only works when PARENT_SCOPE option is not in use)
-macro (define_source_files)
+macro(define_source_files)
     # Source files are defined by globbing source files in current source directory and also by including the extra source files if provided
-    cmake_parse_arguments (ARG "PARENT_SCOPE;RECURSE;GROUP" "" "PCH;EXTRA_CPP_FILES;EXTRA_H_FILES;GLOB_CPP_PATTERNS;GLOB_H_PATTERNS;EXCLUDE_PATTERNS" ${ARGN})
+    cmake_parse_arguments(ARG "PARENT_SCOPE;RECURSE;GROUP" "" "PCH;EXTRA_CPP_FILES;EXTRA_H_FILES;GLOB_CPP_PATTERNS;GLOB_H_PATTERNS;EXCLUDE_PATTERNS" ${ARGN})
     if (NOT ARG_GLOB_CPP_PATTERNS)
-        set (ARG_GLOB_CPP_PATTERNS *.cpp)    # Default glob pattern
+        set(ARG_GLOB_CPP_PATTERNS *.cpp)    # Default glob pattern
     endif ()
     if (NOT ARG_GLOB_H_PATTERNS)
-        set (ARG_GLOB_H_PATTERNS *.h)
+        set(ARG_GLOB_H_PATTERNS *.h)
     endif ()
     if (ARG_RECURSE)
-        set (ARG_RECURSE _RECURSE)
+        set(ARG_RECURSE _RECURSE)
     else ()
-        unset (ARG_RECURSE)
+        unset(ARG_RECURSE)
     endif ()
-    file (GLOB${ARG_RECURSE} CPP_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${ARG_GLOB_CPP_PATTERNS})
-    file (GLOB${ARG_RECURSE} H_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${ARG_GLOB_H_PATTERNS})
+    file(GLOB${ARG_RECURSE} CPP_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${ARG_GLOB_CPP_PATTERNS})
+    file(GLOB${ARG_RECURSE} H_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${ARG_GLOB_H_PATTERNS})
     if (ARG_EXCLUDE_PATTERNS)
-        set (CPP_FILES_WITH_SENTINEL ";${CPP_FILES};")  # Stringify the lists
-        set (H_FILES_WITH_SENTINEL ";${H_FILES};")
+        set(CPP_FILES_WITH_SENTINEL ";${CPP_FILES};")  # Stringify the lists
+        set(H_FILES_WITH_SENTINEL ";${H_FILES};")
         foreach (PATTERN ${ARG_EXCLUDE_PATTERNS})
             foreach (LOOP RANGE 1)
-                string (REGEX REPLACE ";${PATTERN};" ";;" CPP_FILES_WITH_SENTINEL "${CPP_FILES_WITH_SENTINEL}")
-                string (REGEX REPLACE ";${PATTERN};" ";;" H_FILES_WITH_SENTINEL "${H_FILES_WITH_SENTINEL}")
+                string(REGEX REPLACE ";${PATTERN};" ";;" CPP_FILES_WITH_SENTINEL "${CPP_FILES_WITH_SENTINEL}")
+                string(REGEX REPLACE ";${PATTERN};" ";;" H_FILES_WITH_SENTINEL "${H_FILES_WITH_SENTINEL}")
             endforeach ()
         endforeach ()
-        set (CPP_FILES ${CPP_FILES_WITH_SENTINEL})      # Convert strings back to lists, extra sentinels are harmless
-        set (H_FILES ${H_FILES_WITH_SENTINEL})
+        set(CPP_FILES ${CPP_FILES_WITH_SENTINEL})      # Convert strings back to lists, extra sentinels are harmless
+        set(H_FILES ${H_FILES_WITH_SENTINEL})
     endif ()
-    list (APPEND CPP_FILES ${ARG_EXTRA_CPP_FILES})
-    list (APPEND H_FILES ${ARG_EXTRA_H_FILES})
-    set (SOURCE_FILES ${CPP_FILES} ${H_FILES})
+    list(APPEND CPP_FILES ${ARG_EXTRA_CPP_FILES})
+    list(APPEND H_FILES ${ARG_EXTRA_H_FILES})
+    set(SOURCE_FILES ${CPP_FILES} ${H_FILES})
 
     # Optionally enable PCH
     if (ARG_PCH)
-        enable_pch (${ARG_PCH})
+        enable_pch(${ARG_PCH})
     endif ()
 
     # Optionally accumulate source files at parent scope
     if (ARG_PARENT_SCOPE)
-        get_filename_component (NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-        set (${NAME}_CPP_FILES ${CPP_FILES} PARENT_SCOPE)
-        set (${NAME}_H_FILES ${H_FILES} PARENT_SCOPE)
-    # Optionally put source files into further sub-group (only works when PARENT_SCOPE option is not in use)
+        get_filename_component(NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+        set(${NAME}_CPP_FILES ${CPP_FILES} PARENT_SCOPE)
+        set(${NAME}_H_FILES ${H_FILES} PARENT_SCOPE)
+        # Optionally put source files into further sub-group (only works when PARENT_SCOPE option is not in use)
     elseif (ARG_GROUP)
         foreach (CPP_FILE ${CPP_FILES})
-            get_filename_component (PATH ${CPP_FILE} PATH)
+            get_filename_component(PATH ${CPP_FILE} PATH)
             if (PATH)
-                string (REPLACE / \\ PATH ${PATH})
-                source_group ("Source Files\\${PATH}" FILES ${CPP_FILE})
+                string(REPLACE / \\ PATH ${PATH})
+                source_group("Source Files\\${PATH}" FILES ${CPP_FILE})
             endif ()
         endforeach ()
         foreach (H_FILE ${H_FILES})
-            get_filename_component (PATH ${H_FILE} PATH)
+            get_filename_component(PATH ${H_FILE} PATH)
             if (PATH)
-                string (REPLACE / \\ PATH ${PATH})
-                source_group ("Header Files\\${PATH}" FILES ${H_FILE})
+                string(REPLACE / \\ PATH ${PATH})
+                source_group("Header Files\\${PATH}" FILES ${H_FILE})
             endif ()
         endforeach ()
     endif ()
-endmacro ()
+endmacro()
 
 
 # Macro for setting up dependency lib for compilation and linking of a target
-macro (setup_target)
+macro(setup_target)
     # Include directories
-    include_directories (${INCLUDE_DIRS})
+    target_include_directories(${TARGET_NAME} SYSTEM BEFORE PUBLIC ${INCLUDE_DIRS})
     # Link libraries
-    target_link_libraries (${TARGET_NAME} ${ABSOLUTE_PATH_LIBS} ${LIBS})
+    target_link_libraries(${TARGET_NAME} ${ABSOLUTE_PATH_LIBS} ${LIBS})
     # Enable PCH if requested
     if (${TARGET_NAME}_HEADER_PATHNAME)
-        enable_pch (${${TARGET_NAME}_HEADER_PATHNAME})
+        enable_pch(${${TARGET_NAME}_HEADER_PATHNAME})
     endif ()
     # Set additional linker dependencies (only work for Makefile-based generator according to CMake documentation)
     if (LINK_DEPENDS)
-        string (REPLACE ";" "\;" LINK_DEPENDS "${LINK_DEPENDS}")        # Stringify for string replacement
-        list (APPEND TARGET_PROPERTIES LINK_DEPENDS "${LINK_DEPENDS}")  # Stringify with semicolons already escaped
-        unset (LINK_DEPENDS)
+        string(REPLACE ";" "\;" LINK_DEPENDS "${LINK_DEPENDS}")        # Stringify for string replacement
+        list(APPEND TARGET_PROPERTIES LINK_DEPENDS "${LINK_DEPENDS}")  # Stringify with semicolons already escaped
+        unset(LINK_DEPENDS)
     endif ()
     if (TARGET_PROPERTIES)
-        set_target_properties (${TARGET_NAME} PROPERTIES ${TARGET_PROPERTIES})
-        unset (TARGET_PROPERTIES)
+        set_target_properties(${TARGET_NAME} PROPERTIES ${TARGET_PROPERTIES})
+        unset(TARGET_PROPERTIES)
     endif ()
-
-endmacro ()
+endmacro()
 
 # Macro for checking the SOURCE_FILES variable is properly initialized
-macro (check_source_files)
+macro(check_source_files)
     if (NOT SOURCE_FILES)
-        message (FATAL_ERROR "Could not configure and generate the project file because no source files have been defined yet. "
+        message(FATAL_ERROR "Could not configure and generate the project file because no source files have been defined yet. "
             "You can define the source files explicitly by setting the SOURCE_FILES variable in your CMakeLists.txt; or "
             "by calling the define_source_files() macro which would by default glob all the C++ source files found in the same scope of "
             "CMakeLists.txt where the macro is being called and the macro would set the SOURCE_FILES variable automatically. "
@@ -180,7 +140,7 @@ macro (check_source_files)
             "more than just C++ language then you probably have to pass in extra arguments when calling the macro in order to make it works. "
             "See the define_source_files() macro definition in the CMake/Modules/Urho3D-CMake-common.cmake for more detail.")
     endif ()
-endmacro ()
+endmacro()
 
 # Macro for setting up a library target
 # Macro arguments:
@@ -193,22 +153,20 @@ endmacro ()
 #  ABSOLUTE_PATH_LIBS - list of dependent libraries that are external to the project
 #  LINK_DEPENDS - list of additional files on which a target binary depends for linking (Makefile-based generator only)
 #  TARGET_PROPERTIES - list of target properties
-macro (setup_library)
-
-    cmake_parse_arguments (ARG NODEPS "" "" ${ARGN})
-    check_source_files ()
-    add_library (${TARGET_NAME} ${ARG_UNPARSED_ARGUMENTS} ${SOURCE_FILES})
-    get_target_property (LIB_TYPE ${TARGET_NAME} TYPE)
+macro(setup_library)
+    cmake_parse_arguments(ARG NODEPS "" "" ${ARGN})
+    check_source_files()
+    add_library(${TARGET_NAME} ${ARG_UNPARSED_ARGUMENTS} ${SOURCE_FILES})
+    get_target_property(LIB_TYPE ${TARGET_NAME} TYPE)
 
-    setup_target ()
+    setup_target()
 
     # Setup the compiler flags for building shared library
     if (LIB_TYPE STREQUAL SHARED_LIBRARY)
         # Hide the symbols that are not explicitly marked for export
-        add_compiler_export_flags ()
+        add_compiler_export_flags()
     endif ()
-
-endmacro ()
+endmacro()
 
 # Macro for setting up an executable target
 # Macro arguments:
@@ -223,13 +181,11 @@ endmacro ()
 #  ABSOLUTE_PATH_LIBS - list of dependent libraries that are external to the project
 #  LINK_DEPENDS - list of additional files on which a target binary depends for linking (Makefile-based generator only)
 #  TARGET_PROPERTIES - list of target properties
-macro (setup_executable)
-
-    cmake_parse_arguments (ARG "PRIVATE;TOOL;NODEPS" "" "" ${ARGN})
-    check_source_files ()
+macro(setup_executable)
+    cmake_parse_arguments(ARG "PRIVATE;TOOL;NODEPS" "" "" ${ARGN})
+    check_source_files()
 
-    add_executable (${TARGET_NAME} ${ARG_UNPARSED_ARGUMENTS} ${SOURCE_FILES})
+    add_executable(${TARGET_NAME} ${ARG_UNPARSED_ARGUMENTS} ${SOURCE_FILES})
 
-    setup_target ()
-
-endmacro ()
+    setup_target()
+endmacro()

+ 15 - 27
Build/CMake/Modules/AtomicDesktop.cmake

@@ -1,34 +1,22 @@
-
-include(AtomicCommon)
-
-set (ATOMIC_DESKTOP TRUE)
-
-include_directories_exported(${ATOMIC_SOURCE_DIR}/Source/ThirdParty/Poco/Foundation/include)
-
-add_definitions_exported( -DATOMIC_PLATFORM_DESKTOP -DATOMIC_NAVIGATION -DATOMIC_TBUI -DATOMIC_FILEWATCHER -DPOCO_NO_AUTOMATIC_LIBS -DPOCO_STATIC )
-
-set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES} libsquish)
-
-if (NOT LINUX)
-    add_link_libraries_exported (LibCpuId)
-endif()
+set(ATOMIC_DESKTOP TRUE)
 
 # Check whether the CEF submodule is available
-if (EXISTS ${ATOMIC_SOURCE_DIR}/Submodules/CEF)
+if (NOT DEFINED ATOMIC_WEBVIEW AND EXISTS ${ATOMIC_SOURCE_DIR}/Submodules/CEF)
     #Check if CEF got pulled by looking if the foldes is empty
     file(GLOB CEF_FILES ${ATOMIC_SOURCE_DIR}/Submodules/CEF/*)
 
     list(LENGTH CEF_FILES CEF_FILES_LEN)
-    if(CEF_FILES_LEN EQUAL 0)
-     message(STATUS "Initialising CEF submodule")
-
-     find_package(Git REQUIRED)
-     if(GIT_FOUND)
-      execute_process(COMMAND git submodule update --init --remote)
-     else ()
-      message(STATUS "Could not find git in your Path. Please install git")
-     endif(GIT_FOUND)
-    endif()
+    if (CEF_FILES_LEN EQUAL 0)
+        message(STATUS "Initialising CEF submodule")
+
+        find_package(Git REQUIRED)
+        if (GIT_FOUND)
+            execute_process(COMMAND git submodule update --init --remote)
+        else ()
+            message(STATUS "Could not find git in your Path. Please install git")
+        endif (GIT_FOUND)
+    endif ()
     set(ATOMIC_WEBVIEW TRUE)
-    add_definitions( -DATOMIC_WEBVIEW )
-endif()
+    add_definitions(-DATOMIC_WEBVIEW)
+endif ()
+

+ 13 - 13
Build/CMake/Modules/AtomicDoc.cmake

@@ -1,35 +1,35 @@
 # create docs
 find_program(CLDOC cldoc)
-if(CLDOC)
+if (CLDOC)
 
     get_property(include_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
-    get_directory_property( DEFS DIRECTORY ${ATOMIC_SOURCE_DIR} COMPILE_DEFINITIONS )
-    
-    FOREACH(infileName ${include_dirs})
+    get_directory_property(DEFS DIRECTORY ${ATOMIC_SOURCE_DIR} COMPILE_DEFINITIONS)
+
+    FOREACH (infileName ${include_dirs})
         LIST(APPEND DOC_INCLUDES "-I${infileName}")
-    ENDFOREACH(infileName)
+    ENDFOREACH (infileName)
 
-    FOREACH(DefName ${DEFS})
+    FOREACH (DefName ${DEFS})
         LIST(APPEND DOC_DEFINES "-D${DefName}")
-    ENDFOREACH(DefName)
+    ENDFOREACH (DefName)
 
     string(REGEX MATCHALL "([^\ ]+)" CXX_LIST "${CMAKE_CXX_FLAGS}")
     string(REGEX MATCHALL "([^\ ]+)" C_LIST "${CMAKE_C_FLAGS}")
 
-    get_filename_component(COMPNAME ${CMAKE_CURRENT_SOURCE_DIR} NAME )
+    get_filename_component(COMPNAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
     SET(TARGETNAME ${COMPNAME}Docs)
 
     MESSAGE(STATUS "Enabling documentation for: " ${COMPNAME})
 
-    SET(doc_args generate ${CXX_LIST} ${C_LIST} -std=c++11 -DATOMIC_DEV_BUILD=1 ${DOC_DEFINES} ${DOC_INCLUDES} -- --type html --language c++ --output ${ATOMIC_SOURCE_DIR}/Artifacts/Build/AtomicDocs )
+    SET(doc_args generate ${CXX_LIST} ${C_LIST} -std=c++11 -DATOMIC_DEV_BUILD=1 ${DOC_DEFINES} ${DOC_INCLUDES} -- --type html --language c++ --output ${ATOMIC_SOURCE_DIR}/Artifacts/Build/AtomicDocs)
 
-    LIST( APPEND doc_args ${SOURCE_FILES} )
+    LIST(APPEND doc_args ${SOURCE_FILES})
 
     add_custom_target(${TARGETNAME} COMMAND ${CLDOC} ${doc_args})
-  
+
     set_target_properties(${TARGETNAME} PROPERTIES
         EXCLUDE_FROM_ALL 1
         EXCLUDE_FROM_DEFAULT_BUILD 1
-    )
+        )
 
-endif()
+endif ()

+ 5 - 5
Build/CMake/Modules/AtomicDocList.cmake

@@ -1,7 +1,7 @@
 # create target to generate docs with clang based doc tool
 find_program(CLDOC cldoc)
-if(CLDOC)
-   add_custom_target(AtomicEngineDocs
-    DEPENDS AtomicEditorDocs AtomicDocs
-    )
-endif()
+if (CLDOC)
+    add_custom_target(AtomicEngineDocs
+        DEPENDS AtomicEditorDocs AtomicDocs
+        )
+endif ()

+ 12 - 21
Build/CMake/Modules/AtomicGit.cmake

@@ -1,27 +1,18 @@
 
 # If submodules aren't initialized, look for git and initialize
 if (NOT EXISTS ${ATOMIC_SOURCE_DIR}/Submodules/CEF/.git OR NOT EXISTS ${ATOMIC_SOURCE_DIR}/Submodules/AtomicExamples/.git)
-
     find_package(Git)
-
-    if(GIT_FOUND)
-
-        message ("\n\nUpdating submodules, please wait...\n\n")
-
-        execute_process( COMMAND ${GIT_EXECUTABLE} submodule update --init
-                         WORKING_DIRECTORY ${ATOMIC_SOURCE_DIR}
-                         RESULT_VARIABLE ATOMIC_GIT_STATUS )
-
+    if (GIT_FOUND)
+        message("\n\nUpdating submodules, please wait...\n\n")
+        execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init
+            WORKING_DIRECTORY ${ATOMIC_SOURCE_DIR}
+            RESULT_VARIABLE ATOMIC_GIT_STATUS)
         # check return status
-        if(NOT ATOMIC_GIT_STATUS EQUAL 0)
-            message( FATAL_ERROR "BUILD ERROR:\n\nError initializing submodules: git submodule update --init returned ${ATOMIC_GIT_STATUS}\n")
-        endif()
-
-    else()
-
+        if (NOT ATOMIC_GIT_STATUS EQUAL 0)
+            message(FATAL_ERROR "BUILD ERROR:\n\nError initializing submodules: git submodule update --init returned ${ATOMIC_GIT_STATUS}\n")
+        endif ()
+    else ()
         # Git not found
-        message( FATAL_ERROR "BUILD ERROR:\n\Submodules not initialized, please run: git submodule update --init\n")
-
-    endif()
-
-endif()
+        message(FATAL_ERROR "BUILD ERROR:\n\Submodules not initialized, please run: git submodule update --init\n")
+    endif ()
+endif ()

+ 14 - 17
Build/CMake/Modules/AtomicIOS.cmake

@@ -1,30 +1,27 @@
-include (BundleUtilities)
+include(BundleUtilities)
 
-include(AtomicCommon)
+set(JAVASCRIPT_BINDINGS_PLATFORM "IOS")
 
-set (JAVASCRIPT_BINDINGS_PLATFORM "IOS")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x")
 
-add_definitions (-DIOS -DATOMIC_PLATFORM_IOS -DATOMIC_OPENGL -DKNET_UNIX -DATOMIC_TBUI)
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x")
+set(CMAKE_CROSSCOMPILING TRUE)
+set(CMAKE_XCODE_EFFECTIVE_PLATFORMS -iphoneos -iphonesimulator)
+set(CMAKE_OSX_SYSROOT iphoneos)    # Set Base SDK to "Latest iOS"
+set(CMAKE_OSX_DEPLOYMENT_TARGET "")
+set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
 
-set (CMAKE_CROSSCOMPILING TRUE)
-set (CMAKE_XCODE_EFFECTIVE_PLATFORMS -iphoneos -iphonesimulator)
-set (CMAKE_OSX_SYSROOT iphoneos)    # Set Base SDK to "Latest iOS"
-set(CMAKE_OSX_DEPLOYMENT_TARGET  "")
-set (CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
-
-set (CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_INCLUDING_64_BIT))
+set(CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_INCLUDING_64_BIT))
 
 # This is a CMake hack in order to make standard CMake check modules that use try_compile() internally work on iOS platform
 # The injected "flags" are not compiler flags, they are actually CMake variables meant for another CMake subprocess that builds the source file being passed in the try_compile() command
 # CAVEAT: these injected "flags" must always be kept at the end of the string variable, i.e. when adding more compiler flags later on then those new flags must be prepended in front of these flags instead
-set (CMAKE_REQUIRED_FLAGS ";-DSmileyHack=byYaoWT;-DCMAKE_MACOSX_BUNDLE=1;-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=0")
+set(CMAKE_REQUIRED_FLAGS ";-DSmileyHack=byYaoWT;-DCMAKE_MACOSX_BUNDLE=1;-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=0")
 
 # Obtain iOS sysroot path
-execute_process (COMMAND xcodebuild -version -sdk ${CMAKE_OSX_SYSROOT} Path OUTPUT_VARIABLE IOS_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE)
+execute_process(COMMAND xcodebuild -version -sdk ${CMAKE_OSX_SYSROOT} Path OUTPUT_VARIABLE IOS_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE)
 
-message (${IOS_SYSROOT})
+message(${IOS_SYSROOT})
 
-set (CMAKE_FIND_ROOT_PATH ${IOS_SYSROOT})
+set(CMAKE_FIND_ROOT_PATH ${IOS_SYSROOT})
 
-set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework AudioToolbox -framework CoreAudio -framework CoreGraphics -framework Foundation -framework OpenGLES -framework QuartzCore -framework UIKit -framework CoreMotion -framework GameController")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework AudioToolbox -framework CoreAudio -framework CoreGraphics -framework Foundation -framework OpenGLES -framework QuartzCore -framework UIKit -framework CoreMotion -framework GameController")

+ 5 - 10
Build/CMake/Modules/AtomicLinux.cmake

@@ -1,17 +1,12 @@
-set (JAVASCRIPT_BINDINGS_PLATFORM "LINUX")
-set (ATOMIC_NODE_JAKE Build/Linux/node/node Build/node_modules/jake/bin/cli.js  -f  Build/Scripts/Bootstrap.js)
+set(JAVASCRIPT_BINDINGS_PLATFORM "LINUX")
+set(ATOMIC_NODE_JAKE Build/Linux/node/node Build/node_modules/jake/bin/cli.js -f Build/Scripts/Bootstrap.js)
 
 include(AtomicDesktop)
 
-add_definitions_exported(-DATOMIC_PLATFORM_LINUX -DATOMIC_OPENGL -DATOMIC_TBUI -DKNET_UNIX -DHAVE_INT64_T)
-
-set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-warn-absolute-paths -fPIC")
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-warn-absolute-paths -Wno-invalid-offsetof -std=gnu++0x -fPIC")
-
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-warn-absolute-paths -fPIC")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-warn-absolute-paths -Wno-invalid-offsetof -std=gnu++0x -fPIC")
 
 find_package(PkgConfig REQUIRED)
-
-#for native file dialog
+# for native file dialog
 pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
 
-add_link_libraries_exported (pthread GLEW GL dl)

+ 13 - 18
Build/CMake/Modules/AtomicMac.cmake

@@ -1,28 +1,23 @@
 
-set (JAVASCRIPT_BINDINGS_PLATFORM "MACOSX")
-set (ATOMIC_NODE_JAKE Build/Mac/node/node Build/node_modules/jake/bin/cli.js  -f  Build/Scripts/Bootstrap.js)
+set(JAVASCRIPT_BINDINGS_PLATFORM "MACOSX")
+set(ATOMIC_NODE_JAKE Build/Mac/node/node Build/node_modules/jake/bin/cli.js -f Build/Scripts/Bootstrap.js)
 
-include (BundleUtilities)
+include(BundleUtilities)
 include(AtomicDesktop)
 
 # for CEF3
 set(PROJECT_ARCH "x86_64")
 
 set(CMAKE_OSX_ARCHITECTURES "x86_64")
-set(CMAKE_OSX_DEPLOYMENT_TARGET  "10.9")
-
-add_definitions_exported(-DATOMIC_PLATFORM_OSX -DATOMIC_OPENGL -DKNET_UNIX)
+set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9")
 
 if (CMAKE_GENERATOR STREQUAL "Xcode")
-    add_definitions(-DATOMIC_XCODE)
-    else()
-        # When not using XCode, linker takes a long time, which this flag seems to be being passed during xcode builds
-        set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -no_deduplicate")
-        set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker -no_deduplicate")
-endif()
-
-list (APPEND ATOMIC_LINK_LIBRARIES GLEW)
-
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++11 -stdlib=libc++")
-
-set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -framework AudioUnit -framework Carbon -framework Cocoa -framework CoreAudio -framework CoreVideo -framework ForceFeedback -framework IOKit -framework OpenGL -framework CoreServices -framework Security")
+    set(ATOMIC_XCODE 1)
+else ()
+    # When not using XCode, linker takes a long time, which this flag seems to be being passed during xcode builds
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Xlinker -no_deduplicate")
+    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker -no_deduplicate")
+endif ()
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++11 -stdlib=libc++")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -framework AudioUnit -framework Carbon -framework Cocoa -framework CoreAudio -framework CoreVideo -framework ForceFeedback -framework IOKit -framework OpenGL -framework CoreServices -framework Security")

+ 20 - 26
Build/CMake/Modules/AtomicPlatform.cmake

@@ -1,37 +1,31 @@
 
-if (MSVC)
-
+if (WIN32)
     include(AtomicWindows)
-
-elseif(APPLE)
-
+elseif (APPLE)
     if (IOS)
         include(AtomicIOS)
-    else()
+    else ()
         include(AtomicMac)
-    endif()
-
-elseif(LINUX)
-
-  include(AtomicLinux)
-
-elseif(ANDROID)
-
+    endif ()
+elseif (LINUX)
+    include(AtomicLinux)
+elseif (ANDROID)
     include(AtomicAndroid)
+elseif (WEB)
+    include(AtomicWeb)
+endif ()
 
-elseif(EMSCRIPTEN)
-
-	include(AtomicWeb)
-
-endif()
-
-set (JAVASCRIPT_BINDINGS_PLATFORM_ROOT "${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated")
+if (NOT WIN32)
+    set(ATOMIC_OPENGL 1)
+endif ()
 
-if(NOT EXISTS "${JAVASCRIPT_BINDINGS_PLATFORM_ROOT}/Javascript")
+message(STATUS "Atomic platform: ${JAVASCRIPT_BINDINGS_PLATFORM}")
 
-execute_process ( COMMAND ${ATOMIC_NODE_JAKE};build:precreateScriptBindings[${JAVASCRIPT_BINDINGS_PLATFORM}]
-                  WORKING_DIRECTORY "${ATOMIC_SOURCE_DIR}" )
+set(JAVASCRIPT_BINDINGS_PLATFORM_ROOT "${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated")
 
-endif()
+if (NOT EXISTS "${JAVASCRIPT_BINDINGS_PLATFORM_ROOT}/Javascript")
+    execute_process(COMMAND ${ATOMIC_NODE_JAKE};build:precreateScriptBindings[${JAVASCRIPT_BINDINGS_PLATFORM}]
+        WORKING_DIRECTORY "${ATOMIC_SOURCE_DIR}")
+endif ()
 
-file (GLOB_RECURSE JAVASCRIPT_BINDINGS_NATIVE_FILENAMES ${JAVASCRIPT_BINDINGS_PLATFORM_ROOT}/*.cpp ${JAVASCRIPT_BINDINGS_PLATFORM_ROOT}/*.h)
+file(GLOB_RECURSE JAVASCRIPT_BINDINGS_NATIVE_FILENAMES ${JAVASCRIPT_BINDINGS_PLATFORM_ROOT}/*.cpp ${JAVASCRIPT_BINDINGS_PLATFORM_ROOT}/*.h)

+ 18 - 28
Build/CMake/Modules/AtomicUtils.cmake

@@ -1,31 +1,21 @@
 macro(GroupSources curdir)
-
-    if (MSVC)
-
-    file(GLOB children RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${curdir} ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/*)
-
-    foreach(child ${children})
-
-        if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/${child})
-
-            if ("${curdir}" STREQUAL "")
-                GroupSources(${child})
-            else()
-                GroupSources(${curdir}/${child})
-            endif()
-        else()
-
-            string(REPLACE "/" "\\" groupname ${curdir})
-            source_group(${groupname} FILES ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/${child})
-
-        endif()
-
-    endforeach()
-
-    endif()
-
+    if (WIN32)
+        file(GLOB children RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${curdir} ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/*)
+        foreach (child ${children})
+            if (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/${child})
+                if ("${curdir}" STREQUAL "")
+                    GroupSources(${child})
+                else ()
+                    GroupSources(${curdir}/${child})
+                endif ()
+            else ()
+                string(REPLACE "/" "\\" groupname ${curdir})
+                source_group(${groupname} FILES ${CMAKE_CURRENT_SOURCE_DIR}/${curdir}/${child})
+            endif ()
+        endforeach ()
+    endif ()
 endmacro()
 
-if(NOT CMAKE_CROSSCOMPILING AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
-  set(LINUX TRUE CACHE BOOL "Indicates if host is Linux.")
-endif()
+if (NOT CMAKE_CROSSCOMPILING AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+    set(LINUX TRUE CACHE BOOL "Indicates if host is Linux.")
+endif ()

+ 9 - 16
Build/CMake/Modules/AtomicWeb.cmake

@@ -1,22 +1,15 @@
+set(JAVASCRIPT_BINDINGS_PLATFORM "WEB")
 
-include(AtomicCommon)
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-warn-absolute-paths -Wno-unknown-warning-option")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x -Wno-warn-absolute-paths -Wno-unknown-warning-option")
 
-set (JAVASCRIPT_BINDINGS_PLATFORM "WEB")
-
-add_definitions_exported(-DATOMIC_PLATFORM_WEB -DATOMIC_OPENGL -DATOMIC_TBUI -DNO_POPEN)
-
-set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-warn-absolute-paths -Wno-unknown-warning-option")
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x -Wno-warn-absolute-paths -Wno-unknown-warning-option")
-
-set (CMAKE_EXECUTABLE_SUFFIX_C .html)
-set (CMAKE_EXECUTABLE_SUFFIX_CXX .html)
+set(CMAKE_EXECUTABLE_SUFFIX_C .html)
+set(CMAKE_EXECUTABLE_SUFFIX_CXX .html)
 
 # Linker flags
-set (MEMORY_LINKER_FLAGS "-s ALLOW_MEMORY_GROWTH=1")
+set(MEMORY_LINKER_FLAGS "-s ALLOW_MEMORY_GROWTH=1")
 #set (MEMORY_LINKER_FLAGS "-s TOTAL_MEMORY=${EMSCRIPTEN_TOTAL_MEMORY}")
 
-set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MEMORY_LINKER_FLAGS} -s NO_EXIT_RUNTIME=1")
-set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -O3 -s AGGRESSIVE_VARIABLE_ELIMINATION=1")     # Remove variables to make the -O3 regalloc easier
-set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -g4")     # Preserve LLVM debug information, show line number debug comments, and generate source maps
-
-set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES})
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MEMORY_LINKER_FLAGS} -s NO_EXIT_RUNTIME=1")
+set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -O3 -s AGGRESSIVE_VARIABLE_ELIMINATION=1")     # Remove variables to make the -O3 regalloc easier
+set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -g4")     # Preserve LLVM debug information, show line number debug comments, and generate source maps

+ 14 - 34
Build/CMake/Modules/AtomicWindows.cmake

@@ -1,47 +1,27 @@
 
-set (JAVASCRIPT_BINDINGS_PLATFORM "WINDOWS")
+set(JAVASCRIPT_BINDINGS_PLATFORM "WINDOWS")
 
 include(AtomicDesktop)
 
 #set (CMAKE_DEBUG_POSTFIX _d)
 
-set (ATOMIC_NODE_JAKE Build/Windows/node/node.exe Build/node_modules/jake/bin/cli.js  -f  Build\\Scripts\\Bootstrap.js)
+set(ATOMIC_NODE_JAKE Build/Windows/node/node.exe Build/node_modules/jake/bin/cli.js -f Build\\Scripts\\Bootstrap.js)
 
-if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
-    set (D3DCOMPILER_47_DLL ${ATOMIC_SOURCE_DIR}/Build/Windows/Binaries/x64/D3DCompiler_47.dll)
-else()
-    set (D3DCOMPILER_47_DLL ${ATOMIC_SOURCE_DIR}/Build/Windows/Binaries/x86/D3DCompiler_47.dll)
-endif()
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(D3DCOMPILER_47_DLL ${ATOMIC_SOURCE_DIR}/Build/Windows/Binaries/x64/D3DCompiler_47.dll)
+else ()
+    set(D3DCOMPILER_47_DLL ${ATOMIC_SOURCE_DIR}/Build/Windows/Binaries/x86/D3DCompiler_47.dll)
+endif ()
 
-add_definitions_exported(-DATOMIC_PLATFORM_WINDOWS -DATOMIC_TBUI )
-add_definitions(-D_CRT_SECURE_NO_WARNINGS )
-
-add_link_libraries_exported(MojoShader user32 gdi32 winmm imm32 ole32 oleaut32 version uuid Ws2_32)
-
-if (ATOMIC_D3D11) #DirectX 11
-    add_definitions_exported(-DATOMIC_D3D11)
-    add_link_libraries_exported(d3d11 d3dcompiler dxguid)
-elseif(ATOMIC_OPENGL) #OpenGL
-	find_package(OpenGL REQUIRED)
-	include_directories(${OpenGL_INCLUDE_DIRS})
-	link_directories(${OpenGL_LIBRARY_DIRS})
-	add_definitions(${OpenGL_DEFINITIONS})
-	add_definitions (-DATOMIC_OPENGL -DGLEW_STATIC)
-	list (APPEND ATOMIC_LINK_LIBRARIES GLEW opengl32 glu32)
-else() #DirectX 9
-    add_link_libraries_exported(d3d9 d3dcompiler)
-endif()
-
-# removes dependency on D3DCompiler dll for Atomic Direct3D9 builds which don't require it
-# (binaries that never initialize the Direct3D9 graphics subsystem)
-if (ATOMIC_D3D9SHADERCOMPILER_DISABLE)
-  add_definitions_exported(-DATOMIC_D3D9SHADERCOMPILER_DISABLE)
-endif()
+add_definitions(-D_CRT_SECURE_NO_WARNINGS)
 
 
 # compile with static runtime
-set( CompilerFlags CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO )
+set(CompilerFlags
+    CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
+    CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
+    CMAKE_C_FLAGS_MINSIZEREL)
 
-foreach(CompilerFlag ${CompilerFlags})
+foreach (CompilerFlag ${CompilerFlags})
     string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
-endforeach()
+endforeach ()

+ 77 - 77
Build/CMake/Modules/GetGitRevisionDescription.cmake

@@ -30,9 +30,9 @@
 # (See accompanying file LICENSE_1_0.txt or copy at
 # http://www.boost.org/LICENSE_1_0.txt)
 
-if(__get_git_revision_description)
-	return()
-endif()
+if (__get_git_revision_description)
+    return()
+endif ()
 set(__get_git_revision_description YES)
 
 # We must run the following at "include" time, not at function call time,
@@ -40,91 +40,91 @@ set(__get_git_revision_description YES)
 get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
 
 function(get_git_head_revision _refspecvar _hashvar)
-	set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
-	set(GIT_DIR "${GIT_PARENT_DIR}/.git")
-	while(NOT EXISTS "${GIT_DIR}")	# .git dir not found, search parent directories
-		set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
-		get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
-		if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
-			# We have reached the root directory, we are not in git
-			set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
-			set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
-			return()
-		endif()
-		set(GIT_DIR "${GIT_PARENT_DIR}/.git")
-	endwhile()
-	# check if this is a submodule
-	if(NOT IS_DIRECTORY ${GIT_DIR})
-		file(READ ${GIT_DIR} submodule)
-		string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
-		get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
-		get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
-	endif()
-	set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
-	if(NOT EXISTS "${GIT_DATA}")
-		file(MAKE_DIRECTORY "${GIT_DATA}")
-	endif()
+    set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+    set(GIT_DIR "${GIT_PARENT_DIR}/.git")
+    while (NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
+        set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
+        get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
+        if (GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
+            # We have reached the root directory, we are not in git
+            set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
+            set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
+            return()
+        endif ()
+        set(GIT_DIR "${GIT_PARENT_DIR}/.git")
+    endwhile ()
+    # check if this is a submodule
+    if (NOT IS_DIRECTORY ${GIT_DIR})
+        file(READ ${GIT_DIR} submodule)
+        string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
+        get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
+        get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
+    endif ()
+    set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
+    if (NOT EXISTS "${GIT_DATA}")
+        file(MAKE_DIRECTORY "${GIT_DATA}")
+    endif ()
 
-	if(NOT EXISTS "${GIT_DIR}/HEAD")
-		return()
-	endif()
-	set(HEAD_FILE "${GIT_DATA}/HEAD")
-	configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
+    if (NOT EXISTS "${GIT_DIR}/HEAD")
+        return()
+    endif ()
+    set(HEAD_FILE "${GIT_DATA}/HEAD")
+    configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
 
-	configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
-		"${GIT_DATA}/grabRef.cmake"
-		@ONLY)
-	include("${GIT_DATA}/grabRef.cmake")
+    configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
+        "${GIT_DATA}/grabRef.cmake"
+        @ONLY)
+    include("${GIT_DATA}/grabRef.cmake")
 
-	set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
-	set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
+    set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
+    set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
 endfunction()
 
 function(git_describe _var)
-	if(NOT GIT_FOUND)
-		find_package(Git QUIET)
-	endif()
-	get_git_head_revision(refspec hash)
-	if(NOT GIT_FOUND)
-		set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
-		return()
-	endif()
-	if(NOT hash)
-		set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
-		return()
-	endif()
+    if (NOT GIT_FOUND)
+        find_package(Git QUIET)
+    endif ()
+    get_git_head_revision(refspec hash)
+    if (NOT GIT_FOUND)
+        set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
+        return()
+    endif ()
+    if (NOT hash)
+        set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
+        return()
+    endif ()
 
-	# TODO sanitize
-	#if((${ARGN}" MATCHES "&&") OR
-	#	(ARGN MATCHES "||") OR
-	#	(ARGN MATCHES "\\;"))
-	#	message("Please report the following error to the project!")
-	#	message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
-	#endif()
+    # TODO sanitize
+    #if((${ARGN}" MATCHES "&&") OR
+    #	(ARGN MATCHES "||") OR
+    #	(ARGN MATCHES "\\;"))
+    #	message("Please report the following error to the project!")
+    #	message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
+    #endif()
 
-	#message(STATUS "Arguments to execute_process: ${ARGN}")
+    #message(STATUS "Arguments to execute_process: ${ARGN}")
 
-	execute_process(COMMAND
-		"${GIT_EXECUTABLE}"
-		describe
-		${hash}
-		${ARGN}
-		WORKING_DIRECTORY
-		"${CMAKE_CURRENT_SOURCE_DIR}"
-		RESULT_VARIABLE
-		res
-		OUTPUT_VARIABLE
-		out
-		ERROR_QUIET
-		OUTPUT_STRIP_TRAILING_WHITESPACE)
-	if(NOT res EQUAL 0)
-		set(out "${out}-${res}-NOTFOUND")
-	endif()
+    execute_process(COMMAND
+        "${GIT_EXECUTABLE}"
+        describe
+        ${hash}
+        ${ARGN}
+        WORKING_DIRECTORY
+        "${CMAKE_CURRENT_SOURCE_DIR}"
+        RESULT_VARIABLE
+        res
+        OUTPUT_VARIABLE
+        out
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (NOT res EQUAL 0)
+        set(out "${out}-${res}-NOTFOUND")
+    endif ()
 
-	set(${_var} "${out}" PARENT_SCOPE)
+    set(${_var} "${out}" PARENT_SCOPE)
 endfunction()
 
 function(git_get_exact_tag _var)
-	git_describe(out --exact-match ${ARGN})
-	set(${_var} "${out}" PARENT_SCOPE)
+    git_describe(out --exact-match ${ARGN})
+    set(${_var} "${out}" PARENT_SCOPE)
 endfunction()

+ 32 - 49
CMakeLists.txt

@@ -1,10 +1,10 @@
 
-project (Atomic)
+project(Atomic)
 
 cmake_minimum_required(VERSION 2.8.12.1)
 
-set (ATOMIC_SOURCE_DIR ${Atomic_SOURCE_DIR})
-set (CMAKE_MODULE_PATH ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules)
+set(ATOMIC_SOURCE_DIR ${Atomic_SOURCE_DIR})
+set(CMAKE_MODULE_PATH ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules)
 
 include(AtomicGit)
 include(AtomicUtils)
@@ -12,70 +12,53 @@ include(AtomicCommon)
 
 add_definitions(-DATOMIC_ROOT_SOURCE_DIR="${ATOMIC_SOURCE_DIR}" -DATOMIC_ROOT_BUILD_DIR="${CMAKE_BINARY_DIR}")
 
-add_definitions( -DATOMIC_API= -DATOMIC_STATIC_DEFINE -DATOMIC_ATOMIC2D -DATOMIC_LOGGING -DATOMIC_PROFILING)
-
 if (NOT DEFINED ATOMIC_DEV_BUILD)
     set(ATOMIC_DEV_BUILD 1)
-ENDIF()
+ENDIF ()
 
 if (ATOMIC_DEV_BUILD)
     add_definitions("-DATOMIC_DEV_BUILD=1")
-endif()
-
-add_link_libraries_exported (Atomic Box2D Duktape TurboBadger FreeType JO LZ4 PugiXml STB SDL)
-
-if (NOT ATOMIC_BUILD_2D)
-    add_definitions_exported (-DATOMIC_PHYSICS -DATOMIC_3D)
-    add_link_libraries_exported (Bullet StanHull)
-endif()
-
-if (NOT EMSCRIPTEN)
-    add_definitions_exported (-DATOMIC_THREADING -DATOMIC_NETWORK)
-    add_link_libraries_exported (Civetweb Recast Detour DetourCrowd DetourTileCache kNet libcurl)
-endif()
+endif ()
 
-add_definitions_exported (-DATOMIC_WEB)
-
-include (AtomicPlatform)
+include(AtomicPlatform)
 
 find_program(CLDOC cldoc)
-if(CLDOC)
-   add_custom_target(docs DEPENDS AtomicEngineDocs)
-endif()
+if (CLDOC)
+    add_custom_target(docs DEPENDS AtomicEngineDocs)
+endif ()
 
 if (ATOMIC_WEBVIEW)
 
-  if(APPLE)
-    if(POLICY CMP0037)
-      # new cmake doesn't like creating framework whose name has spaces
-      # which CEF3 scripts (including shell) currently require on OSX
-      cmake_policy(SET CMP0037 OLD)
-    endif()
-    set(CEF_ROOT "${ATOMIC_SOURCE_DIR}/Submodules/CEF/MacOSX")
-  elseif(MSVC)
-    if (ATOMIC_PROJECT_ARCH STREQUAL "x86")
-    else()
-      set(CEF_ROOT "${ATOMIC_SOURCE_DIR}/Submodules/CEF/Windows/64bit")
-    endif()
-  else()
-      set(CEF_ROOT "${ATOMIC_SOURCE_DIR}/Submodules/CEF/Linux")
-  endif()
+    if (APPLE)
+        if (POLICY CMP0037)
+            # new cmake doesn't like creating framework whose name has spaces
+            # which CEF3 scripts (including shell) currently require on OSX
+            cmake_policy(SET CMP0037 OLD)
+        endif ()
+        set(CEF_ROOT "${ATOMIC_SOURCE_DIR}/Submodules/CEF/MacOSX")
+    elseif (WIN32)
+        if (ATOMIC_PROJECT_ARCH STREQUAL "x86")
+        else ()
+            set(CEF_ROOT "${ATOMIC_SOURCE_DIR}/Submodules/CEF/Windows/64bit")
+        endif ()
+    else ()
+        set(CEF_ROOT "${ATOMIC_SOURCE_DIR}/Submodules/CEF/Linux")
+    endif ()
 
-  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CEF_ROOT}/cmake")
-  find_package(CEF REQUIRED)
-  include_directories(${CEF_ROOT})
+    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CEF_ROOT}/cmake")
+    find_package(CEF REQUIRED)
+    include_directories(${CEF_ROOT})
 
-  add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper)
-endif()
+    add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper)
+endif ()
 
-add_definitions(${ATOMIC_DEFINITIONS})
 add_subdirectory(Source)
 
 if (ATOMIC_DESKTOP AND ATOMIC_DEV_BUILD)
     if (NOT DEFINED ATOMIC_CPLUSPLUS_EXAMPLES)
-        set (ATOMIC_CPLUSPLUS_EXAMPLES 1)
+        set(ATOMIC_CPLUSPLUS_EXAMPLES 1)
     endif ()
     if (ATOMIC_CPLUSPLUS_EXAMPLES)
         add_subdirectory(Submodules/AtomicExamples/FeatureExamples/CPlusPlus)
-    endif()
-endif()
+    endif ()
+endif ()

+ 133 - 31
Source/Atomic/CMakeLists.txt

@@ -1,7 +1,3 @@
-
-include_directories(${ATOMIC_INCLUDE_DIRS})
-include_directories_exported(${CMAKE_CURRENT_SOURCE_DIR})
-
 file (GLOB CONTAINER_SOURCE Container/*.cpp Container/*.h)
 file (GLOB CORE_SOURCE Core/*.cpp Core/*.h)
 file (GLOB MATH_SOURCE Math/*.cpp Math/*.h)
@@ -14,44 +10,32 @@ file (GLOB NETWORK_SOURCE Network/*.cpp Network/*.h)
 file (GLOB WEB_SOURCE Web/*.cpp Web/*.h)
 file (GLOB SCRIPT_SOURCE Script/*.cpp Script/*.h)
 file (GLOB METRICS_SOURCE Metrics/*.cpp Metrics/*.h)
-
-if (NOT EMSCRIPTEN AND NOT IOS AND NOT ANDROID)
-  file (GLOB IPC_SOURCE IPC/*.cpp IPC/*.h)
+if (NOT WEB AND NOT IOS AND NOT ANDROID)
+    file (GLOB IPC_SOURCE IPC/*.cpp IPC/*.h)
 endif()
-
 file (GLOB ATOMIC2D_SOURCE Atomic2D/*.cpp Atomic2D/*.h)
 file (GLOB SCENE_SOURCE Scene/*.cpp Scene/*.h)
 file (GLOB UI_SOURCE UI/*.cpp UI/*.h)
 file (GLOB SYSTEM_UI_SOURCE UI/SystemUI/*.cpp UI/SystemUI/*.h)
-
-if (NOT ATOMIC_BUILD_2D)
-  file (GLOB PHYSICS_SOURCE Physics/*.cpp Physics/*.h)
-  file (GLOB NAVIGATION_SOURCE Navigation/*.cpp Navigation/*.h)
-  file (GLOB ENVIRONMENT_SOURCE Environment/*.cpp Environment/*.h)
-endif()
-
+file (GLOB PHYSICS_SOURCE Physics/*.cpp Physics/*.h)
+file (GLOB NAVIGATION_SOURCE Navigation/*.cpp Navigation/*.h)
+file (GLOB ENVIRONMENT_SOURCE Environment/*.cpp Environment/*.h)
 file (GLOB GRAPHICS_SOURCE Graphics/*.cpp Graphics/*.h)
 
-if (MSVC)
-    if (ATOMIC_D3D11) #DirectX 11
-      file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D11/*.cpp Graphics/Direct3D11/*.h)
-    elseif (ATOMIC_OPENGL) #OpenGL
-	  file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
-	else() #DirectX 9
-      file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D9/*.cpp Graphics/Direct3D9/*.h)
+if (WIN32)
+    if (ATOMIC_D3D11) # DirectX 11
+        file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D11/*.cpp Graphics/Direct3D11/*.h)
+    elseif (ATOMIC_OPENGL) # OpenGL
+	    file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
+	else() # DirectX 9
+        file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D9/*.cpp Graphics/Direct3D9/*.h)
     endif()
 else()
-
-# for kNet
-    add_definitions (-DUNIX)
     file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
 endif()
 
-if (APPLE)
-    if (NOT IOS)
-        set (PLATFORM_SOURCE IO/MacFileWatcher.mm UI/UIDragDropMac.mm)
-    else()
-    endif()
+if (APPLE AND NOT IOS)
+    set (PLATFORM_SOURCE IO/MacFileWatcher.mm UI/UIDragDropMac.mm)
 endif()
 
 set (SOURCE_FILES ${CONTAINER_SOURCE} ${CORE_SOURCE} ${ENGINE_SOURCE} ${INPUT_SOURCE}
@@ -64,7 +48,7 @@ set (SOURCE_FILES ${CONTAINER_SOURCE} ${CORE_SOURCE} ${ENGINE_SOURCE} ${INPUT_SO
                   ${WEB_SOURCE} ${SCRIPT_SOURCE} ${METRICS_SOURCE}
                   ${PLATFORM_SOURCE})
 
-if (NOT EMSCRIPTEN)
+if (NOT WEB)
   set (SOURCE_FILES ${SOURCE_FILES} ${NETWORK_SOURCE} ${NAVIGATION_SOURCE})
 endif()
 
@@ -100,4 +84,122 @@ set (SOURCE_FILES ${SOURCE_FILES} BuildInfo/AtomicBuildInfo.cpp BuildInfo/Atomic
 
 add_library(Atomic ${SOURCE_FILES})
 
+include_directories (${CMAKE_CURRENT_SOURCE_DIR})
+target_include_directories(Atomic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../)
+target_link_libraries (Atomic Box2D Duktape TurboBadger FreeType JO LZ4 PugiXml STB SDL ASIO rapidjson WebSocketPP)
+target_compile_definitions (Atomic PUBLIC -DATOMIC_CXX11=1)
+if (ATOMIC_64BIT)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_64BIT=1)
+endif ()
+if (ANDROID)
+    target_link_libraries (Atomic dl log android GLESv1_CM GLESv2)
+    target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_ANDROID=1 -DGLEW_NO_GLU=1)
+elseif (APPLE)
+    if (IOS)
+        target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_IOS=1 -DIOS=1)
+    else () # MacOS
+        target_link_libraries (Atomic GLEW)
+        target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_OSX=1)
+    endif ()
+elseif (LINUX)
+    target_link_libraries (Atomic pthread GLEW GL dl)
+    target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_LINUX=1)
+elseif (WIN32)
+    option (ATOMIC_D3D11 "Use DirectX 11" ON)
+    option (ATOMIC_OPENGL "Use OpenGL" OFF)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_PLATFORM_WINDOWS=1)
+    target_link_libraries (Atomic user32 gdi32 winmm imm32 ole32 oleaut32 version uuid Ws2_32)
+    if (ATOMIC_D3D11) # DirectX 11
+        target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D11=1)
+        target_link_libraries (Atomic d3d11 d3dcompiler dxguid)
+    elseif(ATOMIC_OPENGL) # OpenGL
+        find_package(OpenGL REQUIRED)
+        include_directories (${OpenGL_INCLUDE_DIRS})
+        link_directories (${OpenGL_LIBRARY_DIRS})
+        target_compile_definitions (Atomic PRIVATE ${OpenGL_DEFINITIONS})
+        target_compile_definitions (Atomic PUBLIC -DGLEW_STATIC=1)
+        target_link_libraries (Atomic GLEW opengl32 glu32)
+    else() # DirectX 9
+        target_link_libraries (Atomic d3d9 d3dcompiler)
+        target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D9=1)
+        set (ATOMIC_D3D9 1)
+    endif()
+    target_link_libraries(Atomic MojoShader user32 gdi32 winmm imm32 ole32 oleaut32 version uuid Ws2_32)
+
+    # removes dependency on D3DCompiler dll for Atomic Direct3D9 builds which don't require it
+    # (binaries that never initialize the Direct3D9 graphics subsystem)
+    option (ATOMIC_D3D9SHADERCOMPILER_DISABLE "Remove D3DCompiler.dll dependency. Use for binaries that never initialize the Direct3D9 graphics subsystem." OFF)
+    if (ATOMIC_D3D9SHADERCOMPILER_DISABLE)
+        target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D9SHADERCOMPILER_DISABLE=1)
+    endif()
+elseif (WEB)
+    target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_WEB=1 -DNO_POPEN=1)
+endif ()
+
+if (ATOMIC_OPENGL)
+    target_compile_definitions(Atomic PUBLIC -DATOMIC_OPENGL=1)
+endif ()
+
+if (ATOMIC_DESKTOP)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_PLATFORM_DESKTOP=1)
+    target_link_libraries (Atomic libsquish)
+    if (NOT LINUX)
+        target_link_libraries (Atomic LibCpuId)
+    endif()
+    option (ATOMIC_FILEWATCHER "Enable file watcher" ON)
+    if (ATOMIC_FILEWATCHER)
+        target_compile_definitions(Atomic PUBLIC -DATOMIC_FILEWATCHER=1)
+    endif ()
+endif ()
+
+if (NOT WEB)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_THREADING=1 -DATOMIC_NETWORK=1 -DATOMIC_WEB=1)
+    target_link_libraries (Atomic libcurl Civetweb kNet)
+endif()
+
+option (ATOMIC_PROFILING "Enable profiler" ON)
+if (ATOMIC_PROFILING)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_PROFILING=1)
+endif ()
+
+option (ATOMIC_LOGGING "Enable logging" ON)
+if (ATOMIC_LOGGING)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_LOGGING=1)
+endif ()
+
+option (ATOMIC_2D_ONLY "Build only with 2D support" OFF)
+if (ATOMIC_2D_ONLY)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_ATOMIC2D=1)
+else ()
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_3D)
+
+    option (ATOMIC_ATOMIC2D "Enable 2D subsystem" ON)
+    if (ATOMIC_ATOMIC2D)
+        target_compile_definitions (Atomic PUBLIC -DATOMIC_ATOMIC2D=1)
+    endif ()
+
+    option (ATOMIC_PHYSICS "Enable physics subsystem" ON)
+    if (ATOMIC_PHYSICS)
+        target_compile_definitions (Atomic PUBLIC -DATOMIC_PHYSICS=1)
+        target_link_libraries (Atomic Bullet StanHull)
+    endif ()
+
+    option (ATOMIC_NAVIGATION "Enable navigation subsystem" ON)
+    if (ATOMIC_NAVIGATION)
+        target_compile_definitions (Atomic PUBLIC -DATOMIC_NAVIGATION=1)
+        target_link_libraries (Atomic Recast Detour DetourCrowd DetourTileCache)
+    endif ()
+endif ()
+
+# TODO: enable shared library builds.
+target_compile_definitions (Atomic PUBLIC -DATOMIC_STATIC_DEFINE=1 -DATOMIC_API=)
+if (NOT APPLE OR IOS OR WEB)
+    target_compile_definitions (Atomic PUBLIC -DATOMIC_TBUI=1)
+endif ()
+
+target_include_directories (Atomic PUBLIC
+    ${ATOMIC_SOURCE_DIR}/Source
+    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
+)
+
 include(AtomicDoc)

+ 4 - 7
Source/AtomicApp/CMakeLists.txt

@@ -1,11 +1,8 @@
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty )
-
 file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)
 
 add_library(AtomicApp ${SOURCE_FILES})
-
-add_dependencies(AtomicApp AtomicToolCheckScripts)
-
+target_link_libraries(AtomicApp Atomic)
+if (ATOMIC_DESKTOP)
+    add_dependencies(AtomicApp AtomicToolCheckScripts)
+endif ()
 GroupSources("Player")

+ 139 - 170
Source/AtomicEditor/CMakeLists.txt

@@ -1,202 +1,171 @@
-include_directories ( ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
-                      ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/rapidjson/include
-                      ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/kNet/include
-                      ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/FreeType/include
-                      ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/Box2D
-                      ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/nativefiledialog )
-
-file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)
+file(GLOB_RECURSE SOURCE_FILES *.cpp *.h)
 
 # Remove the web helper sources
 list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/WebView/WebProcessHelperMac.cpp)
-
-file (GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/Editor/*.cpp)
-
-set (SOURCE_FILES ${SOURCE_FILES} ${JAVASCRIPT_BINDINGS_SOURCE})
-
+file(GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/Editor/*.cpp)
+set(SOURCE_FILES ${SOURCE_FILES} ${JAVASCRIPT_BINDINGS_SOURCE})
 #set (SOURCE_FILES ${SOURCE_FILES} ${CSHARP_BINDINGS_SOURCE} ${CSHARPATOMICPLAYER_BINDINGS_SOURCE} ${CSHARPATOMICNET_BINDINGS_SOURCE})
 
 if (APPLE)
-
-    file (GLOB_RECURSE OBJC_FILES *.mm *.h)
-    set (SOURCE_FILES ${SOURCE_FILES} ${OBJC_FILES})
-
-    set (EXE_TYPE MACOSX_BUNDLE)
-
+    file(GLOB_RECURSE OBJC_FILES *.mm *.h)
+    set(SOURCE_FILES ${SOURCE_FILES} ${OBJC_FILES})
+    set(EXE_TYPE MACOSX_BUNDLE)
     #ICNS
     set(MACOSX_BUNDLE_ICON_FILE AtomicEditor.icns)
     set(ATOMIC_EDITOR_ICON ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/AtomicEditor.icns)
     set_source_files_properties(${ATOMIC_EDITOR_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
-
-else()
-
-    include_directories (${ATOMIC_SOURCE_DIR}/Source/ThirdParty/libcurl/include)
-    add_definitions(-DCURL_STATICLIB)
-
+else ()
     # We want a console for development builds
     if (${ATOMIC_DEV_BUILD} EQUAL 1)
-      add_definitions(-DATOMIC_WIN32_CONSOLE)
-    else()
-      set (EXE_TYPE WIN32)
-    endif()
-
-    set (SOURCE_FILES ${SOURCE_FILES} ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/Atomic.rc)
-
-endif(APPLE)
+        add_definitions(-DATOMIC_WIN32_CONSOLE)
+    else ()
+        set(EXE_TYPE WIN32)
+    endif ()
+    set(SOURCE_FILES ${SOURCE_FILES} ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/Atomic.rc)
+endif (APPLE)
 
 if (ATOMIC_WEBVIEW)
-
-# Target executable names.
-set(CEF_TARGET "AtomicEditor")
-if(OS_MACOSX)
-  set(CEF_HELPER_TARGET "AtomicEditor Helper")
-endif()
-
-# Logical target used to link the libcef library.
-ADD_LOGICAL_TARGET("libcef_lib" "${CEF_LIB_DEBUG}" "${CEF_LIB_RELEASE}")
-
-# Determine the target output directory.
-SET_CEF_TARGET_OUT_DIR()
-
-
-#
-# Windows configuration.
-#
-
-if(OS_WINDOWS)
-  # Executable target.
-  add_executable(${CEF_TARGET} ${EXE_TYPE} ${SOURCE_FILES})
-  add_dependencies(${CEF_TARGET} libcef_dll_wrapper)
-  SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_TARGET})
-  target_link_libraries(${CEF_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS})
-
-  if(USE_SANDBOX)
-    # Logical target used to link the cef_sandbox library.
-    ADD_LOGICAL_TARGET("cef_sandbox_lib" "${CEF_SANDBOX_LIB_DEBUG}" "${CEF_SANDBOX_LIB_RELEASE}")
-    target_link_libraries(${CEF_TARGET} cef_sandbox_lib ${CEF_SANDBOX_STANDARD_LIBS})
-  endif()
-
-  # Add the custom manifest files to the executable.
-  ADD_WINDOWS_MANIFEST("${CMAKE_CURRENT_SOURCE_DIR}/Windows" "${CEF_TARGET}")
-
-  # Copy binary and resource files to the target output directory.
-  COPY_FILES("${CEF_TARGET}" "${CEF_BINARY_FILES}" "${CEF_BINARY_DIR}" "${CEF_TARGET_OUT_DIR}")
-  COPY_FILES("${CEF_TARGET}" "${CEF_RESOURCE_FILES}" "${CEF_RESOURCE_DIR}" "${CEF_TARGET_OUT_DIR}")
-endif()
-
-#
-# Mac OS X configuration.
-#
-
-if(APPLE)
-  # Output paths for the app bundles.
-  set(CEF_APP "${CEF_TARGET_OUT_DIR}/${CEF_TARGET}.app")
-  set(CEF_HELPER_APP "${CEF_TARGET_OUT_DIR}/${CEF_HELPER_TARGET}.app")
-
-  # Variable referenced from Info.plist files.
-  set(PRODUCT_NAME "${CEF_TARGET}")
-
-  # Helper executable target.
-  add_executable(${CEF_HELPER_TARGET} MACOSX_BUNDLE "${CMAKE_CURRENT_SOURCE_DIR}/WebView/WebProcessHelperMac.cpp")
-  SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_HELPER_TARGET})
-  add_dependencies(${CEF_HELPER_TARGET} libcef_dll_wrapper)
-  target_link_libraries(${CEF_HELPER_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS} Atomic AtomicWebView ${ATOMIC_LINK_LIBRARIES})
-
-  set_target_properties(${CEF_HELPER_TARGET} PROPERTIES
-      MACOSX_BUNDLE_INFO_PLIST "${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/AtomicEditor-HelperInfo.plist.template"
-    )
-
-  # Fix the framework link in the helper executable.
-  FIX_MACOSX_HELPER_FRAMEWORK_LINK(${CEF_HELPER_TARGET} ${CEF_HELPER_APP})
-
-  # Main executable target.
-  add_executable(${CEF_TARGET} ${EXE_TYPE} ${SOURCE_FILES} ${ATOMIC_EDITOR_ICON})
-
-  SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_TARGET})
-  add_dependencies(${CEF_TARGET} libcef_dll_wrapper "${CEF_HELPER_TARGET}")
-  target_link_libraries(${CEF_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS})
-  set_target_properties(${CEF_TARGET} PROPERTIES
-    RESOURCE "${CEFSIMPLE_RESOURCES_SRCS}"
-    MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/mac/Info.plist
-    )
-
-  # Copy files into the main app bundle.
-  add_custom_command(
-    TARGET ${CEF_TARGET}
-    POST_BUILD
-    # Copy the helper app bundle into the Frameworks directory.
-    COMMAND ${CMAKE_COMMAND} -E copy_directory
+    # Target executable names.
+    set(CEF_TARGET "AtomicEditor")
+    if (OS_MACOSX)
+        set(CEF_HELPER_TARGET "AtomicEditor Helper")
+    endif ()
+
+    # Logical target used to link the libcef library.
+    ADD_LOGICAL_TARGET("libcef_lib" "${CEF_LIB_DEBUG}" "${CEF_LIB_RELEASE}")
+
+    # Determine the target output directory.
+    SET_CEF_TARGET_OUT_DIR()
+
+    #
+    # Windows configuration.
+    #
+    if (OS_WINDOWS)
+        # Executable target.
+        add_executable(${CEF_TARGET} ${EXE_TYPE} ${SOURCE_FILES})
+        add_dependencies(${CEF_TARGET} libcef_dll_wrapper)
+        SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_TARGET})
+        target_link_libraries(${CEF_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS})
+
+        if (USE_SANDBOX)
+            # Logical target used to link the cef_sandbox library.
+            ADD_LOGICAL_TARGET("cef_sandbox_lib" "${CEF_SANDBOX_LIB_DEBUG}" "${CEF_SANDBOX_LIB_RELEASE}")
+            target_link_libraries(${CEF_TARGET} cef_sandbox_lib ${CEF_SANDBOX_STANDARD_LIBS})
+        endif ()
+
+        # Add the custom manifest files to the executable.
+        ADD_WINDOWS_MANIFEST("${CMAKE_CURRENT_SOURCE_DIR}/Windows" "${CEF_TARGET}")
+
+        # Copy binary and resource files to the target output directory.
+        COPY_FILES("${CEF_TARGET}" "${CEF_BINARY_FILES}" "${CEF_BINARY_DIR}" "${CEF_TARGET_OUT_DIR}")
+        COPY_FILES("${CEF_TARGET}" "${CEF_RESOURCE_FILES}" "${CEF_RESOURCE_DIR}" "${CEF_TARGET_OUT_DIR}")
+    endif ()
+
+    #
+    # Mac OS X configuration.
+    #
+    if (APPLE)
+        # Output paths for the app bundles.
+        set(CEF_APP "${CEF_TARGET_OUT_DIR}/${CEF_TARGET}.app")
+        set(CEF_HELPER_APP "${CEF_TARGET_OUT_DIR}/${CEF_HELPER_TARGET}.app")
+
+        # Variable referenced from Info.plist files.
+        set(PRODUCT_NAME "${CEF_TARGET}")
+
+        # Helper executable target.
+        add_executable(${CEF_HELPER_TARGET} MACOSX_BUNDLE "${CMAKE_CURRENT_SOURCE_DIR}/WebView/WebProcessHelperMac.cpp")
+        SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_HELPER_TARGET})
+        add_dependencies(${CEF_HELPER_TARGET} libcef_dll_wrapper)
+        target_link_libraries(${CEF_HELPER_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS} Atomic AtomicWebView)
+
+        set_target_properties(${CEF_HELPER_TARGET} PROPERTIES
+            MACOSX_BUNDLE_INFO_PLIST "${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/AtomicEditor-HelperInfo.plist.template"
+        )
+
+        # Fix the framework link in the helper executable.
+        FIX_MACOSX_HELPER_FRAMEWORK_LINK(${CEF_HELPER_TARGET} ${CEF_HELPER_APP})
+
+        # Main executable target.
+        add_executable(${CEF_TARGET} ${EXE_TYPE} ${SOURCE_FILES} ${ATOMIC_EDITOR_ICON})
+
+        SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_TARGET})
+        add_dependencies(${CEF_TARGET} libcef_dll_wrapper "${CEF_HELPER_TARGET}")
+        target_link_libraries(${CEF_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS})
+        set_target_properties(${CEF_TARGET} PROPERTIES
+            RESOURCE "${CEFSIMPLE_RESOURCES_SRCS}"
+            MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/mac/Info.plist
+        )
+
+        # Copy files into the main app bundle.
+        add_custom_command(
+            TARGET ${CEF_TARGET}
+            POST_BUILD
+            # Copy the helper app bundle into the Frameworks directory.
+            COMMAND ${CMAKE_COMMAND} -E copy_directory
             "${CEF_HELPER_APP}"
             "${CEF_APP}/Contents/Frameworks/${CEF_HELPER_TARGET}.app"
-    # Copy the CEF framework into the Frameworks directory.
-    COMMAND ${CMAKE_COMMAND} -E copy_directory
+            # Copy the CEF framework into the Frameworks directory.
+            COMMAND ${CMAKE_COMMAND} -E copy_directory
             "${CEF_BINARY_DIR}/Chromium Embedded Framework.framework"
             "${CEF_APP}/Contents/Frameworks/Chromium Embedded Framework.framework"
-    VERBATIM
-    )
-
-  # Fix the framework link in the main executable.
-  FIX_MACOSX_MAIN_FRAMEWORK_LINK(${CEF_TARGET} ${CEF_APP})
-
-  if(NOT ${CMAKE_GENERATOR} STREQUAL "Xcode")
-    # Manually process and copy over resource files.
-    # The Xcode generator handles this via the set_target_properties RESOURCE directive.
-    set(PREFIXES "mac/")  # Remove these prefixes from input file paths.
-    COPY_MACOSX_RESOURCES("${CEFSIMPLE_RESOURCES_SRCS}" "${PREFIXES}" "${CEF_TARGET}" "${CMAKE_CURRENT_SOURCE_DIR}" "${CEF_APP}")
-  endif()
-endif(APPLE)
-
-if(OS_LINUX)
-  # Executable target.
-  add_executable(${CEF_TARGET} ${EXE_TYPE} ${SOURCE_FILES} ${ATOMIC_EDITOR_ICON})
-  SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_TARGET})
-  add_dependencies(${CEF_TARGET} libcef_dll_wrapper)
-
-  # Set rpath so that libraries can be placed next to the executable.
-  set_target_properties(${CEF_TARGET} PROPERTIES INSTALL_RPATH "$ORIGIN")
-  set_target_properties(${CEF_TARGET} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
-  set_target_properties(${CEF_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CEF_TARGET_OUT_DIR})
-
-  # Copy binary and resource files to the target output directory.
-  COPY_FILES("${CEF_TARGET}" "${CEF_BINARY_FILES}" "${CEF_BINARY_DIR}" "${CEF_TARGET_OUT_DIR}")
-  COPY_FILES("${CEF_TARGET}" "${CEF_RESOURCE_FILES}" "${CEF_RESOURCE_DIR}" "${CEF_TARGET_OUT_DIR}")
-
-  # Set SUID permissions on the chrome-sandbox target.
-  SET_LINUX_SUID_PERMISSIONS("${CEF_TARGET}" "${CEF_TARGET_OUT_DIR}/chrome-sandbox")
-endif()
-
-
-endif(ATOMIC_WEBVIEW)
-
-target_link_libraries(${CEF_TARGET} ToolCore AtomicApp AtomicWebView AtomicJS AtomicPlayerJS ToolCoreJS AtomicNETScriptBindings AtomicNETScript Poco nativefiledialog ${ATOMIC_LINK_LIBRARIES})
-
+            VERBATIM
+        )
+
+        # Fix the framework link in the main executable.
+        FIX_MACOSX_MAIN_FRAMEWORK_LINK(${CEF_TARGET} ${CEF_APP})
+
+        if (NOT ${CMAKE_GENERATOR} STREQUAL "Xcode")
+            # Manually process and copy over resource files.
+            # The Xcode generator handles this via the set_target_properties RESOURCE directive.
+            set(PREFIXES "mac/")  # Remove these prefixes from input file paths.
+            COPY_MACOSX_RESOURCES("${CEFSIMPLE_RESOURCES_SRCS}" "${PREFIXES}" "${CEF_TARGET}" "${CMAKE_CURRENT_SOURCE_DIR}" "${CEF_APP}")
+        endif ()
+    endif (APPLE)
+
+    if (OS_LINUX)
+        # Executable target.
+        add_executable(${CEF_TARGET} ${EXE_TYPE} ${SOURCE_FILES} ${ATOMIC_EDITOR_ICON})
+        SET_EXECUTABLE_TARGET_PROPERTIES(${CEF_TARGET})
+        add_dependencies(${CEF_TARGET} libcef_dll_wrapper)
+
+        # Set rpath so that libraries can be placed next to the executable.
+        set_target_properties(${CEF_TARGET} PROPERTIES INSTALL_RPATH "$ORIGIN")
+        set_target_properties(${CEF_TARGET} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)
+        set_target_properties(${CEF_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CEF_TARGET_OUT_DIR})
+
+        # Copy binary and resource files to the target output directory.
+        COPY_FILES("${CEF_TARGET}" "${CEF_BINARY_FILES}" "${CEF_BINARY_DIR}" "${CEF_TARGET_OUT_DIR}")
+        COPY_FILES("${CEF_TARGET}" "${CEF_RESOURCE_FILES}" "${CEF_RESOURCE_DIR}" "${CEF_TARGET_OUT_DIR}")
+
+        # Set SUID permissions on the chrome-sandbox target.
+        SET_LINUX_SUID_PERMISSIONS("${CEF_TARGET}" "${CEF_TARGET_OUT_DIR}/chrome-sandbox")
+    endif ()
+endif (ATOMIC_WEBVIEW)
+
+target_link_libraries(${CEF_TARGET} ToolCore AtomicApp AtomicWebView AtomicJS AtomicPlayerJS ToolCoreJS AtomicNETScriptBindings AtomicNETScript Poco nativefiledialog Atomic)
 
 if (APPLE)
-
-    set (TARGET_PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/AtomicEditorInfo.plist.template")
-    set (MACOSX_BUNDLE_GUI_IDENTIFIER "com.thunderbeastgames.atomiceditor")
-    set (MACOSX_BUNDLE_BUNDLE_NAME "AtomicEditor")
-
+    set(TARGET_PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/AtomicEditorInfo.plist.template")
+    set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.thunderbeastgames.atomiceditor")
+    set(MACOSX_BUNDLE_BUNDLE_NAME "AtomicEditor")
     target_link_libraries(AtomicEditor libcurl)
-
-elseif(LINUX)
+elseif (LINUX)
     target_link_libraries(AtomicEditor libcurl nativefiledialog ${GTK3_LIBRARIES})
     target_link_libraries(${CEF_TARGET} libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS})
-
-else()
+else ()
     target_link_libraries(AtomicEditor libcurl Iphlpapi Wldap32)
-
     # pre-Windows 8 can't count on D3DCompiler_47.dll being on system
-    add_custom_command (TARGET AtomicEditor POST_BUILD
-    COMMAND ${CMAKE_COMMAND}
-    ARGS -E copy_if_different \"${D3DCOMPILER_47_DLL}\" \"$<TARGET_FILE_DIR:AtomicEditor>/D3DCompiler_47.dll\")
-
-endif()
+    add_custom_command(TARGET AtomicEditor POST_BUILD
+        COMMAND ${CMAKE_COMMAND}
+        ARGS -E copy_if_different \"${D3DCOMPILER_47_DLL}\" \"$<TARGET_FILE_DIR:AtomicEditor>/D3DCompiler_47.dll\")
+endif ()
 
 if (TARGET_PROPERTIES)
-    set_target_properties (AtomicEditor PROPERTIES ${TARGET_PROPERTIES})
+    set_target_properties(AtomicEditor PROPERTIES ${TARGET_PROPERTIES})
 endif ()
 
+target_link_libraries(AtomicEditor Atomic)
+
 add_dependencies(${CEF_TARGET} AtomicToolCheckScripts)
 
 GroupSources("Application")

+ 5 - 10
Source/AtomicJS/CMakeLists.txt

@@ -1,16 +1,9 @@
 
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/rapidjson/include
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/kNet/include
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/FreeType/include
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/Box2D)
-
 file (GLOB JAVASCRIPT_SOURCE Javascript/*.cpp Javascript/*.h)
 
 GroupSources("Javascript")
 
-if (NOT MSVC)
+if (NOT WIN32)
     # for kNet
     add_definitions (-DUNIX)
 endif()
@@ -20,5 +13,7 @@ file (GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Sourc
 set (SOURCE_FILES ${JAVASCRIPT_SOURCE} ${JAVASCRIPT_BINDINGS_SOURCE})
 
 add_library(AtomicJS ${SOURCE_FILES})
-
-add_dependencies(AtomicJS AtomicToolCheckScripts)
+target_link_libraries(AtomicJS Atomic)
+if (ATOMIC_DESKTOP)
+    add_dependencies(AtomicJS AtomicToolCheckScripts)
+endif ()

+ 20 - 41
Source/AtomicNET/NETNative/CMakeLists.txt

@@ -1,10 +1,3 @@
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/rapidjson/include
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/kNet/include
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/FreeType/include
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/Box2D)
-
 # TODO: Look into the application-extension flag for iOS
 #if (IOS)
 #    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fapplication-extension")
@@ -21,52 +14,43 @@ file (GLOB CSHARP_BINDINGS_SOURCE ${CSATOMICDIR}/Atomic/Native/*.cpp ${CSATOMICD
 
 file (GLOB SOURCE_FILES *.cpp *.h)
 
-if (NOT IOS AND NOT ANDROID AND NOT EMSCRIPTEN)
+if (NOT IOS AND NOT ANDROID AND NOT WEB)
     file (GLOB DESKTOP_SOURCE_FILES Desktop/*.cpp Desktop/*.h)
     set (SOURCE_FILES ${SOURCE_FILES} ${DESKTOP_SOURCE_FILES})
 endif()
 
 if (ANDROID)
-	include_directories(${ATOMIC_SOURCE_DIR}/Source/ThirdParty/SDL/include)
 	set (SOURCE_FILES ${SOURCE_FILES} ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
 endif()
 
 add_library(AtomicNETNative SHARED ${SOURCE_FILES} ${CSHARP_BINDINGS_SOURCE})
-
-add_dependencies(AtomicNETNative AtomicToolCheckScripts)
-
-target_link_libraries(AtomicNETNative AtomicApp AtomicNETScriptBindings AtomicNETScript AtomicJS AtomicPlayerLib AtomicPlayerJS ${ATOMIC_LINK_LIBRARIES})
+if (ATOMIC_DESKTOP)
+    add_dependencies(AtomicNETNative AtomicToolCheckScripts)
+endif ()
+target_link_libraries(AtomicNETNative AtomicApp AtomicNETScriptBindings AtomicNETScript AtomicJS AtomicPlayerLib AtomicPlayerJS Atomic)
+target_include_directories(AtomicNETNative PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
 
 if (LINUX)
-
-#https://github.com/nothings/stb/issues/280
-target_link_libraries(AtomicNETNative gcc_s gcc)
-
+    #https://github.com/nothings/stb/issues/280
+    target_link_libraries(AtomicNETNative gcc_s gcc)
 endif()
 
 if (APPLE)
-
     if (NOT IOS)
-
         target_link_libraries( AtomicNETNative "-stdlib=libc++ -framework AudioUnit -framework Carbon -framework Cocoa -framework CoreAudio -framework CoreVideo -framework ForceFeedback -framework IOKit -framework OpenGL -framework CoreServices -framework Security")
-
     else()
-
         set_target_properties(AtomicNETNative PROPERTIES
-          FRAMEWORK TRUE
-          MACOSX_FRAMEWORK_IDENTIFIER com.atomicgameengine.atomicnetframework
-          MACOSX_FRAMEWORK_INFO_PLIST ${ATOMIC_SOURCE_DIR}/Build/CMake/IOS/AtomicNET.framework.plist
-          # PUBLIC_HEADER dynamicFramework.h
-          XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
+            FRAMEWORK TRUE
+            MACOSX_FRAMEWORK_IDENTIFIER com.atomicgameengine.atomicnetframework
+            MACOSX_FRAMEWORK_INFO_PLIST ${ATOMIC_SOURCE_DIR}/Build/CMake/IOS/AtomicNET.framework.plist
+            # PUBLIC_HEADER dynamicFramework.h
+            XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
         )
-
         target_link_libraries( AtomicNETNative "-framework AudioToolbox -framework CoreAudio -framework CoreGraphics -framework Foundation -framework OpenGLES -framework QuartzCore -framework UIKit -framework CoreMotion -framework GameController")
-
     endif()
-
 endif()
 
-if (MSVC)
+if (WIN32)
     set (ATOMICNET_NATIVE_PLATFORM Windows)
 elseif(APPLE)
     if (IOS)
@@ -75,7 +59,7 @@ elseif(APPLE)
         set (ATOMICNET_NATIVE_PLATFORM Mac)
     endif()
 elseif(LINUX)
-  set (ATOMICNET_NATIVE_PLATFORM Linux)
+    set (ATOMICNET_NATIVE_PLATFORM Linux)
 elseif(ANDROID)
     set (ATOMICNET_NATIVE_PLATFORM Android)
 endif()
@@ -83,21 +67,16 @@ endif()
 set (ATOMICNET_NATIVE_DIR "${ATOMIC_SOURCE_DIR}/Artifacts/AtomicNET/$<$<CONFIG:debug>:Debug>$<$<CONFIG:release>:Release>/Native/${ATOMICNET_NATIVE_PLATFORM}")
 
 if (NOT IOS)
-
-add_custom_command( TARGET AtomicNETNative POST_BUILD
-                    COMMAND "${CMAKE_COMMAND}" ARGS -E make_directory "\"${ATOMICNET_NATIVE_DIR}\""
-                    COMMAND "${CMAKE_COMMAND}" ARGS -E copy_if_different \"$<TARGET_FILE:AtomicNETNative>\" "\"${ATOMICNET_NATIVE_DIR}\"" )
-
+    add_custom_command( TARGET AtomicNETNative POST_BUILD
+                        COMMAND "${CMAKE_COMMAND}" ARGS -E make_directory "\"${ATOMICNET_NATIVE_DIR}\""
+                        COMMAND "${CMAKE_COMMAND}" ARGS -E copy_if_different \"$<TARGET_FILE:AtomicNETNative>\" "\"${ATOMICNET_NATIVE_DIR}\"" )
 else()
-
     # See BuildIOS.js for handling of the AtomicNETNative framework, including install_name_tool modification, etc
     # Handling it here was causing issues with certain builds of XCode and where it thought the TARGET_FILE was...
-
 endif()
 
-if (MSVC)
-
+if (WIN32)
     # Copy the D3D shader compiler (for pre-Windows 8)
     add_custom_command( TARGET AtomicNETNative POST_BUILD
                         COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"${D3DCOMPILER_47_DLL}\" \"${ATOMICNET_NATIVE_DIR}/D3DCompiler_47.dll\" )
-endif(MSVC)
+endif(WIN32)

+ 5 - 6
Source/AtomicNET/NETScript/CMakeLists.txt

@@ -1,6 +1,3 @@
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}
-                    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty)
-
 set (CSATOMICNETSCRIPTNATIVEDIR "${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/CSharp/Packages/AtomicNETScript/Native")
 set (JSATOMICNETSCRIPTDIR "${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/AtomicNETScript")
 
@@ -10,7 +7,9 @@ file ( GLOB ATOMICNETSCRIPT_BINDINGS_SOURCE ${CSATOMICNETSCRIPTNATIVEDIR}/*.cpp
 file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)
 
 add_library(AtomicNETScript ${SOURCE_FILES})
-
+target_link_libraries(AtomicNETScript Atomic)
 add_library(AtomicNETScriptBindings ${ATOMICNETSCRIPT_BINDINGS_SOURCE})
-
-add_dependencies(AtomicNETScriptBindings AtomicToolCheckScripts)
+target_link_libraries(AtomicNETScriptBindings Atomic)
+if (ATOMIC_DESKTOP)
+    add_dependencies(AtomicNETScriptBindings AtomicToolCheckScripts)
+endif ()

+ 4 - 13
Source/AtomicPlayer/Application/CMakeLists.txt

@@ -1,17 +1,9 @@
-
-include_directories(${ATOMIC_SOURCE_DIR}/Source)
-include_directories ( ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
-                              ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/rapidjson/include
-                              ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/kNet/include
-                              ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/FreeType/include
-                              ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/Box2D )
-
 # Define source files
 file (GLOB SOURCE_FILES *.cpp *.h )
 
 # set (SOURCE_FILES ${SOURCE_FILES}) ${CSHARP_BINDINGS_SOURCE} ${CSHARPATOMICPLAYER_BINDINGS_SOURCE}  ${CSHARPATOMICNET_BINDINGS_SOURCE})
 
-if (MSVC)
+if (WIN32)
     set (EXE_TYPE WIN32)
     set (SOURCE_FILES ${SOURCE_FILES} ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/Atomic.rc)
 elseif(APPLE)
@@ -25,7 +17,6 @@ endif()
 endif()
 
 if (ANDROID)
-	include_directories(${ATOMIC_SOURCE_DIR}/Source/ThirdParty/SDL/include)
 	add_library(AtomicPlayer SHARED ${SOURCE_FILES} ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
 else()
 
@@ -36,16 +27,16 @@ endif()
 endif()
 
 if (NOT IOS)
-target_link_libraries(AtomicPlayer AtomicJS AtomicPlayerLib AtomicPlayerJS ${ATOMIC_LINK_LIBRARIES})
+    target_link_libraries(AtomicPlayer AtomicJS AtomicPlayerLib AtomicPlayerJS Atomic)
 endif()
 
-if (MSVC)
+if (WIN32)
   # pre-Windows 8 can't count on D3DCompiler_47.dll being on system
   add_custom_command (TARGET AtomicPlayer POST_BUILD
   COMMAND ${CMAKE_COMMAND}
   ARGS -E copy_if_different \"${D3DCOMPILER_47_DLL}\" \"$<TARGET_FILE_DIR:AtomicPlayer>/D3DCompiler_47.dll\")
 
-endif(MSVC)
+endif(WIN32)
 
 
 if (APPLE)

+ 1 - 5
Source/AtomicPlayer/CMakeLists.txt

@@ -1,9 +1,5 @@
-include_directories (${ATOMIC_SOURCE_DIR}/Source/ThirdParty/rapidjson/include
-                     ${ATOMIC_SOURCE_DIR}/Source/ThirdParty )
-
-
 file (GLOB SOURCE_FILES *.cpp *.h)
 
 add_library(AtomicPlayerLib ${SOURCE_FILES})
-
+target_link_libraries(AtomicPlayerLib Atomic)
 add_subdirectory(Application)

+ 3 - 1
Source/AtomicPlayerJS/CMakeLists.txt

@@ -10,4 +10,6 @@ add_library(AtomicPlayerJS ${SOURCE_FILES})
 
 target_link_libraries(AtomicPlayerJS AtomicPlayerLib)
 
-add_dependencies(AtomicPlayerJS AtomicToolCheckScripts)
+if (ATOMIC_DESKTOP)
+    add_dependencies(AtomicPlayerJS AtomicToolCheckScripts)
+endif ()

+ 8 - 9
Source/AtomicTool/CMakeLists.txt

@@ -1,18 +1,17 @@
 set (ATOMIC_TOOL_SOURCES AtomicTool.cpp AtomicTool.h)
 
-if (MSVC)
+if (WIN32)
     add_definitions(-DATOMIC_WIN32_CONSOLE)
-endif(MSVC)
+endif(WIN32)
 
 add_executable(AtomicTool ${ATOMIC_TOOL_SOURCES})
 
-target_link_libraries(AtomicTool ToolCore AtomicNETScript Poco ${ATOMIC_LINK_LIBRARIES})
+target_link_libraries(AtomicTool ToolCore AtomicNETScript Poco Atomic)
 
-if (MSVC)
-    target_link_libraries(AtomicTool libcurl Iphlpapi Wldap32)
-else()
-    target_link_libraries(AtomicTool libcurl)
+if (WIN32)
+    target_link_libraries(AtomicTool Iphlpapi Wldap32)
 endif()
+target_link_libraries(AtomicTool libcurl)
 
 # Custom target which is always considered out of date, checks for zero size/missing script bindings and generates
 add_custom_target( AtomicToolCheckScripts
@@ -31,7 +30,7 @@ add_custom_command( TARGET AtomicTool POST_BUILD
                     ARGS -E copy_if_different \"$<TARGET_FILE:AtomicTool>\" \"${ATOMIC_SOURCE_DIR}/Artifacts/Build/AtomicTool/\"
                     COMMENT "Copying AtomicTool to Build Artifacts" )
 
-if (MSVC)
+if (WIN32)
 
 # Copy the D3D shader compiler (for pre-Windows 8)
 add_custom_command( TARGET AtomicTool POST_BUILD
@@ -42,7 +41,7 @@ add_custom_command( TARGET AtomicTool POST_BUILD
                     COMMAND ${CMAKE_COMMAND}
                     ARGS -E copy_if_different \"${D3DCOMPILER_47_DLL}\" \"${ATOMIC_SOURCE_DIR}/Artifacts/Build/AtomicTool/D3DCompiler_47.dll\"
                     COMMENT "Copying D3DShader compiler to Build Artifacts" )
-endif(MSVC)
+endif(WIN32)
 
 add_custom_target ( GenerateScriptBindings
                     WORKING_DIRECTORY "${ATOMIC_SOURCE_DIR}"

+ 1 - 3
Source/AtomicWebView/CMakeLists.txt

@@ -1,6 +1,4 @@
 
-include_directories (${ATOMIC_SOURCE_DIR}/Source/ThirdParty/)
-
 file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)
 
 file (GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/WebView/*.cpp)
@@ -12,5 +10,5 @@ endif()
 set (SOURCE_FILES ${SOURCE_FILES} ${JAVASCRIPT_BINDINGS_SOURCE} ${PLATFORM_SOURCE} )
 
 add_library(AtomicWebView ${SOURCE_FILES})
-
+target_link_libraries(AtomicWebView Atomic)
 add_dependencies(AtomicWebView AtomicToolCheckScripts)

+ 23 - 16
Source/CMakeLists.txt

@@ -1,30 +1,37 @@
-
-include_directories_exported(${CMAKE_CURRENT_SOURCE_DIR})
+option(ATOMIC_JAVASCRIPT "Build JS Bindings" ON)
+option(ATOMIC_DOTNET "Build .NET Bindings" ON)
+option(ATOMIC_EDITOR "Build Editor" ON)
 
 add_subdirectory(ThirdParty)
 add_subdirectory(Atomic)
-add_subdirectory(AtomicJS)
+add_subdirectory(AtomicPlayer)
 
+if (ATOMIC_JAVASCRIPT)
+    add_subdirectory(AtomicJS)
+    add_subdirectory(AtomicPlayerJS)
+endif ()
 
 if (ATOMIC_WEBVIEW)
     add_subdirectory(AtomicWebView)
-endif()
-
-add_subdirectory(AtomicPlayer)
-add_subdirectory(AtomicPlayerJS)
+endif ()
 
-if (NOT EMSCRIPTEN)
+if (NOT WEB)
     add_subdirectory(AtomicApp)
-    add_subdirectory(AtomicNET)
-endif()
+    if (ATOMIC_DOTNET)
+        add_subdirectory(AtomicNET)
+    endif ()
+endif ()
 
-if (NOT IOS AND NOT ANDROID AND NOT EMSCRIPTEN)
-    add_subdirectory(ToolCore)
-    add_subdirectory(ToolCoreJS)
-    add_subdirectory(AtomicEditor)
+if (ATOMIC_DESKTOP)
     add_subdirectory(AtomicTool)
     add_subdirectory(Tools)
-endif()
-
+    add_subdirectory(ToolCore)
+    if (ATOMIC_JAVASCRIPT)
+        add_subdirectory(ToolCoreJS)
+    endif ()
+    if (ATOMIC_WEBVIEW AND ATOMIC_EDITOR)
+        add_subdirectory(AtomicEditor)
+    endif ()
+endif ()
 
 include(AtomicDocList)

+ 23 - 0
Source/ThirdParty/ASIO/CMakeLists.txt

@@ -0,0 +1,23 @@
+#
+# Portions Copyright (c) 2017 the Atomic project.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+add_library (ASIO INTERFACE)
+target_include_directories(ASIO SYSTEM BEFORE INTERFACE include)

+ 22 - 0
Source/ThirdParty/ASIO/INTERFACE.cpp

@@ -0,0 +1,22 @@
+/*
+ * Portions Copyright (c) 2017 the Atomic project.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+// This is a dummy c++ file meant to fool old CMake into building header-only library.

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

@@ -761,4 +761,7 @@ ENDIF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
 
 set (TARGET_NAME Assimp)
 list (APPEND TARGET_PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH YES)   # Since we only build AssetImporter as a single-arch native tool, there is no point to build Assimp as universal binary library
+# ATOMIC BEGIN
+set (INCLUDE_DIRS include)
+# ATOMIC END
 setup_library ()

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

@@ -184,6 +184,3 @@ set (INCLUDE_DIRS .)
 
 # Setup target
 setup_library ()
-
-# Install headers for building and using the Urho3D library (install dependency for Urho3D/Urho2D/PhysicsWorld2D.h and Urho3D/Urho2D/RigidBody2D.h)
-install_header_files (DIRECTORY Box2D DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty FILES_MATCHING PATTERN *.h)

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

@@ -45,6 +45,3 @@ set (INCLUDE_DIRS src)
 
 # Setup target
 setup_library ()
-
-# Install headers for building and using the Urho3D library (install dependency for Urho3D/Physics/PhysicsWorld.h, Urho3D/Physics/RigidBody.h, and Urho3D/Physics/PhysicsUtils.h)
-install_header_files (DIRECTORY src/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/Bullet FILES_MATCHING PATTERN *.h)  # Note: the trailing slash is significant

+ 47 - 20
Source/ThirdParty/CMakeLists.txt

@@ -1,3 +1,34 @@
+#
+# Portions Copyright (c) 2017 the Atomic project.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+
+# When porting build scripts of third party libs please be aware:
+# * Atomic removed all instances of `install_header_files()` macro calls. Do not bring them back.
+# * Atomic added extra `set (INCLUDE_DIRS ...)`. Do not remove them.
+# * Atomic added extra `target_link_libraries(...)`. Do not remove them.
+# * Atomic added extra `target_compile_definitions(...)`. Do not remove them.
+# * Atomic added extra `target_include_directories(...)`. Do not remove them.
+# * If file contains a license with copyright attributed to Atomic project - this file is written and maintained by
+#   Atomic team and should not be synced with upstream.
+# Changes should be marked with "ATOMIC BEGIN|END" or "ATOMIC FIX" comments.
 
 add_subdirectory(Box2D)
 add_subdirectory(Duktape)
@@ -9,16 +40,6 @@ add_subdirectory(STB)
 add_subdirectory(TurboBadger)
 add_subdirectory(zlib)
 
-include_directories_exported(
-    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
-    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/WebSocketPP/include
-    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/rapidjson/include
-    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/libcurl/include
-    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/kNet/include
-    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/FreeType/include
-    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/Box2D
-    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/ASIO/include)
-
 if (NOT ATOMIC_BUILD_2D)
     add_subdirectory(Bullet)
     add_subdirectory(StanHull)
@@ -26,20 +47,22 @@ endif()
 
 add_subdirectory(SDL)
 
-if (NOT EMSCRIPTEN)
-    add_subdirectory(Recast)
+add_subdirectory(Recast)
+add_subdirectory(Detour)
+add_subdirectory(DetourCrowd)
+add_subdirectory(DetourTileCache)
+
+if (NOT WEB)
     add_subdirectory(Civetweb)
-    add_subdirectory(Detour)
-    add_subdirectory(DetourCrowd)
-    add_subdirectory(DetourTileCache)
     add_subdirectory(kNet)
-if (NOT MSVC)
-    add_subdirectory(openssl)
-endif()
+    if (NOT WIN32)
+        add_subdirectory(openssl)
+    endif()
+    set (CURL_STATICLIB 1)
     add_subdirectory(libcurl)
 endif()
 
-if (NOT IOS AND NOT ANDROID AND NOT EMSCRIPTEN)
+if (NOT IOS AND NOT ANDROID AND NOT WEB)
     add_subdirectory(Assimp)
     if (NOT LINUX)
         add_subdirectory(LibCpuId)
@@ -54,6 +77,10 @@ if (LINUX OR APPLE OR ATOMIC_OPENGL AND NOT IOS)
     add_subdirectory(GLEW)
 endif()
 
-if (MSVC)
+if (WIN32)
     add_subdirectory(MojoShader)
 endif()
+
+add_subdirectory(ASIO)
+add_subdirectory(rapidjson)
+add_subdirectory(WebSocketPP)

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

@@ -44,6 +44,3 @@ set (INCLUDE_DIRS include)
 
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY include/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/Civetweb FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

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

@@ -31,6 +31,3 @@ set (INCLUDE_DIRS include)
 
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY include/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/Detour FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

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

@@ -31,6 +31,3 @@ set (INCLUDE_DIRS include ../Detour/include)
 
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY include/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/DetourCrowd FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

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

@@ -31,6 +31,3 @@ set (INCLUDE_DIRS include ../Detour/include)
 
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY include/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/DetourTileCache FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

+ 2 - 2
Source/ThirdParty/Duktape/CMakeLists.txt

@@ -5,5 +5,5 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 file (GLOB CPP_FILES *.c)
 file (GLOB H_FILES *.h)
 set (SOURCE_FILES ${CPP_FILES} ${H_FILES})
-
-add_library(Duktape ${SOURCE_FILES})
+set (INCLUDE_DIRS .)
+add_library(Duktape ${SOURCE_FILES})

+ 0 - 4
Source/ThirdParty/FreeType/CMakeLists.txt

@@ -78,7 +78,3 @@ set (INCLUDE_DIRS include)
 
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY include/freetype DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)
-install_header_files (FILES include/ft2build.h DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)

+ 5 - 2
Source/ThirdParty/GLEW/CMakeLists.txt

@@ -32,5 +32,8 @@ set (INCLUDE_DIRS .)
 # Setup target
 setup_library ()
 
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY ./ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/GLEW FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant
+# ATOMIC BEGIN
+if (ANDROID)
+    target_compile_definitions(GLEW PUBLIC -DGLEW_NO_GLU)
+endif ()
+# ATOMIC END

+ 4 - 3
Source/ThirdParty/JO/CMakeLists.txt

@@ -26,8 +26,9 @@ set (TARGET_NAME JO)
 # Define source files
 define_source_files ()
 
+# ATOMIC BEGIN
+set (INCLUDE_DIRS .)
+# ATOMIC END
+
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY ./ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/JO FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

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

@@ -26,8 +26,9 @@ set (TARGET_NAME LZ4)
 # Define source files
 define_source_files (GLOB_CPP_PATTERNS *.c)
 
+# ATOMIC BEGIN
+set (INCLUDE_DIRS .)
+# ATOMIC END
+
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY ./ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/LZ4 FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

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

@@ -42,6 +42,3 @@ set (INCLUDE_DIRS src)
 
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY src/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/LibCpuId FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

+ 4 - 3
Source/ThirdParty/MojoShader/CMakeLists.txt

@@ -30,8 +30,9 @@ if (MSVC)
     add_definitions (-D_CRT_SECURE_NO_WARNINGS=1 -TP)
 endif (MSVC)
 
+# ATOMIC BEGIN
+set (INCLUDE_DIRS .)
+# ATOMIC END
+
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY ./ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/MojoShader FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

+ 3 - 10
Source/ThirdParty/Mustache/CMakeLists.txt

@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2008-2016 the Urho3D project.
+# Copyright (c) 2017 the Atomic project.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -20,12 +20,5 @@
 # THE SOFTWARE.
 #
 
-# Define target name
-set (TARGET_NAME Mustache)
-
-# Setup target
-add_custom_target (${TARGET_NAME} ALL)   # Dummy target just so that its post-build step can install headers to the build tree
-set (STATIC_LIBRARY_TARGETS ${STATIC_LIBRARY_TARGETS} ${TARGET_NAME} PARENT_SCOPE)
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY ./ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/Mustache FILES_MATCHING PATTERN *.hpp USE_FILE_SYMLINK BUILD_TREE_ONLY)
+add_library(Mustache INTERFACE)
+target_include_directories(Mustache SYSTEM BEFORE INTERFACE .)

+ 22 - 0
Source/ThirdParty/Mustache/INTERFACE.cpp

@@ -0,0 +1,22 @@
+/*
+ * Portions Copyright (c) 2017 the Atomic project.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+// This is a dummy c++ file meant to fool old CMake into building header-only library.

+ 6 - 2
Source/ThirdParty/Poco/CMakeLists.txt

@@ -1,6 +1,5 @@
 
 add_definitions(-DHAVE_STDINT_H )
-
 set (SOURCE_FILES
     Foundation/src/Pipe.cpp
     Foundation/src/Process.cpp
@@ -178,9 +177,14 @@ set (SOURCE_FILES
     Foundation/src/trees.c
     Foundation/src/zutil.c )
 
-if (MSVC)
+if (WIN32)  # ATOMIC FIX
     # Add windows registry key from Utils
     set (SOURCE_FILES ${SOURCE_FILES} Foundation/src/WinRegistryKey.cpp )
 endif()
 
 add_library(Poco ${SOURCE_FILES})
+
+# ATOMIC BEGIN
+target_compile_definitions(Poco PUBLIC -DPOCO_NO_AUTOMATIC_LIBS=1 -DPOCO_STATIC=1)
+target_include_directories(Poco SYSTEM BEFORE PUBLIC Foundation/include)
+# ATOMIC END

+ 4 - 3
Source/ThirdParty/PugiXml/CMakeLists.txt

@@ -26,8 +26,9 @@ set (TARGET_NAME PugiXml)
 # Define source files
 define_source_files (GLOB_CPP_PATTERNS src/*.cpp GLOB_H_PATTERNS src/*.hpp)
 
+# ATOMIC BEGIN
+set (INCLUDE_DIRS src)
+# ATOMIC END
+
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY src/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/PugiXml FILES_MATCHING PATTERN *.hpp BUILD_TREE_ONLY)  # Note: the trailing slash is significant

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

@@ -31,6 +31,3 @@ set (INCLUDE_DIRS include)
 
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY include/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/Recast FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

+ 7 - 9
Source/ThirdParty/SDL/CMakeLists.txt

@@ -211,6 +211,13 @@ add_definitions(-DUSING_GENERATED_CONFIG_H)
 # Urho3D - use 'generated' path suffix for generated config header file, the suffic prevents overwriting the header file with the same name in the source tree in case of non out-of-source build tree is being used
 set (INCLUDE_DIRS ${SDL2_BINARY_DIR}/include/generated ${SDL2_SOURCE_DIR}/include)
 
+# ATOMIC BEGIN
+# Install dependency for SDL_android_main.c
+if (ANDROID)
+  list (APPEND INCLUDE_DIRS src/main/android src src/dynapi)
+endif ()
+# ATOMIC END
+
 # All these ENABLED_BY_DEFAULT vars will default to ON if not specified, so
 #  you only need to have a platform override them if they are disabling.
 # Urho3D - bug fix - commented out double initialization of the OPT_DEF_ASM variable, it has been initialized properly in "Compiler info" section above
@@ -1387,12 +1394,3 @@ set (TARGET_NAME SDL)
 # Setup target as STATIC library (as the result we never use EXTRA_LDFLAGS linker flags)
 setup_library ()
 
-# Install headers for building and using the Urho3D library (install dependency for InputEvents.h)
-install_header_files (DIRECTORY include/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/SDL FILES_MATCHING PATTERN *.h USE_FILE_SYMLINK)    # Note: the trailing slash is significant
-install_header_files (FILES ${SDL2_BINARY_DIR}/include/generated/SDL_config.h DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/SDL)
-# Install dependency for SDL_android_main.c
-if (ANDROID)
-  install_header_files (DIRECTORY src/main/android DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/SDL)
-  install_header_files (FILES src/SDL_internal.h DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/SDL)
-  install_header_files (DIRECTORY src/dynapi DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/SDL FILES_MATCHING PATTERN *.h)
-endif ()

+ 1 - 1
Source/ThirdParty/SDL/cmake/sdlchecks.cmake

@@ -84,7 +84,7 @@ macro(CheckDLOPEN)
            #include <dlfcn.h>
            int main(int argc, char **argv) {
              void *handle = dlopen(\"\", RTLD_NOW);
-             const char *loaderror = (char *) dlerror();
+             // ATOMIC FIX: const char *loaderror = (char *) dlerror();
            }" HAVE_DLOPEN)
         set(CMAKE_REQUIRED_LIBRARIES)
       endif()

+ 4 - 3
Source/ThirdParty/SQLite/CMakeLists.txt

@@ -33,12 +33,13 @@ endif ()
 # Define source files
 set (SOURCE_FILES src/sqlite3.c)
 
+# ATOMIC BEGIN
+set (INCLUDE_DIRS src)
+# ATOMIC END
+
 # Setup target
 setup_library ()
 
-# Install headers for building and using the Urho3D library
-install_header_files (DIRECTORY src/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/SQLite FILES_MATCHING PATTERN *.h)  # Note: the trailing slash is significant
-
 # Setup additional SQLite CLI standalone target (this target can be transfered and executed on an embedded device, such as Raspberry Pi and Android)
 if (NOT IOS AND NOT WEB)
     # Define target name for SQLite shell

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

@@ -26,8 +26,9 @@ set (TARGET_NAME STB)
 # Define source files
 define_source_files (GLOB_CPP_PATTERNS *.c *.cpp *.h)
 
+# ATOMIC BEGIN
+set (INCLUDE_DIRS . ${CMAKE_CURRENT_SOURCE_DIR}/../..)
+# ATOMIC END
+
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY ./ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/STB FILES_MATCHING PATTERN *.h USE_FILE_SYMLINK BUILD_TREE_ONLY)  # Note: the trailing slash is significant

+ 4 - 3
Source/ThirdParty/StanHull/CMakeLists.txt

@@ -26,8 +26,9 @@ set (TARGET_NAME StanHull)
 # Define source files
 define_source_files ()
 
+# ATOMIC BEGIN
+set (INCLUDE_DIRS .)
+# ATOMIC END
+
 # Setup target
 setup_library ()
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY ./ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/StanHull FILES_MATCHING PATTERN *.h BUILD_TREE_ONLY)  # Note: the trailing slash is significant

+ 1 - 0
Source/ThirdParty/TurboBadger/CMakeLists.txt

@@ -15,3 +15,4 @@ file (GLOB H_FILES *.h image/*.h animation/*.h parser/*.h renderers/*.h utf8/*.h
 set (SOURCE_FILES ${C_FILES} ${H_FILES})
 
 add_library(TurboBadger ${SOURCE_FILES})
+target_include_directories(TurboBadger SYSTEM BEFORE PUBLIC .)

+ 23 - 0
Source/ThirdParty/WebSocketPP/CMakeLists.txt

@@ -0,0 +1,23 @@
+#
+# Portions Copyright (c) 2017 the Atomic project.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+add_library(WebSocketPP INTERFACE)
+target_include_directories(WebSocketPP SYSTEM BEFORE INTERFACE include)

+ 22 - 0
Source/ThirdParty/WebSocketPP/INTERFACE.cpp

@@ -0,0 +1,22 @@
+/*
+ * Portions Copyright (c) 2017 the Atomic project.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+// This is a dummy c++ file meant to fool old CMake into building header-only library.

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

@@ -64,7 +64,8 @@ set (INCLUDE_DIRS include)
 # Setup target
 setup_library ()
 
-# Install headers for building and using the Urho3D library (install dependency for Urho3D/Network/Connection.h and Urho3D/Network/Network.h)
-install_header_files (DIRECTORY include/kNet/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/kNet FILES_MATCHING PATTERN *.h *.inl USE_FILE_SYMLINK)     # Note: the trailing slash is significant
-file (GLOB kNetHeaderFiles include/*.h)
-install_header_files (FILES ${kNetHeaderFiles} DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/kNet)
+# ATOMIC BEGIN
+if (UNIX)
+   target_compile_definitions(${TARGET_NAME} PUBLIC  -DKNET_UNIX)
+endif ()
+# ATOMIC END

+ 1 - 1
Source/ThirdParty/libcurl/CMakeLists.txt

@@ -1,5 +1,5 @@
 
-if (MSVC)
+if (WIN32)
     include(LibCurlWindows.cmake)
 else()
     include(LibCurl.cmake)

+ 1 - 1
Source/ThirdParty/libcurl/LibCurl.cmake

@@ -95,7 +95,7 @@ if(BUILD_DASHBOARD_REPORTS)
   include(CTest)
 endif(BUILD_DASHBOARD_REPORTS)
 
-if(MSVC)
+if(WIN32)
   option(BUILD_RELEASE_DEBUG_DIRS "Set OFF to build each configuration to a separate directory" OFF)
   mark_as_advanced(BUILD_RELEASE_DEBUG_DIRS)
 endif()

+ 17 - 18
Source/ThirdParty/libcurl/LibCurlWindows.cmake

@@ -1,18 +1,4 @@
-
-include_directories(${ATOMIC_SOURCE_DIR}/Source/ThirdParty/zlib)
-
-if (ATOMIC_PROJECT_ARCH STREQUAL "x86")
-  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/curl/windows/32bit)
-else()
-  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/curl/windows/64bit)
-endif()
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/lib)
-
-add_definitions(-DBUILDING_LIBCURL -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_WIN32_WINNT=0x0501)
-add_definitions(-DUSE_SCHANNEL -DUSE_WINDOWS_SSPI -DHAVE_CONFIG_H)
-
-set (LIBCURL_SOURCE_FILES lib/file.c
+set(LIBCURL_SOURCE_FILES lib/file.c
     lib/timeval.c
     lib/base64.c
     lib/hostip.c
@@ -126,8 +112,21 @@ set (LIBCURL_SOURCE_FILES lib/file.c
     lib/vtls/cyassl.c
     lib/vtls/curl_schannel.c
     lib/vtls/curl_darwinssl.c
-    lib/vtls/gskit.c )
-
-add_library(libcurl ${LIBCURL_SOURCE_FILES} )
+    lib/vtls/gskit.c)
 
+add_library(libcurl ${LIBCURL_SOURCE_FILES})
 target_link_libraries(libcurl zlib)
+
+if (CURL_STATICLIB)
+    target_compile_definitions(libcurl PUBLIC -DCURL_STATICLIB=1)
+endif ()
+target_compile_definitions(libcurl PRIVATE -DBUILDING_LIBCURL -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_WIN32_WINNT=0x0501)
+target_compile_definitions(libcurl PUBLIC -DUSE_SCHANNEL -DUSE_WINDOWS_SSPI PRIVATE -DHAVE_CONFIG_H)
+
+if (ATOMIC_PROJECT_ARCH STREQUAL "x86")
+    target_include_directories(libcurl SYSTEM BEFORE PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/curl/windows/32bit)
+else ()
+    target_include_directories(libcurl SYSTEM BEFORE PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/curl/windows/64bit)
+endif ()
+
+target_include_directories(libcurl SYSTEM BEFORE PUBLIC include PRIVATE lib)

+ 4 - 2
Source/ThirdParty/libcurl/lib/CMakeLists.txt

@@ -13,7 +13,7 @@ list(APPEND HHEADERS
   ${CURL_BINARY_DIR}/include/curl/curlbuild.h
   )
 
-#if(MSVC)
+#if(WIN32)
 #  list(APPEND CSOURCES libcurl.rc)
 #endif()
 
@@ -75,12 +75,14 @@ add_library(
   ${HHEADERS} ${CSOURCES}
   )
 
-if(MSVC AND CURL_STATICLIB)
+if(WIN32 AND CURL_STATICLIB)
   set_target_properties(${LIB_NAME} PROPERTIES STATIC_LIBRARY_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
 endif()
 
 target_link_libraries(${LIB_NAME} ${CURL_LIBS})
 
+target_include_directories(${LIB_NAME} SYSTEM BEFORE PUBLIC ../include)
+
 #if(WIN32)
 #  add_definitions( -D_USRDLL )
 #endif()

+ 22 - 1
Source/ThirdParty/libsquish/CMakeLists.txt

@@ -1,3 +1,24 @@
-
+#
+# Portions Copyright (c) 2017 the Atomic project.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
 file (GLOB SOURCE_FILES *.cpp *.h)
+set(INCLUDE_DIRS .)
 add_library(libsquish ${SOURCE_FILES})

+ 5 - 7
Source/ThirdParty/nanodbc/CMakeLists.txt

@@ -26,16 +26,14 @@ set (TARGET_NAME nanodbc)
 # Define source files
 define_source_files (GLOB_CPP_PATTERNS src/*.cpp GLOB_H_PATTERNS src/*.h)
 
+# ATOMIC BEGIN
+set (INCLUDE_DIRS src)
+
 # Define dependency libs
-if (ODBC_INCLUDE_DIRS)
-    set (INCLUDE_DIRS ${ODBC_INCLUDE_DIRS})
-endif ()
 if (ODBC_DEFINES)
-    add_definitions (${ODBC_DEFINES})
+    target_compile_definitions (${TARGET_NAME} PUBLIC ${ODBC_DEFINES})
 endif ()
+# ATOMIC END
 
 # Setup target
 setup_library ()
-
-# Install headers for building and using the Urho3D library
-install_header_files (DIRECTORY src/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/nanodbc FILES_MATCHING PATTERN *.h)  # Note: the trailing slash is significant

+ 3 - 2
Source/ThirdParty/nativefiledialog/CMakeLists.txt

@@ -5,9 +5,9 @@ if (APPLE)
     set (SOURCE_FILES ${SOURCE_FILES} nfd_cocoa.mm )
 endif( APPLE)
 
-if (MSVC)
+if (WIN32)
     set (SOURCE_FILES ${SOURCE_FILES} nfd_win.cpp )
-endif( MSVC)
+endif( WIN32)
 
 if (LINUX)
     set (SOURCE_FILES ${SOURCE_FILES} nfd_gtk.c )    
@@ -19,3 +19,4 @@ endif(LINUX)
 
 
 add_library(nativefiledialog ${SOURCE_FILES})
+target_include_directories(nativefiledialog PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

+ 3 - 10
Source/ThirdParty/rapidjson/CMakeLists.txt

@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2008-2016 the Urho3D project.
+# Copyright (c) 2017 the Atomic project.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -20,12 +20,5 @@
 # THE SOFTWARE.
 #
 
-# Define target name
-set (TARGET_NAME rapidjson)
-
-# Setup target
-add_custom_target (${TARGET_NAME} ALL)   # Dummy target just so that its post-build step can install headers to the build tree
-set (STATIC_LIBRARY_TARGETS ${STATIC_LIBRARY_TARGETS} ${TARGET_NAME} PARENT_SCOPE)
-
-# Install headers for building the Urho3D library
-install_header_files (DIRECTORY include/rapidjson/ DESTINATION ${DEST_INCLUDE_DIR}/ThirdParty/rapidjson FILES_MATCHING PATTERN *.h USE_FILE_SYMLINK BUILD_TREE_ONLY)  # Note: the trailing slash is significant
+add_library(rapidjson INTERFACE)
+target_include_directories(rapidjson SYSTEM BEFORE INTERFACE ./include)

+ 22 - 0
Source/ThirdParty/rapidjson/INTERFACE.cpp

@@ -0,0 +1,22 @@
+/*
+ * Portions Copyright (c) 2017 the Atomic project.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+// This is a dummy c++ file meant to fool old CMake into building header-only library.

+ 3 - 4
Source/ThirdParty/zlib/CMakeLists.txt

@@ -35,7 +35,6 @@ if ( MSVC80 OR MSVC90 OR MSVC10 )
 endif ( MSVC80 OR MSVC90 OR MSVC10 )
 
 add_library(zlib ${SOURCE_FILES})
-set_property(
-  TARGET zlib
-  APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}
-)
+# ATOMIC BEGIN
+target_include_directories(zlib SYSTEM BEFORE PUBLIC .)
+# ATOMIC END

+ 6 - 8
Source/ToolCore/CMakeLists.txt

@@ -1,10 +1,4 @@
-include_directories (${ATOMIC_SOURCE_DIR}/Source/ThirdParty/rapidjson/include
-                     ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
-                     ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/Assimp/include
-                     ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/nativefiledialog
-                     ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/libcurl/include)
-
-add_definitions(-DCPLUSPLUS_WITHOUT_QT -DCURL_STATICLIB)
+add_definitions(-DCPLUSPLUS_WITHOUT_QT)
 
 file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)
 
@@ -15,7 +9,11 @@ endif()
 
 add_library(ToolCore ${SOURCE_FILES})
 
-target_link_libraries(ToolCore Assimp Poco libcurl)
+target_link_libraries(ToolCore Assimp Poco Atomic)
+
+if (ATOMIC_XCODE)
+    target_compile_definitions(ToolCore PRIVATE -DATOMIC_XCODE)
+endif ()
 
 GroupSources("Assets")
 GroupSources("Build")

+ 1 - 3
Source/ToolCoreJS/CMakeLists.txt

@@ -1,5 +1,3 @@
-include_directories (${ATOMIC_SOURCE_DIR}/Source/ThirdParty ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/Assimp/include)
-
 file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)
 
 file (GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/ToolCore/*.cpp)
@@ -8,6 +6,6 @@ set (SOURCE_FILES ${SOURCE_FILES} ${JAVASCRIPT_BINDINGS_SOURCE} )
 
 add_library(ToolCoreJS ${SOURCE_FILES})
 
-target_link_libraries(ToolCoreJS ToolCore)
+target_link_libraries(ToolCoreJS ToolCore Assimp)
 
 add_dependencies(ToolCoreJS AtomicToolCheckScripts)

+ 2 - 2
Source/Tools/PackageTool/CMakeLists.txt

@@ -2,7 +2,7 @@
 
 add_executable(PackageTool PackageTool.cpp)
 
-target_link_libraries(PackageTool ${ATOMIC_LINK_LIBRARIES})
+target_link_libraries(PackageTool Atomic)
 
 
 file (GLOB_RECURSE EDITORDATA_FILES ${ATOMIC_SOURCE_DIR}/Data/AtomicEditor/Resources/EditorData/*)
@@ -13,7 +13,7 @@ if (ATOMIC_BUILD_PAK_FILES)
 set (EDITORDATA_PAK "${ATOMIC_SOURCE_DIR}/Bin/EditorData.pak")
 set (COREDATA_PAK "${ATOMIC_SOURCE_DIR}/Bin/CoreData.pak")
 
-if (MSVC)
+if (WIN32)
 
     add_custom_command(OUTPUT "${EDITORDATA_PAK}"
                        COMMAND $<TARGET_FILE:PackageTool> "${ATOMIC_SOURCE_DIR}/Data/AtomicEditor/Resources/EditorData" "${EDITORDATA_PAK}" -c