Browse Source

Merge pull request #93 from ThunderBeastGames/CIWork

Continuous Integration Work
JoshEngebretson 10 years ago
parent
commit
0593748d98

+ 4 - 0
CMake/Modules/AtomicLinux.cmake

@@ -10,3 +10,7 @@ find_package(PkgConfig REQUIRED)
 pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
 
 list (APPEND ATOMIC_LINK_LIBRARIES pthread GLEW GL dl)
+
+
+add_definitions(-DATOMIC_PLATFORM_WEB)
+add_definitions(-DATOMIC_OPENGL -Wno-warn-absolute-paths -DATOMIC_TBUI)

+ 61 - 494
Rakefile

@@ -7,566 +7,133 @@ when /mswin|windows|mingw32/i
 when /darwin/i
     $HOST_OS = "darwin"
 else
-    abort("Unknown host config: Config::CONFIG['host_os']: #{Config::CONFIG['host_os']}")
+    $HOST_OS = "linux"
 end
 
 $RAKE_ROOT = File.dirname(__FILE__)
 
 ARTIFACTS_FOLDER = "#{$RAKE_ROOT}/Artifacts"
-BUILD_FOLDER = "#{$RAKE_ROOT}/Build"
 
-ATOMICTILED_BUILD_DIR = "#{ARTIFACTS_FOLDER}/AtomicTiled_Build"
-ATOMICTILED_SOURCE_DIR =  "#{$RAKE_ROOT}/../AtomicTiled"
+CMAKE_WINDOWS_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Windows_Build"
+CMAKE_MACOSX_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/MacOSX_Build"
+CMAKE_ANDROID_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Android_Build"
+CMAKE_IOS_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/IOS_Build"
+CMAKE_WEB_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Web_Build"
+CMAKE_LINUX_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Linux_Build"
 
+JSBIND_BIN_MACOSX = "#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicJS/JSBind/Release/JSBind"
 
-if $HOST_OS == "darwin"
-  $QT_BIN_DIR = "#{ENV["QT_SDK"]}/bin"
-else
-  $QT_BIN_DIR = "C:\\Qt\\5.4\\msvc2013_64\\bin"
-  QT_CREATOR_BIN_DIR = "C:\\Qt\\Tools\\QtCreator\\bin"
-  ENV['PATH'] = "#{QT_CREATOR_BIN_DIR};" + ENV['PATH']
-end
-
-
-namespace :android  do
-
-  CMAKE_ANDROID_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Android_Build"
-
-  task :player => "macosx:jsbind" do
-
-    if !Dir.exists?("#{CMAKE_ANDROID_BUILD_FOLDER}")
-      FileUtils.mkdir_p(CMAKE_ANDROID_BUILD_FOLDER)
-    end
+namespace :build  do
 
-    Dir.chdir(CMAKE_ANDROID_BUILD_FOLDER) do
+  task :macosx_jsbind do
 
-      sh "#{BUILD_FOLDER}/JSBind #{$RAKE_ROOT} ANDROID"
-      sh "cmake -DCMAKE_TOOLCHAIN_FILE=#{$RAKE_ROOT}/CMake/Toolchains/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../"
-      sh "make -j8"
+    if !Dir.exists?("#{CMAKE_MACOSX_BUILD_FOLDER}")
+      FileUtils.mkdir_p(CMAKE_MACOSX_BUILD_FOLDER)
     end
 
-  end
-
-end
-
-namespace :ios do
-
-  CMAKE_IOS_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/IOS_Build"
-
-  task :player => "macosx:jsbind" do
+    Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
 
-    if !Dir.exists?("#{CMAKE_IOS_BUILD_FOLDER}")
-      FileUtils.mkdir_p(CMAKE_IOS_BUILD_FOLDER)
-    end
+      sh "cmake ../../ -G Xcode -DCMAKE_BUILD_TYPE=Release"
+      sh "xcodebuild -target JSBind -configuration Release"
 
-    Dir.chdir(CMAKE_IOS_BUILD_FOLDER) do
-      sh "#{BUILD_FOLDER}/JSBind #{$RAKE_ROOT} IOS"
-      sh "cmake -DIOS=1 -DCMAKE_BUILD_TYPE=Release -G Xcode ../../"
-      sh "xcodebuild -configuration Release"
     end
 
   end
 
-end
-
-
-namespace :web do
-
-  CMAKE_WEB_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Web_Build"
-
-  task :player => "macosx:jsbind" do
-
-    if !Dir.exists?("#{CMAKE_WEB_BUILD_FOLDER}")
-      FileUtils.mkdir_p(CMAKE_WEB_BUILD_FOLDER)
-    end
-
-    Dir.chdir(CMAKE_WEB_BUILD_FOLDER) do
-      sh "#{BUILD_FOLDER}/JSBind #{$RAKE_ROOT} WEB"
-      sh "cmake -DEMSCRIPTEN=1 -DATOMIC_BUILD_2D=1 -DCMAKE_TOOLCHAIN_FILE=#{$RAKE_ROOT}/CMake/Toolchains/emscripten.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../"
-      sh "make -j8"
-    end
+  task :windows do
 
