Rakefile 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  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. $HOST_OS = "linux"
  9. end
  10. $RAKE_ROOT = File.dirname(__FILE__)
  11. ARTIFACTS_FOLDER = "#{$RAKE_ROOT}/Artifacts"
  12. $CMAKE_DEV_BUILD = "-DATOMIC_DEV_BUILD=1"
  13. CMAKE_WINDOWS_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Windows_Build"
  14. CMAKE_MACOSX_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/MacOSX_Build"
  15. CMAKE_ANDROID_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Android_Build"
  16. CMAKE_IOS_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/IOS_Build"
  17. CMAKE_WEB_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Web_Build"
  18. CMAKE_LINUX_BUILD_FOLDER = "#{ARTIFACTS_FOLDER}/Linux_Build"
  19. ATOMICTOOL_BIN_MACOSX = "#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicTool/Release/AtomicTool"
  20. PACKAGE_FOLDER_MACOSX = "#{ARTIFACTS_FOLDER}/MacOSX_Package"
  21. PACKAGE_FOLDER_WINDOWS = "#{ARTIFACTS_FOLDER}/Windows_Package"
  22. namespace :build do
  23. task :macosx_atomictool do
  24. if !Dir.exists?("#{CMAKE_MACOSX_BUILD_FOLDER}")
  25. FileUtils.mkdir_p(CMAKE_MACOSX_BUILD_FOLDER)
  26. end
  27. Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
  28. sh "cmake ../../ -G Xcode -DCMAKE_BUILD_TYPE=Release"
  29. sh "xcodebuild -target AtomicTool -configuration Release"
  30. end
  31. end
  32. task :windows do
  33. # remove existing build folder
  34. if Dir.exists?("#{CMAKE_WINDOWS_BUILD_FOLDER}")
  35. FileUtils.rm_rf("#{CMAKE_WINDOWS_BUILD_FOLDER}")
  36. end
  37. # create build folder
  38. if !Dir.exists?("#{CMAKE_WINDOWS_BUILD_FOLDER}")
  39. FileUtils.mkdir_p(CMAKE_WINDOWS_BUILD_FOLDER)
  40. end
  41. Dir.chdir(CMAKE_WINDOWS_BUILD_FOLDER) do
  42. # ensure VS commandline tools are on the path
  43. VSCOMNTOOLS = ENV['VS140COMNTOOLS']
  44. sh "\"#{VSCOMNTOOLS}vsvars32.bat\""
  45. sh "cmake ../../ #{$CMAKE_DEV_BUILD} -G \"Visual Studio 14 2015\""
  46. # specify 32 bit
  47. sh "msbuild /m Atomic.sln /p:Configuration=Release /p:Platform=Win32"
  48. end
  49. end
  50. task :macosx do
  51. if !Dir.exists?("#{CMAKE_MACOSX_BUILD_FOLDER}")
  52. FileUtils.mkdir_p(CMAKE_MACOSX_BUILD_FOLDER)
  53. end
  54. Dir.chdir(CMAKE_MACOSX_BUILD_FOLDER) do
  55. sh "cmake ../../ -G Xcode #{$CMAKE_DEV_BUILD}"
  56. sh "xcodebuild -configuration Release"
  57. end
  58. # build the Atomic Editor
  59. #Dir.chdir("#{$RAKE_ROOT}/Script/AtomicEditor") do
  60. #sh "tsc"
  61. #end
  62. end
  63. task :linux do
  64. if !Dir.exists?("#{CMAKE_LINUX_BUILD_FOLDER}")
  65. FileUtils.mkdir_p(CMAKE_LINUX_BUILD_FOLDER)
  66. end
  67. Dir.chdir(CMAKE_LINUX_BUILD_FOLDER) do
  68. sh "cmake ../../ -DLINUX=1 -G \"Unix Makefiles\""
  69. sh "make -j2"
  70. end
  71. end
  72. #IOS, dependent on macosx for JSBind
  73. task :ios => "build:macosx_atomictool" do
  74. if !Dir.exists?("#{CMAKE_IOS_BUILD_FOLDER}")
  75. FileUtils.mkdir_p(CMAKE_IOS_BUILD_FOLDER)
  76. end
  77. Dir.chdir(CMAKE_IOS_BUILD_FOLDER) do
  78. sh "#{ATOMICTOOL_BIN_MACOSX} bind #{$RAKE_ROOT} Script/Packages/Atomic/ IOS"
  79. sh "#{ATOMICTOOL_BIN_MACOSX} bind #{$RAKE_ROOT} Script/Packages/AtomicPlayer/ IOS"
  80. sh "cmake -DIOS=1 -DCMAKE_BUILD_TYPE=Release -G Xcode ../../"
  81. # the -s option adds $KEYCHAIN to the search scope, while the -d option adds $KEYCHAIN to the system domain; both are needed
  82. sh "security -v list-keychains -d system -s /Users/jenkins/Library/Keychains/codesign.keychain"
  83. sh "security -v unlock-keychain /Users/jenkins/Library/Keychains/codesign.keychain"
  84. sh "xcodebuild -configuration Release"
  85. end
  86. end
  87. task :android => "build:macosx_atomictool" do
  88. if !Dir.exists?("#{CMAKE_ANDROID_BUILD_FOLDER}")
  89. FileUtils.mkdir_p(CMAKE_ANDROID_BUILD_FOLDER)
  90. end
  91. Dir.chdir(CMAKE_ANDROID_BUILD_FOLDER) do
  92. sh "#{ATOMICTOOL_BIN_MACOSX} bind #{$RAKE_ROOT} Script/Packages/Atomic/ ANDROID"
  93. sh "#{ATOMICTOOL_BIN_MACOSX} bind #{$RAKE_ROOT} Script/Packages/AtomicPlayer/ ANDROID"
  94. sh "cmake -DCMAKE_TOOLCHAIN_FILE=#{$RAKE_ROOT}/CMake/Toolchains/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../"
  95. sh "make -j4"
  96. end
  97. end
  98. task :web => "build:macosx_atomictool" do
  99. if !Dir.exists?("#{CMAKE_WEB_BUILD_FOLDER}")
  100. FileUtils.mkdir_p(CMAKE_WEB_BUILD_FOLDER)
  101. end
  102. Dir.chdir(CMAKE_WEB_BUILD_FOLDER) do
  103. sh "#{ATOMICTOOL_BIN_MACOSX} bind #{$RAKE_ROOT} Script/Packages/Atomic/ WEB"
  104. sh "#{ATOMICTOOL_BIN_MACOSX} bind #{$RAKE_ROOT} Script/Packages/AtomicPlayer/ WEB"
  105. sh "cmake -DEMSCRIPTEN=1 -DATOMIC_BUILD_2D=1 -DCMAKE_TOOLCHAIN_FILE=#{$RAKE_ROOT}/CMake/Toolchains/emscripten.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../"
  106. sh "make -j4"
  107. end
  108. # -s ERROR_ON_UNDEFINED_SYMBOLS=1 (disabled for pthread errors currently on incoming)
  109. Dir.chdir("#{CMAKE_WEB_BUILD_FOLDER}/Source/AtomicPlayer/Application") do
  110. sh "mv AtomicPlayer AtomicPlayer.bc"
  111. sh "emcc -O3 -s USE_PTHREADS=0 -s ASM_JS=1 -s VERBOSE=0 -s USE_SDL=2 -s TOTAL_MEMORY=134217728 -s AGGRESSIVE_VARIABLE_ELIMINATION=1 -s NO_EXIT_RUNTIME=1 ./AtomicPlayer.bc -o ./AtomicPlayer.html"
  112. end
  113. end
  114. end
  115. namespace :clean do
  116. task :macosx do
  117. folders = ["#{CMAKE_MACOSX_BUILD_FOLDER}", "#{PACKAGE_FOLDER_MACOSX}"]
  118. for index in 0 ... folders.size
  119. if Dir.exists?(folders[index])
  120. sh "rm -rf #{folders[index]}"
  121. end
  122. if Dir.exists?(folders[index])
  123. abort("Unable to clean #{folders[index]}")
  124. end
  125. end
  126. end
  127. task :windows do
  128. folders = ["#{CMAKE_WINDOWS_BUILD_FOLDER}", "#{PACKAGE_FOLDER_WINDOWS}"]
  129. for index in 0 ... folders.size
  130. if Dir.exists?(folders[index])
  131. FileUtils.rmtree("#{folders[index]}")
  132. end
  133. if Dir.exists?(folders[index])
  134. abort("Unable to clean #{folders[index]}")
  135. end
  136. end
  137. end
  138. end
  139. namespace :package do
  140. $CMAKE_DEV_BUILD = "-DATOMIC_DEV_BUILD=0"
  141. task :macosx => ["clean:macosx", "build:macosx"] do
  142. FileUtils.mkdir_p("#{PACKAGE_FOLDER_MACOSX}")
  143. MAC_EDITOR_APP_FOLDER_SRC = "#{CMAKE_MACOSX_BUILD_FOLDER}/Source/AtomicEditor/Release/AtomicEditor.app"
  144. sh "cp -r #{MAC_EDITOR_APP_FOLDER_SRC} #{PACKAGE_FOLDER_MACOSX}"
  145. # copy resources
  146. sh "cp -r #{$RAKE_ROOT}/Resources/CoreData #{PACKAGE_FOLDER_MACOSX}/AtomicEditor.app/Contents/Resources/"
  147. sh "cp -r #{$RAKE_ROOT}/Resources/EditorData #{PACKAGE_FOLDER_MACOSX}/AtomicEditor.app/Contents/Resources/"
  148. sh "cp -r #{$RAKE_ROOT}/Resources/PlayerData #{PACKAGE_FOLDER_MACOSX}/AtomicEditor.app/Contents/Resources/"
  149. sh "cp -r #{$RAKE_ROOT}/Script #{PACKAGE_FOLDER_MACOSX}/AtomicEditor.app/Contents/Resources/"
  150. sh "cp -r #{$RAKE_ROOT}/Data/AtomicEditor/ProjectTemplates #{PACKAGE_FOLDER_MACOSX}/AtomicEditor.app/Contents/Resources/"
  151. end
  152. task :windows => ["clean:windows", "build:windows"] do
  153. FileUtils.mkdir_p("#{PACKAGE_FOLDER_WINDOWS}/Resources")
  154. FileUtils.cp("#{CMAKE_WINDOWS_BUILD_FOLDER}/Source/AtomicEditor/Release/AtomicEditor.exe", "#{PACKAGE_FOLDER_WINDOWS}/AtomicEditor.exe" )
  155. #32 bit build for packaging!
  156. FileUtils.cp("#{$RAKE_ROOT}/Build/Windows/Binaries/x86/D3DCompiler_47.dll", "#{PACKAGE_FOLDER_WINDOWS}/D3DCompiler_47.dll" )
  157. # copy resources
  158. FileUtils.cp_r("#{$RAKE_ROOT}/Resources/CoreData", "#{PACKAGE_FOLDER_WINDOWS}/Resources");
  159. FileUtils.cp_r("#{$RAKE_ROOT}/Resources/EditorData", "#{PACKAGE_FOLDER_WINDOWS}/Resources");
  160. FileUtils.cp_r("#{$RAKE_ROOT}/Resources/PlayerData", "#{PACKAGE_FOLDER_WINDOWS}/Resources");
  161. FileUtils.cp_r("#{$RAKE_ROOT}/Script", "#{PACKAGE_FOLDER_WINDOWS}/Resources");
  162. FileUtils.cp_r("#{$RAKE_ROOT}/Data/AtomicEditor/ProjectTemplates", "#{PACKAGE_FOLDER_WINDOWS}/Resources");
  163. end
  164. end