Rakefile 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. include RbConfig
  2. case CONFIG['host_os']
  3. when /mswin|windows|mingw32/i
  4. $HOST_OS = "windows"
  5. when /darwin/i
  6. $HOST_OS = "darwin"
  7. else
  8. abort("Unknown host config: Config::CONFIG['host_os']: #{Config::CONFIG['host_os']}")
  9. end
  10. $RAKE_ROOT = File.dirname(__FILE__)
  11. ARTIFACTS_FOLDER = "#{$RAKE_ROOT}/Artifacts"
  12. BUILD_FOLDER = "#{$RAKE_ROOT}/Build"
  13. ATOMICTILED_BUILD_DIR = "#{ARTIFACTS_FOLDER}/AtomicTiled_Build"
  14. ATOMICTILED_SOURCE_DIR = "#{$RAKE_ROOT}/../AtomicTiled"
  15. if $HOST_OS == "darwin"
  16. $QT_BIN_DIR = "#{ENV["QT_SDK"]}/bin"
  17. else
  18. $QT_BIN_DIR = "C:\\Qt\\5.4\\msvc2013_64\\bin"
  19. QT_CREATOR_BIN_DIR = "C:\\Qt\\Tools\\QtCreator\\bin"
  20. ENV['PATH'] = "#{QT_CREATOR_BIN_DIR};" + ENV['PATH']
  21. end
  22. namespace :android do
  23. CMAKE_ANDROID_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Android_Build"
  24. task :player => "macosx:jsbind" do
  25. if !Dir.exists?("#{CMAKE_ANDROID_BUILD_FOLDER}")
  26. FileUtils.mkdir_p(CMAKE_ANDROID_BUILD_FOLDER)
  27. end
  28. Dir.chdir(CMAKE_ANDROID_BUILD_FOLDER) do
  29. sh "#{BUILD_FOLDER}/JSBind #{$RAKE_ROOT} ANDROID"
  30. sh "cmake -DCMAKE_TOOLCHAIN_FILE=#{$RAKE_ROOT}/CMake/Toolchains/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../"
  31. sh "make -j8"
  32. end
  33. end
  34. end
  35. namespace :ios do
  36. CMAKE_IOS_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/IOS_Build"
  37. task :player => "macosx:jsbind" do
  38. if !Dir.exists?("#{CMAKE_IOS_BUILD_FOLDER}")
  39. FileUtils.mkdir_p(CMAKE_IOS_BUILD_FOLDER)
  40. end
  41. Dir.chdir(CMAKE_IOS_BUILD_FOLDER) do
  42. sh "#{BUILD_FOLDER}/JSBind #{$RAKE_ROOT} IOS"
  43. sh "cmake -DIOS=1 -DCMAKE_BUILD_TYPE=Release -G Xcode ../../"
  44. sh "xcodebuild -configuration Release"
  45. end
  46. end
  47. end
  48. namespace :web do
  49. CMAKE_WEB_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Web_Build"
  50. task :player => "macosx:jsbind" do
  51. if !Dir.exists?("#{CMAKE_WEB_BUILD_FOLDER}")
  52. FileUtils.mkdir_p(CMAKE_WEB_BUILD_FOLDER)
  53. end
  54. Dir.chdir(CMAKE_WEB_BUILD_FOLDER) do
  55. sh "#{BUILD_FOLDER}/JSBind #{$RAKE_ROOT} WEB"
  56. sh "cmake -DEMSCRIPTEN=1 -DATOMIC_BUILD_2D=1 -DCMAKE_TOOLCHAIN_FILE=#{$RAKE_ROOT}/CMake/Toolchains/emscripten.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../"
  57. sh "make -j8"
  58. end
  59. Dir.chdir("#{CMAKE_WEB_BUILD_FOLDER}/Source/AtomicPlayer") do
  60. sh "mv AtomicPlayer AtomicPlayer.bc"
  61. 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"
  62. end
  63. end
  64. end
  65. namespace :macosx do
  66. CMAKE_MACOSX_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/MacOSX_Build"
  67. MACOSX_PACKAGE_FOLDER = "#{ARTIFACTS_FOLDER}/MacOSX_Package"
  68. task :clean do
  69. folders = ["#{CMAKE_MACOSX_BUILD_FOLDER}", "#{MACOSX_PACKAGE_FOLDER}",
  70. "#{ARTIFACTS_FOLDER}/Android_Build", "#{ARTIFACTS_FOLDER}/Web_Build",
  71. "#{ARTIFACTS_FOLDER}/AtomicExamples", "#{ARTIFACTS_FOLDER}/Docs",
  72. "#{ARTIFACTS_FOLDER}/Examples", "#{ARTIFACTS_FOLDER}/AtomicTiled_Build",
  73. "#{ARTIFACTS_FOLDER}/IOS_Build", "#{ARTIFACTS_FOLDER}/IOSDeploy_Build"]
  74. for index in 0 ... folders.size
  75. if Dir.exists?(folders[index])
  76. puts "rm -rf #{folders[index]}"
  77. sh "rm -rf #{folders[index]}"
  78. end
  79. if Dir.exists?(folders[index])
  80. abort("Unable to clean #{folders[index]}")
  81. end
  82. end
  83. end
  84. task :cmake do
  85. FileUtils.mkdir_p(CMAKE_MACOSX_BUILD_FOLDER)
  86. Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
  87. sh "cmake ../../ -DCMAKE_BUILD_TYPE=Release"
  88. end
  89. end
  90. task :jsbind => "macosx:cmake" do
  91. Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
  92. sh "make -j8 JSBind"
  93. sh "cp ./Source/AtomicJS/JSBind/JSBind #{BUILD_FOLDER}/JSBind"
  94. end
  95. end
  96. task :generate_javascript_bindings => "macosx:jsbind" do
  97. Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
  98. sh "#{BUILD_FOLDER}/JSBind #{$RAKE_ROOT} MACOSX"
  99. end
  100. end
  101. task :generate_docs => "macosx:generate_javascript_bindings" do
  102. Dir.chdir("#{$RAKE_ROOT}/Docs") do
  103. if Dir.exists?("out")
  104. sh "rm -rf out"
  105. end
  106. # add the generated JS bindings
  107. sh "./gendocs.sh"
  108. sh "cp -r out #{ARTIFACTS_FOLDER}/Docs"
  109. end
  110. end
  111. task :generate_examples do
  112. Dir.chdir("#{ARTIFACTS_FOLDER}") do
  113. if Dir.exists?("AtomicExamples")
  114. sh "rm -rf AtomicExamples"
  115. end
  116. if Dir.exists?("Examples")
  117. sh "rm -rf Examples"
  118. end
  119. sh "mkdir Examples"
  120. sh "git clone https://github.com/AtomicGameEngine/AtomicExamples"
  121. Dir.chdir("AtomicExamples") do
  122. sh "git archive master | tar -x -C #{ARTIFACTS_FOLDER}/Examples"
  123. end
  124. end
  125. end
  126. task :player => "macosx:generate_javascript_bindings" do
  127. Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
  128. # add the generated JS bindings
  129. sh "cmake ../../ -DCMAKE_BUILD_TYPE=Release"
  130. sh "make -j8 AtomicPlayer"
  131. end
  132. end
  133. task :editor => ["macosx:player"] do
  134. Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
  135. sh "make -j8 BuildEditorFiles"
  136. end
  137. end
  138. task :atomictool => ["macosx:player", "macosx:editor"] do
  139. Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
  140. sh "make -j8 AtomicTool"
  141. end
  142. end
  143. end
  144. namespace :package do
  145. task :macosx_preflight => ['macosx:clean',
  146. 'iosdeploy',
  147. 'web:player',
  148. 'android:player',
  149. 'ios:player',
  150. "atomictiled:osx",
  151. 'macosx:editor',
  152. 'macosx:atomictool',
  153. 'macosx:generate_examples',
  154. 'macosx:generate_docs'] do
  155. FileUtils.mkdir_p(MACOSX_PACKAGE_FOLDER)
  156. MAC_PLAYER_APP_FOLDER_SRC = "#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicPlayer/AtomicPlayer.app"
  157. MAC_EDITOR_APP_FOLDER_SRC = "#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicEditor/AtomicEditor.app"
  158. # Resources
  159. COREDATA_FOLDER_SRC = "#{$RAKE_ROOT}/Data/AtomicPlayer/Resources/CoreData"
  160. EDITORAPPLICATIONDATA_FOLDER_SRC = "#{$RAKE_ROOT}/Data/AtomicEditor"
  161. # Project Templates
  162. PROJECTTEMPLATES_FOLDER_SRC = "#{EDITORAPPLICATIONDATA_FOLDER_SRC}/ProjectTemplates"
  163. #Examples
  164. #Example info could possibly go in the AtomicExamples repo
  165. EXAMPLEINFO_FOLDER_SRC = "#{EDITORAPPLICATIONDATA_FOLDER_SRC}/ExampleInfo"
  166. EXAMPLES_FOLDER_SRC = "#{ARTIFACTS_FOLDER}/Examples"
  167. #Docs
  168. DOCS_FOLDER_SRC = "#{ARTIFACTS_FOLDER}/Docs"
  169. MAC_EDITOR_APP_FOLDER_DST = "#{MACOSX_PACKAGE_FOLDER}/AtomicEditor.app"
  170. MAC_EDITOR_APP_RESOURCE_FOLDER_DST = "#{MACOSX_PACKAGE_FOLDER}/AtomicEditor.app/Contents/Resources"
  171. # Copy the Editor application
  172. sh "cp -r #{MAC_EDITOR_APP_FOLDER_SRC} #{MACOSX_PACKAGE_FOLDER}/AtomicEditor.app"
  173. DEPLOYMENT_FOLDER_DST = "#{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/Deployment"
  174. # Make Deployment folder
  175. FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER_DST}")
  176. # Copy Resources
  177. sh "cp -r #{COREDATA_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/CoreData"
  178. # Copy Deployment
  179. # MacOS deployment
  180. FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER_DST}/MacOS")
  181. sh "cp -r #{MAC_PLAYER_APP_FOLDER_SRC} #{DEPLOYMENT_FOLDER_DST}/MacOS/AtomicPlayer.app"
  182. # Android Deployment
  183. sh "cp -r #{EDITORAPPLICATIONDATA_FOLDER_SRC}/Deployment/Android #{DEPLOYMENT_FOLDER_DST}/Android"
  184. FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER_DST}/Android/libs/armeabi-v7a")
  185. sh "cp #{CMAKE_ANDROID_BUILD_FOLDER}/Source/AtomicPlayer/libAtomicPlayer.so #{DEPLOYMENT_FOLDER_DST}/Android/libs/armeabi-v7a/libAtomicPlayer.so"
  186. # iOS Deployment
  187. FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER_DST}/IOS/AtomicPlayer.app")
  188. sh "cp #{CMAKE_IOS_BUILD_FOLDER}/Source/AtomicPlayer/Release-iphoneos/AtomicPlayer.app/AtomicPlayer #{DEPLOYMENT_FOLDER_DST}/IOS/AtomicPlayer.app/AtomicPlayer"
  189. sh "cp #{CMAKE_IOS_BUILD_FOLDER}/Source/AtomicPlayer/Release-iphoneos/AtomicPlayer.app/PkgInfo #{DEPLOYMENT_FOLDER_DST}/IOS/AtomicPlayer.app/PkgInfo"
  190. # Web Deployment
  191. sh "cp -r #{EDITORAPPLICATIONDATA_FOLDER_SRC}/Deployment/Web #{DEPLOYMENT_FOLDER_DST}/Web"
  192. sh "cp #{CMAKE_WEB_BUILD_FOLDER}/Source/AtomicPlayer/AtomicPlayer.js #{DEPLOYMENT_FOLDER_DST}/Web/AtomicPlayer.js"
  193. sh "cp -r #{EXAMPLES_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/Examples"
  194. sh "cp -r #{DOCS_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/Docs"
  195. sh "cp -r #{PROJECTTEMPLATES_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/ProjectTemplates"
  196. sh "cp -r #{EXAMPLEINFO_FOLDER_SRC} #{MAC_EDITOR_APP_RESOURCE_FOLDER_DST}/ExampleInfo"
  197. # DEPLOY TILED
  198. APPLICATIONS_FOLDER_DST = "#{MAC_EDITOR_APP_FOLDER_DST}/Contents/Applications"
  199. FileUtils.mkdir_p(APPLICATIONS_FOLDER_DST)
  200. FileUtils.cp_r("#{ATOMICTILED_BUILD_DIR}/bin/Tiled.app", "#{APPLICATIONS_FOLDER_DST}/Tiled.app")
  201. Dir.chdir(APPLICATIONS_FOLDER_DST) do
  202. sh "#{$QT_BIN_DIR}/macdeployqt #{APPLICATIONS_FOLDER_DST}/Tiled.app"
  203. end
  204. FileUtils.mkdir_p("#{APPLICATIONS_FOLDER_DST}/CommandLine")
  205. FileUtils.cp("#{CMAKE_IOSDEPLOY_BUILD_FOLDER}/ios-deploy", "#{APPLICATIONS_FOLDER_DST}/CommandLine/ios-deploy")
  206. FileUtils.cp("#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicTool/AtomicTool", "#{APPLICATIONS_FOLDER_DST}/CommandLine/AtomicTool")
  207. end
  208. task :macosx_editor do
  209. EDITOR_APP_FOLDER = "#{MACOSX_PACKAGE_FOLDER}/AtomicEditor.app"
  210. if (!File.file?("#{EDITOR_APP_FOLDER}/Contents/Resources/Deployment/Win64/AtomicPlayer.exe"))
  211. abort("Missing Windows player, please run rake package:windows_editor from Windows")
  212. end
  213. Dir.chdir("#{MACOSX_PACKAGE_FOLDER}") do
  214. if (File.file?("AtomicEditor_MacOSX.zip"))
  215. sh "rm AtomicEditor_MacOSX.zip"
  216. end
  217. if (File.file?("AtomicEditor_MacOSX.zip"))
  218. abort ("Couldn't remove editor")
  219. end
  220. sh "zip -r AtomicEditor_MacOSX.zip ./AtomicEditor.app"
  221. sh "zip -T AtomicEditor_MacOSX.zip"
  222. end
  223. end
  224. task :windows_preflight => ['windows:clean',
  225. 'windows:editor',
  226. 'windows:atomictool',
  227. 'atomictiled:windows' ] do
  228. ATOMICBUILDBOX_SOURCE_DIR = "#{$RAKE_ROOT}/../AtomicBuildBox/Windows/x64"
  229. EDITOR_APP_FOLDER_DST = "#{WINDOWS_PACKAGE_FOLDER}/AtomicEditor"
  230. FileUtils.mkdir_p(EDITOR_APP_FOLDER_DST)
  231. PLAYER_APP_EXE_SRC = "#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicPlayer/AtomicPlayer.exe"
  232. EDITOR_APP_EXE_SRC = "#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicEditor/AtomicEditor.exe"
  233. DEPLOYMENT_FOLDER = "#{EDITOR_APP_FOLDER_DST}/Deployment/Win64"
  234. # Resources
  235. COREDATA_FOLDER_SRC = "#{$RAKE_ROOT}/Data/AtomicPlayer/Resources/CoreData"
  236. EDITORAPPLICATIONDATA_FOLDER_SRC = "#{$RAKE_ROOT}/Data/AtomicEditor"
  237. # Project Templates
  238. PROJECTTEMPLATES_FOLDER_SRC = "#{EDITORAPPLICATIONDATA_FOLDER_SRC}/ProjectTemplates"
  239. #Examples
  240. #Example info could possibly go in the AtomicExamples repo
  241. EXAMPLEINFO_FOLDER_SRC = "#{EDITORAPPLICATIONDATA_FOLDER_SRC}/ExampleInfo"
  242. # This shouldn't ne in root, used for deployment atm, however the editor can use coredata from pak
  243. FileUtils.cp_r("#{COREDATA_FOLDER_SRC}", "#{EDITOR_APP_FOLDER_DST}/CoreData")
  244. FileUtils.cp("#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicEditor/EditorData.pak", "#{EDITOR_APP_FOLDER_DST}/EditorData.pak")
  245. FileUtils.cp("#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicEditor/CoreData.pak", "#{EDITOR_APP_FOLDER_DST}/CoreData.pak")
  246. FileUtils.cp_r("#{PROJECTTEMPLATES_FOLDER_SRC}", "#{EDITOR_APP_FOLDER_DST}/ProjectTemplates")
  247. FileUtils.cp_r("#{EXAMPLEINFO_FOLDER_SRC}", "#{EDITOR_APP_FOLDER_DST}/ExampleInfo")
  248. FileUtils.mkdir_p("#{DEPLOYMENT_FOLDER}")
  249. FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/D3DCompiler_47.dll", "#{DEPLOYMENT_FOLDER}/D3DCompiler_47.dll")
  250. FileUtils.cp("#{PLAYER_APP_EXE_SRC}", "#{DEPLOYMENT_FOLDER}/AtomicPlayer.exe")
  251. FileUtils.cp("#{EDITOR_APP_EXE_SRC}", "#{EDITOR_APP_FOLDER_DST}/AtomicEditor.exe")
  252. FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/D3DCompiler_47.dll", "#{EDITOR_APP_FOLDER_DST}/D3DCompiler_47.dll")
  253. # DEPLOY TILED
  254. ATOMICTILED_DEPLOYED_DIR = "#{EDITOR_APP_FOLDER_DST}/Applications/AtomicTiled"
  255. FileUtils.mkdir_p(ATOMICTILED_DEPLOYED_DIR)
  256. FileUtils.cp("#{ATOMICTILED_BUILD_DIR}/tiled.exe", "#{ATOMICTILED_DEPLOYED_DIR}")
  257. FileUtils.cp("#{ATOMICTILED_BUILD_DIR}/tiled.dll", "#{ATOMICTILED_DEPLOYED_DIR}")
  258. ENV['PATH'] = "#{$QT_BIN_DIR};" + ENV['PATH']
  259. Dir.chdir(ATOMICTILED_DEPLOYED_DIR) do
  260. sh "windeployqt.exe --release #{ATOMICTILED_DEPLOYED_DIR}/tiled.exe"
  261. FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/msvcp120.dll", "#{ATOMICTILED_DEPLOYED_DIR}/msvcp120.dll")
  262. FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/msvcr120.dll", "#{ATOMICTILED_DEPLOYED_DIR}/msvcr120.dll")
  263. FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/vccorlib120.dll", "#{ATOMICTILED_DEPLOYED_DIR}/vccorlib120.dll")
  264. end
  265. FileUtils.mkdir_p("#{EDITOR_APP_FOLDER_DST}/Applications/CommandLine")
  266. FileUtils.cp("#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicTool/AtomicTool.exe", "#{EDITOR_APP_FOLDER_DST}/Applications/CommandLine/AtomicTool.exe")
  267. end
  268. task :windows_editor do
  269. MAC_ARTIFACTS_SRC = "Z:/Artifacts/MacOSX_Package/AtomicEditor.app/Contents/Resources"
  270. EDITOR_APP_FOLDER_DST = "#{WINDOWS_PACKAGE_FOLDER}/AtomicEditor"
  271. Dir.chdir("#{WINDOWS_PACKAGE_FOLDER}") do
  272. if (File.exists?("AtomicEditor_Windows.zip"))
  273. FileUtils.rm("AtomicEditor_Windows.zip")
  274. end
  275. if (File.exists?("AtomicEditor_Windows.zip"))
  276. abort("Unable to remove AtomicEditor_Windows.zip")
  277. end
  278. end
  279. DEPLOYMENT_FOLDER = "#{EDITOR_APP_FOLDER_DST}/Deployment"
  280. FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Deployment/Android", "#{EDITOR_APP_FOLDER_DST}/Deployment/Android")
  281. FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Deployment/MacOS", "#{EDITOR_APP_FOLDER_DST}/Deployment/MacOS")
  282. FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Deployment/Web", "#{EDITOR_APP_FOLDER_DST}/Deployment/Web")
  283. FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Docs", "#{EDITOR_APP_FOLDER_DST}/Docs")
  284. FileUtils.cp_r("#{MAC_ARTIFACTS_SRC}/Examples", "#{EDITOR_APP_FOLDER_DST}/Examples")
  285. # copy windows player to mac
  286. ATOMICBUILDBOX_SOURCE_DIR = "#{$RAKE_ROOT}/../AtomicBuildBox/Windows/x64"
  287. PLAYER_APP_EXE_SRC = "#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicPlayer/AtomicPlayer.exe"
  288. FileUtils.mkdir_p("#{MAC_ARTIFACTS_SRC}/Deployment/Win64")
  289. FileUtils.cp("#{PLAYER_APP_EXE_SRC}", "#{MAC_ARTIFACTS_SRC}/Deployment/Win64/AtomicPlayer.exe")
  290. FileUtils.cp("#{ATOMICBUILDBOX_SOURCE_DIR}/D3DCompiler_47.dll", "#{MAC_ARTIFACTS_SRC}/Deployment/Win64/D3DCompiler_47.dll")
  291. Dir.chdir("#{WINDOWS_PACKAGE_FOLDER}") do
  292. sh "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip AtomicEditor_Windows.zip AtomicEditor"
  293. sh "\"C:\\Program Files\\7-Zip\\7z.exe\" t AtomicEditor_Windows.zip"
  294. end
  295. end
  296. end
  297. namespace :windows do
  298. CMAKE_WINDOWS_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Windows_Build"
  299. WINDOWS_PACKAGE_FOLDER = "#{ARTIFACTS_FOLDER}/Windows_Package"
  300. task :clean do
  301. folders = ["#{CMAKE_WINDOWS_BUILD_FOLDER}", "#{WINDOWS_PACKAGE_FOLDER}",
  302. "#{ARTIFACTS_FOLDER}/AtomicExamples", "#{ARTIFACTS_FOLDER}/Docs",
  303. "#{ARTIFACTS_FOLDER}/Examples", "#{ARTIFACTS_FOLDER}/AtomicTiled_Build"]
  304. for index in 0 ... folders.size
  305. if Dir.exists?(folders[index])
  306. FileUtils.rmtree(folders[index])
  307. end
  308. if Dir.exists?(folders[index])
  309. abort("Unable to clean #{folders[index]}")
  310. end
  311. end
  312. end
  313. task :cmake do
  314. FileUtils.mkdir_p(CMAKE_WINDOWS_BUILD_FOLDER)
  315. Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
  316. sh "cmake ../../ -G\"NMake Makefiles JOM\" -DCMAKE_BUILD_TYPE=Release"
  317. end
  318. end
  319. task :generate_javascript_bindings => "windows:cmake" do
  320. Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
  321. sh "jom -j4 JSBind"
  322. sh "./Source/AtomicJS/JSBind/JSBind.exe #{$RAKE_ROOT} WINDOWS"
  323. end
  324. end
  325. task :player => "windows:generate_javascript_bindings" do
  326. Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
  327. # add the generated JS bindings
  328. sh "cmake ../../ -G\"NMake Makefiles JOM\" -DCMAKE_BUILD_TYPE=Release"
  329. sh "jom -j4 AtomicPlayer"
  330. end
  331. end
  332. task :editor => "windows:player" do
  333. Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
  334. sh "jom -j4 AtomicEditor"
  335. sh "jom BuildEditorFiles"
  336. end
  337. end
  338. task :atomictool => "windows:editor" do
  339. Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
  340. sh "jom -j4 AtomicTool"
  341. end
  342. end
  343. end
  344. task :iosdeploy do
  345. CMAKE_IOSDEPLOY_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/ios-deploy"
  346. if Dir.exists?(CMAKE_IOSDEPLOY_BUILD_FOLDER)
  347. FileUtils.rmtree(CMAKE_IOSDEPLOY_BUILD_FOLDER)
  348. end
  349. Dir.chdir("#{ARTIFACTS_FOLDER}") do
  350. sh "git clone https://github.com/AtomicGameEngine/ios-deploy"
  351. Dir.chdir("ios-deploy") do
  352. sh "make"
  353. end
  354. end
  355. end
  356. namespace :atomictiled do
  357. task :windows do
  358. ENV['PATH'] = "#{$QT_BIN_DIR};" + ENV['PATH']
  359. FileUtils.mkdir_p(ATOMICTILED_BUILD_DIR)
  360. Dir.chdir(ATOMICTILED_BUILD_DIR) do
  361. sh "qmake.exe -r \"#{ATOMICTILED_SOURCE_DIR}\\tiled.pro\" \"CONFIG+=release\" \"QMAKE_CXXFLAGS+=-DBUILD_INFO_VERSION=ATOMIC_BUILD\""
  362. sh "#{QT_CREATOR_BIN_DIR}\\jom.exe -j8"
  363. end
  364. end
  365. task :osx do
  366. FileUtils.mkdir_p(ATOMICTILED_BUILD_DIR)
  367. Dir.chdir(ATOMICTILED_BUILD_DIR) do
  368. sh "#{$QT_BIN_DIR}/qmake -r \"#{ATOMICTILED_SOURCE_DIR}/tiled.pro\" \"CONFIG+=release\" \"QMAKE_CXXFLAGS+=-DBUILD_INFO_VERSION=ATOMIC_BUILD\""
  369. sh "make -j8"
  370. end
  371. end
  372. end