-    Dir.chdir("#{CMAKE_WEB_BUILD_FOLDER}/Source/AtomicPlayer") do
-      sh "mv AtomicPlayer AtomicPlayer.bc"
-      sh "emcc -O3 -s ASM_JS=1 -s VERBOSE=0 -s USE_SDL=2 -s TOTAL_MEMORY=134217728 -s AGGRESSIVE_VARIABLE_ELIMINATION=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s NO_EXIT_RUNTIME=1 ./AtomicPlayer.bc -o  ./AtomicPlayer.html"
+    if !Dir.exists?("#{CMAKE_WINDOWS_BUILD_FOLDER}")
+      FileUtils.mkdir_p(CMAKE_WINDOWS_BUILD_FOLDER)
     end
 
-  end
-
-end
-
-
-namespace :macosx do
-
-
-  CMAKE_MACOSX_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/MacOSX_Build"
-  MACOSX_PACKAGE_FOLDER = "#{ARTIFACTS_FOLDER}/MacOSX_Package"
-
-  task :clean do
-
-    folders = ["#{CMAKE_MACOSX_BUILD_FOLDER}", "#{MACOSX_PACKAGE_FOLDER}",
-               "#{ARTIFACTS_FOLDER}/Android_Build", "#{ARTIFACTS_FOLDER}/Web_Build",
-               "#{ARTIFACTS_FOLDER}/AtomicExamples", "#{ARTIFACTS_FOLDER}/Docs",
-               "#{ARTIFACTS_FOLDER}/Examples",  "#{ARTIFACTS_FOLDER}/AtomicTiled_Build",
-               "#{ARTIFACTS_FOLDER}/IOS_Build", "#{ARTIFACTS_FOLDER}/IOSDeploy_Build"]
-
-    for index in 0 ... folders.size
-
-        if Dir.exists?(folders[index])
-            puts "rm -rf #{folders[index]}"
-            sh "rm -rf #{folders[index]}"
-        end
+    Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
 
-        if Dir.exists?(folders[index])
-            abort("Unable to clean #{folders[index]}")
-        end
+      sh "cmake ../../ -G \"Visual Studio 12 2013 Win64\""
+      sh "msbuild Atomic.sln /p:Configuration=Release"
 
     end
 
   end
 
-	task :cmake do
+  task :macosx do
 
-    FileUtils.mkdir_p(CMAKE_MACOSX_BUILD_FOLDER)
-
-    Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
-      sh "cmake ../../ -DCMAKE_BUILD_TYPE=Release"
+    if !Dir.exists?("#{CMAKE_MACOSX_BUILD_FOLDER}")
+      FileUtils.mkdir_p(CMAKE_MACOSX_BUILD_FOLDER)
     end
 
-	end
+    Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
 
-  task :jsbind => "macosx:cmake" do
+      sh "cmake ../../ -G Xcode"
+      sh "xcodebuild -configuration Release"
 
-    Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
-      sh "make -j8 JSBind"
-      sh "cp ./Source/AtomicJS/JSBind/JSBind #{BUILD_FOLDER}/JSBind"
     end
 
   end
 
-	task :generate_javascript_bindings => "macosx:jsbind" do
+  task :linux do
 
-    Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
-      sh "#{BUILD_FOLDER}/JSBind #{$RAKE_ROOT} MACOSX"
+    if !Dir.exists?("#{CMAKE_LINUX_BUILD_FOLDER}")
+      FileUtils.mkdir_p(CMAKE_LINUX_BUILD_FOLDER)
     end
 
-	end
-
-  task :generate_docs => "macosx:generate_javascript_bindings" do
+    Dir.chdir(CMAKE_LINUX_BUILD_FOLDER) do
 
-    Dir.chdir("#{$RAKE_ROOT}/Docs") do
+      sh "cmake ../../ -DLINUX=1 -G \"Unix Makefiles\""
+      sh "make -j2"
 
-      if Dir.exists?("out")
-        sh "rm -rf out"
-      end
-
-      # add the generated JS bindings
-      sh "./gendocs.sh"
-      sh "cp -r out #{ARTIFACTS_FOLDER}/Docs"
     end
 
   end
 
-  task :generate_examples do
 
-    Dir.chdir("#{ARTIFACTS_FOLDER}") do
+  #IOS, dependent on macosx for JSBind
+  task :ios =>  "build:macosx_jsbind" do
 
-      if Dir.exists?("AtomicExamples")
-        sh "rm -rf AtomicExamples"
+      if !Dir.exists?("#{CMAKE_IOS_BUILD_FOLDER}")
+        FileUtils.mkdir_p(CMAKE_IOS_BUILD_FOLDER)
       end
 
-      if Dir.exists?("Examples")
-        sh "rm -rf Examples"
+      Dir.chdir(CMAKE_IOS_BUILD_FOLDER) do
+        sh "#{JSBIND_BIN_MACOSX} #{$RAKE_ROOT} IOS"
+        sh "cmake -DIOS=1 -DCMAKE_BUILD_TYPE=Release -G Xcode ../../"
+        # the -s option adds $KEYCHAIN to the search scope, while the -d option adds $KEYCHAIN to the system domain; both are needed
+        sh "security -v list-keychains -d system -s /Users/jenkins/Library/Keychains/codesign.keychain"
+        sh "security -v unlock-keychain /Users/jenkins/Library/Keychains/codesign.keychain"
+        sh "xcodebuild -configuration Release"
       end
 
-      sh "mkdir Examples"
-
-      sh "git clone https://github.com/AtomicGameEngine/AtomicExamples"
-
-      Dir.chdir("AtomicExamples") do
-        sh "git archive master | tar -x -C #{ARTIFACTS_FOLDER}/Examples"
-      end
-
-    end
-
-  end
-
-	task :player => "macosx:generate_javascript_bindings" do
-
-    Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
-      # add the generated JS bindings
-      sh "cmake ../../ -DCMAKE_BUILD_TYPE=Release"
-      sh "make -j8 AtomicPlayer"
-    end
-
-	end
-
-  task :editor => ["macosx:player"] do
-
-    Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
-
-      sh "make -j8 BuildEditorFiles"
-
-    end
-
-  end
-
-  task :atomictool => ["macosx:player", "macosx:editor"] do
-
-    Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
-
-      sh "make -j8 AtomicTool"
-
-    end
-
   end
 
-end
-
-namespace :package do
-
-  task :macosx_preflight => ['macosx:clean',
-                          'iosdeploy',
-                          'web:player',
-                          'android:player',
-                          'ios:player',
-                          "atomictiled:osx",
-                          'macosx:editor',
-                          'macosx:atomictool',
-                          'macosx:generate_examples',
-                          'macosx:generate_docs'] do
-
-      FileUtils.mkdir_p(MACOSX_PACKAGE_FOLDER)
-
-      MAC_PLAYER_APP_FOLDER_SRC = "#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicPlayer/AtomicPlayer.app"
-      MAC_EDITOR_APP_FOLDER_SRC = "#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicEditor/AtomicEditor.app"
-
-      # Resources
-      COREDATA_FOLDER_SRC = "#{$RAKE_ROOT}/Data/AtomicPlayer/Resources/CoreData"
-      EDITORAPPLICATIONDATA_FOLDER_SRC = "#{$RAKE_ROOT}/Data/AtomicEditor"
-
-      # Project Templates
-      PROJECTTEMPLATES_FOLDER_SRC = "#{EDITORAPPLICATIONDATA_FOLDER_SRC}/ProjectTemplates"
-
-      #Examples
-      #Example info could possibly go in the AtomicExamples repo
-      EXAMPLEINFO_FOLDER_SRC = "#{EDITORAPPLICATIONDATA_FOLDER_SRC}/ExampleInfo"
-      EXAMPLES_FOLDER_SRC = "#{ARTIFACTS_FOLDER}/Examples"
+  task :android =>  "build:macosx_jsbind" do
 
-      #Docs
-      DOCS_FOLDER_SRC = "#{ARTIFACTS_FOLDER}/Docs"
-
-      MAC_EDITOR_APP_FOLDER_DST = "#{MACOSX_PACKAGE_FOLDER}/AtomicEditor.app"
-      MAC_EDITOR_APP_RESOURCE_FOLDER_DST = "#{MACOSX_PACKAGE_FOLDER}/AtomicEditor.app/Contents/Resources"
-
-      # Copy the Editor application
-      sh "cp -r #{MAC_EDITOR_APP_FOLDER_SRC} #{MACOSX_PACKAGE_FOLDER}/AtomicEditor.app"
-
-      DEPLOYMENT_FOLDER_DST = "#{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/Deployment"
-
-      # Make Deployment folder
-      FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER_DST}")
-
-      # Copy Resources
-      sh "cp -r #{COREDATA_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/CoreData"
-
-      # Copy Deployment
-
-      # MacOS deployment
-      FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER_DST}/MacOS")
-      sh "cp -r #{MAC_PLAYER_APP_FOLDER_SRC} #{DEPLOYMENT_FOLDER_DST}/MacOS/AtomicPlayer.app"
-
-      # Android Deployment
-      sh "cp -r #{EDITORAPPLICATIONDATA_FOLDER_SRC}/Deployment/Android #{DEPLOYMENT_FOLDER_DST}/Android"
-      FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER_DST}/Android/libs/armeabi-v7a")
-      sh "cp #{CMAKE_ANDROID_BUILD_FOLDER}/Source/AtomicPlayer/libAtomicPlayer.so #{DEPLOYMENT_FOLDER_DST}/Android/libs/armeabi-v7a/libAtomicPlayer.so"
-
-      # iOS Deployment
-      FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER_DST}/IOS/AtomicPlayer.app")
-      sh "cp #{CMAKE_IOS_BUILD_FOLDER}/Source/AtomicPlayer/Release-iphoneos/AtomicPlayer.app/AtomicPlayer #{DEPLOYMENT_FOLDER_DST}/IOS/AtomicPlayer.app/AtomicPlayer"
-      sh "cp #{CMAKE_IOS_BUILD_FOLDER}/Source/AtomicPlayer/Release-iphoneos/AtomicPlayer.app/PkgInfo #{DEPLOYMENT_FOLDER_DST}/IOS/AtomicPlayer.app/PkgInfo"
-
-      # Web Deployment
-      sh "cp -r #{EDITORAPPLICATIONDATA_FOLDER_SRC}/Deployment/Web #{DEPLOYMENT_FOLDER_DST}/Web"
-      sh "cp #{CMAKE_WEB_BUILD_FOLDER}/Source/AtomicPlayer/AtomicPlayer.js #{DEPLOYMENT_FOLDER_DST}/Web/AtomicPlayer.js"
-
-      sh "cp -r #{EXAMPLES_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/Examples"
-      sh "cp -r #{DOCS_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/Docs"
-
-      sh "cp -r #{PROJECTTEMPLATES_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/ProjectTemplates"
-      sh "cp -r #{EXAMPLEINFO_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/ExampleInfo"
-
-      # DEPLOY TILED
-      APPLICATIONS_FOLDER_DST = "#{MAC_EDITOR_APP_FOLDER_DST}/Contents/Applications"
-
-      FileUtils.mkdir_p(APPLICATIONS_FOLDER_DST)
-
-      FileUtils.cp_r("#{ATOMICTILED_BUILD_DIR}/bin/Tiled.app", "#{APPLICATIONS_FOLDER_DST}/Tiled.app")
-
-      Dir.chdir(APPLICATIONS_FOLDER_DST) do
-        sh "#{$QT_BIN_DIR}/macdeployqt #{APPLICATIONS_FOLDER_DST}/Tiled.app"
+      if !Dir.exists?("#{CMAKE_ANDROID_BUILD_FOLDER}")
+        FileUtils.mkdir_p(CMAKE_ANDROID_BUILD_FOLDER)
       end
 
-      FileUtils.mkdir_p("#{APPLICATIONS_FOLDER_DST}/CommandLine")
-
-      FileUtils.cp("#{CMAKE_IOSDEPLOY_BUILD_FOLDER}/ios-deploy", "#{APPLICATIONS_FOLDER_DST}/CommandLine/ios-deploy")
-
-      FileUtils.cp("#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicTool/AtomicTool", "#{APPLICATIONS_FOLDER_DST}/CommandLine/AtomicTool")
-
-  end
-
-  task :macosx_editor do
+      Dir.chdir(CMAKE_ANDROID_BUILD_FOLDER) do
 
-    EDITOR_APP_FOLDER = "#{MACOSX_PACKAGE_FOLDER}/AtomicEditor.app"
-    if (!File.file?("#{EDITOR_APP_FOLDER}/Contents/Resources/Deployment/Win64/AtomicPlayer.exe"))
-      abort("Missing Windows player, please run rake package:windows_editor from Windows")
-    end
-
-    Dir.chdir("#{MACOSX_PACKAGE_FOLDER}") do
-
-      if (File.file?("AtomicEditor_MacOSX.zip"))
-        sh "rm AtomicEditor_MacOSX.zip"
+        sh "#{JSBIND_BIN_MACOSX} #{$RAKE_ROOT} ANDROID"
+        sh "cmake -DCMAKE_TOOLCHAIN_FILE=#{$RAKE_ROOT}/CMake/Toolchains/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../"
+        sh "make -j4"
       end
 
-      if (File.file?("AtomicEditor_MacOSX.zip"))
-        abort ("Couldn't remove editor")
-      end
-
-      sh "zip -r AtomicEditor_MacOSX.zip ./AtomicEditor.app"
-      sh "zip -T AtomicEditor_MacOSX.zip"
-
-    end
-
-  end
-
-
-  task :windows_preflight => ['windows:clean',
-                              'windows:editor',
-                              'windows:atomictool',
-                              'atomictiled:windows' ] do
-
-
-    ATOMICBUILDBOX_SOURCE_DIR =  "#{$RAKE_ROOT}/../AtomicBuildBox/Windows/x64"
-    EDITOR_APP_FOLDER_DST = "#{WINDOWS_PACKAGE_FOLDER}/AtomicEditor"
-
-    FileUtils.mkdir_p(EDITOR_APP_FOLDER_DST)
-
-    PLAYER_APP_EXE_SRC = "#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicPlayer/AtomicPlayer.exe"
-    EDITOR_APP_EXE_SRC = "#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicEditor/AtomicEditor.exe"
-
-    DEPLOYMENT_FOLDER = "#{EDITOR_APP_FOLDER_DST}/Deployment/Win64"
-
-    # Resources
-    COREDATA_FOLDER_SRC = "#{$RAKE_ROOT}/Data/AtomicPlayer/Resources/CoreData"
-    EDITORAPPLICATIONDATA_FOLDER_SRC = "#{$RAKE_ROOT}/Data/AtomicEditor"
-
-    # Project Templates
-    PROJECTTEMPLATES_FOLDER_SRC = "#{EDITORAPPLICATIONDATA_FOLDER_SRC}/ProjectTemplates"
-
-    #Examples
-    #Example info could possibly go in the AtomicExamples repo
-    EXAMPLEINFO_FOLDER_SRC = "#{EDITORAPPLICATIONDATA_FOLDER_SRC}/ExampleInfo"
-
-    # This shouldn't ne in root, used for deployment atm, however the editor can use coredata from pak
-    FileUtils.cp_r("#{COREDATA_FOLDER_SRC}", "#{EDITOR_APP_FOLDER_DST}/CoreData")
-
-    FileUtils.cp("#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicEditor/EditorData.pak", "#{EDITOR_APP_FOLDER_DST}/EditorData.pak")
-    FileUtils.cp("#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicEditor/CoreData.pak", "#{EDITOR_APP_FOLDER_DST}/CoreData.pak")
-
-    FileUtils.cp_r("#{PROJECTTEMPLATES_FOLDER_SRC}", "#{EDITOR_APP_FOLDER_DST}/ProjectTemplates")
-    FileUtils.cp_r("#{EXAMPLEINFO_FOLDER_SRC}", "#{EDITOR_APP_FOLDER_DST}/ExampleInfo")
-
-    FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER}")
-    FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/D3DCompiler_47.dll", "#{DEPLOYMENT_FOLDER}/D3DCompiler_47.dll")
-    FileUtils.cp("#{PLAYER_APP_EXE_SRC}", "#{DEPLOYMENT_FOLDER}/AtomicPlayer.exe")
-    FileUtils.cp("#{EDITOR_APP_EXE_SRC}", "#{EDITOR_APP_FOLDER_DST}/AtomicEditor.exe")
-    FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/D3DCompiler_47.dll", "#{EDITOR_APP_FOLDER_DST}/D3DCompiler_47.dll")
-
-    # DEPLOY TILED
-    ATOMICTILED_DEPLOYED_DIR = "#{EDITOR_APP_FOLDER_DST}/Applications/AtomicTiled"
-
-    FileUtils.mkdir_p(ATOMICTILED_DEPLOYED_DIR)
-
-    FileUtils.cp("#{ATOMICTILED_BUILD_DIR}/tiled.exe", "#{ATOMICTILED_DEPLOYED_DIR}")
-    FileUtils.cp("#{ATOMICTILED_BUILD_DIR}/tiled.dll", "#{ATOMICTILED_DEPLOYED_DIR}")
-
-    ENV['PATH'] = "#{$QT_BIN_DIR};" + ENV['PATH']
-    Dir.chdir(ATOMICTILED_DEPLOYED_DIR) do
-      sh "windeployqt.exe --release #{ATOMICTILED_DEPLOYED_DIR}/tiled.exe"
-      FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/msvcp120.dll", "#{ATOMICTILED_DEPLOYED_DIR}/msvcp120.dll")
-      FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/msvcr120.dll", "#{ATOMICTILED_DEPLOYED_DIR}/msvcr120.dll")
-      FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/vccorlib120.dll", "#{ATOMICTILED_DEPLOYED_DIR}/vccorlib120.dll")
-    end
-
-    FileUtils.mkdir_p("#{EDITOR_APP_FOLDER_DST}/Applications/CommandLine")
-    FileUtils.cp("#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicTool/AtomicTool.exe", "#{EDITOR_APP_FOLDER_DST}/Applications/CommandLine/AtomicTool.exe")
-
   end
 
-  task :windows_editor do
-
-    MAC_ARTIFACTS_SRC = "Z:/Artifacts/MacOSX_Package/AtomicEditor.app/Contents/Resources"
-    EDITOR_APP_FOLDER_DST = "#{WINDOWS_PACKAGE_FOLDER}/AtomicEditor"
+  task :web => "build:macosx_jsbind" do
 
-     Dir.chdir("#{WINDOWS_PACKAGE_FOLDER}") do
-
-      if (File.exists?("AtomicEditor_Windows.zip"))
-        FileUtils.rm("AtomicEditor_Windows.zip")
+      if !Dir.exists?("#{CMAKE_WEB_BUILD_FOLDER}")
+        FileUtils.mkdir_p(CMAKE_WEB_BUILD_FOLDER)
       end
 
-      if (File.exists?("AtomicEditor_Windows.zip"))
-        abort("Unable to remove AtomicEditor_Windows.zip")
+      Dir.chdir(CMAKE_WEB_BUILD_FOLDER) do
+        sh "#{JSBIND_BIN_MACOSX} #{$RAKE_ROOT} WEB"
+        sh "cmake -DEMSCRIPTEN=1 -DATOMIC_BUILD_2D=1 -DCMAKE_TOOLCHAIN_FILE=#{$RAKE_ROOT}/CMake/Toolchains/emscripten.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../"
+        sh "make -j4"
       end
 
-    end
-
-    DEPLOYMENT_FOLDER = "#{EDITOR_APP_FOLDER_DST}/Deployment"
-    FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Deployment/Android", "#{EDITOR_APP_FOLDER_DST}/Deployment/Android")
-    FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Deployment/MacOS", "#{EDITOR_APP_FOLDER_DST}/Deployment/MacOS")
-    FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Deployment/Web", "#{EDITOR_APP_FOLDER_DST}/Deployment/Web")
-
-    FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Docs", "#{EDITOR_APP_FOLDER_DST}/Docs")
-    FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Examples", "#{EDITOR_APP_FOLDER_DST}/Examples")
-
-    # copy windows player to mac
-    ATOMICBUILDBOX_SOURCE_DIR =  "#{$RAKE_ROOT}/../AtomicBuildBox/Windows/x64"
-    PLAYER_APP_EXE_SRC = "#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicPlayer/AtomicPlayer.exe"
-    FileUtils.mkdir_p("#{MAC_ARTIFACTS_SRC}/Deployment/Win64")
-    FileUtils.cp("#{PLAYER_APP_EXE_SRC}", "#{MAC_ARTIFACTS_SRC}/Deployment/Win64/AtomicPlayer.exe")
-    FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/D3DCompiler_47.dll", "#{MAC_ARTIFACTS_SRC}/Deployment/Win64/D3DCompiler_47.dll")
-
-    Dir.chdir("#{WINDOWS_PACKAGE_FOLDER}") do
-
-      sh "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip AtomicEditor_Windows.zip AtomicEditor"
-      sh "\"C:\\Program Files\\7-Zip\\7z.exe\" t AtomicEditor_Windows.zip"
-
-    end
-
-  end
-
-
-end
-
-namespace :windows do
-
-  CMAKE_WINDOWS_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Windows_Build"
-  WINDOWS_PACKAGE_FOLDER = "#{ARTIFACTS_FOLDER}/Windows_Package"
-
-  task :clean do
-
-
-    folders = ["#{CMAKE_WINDOWS_BUILD_FOLDER}", "#{WINDOWS_PACKAGE_FOLDER}",
-               "#{ARTIFACTS_FOLDER}/AtomicExamples", "#{ARTIFACTS_FOLDER}/Docs",
-               "#{ARTIFACTS_FOLDER}/Examples",  "#{ARTIFACTS_FOLDER}/AtomicTiled_Build"]
-
-    for index in 0 ... folders.size
-
-        if Dir.exists?(folders[index])
-            FileUtils.rmtree(folders[index])
-        end
-
-        if Dir.exists?(folders[index])
-            abort("Unable to clean #{folders[index]}")
-        end
-
-    end
-
-  end
-
-	task :cmake do
-
-    FileUtils.mkdir_p(CMAKE_WINDOWS_BUILD_FOLDER)
-
-    Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
-      sh "cmake ../../ -G\"NMake Makefiles JOM\" -DCMAKE_BUILD_TYPE=Release"
-    end
-
-	end
-
-	task :generate_javascript_bindings => "windows:cmake" do
-
-    Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
-      sh "jom -j4 JSBind"
-      sh "./Source/AtomicJS/JSBind/JSBind.exe #{$RAKE_ROOT} WINDOWS"
-    end
-
-	end
-
-	task :player => "windows:generate_javascript_bindings" do
-
-    Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
-      # add the generated JS bindings
-      sh "cmake ../../ -G\"NMake Makefiles JOM\" -DCMAKE_BUILD_TYPE=Release"
-      sh "jom -j4 AtomicPlayer"
-    end
-
-	end
-
-  task :editor => "windows:player" do
-
-    Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
-
-      sh "jom -j4 AtomicEditor"
-      sh "jom BuildEditorFiles"
-
-    end
-
-  end
-
-  task :atomictool => "windows:editor" do
-
-    Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
-
-      sh "jom -j4 AtomicTool"
-
-    end
-
-  end
-
-end
-
-task :iosdeploy do
-
-  CMAKE_IOSDEPLOY_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/ios-deploy"
-
-  if Dir.exists?(CMAKE_IOSDEPLOY_BUILD_FOLDER)
-      FileUtils.rmtree(CMAKE_IOSDEPLOY_BUILD_FOLDER)
-  end
-
-  Dir.chdir("#{ARTIFACTS_FOLDER}") do
-
-    sh "git clone https://github.com/AtomicGameEngine/ios-deploy"
-
-    Dir.chdir("ios-deploy") do
-      sh "make"
-    end
-
-  end
-
-end
-
-namespace :atomictiled do
-
-  task :windows do
-
-    ENV['PATH'] = "#{$QT_BIN_DIR};" + ENV['PATH']
-
-    FileUtils.mkdir_p(ATOMICTILED_BUILD_DIR)
-
-    Dir.chdir(ATOMICTILED_BUILD_DIR) do
-      sh "qmake.exe -r \"#{ATOMICTILED_SOURCE_DIR}\\tiled.pro\" \"CONFIG+=release\" \"QMAKE_CXXFLAGS+=-DBUILD_INFO_VERSION=ATOMIC_BUILD\""
-      sh "#{QT_CREATOR_BIN_DIR}\\jom.exe -j8"
-    end
-
-  end
-
-    task :osx do
-
-      FileUtils.mkdir_p(ATOMICTILED_BUILD_DIR)
-
-      Dir.chdir(ATOMICTILED_BUILD_DIR) do
-        sh "#{$QT_BIN_DIR}/qmake -r \"#{ATOMICTILED_SOURCE_DIR}/tiled.pro\" \"CONFIG+=release\" \"QMAKE_CXXFLAGS+=-DBUILD_INFO_VERSION=ATOMIC_BUILD\""
-        sh "make -j8"
+      Dir.chdir("#{CMAKE_WEB_BUILD_FOLDER}/Source/AtomicPlayer") do
+        sh "mv AtomicPlayer AtomicPlayer.bc"
+        sh "emcc -O3 -s ASM_JS=1 -s VERBOSE=0 -s USE_SDL=2 -s TOTAL_MEMORY=134217728 -s AGGRESSIVE_VARIABLE_ELIMINATION=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s NO_EXIT_RUNTIME=1 ./AtomicPlayer.bc -o  ./AtomicPlayer.html"
       end
 
   end

+ 1 - 1
Source/Atomic/CMakeLists.txt

@@ -16,7 +16,7 @@ file (GLOB RESOURCE_SOURCE Resource/*.cpp Resource/*.h)
 file (GLOB AUDIO_SOURCE Audio/*.cpp Audio/*.h)
 file (GLOB NETWORK_SOURCE Network/*.cpp Network/*.h)
 
-if (NOT EMSCRIPTEN)
+if (NOT EMSCRIPTEN AND NOT IOS AND NOT ANDROID)
   file (GLOB IPC_SOURCE IPC/*.cpp IPC/*.h)
 endif()
 

+ 0 - 3
Source/Atomic/Graphics/GraphicsDefs.h

@@ -256,14 +256,11 @@ enum TextureUnit
     MAX_MATERIAL_TEXTURE_UNITS = 8,
     MAX_TEXTURE_UNITS = 16
 #else
-    #error JSBind has a enum collision as doesn't know about "DESKTOP_GRAPHICS
-    /*
     TU_LIGHTRAMP = 5,
     TU_LIGHTSHAPE = 6,
     TU_SHADOWMAP = 7,
     MAX_MATERIAL_TEXTURE_UNITS = 5,
     MAX_TEXTURE_UNITS = 8
-    */
 #endif
 };
 

+ 2 - 2
Source/Atomic/IPC/IPC.cpp

@@ -1,5 +1,5 @@
 
-#ifdef __APPLE__
+#if defined(ATOMIC_PLATFORM_OSX) || defined(ATOMIC_PLATFORM_LINUX)
 #include <unistd.h>
 #endif
 
@@ -35,7 +35,7 @@ IPC::~IPC()
 
 bool IPC::InitWorker(IPCHandle fd1, IPCHandle fd2)
 {
-    
+
 #ifndef ATOMIC_PLATFORM_WINDOWS
     // close server fd
     close(fd1);

+ 7 - 2
Source/Atomic/IPC/IPCUnix.cpp

@@ -9,9 +9,12 @@ namespace Atomic
 #include <unistd.h>
 #include <signal.h>
 #include <sys/socket.h>
-#include <libproc.h>
 #include <errno.h>
 
+#ifdef ATOMIC_PLATFORM_OSX
+#include <libproc.h>
+#endif
+
 #define HANDLE_EINTR(x) ({ \
     typeof(x) __eintr_result__; \
     do { \
@@ -21,6 +24,8 @@ namespace Atomic
 })
 
 bool SilenceSocket(int fd) {
+
+#ifdef ATOMIC_PLATFORM_OSX
     int nosigpipe = 1;
     // On OSX an attempt to read or write to a closed socket may generate a
     // SIGPIPE rather than returning -1.  setsockopt will shut this off.
@@ -28,6 +33,7 @@ bool SilenceSocket(int fd) {
                         &nosigpipe, sizeof nosigpipe)) {
         return false;
     }
+#endif    
     return true;
 }
 
@@ -229,4 +235,3 @@ bool IPCProcess::Launch(const String& command, const Vector<String>& args, const
 
 
 #endif
-

+ 49 - 0
Source/AtomicJS/JSBind/JSBClass.cpp

@@ -8,6 +8,7 @@
 #include "JSBClass.h"
 #include "JSBFunction.h"
 #include "JSBModule.h"
+#include "JSBind.h"
 
 Vector<JSBClass*> JSBClass::allClasses_;
 
@@ -36,6 +37,54 @@ void JSBFunctionOverride::Parse()
 
 }
 
+void JSBEnum::Preprocess()
+{
+    // TextureUnit is a special case as uses preprocessor for values depending on
+    // Desktop or Mobile graphics
+
+    if (name_ == "TextureUnit")
+    {
+        values_.Clear();
+
+        values_.Push("TU_DIFFUSE");
+        values_.Push("TU_ALBEDOBUFFER");
+        values_.Push("TU_NORMAL");
+        values_.Push("TU_NORMALBUFFER");
+        values_.Push("TU_SPECULAR");
+        values_.Push("TU_EMISSIVE");
+        values_.Push("TU_ENVIRONMENT");
+
+        bool mobile = JSBind::PLATFORM == "WEB" || JSBind::PLATFORM == "ANDROID" || JSBind::PLATFORM == "IOS";
+
+        if (mobile)
+        {
+            values_.Push("TU_LIGHTRAMP");
+            values_.Push("TU_LIGHTSHAPE");
+            values_.Push("TU_SHADOWMAP");
+            values_.Push("MAX_MATERIAL_TEXTURE_UNITS");
+            values_.Push("MAX_TEXTURE_UNITS");
+        }
+        else
+        {
+            values_.Push("TU_VOLUMEMAP");
+            values_.Push("TU_CUSTOM1");
+            values_.Push("TU_CUSTOM2");
+            values_.Push("TU_LIGHTRAMP");
+            values_.Push("TU_LIGHTSHAPE");
+            values_.Push("TU_SHADOWMAP");
+            values_.Push("TU_FACESELECT");
+            values_.Push("TU_INDIRECTION");
+            values_.Push("TU_DEPTHBUFFER");
+            values_.Push("TU_LIGHTBUFFER");
+            values_.Push("TU_ZONE");
+            values_.Push("MAX_MATERIAL_TEXTURE_UNITS");
+            values_.Push("MAX_TEXTURE_UNITS");
+        }
+
+    }
+
+}
+
 void JSBClass::WriteForwardDeclarations(String& source)
 {
     if (isNumberArray())

+ 2 - 0
Source/AtomicJS/JSBind/JSBClass.h

@@ -43,6 +43,8 @@ public:
     String name_;
     Vector<String> values_;
 
+    void Preprocess();
+
 };
 
 class JSBProperty

+ 10 - 8
Source/AtomicJS/JSBind/JSBModule.cpp

@@ -160,6 +160,14 @@ void JSBModule::WriteModuleInit(String& source)
 void JSBModule::WriteIncludes(String& source)
 {
 
+    for (unsigned i = 0; i < includes_.Size(); i++)
+    {
+      if (includes_[i].StartsWith("<"))
+          source.AppendWithFormat("#include %s\n", includes_[i].CString());
+      else
+          source.AppendWithFormat("#include \"%s\"\n", includes_[i].CString());
+    }
+
     Vector<JSBHeader*> allheaders;
 
     for (unsigned i = 0; i < enums_.Size(); i++)
@@ -173,6 +181,7 @@ void JSBModule::WriteIncludes(String& source)
     }
 
     Vector<JSBHeader*> included;
+
     for (unsigned i = 0; i < allheaders.Size(); i++)
     {
         JSBHeader* header = allheaders.At(i);
@@ -182,7 +191,7 @@ void JSBModule::WriteIncludes(String& source)
 
         String headerPath = GetPath(header->filepath_);
 
-		String headerfile = GetFileNameAndExtension(header->filepath_);
+		    String headerfile = GetFileNameAndExtension(header->filepath_);
 
         headerPath.Replace(JSBind::ROOT_FOLDER + "/Source/Atomic/", "Atomic/");
 
@@ -191,13 +200,6 @@ void JSBModule::WriteIncludes(String& source)
         included.Push(header);
     }
 
-    for (unsigned i = 0; i < includes_.Size(); i++)
-    {
-        if (includes_[i].StartsWith("<"))
-            source.AppendWithFormat("#include %s\n", includes_[i].CString());
-        else
-            source.AppendWithFormat("#include \"%s\"\n", includes_[i].CString());
-    }
 }
 
 void JSBModule::EmitSource(const String& filepath)

+ 1 - 0
Source/AtomicJS/JSBind/JSBPreprocessVisitor.h

@@ -45,6 +45,7 @@ public:
             jenum->values_.Push(getNameString(symbol->name()));
         }
 
+        jenum->Preprocess();
 
         bindings_->RegisterEnum(jenum);
 

+ 4 - 4
Source/AtomicJS/JSBind/modules/Atomic3D.json

@@ -2,12 +2,12 @@
 	"name" : "Atomic3D",
 	"sources" : ["Atomic3D"],
 	"requires" : ["3D"],
-	"includes" : ["<Atomic/Scene/Scene.h>", "<Atomic/Atomic3D/Animation.h>", "<Atomic/Graphics/OcclusionBuffer.h>", 
+	"includes" : ["<Atomic/Container/ArrayPtr.h>","<Atomic/Scene/Scene.h>", "<Atomic/Atomic3D/Animation.h>", "<Atomic/Graphics/OcclusionBuffer.h>", 
 			      "<Atomic/Scene/ValueAnimation.h>", "<Atomic/Graphics/Material.h>", "<Atomic/Resource/Image.h>"],
 	"classes" : ["Model",
-				 "StaticModel", 
+				 "StaticModel",
 				 "Animation", "AnimatedModel", "AnimationController", "AnimationState", "BillboardSet", "CustomGeometry",
-				 "DecalSet", "ParticleEffect", "ParticleEmitter",				
+				 "DecalSet", "ParticleEffect", "ParticleEmitter",
 				 "Skybox", "StaticModelGroup", "Terrain", "TerrainPatch"],
 	"overloads" : {
 		"StaticModel" : {
@@ -15,7 +15,7 @@
 		},
 		"AnimationState" : {
 			"AnimationState" : ["AnimatedModel", "Animation"]
-		}		
+		}
 
 	}
 

+ 1 - 1
Source/ThirdParty/TurboBadger/tb_system_android.cpp

@@ -5,7 +5,7 @@
 
 #include "tb_system.h"
 
-#ifdef TB_SYSTEM_ANDROID
+#ifdef TB_SYSTEM_ANDROID_DISABLED
 
 #include <android/log.h>
 #include <sys/time.h>