1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 # 6 # This script allows you to build, upload, and publish demo binaries that will 7 # go on Google Cloud Storage. 8 # 9 # NOTE: you normally should not upload examples. This will be done 10 # automatically by the buildbots. 11 # 12 # Building 13 # -------- 14 # 15 # * Build all examples. 16 # 17 # $ make 18 # 19 # * Build a specific example. 20 # 21 # $ make bullet 22 # 23 # Uploading 24 # --------- 25 # 26 # * Build and upload all examples. 27 # 28 # $ make upload REVISION=1234 29 # 30 # * Build and upload a single example 31 # 32 # $ make upload-bullet REVISION=1234 33 # 34 # Publishing 35 # ---------- 36 # 37 # * Publish binaries for all examples. 38 # 39 # $ make publish REVISION=1234 40 # 41 # * Publish binaries for one example. 42 # 43 # $ make publish-bullet REVISION=1234 44 # 45 46 ifeq (,$(NACL_SDK_ROOT)) 47 $(error NACL_SDK_ROOT is not defined) 48 endif 49 50 # Define default build target 51 all: 52 53 # 54 # All projects built by this Makefile 55 # 56 PROJECTS = earth voronoi life bullet lua smoothlife cube 57 58 GS_URL_CONTINUOUS = gs://gonacl/demos/continuous 59 GS_URL_PUBLISH = gs://gonacl/demos/publish 60 61 # 62 # Each project must define the following variables. All paths should be 63 # absolute paths. 64 # 65 # foo_SRCS: src files for this project 66 # foo_TGTS: generated files for this project 67 # foo_EXTRA_UPLOADS: additional files to upload for this project (optional) 68 # 69 # And a recipe to build TGTS from SRCS: 70 # $(foo_TGTS): $(foo_SRCS) 71 # ... 72 # 73 74 # 75 # Earth 76 # 77 earth_SRC_DIR = earth 78 earth_TGT_DIR = earth/pnacl/Release 79 earth_JPG_DIR = ../../examples/demo/earth 80 earth_SRCS = $(earth_SRC_DIR)/earth.cc \ 81 $(earth_SRC_DIR)/Makefile \ 82 common/fps.h 83 earth_TGTS = $(earth_TGT_DIR)/earth.pexe \ 84 $(earth_TGT_DIR)/earth.nmf 85 earth_JPGS = $(earth_JPG_DIR)/earth.jpg \ 86 $(earth_JPG_DIR)/earthnight.jpg 87 earth_EXTRA_UPLOADS = $(earth_JPGS) 88 89 $(earth_TGTS): $(earth_SRCS) 90 $(MAKE) -C earth TOOLCHAIN=pnacl CONFIG=Release 91 92 93 # 94 # Bullet 95 # 96 bullet_SRC_DIR = bullet 97 bullet_TGT_DIR = bullet/out 98 bullet_SRCS = $(bullet_SRC_DIR)/build.sh \ 99 $(bullet_SRC_DIR)/Makefile 100 bullet_TGTS = $(bullet_TGT_DIR)/NaClAMBullet.pexe \ 101 $(bullet_TGT_DIR)/NaClAMBullet.nmf 102 103 $(bullet_TGTS): $(bullet_SRCS) 104 bullet/build.sh 105 106 # 107 # Lua 108 # 109 lua_SRC_DIR = lua 110 lua_TGT_DIR = lua/out/naclports/src/out/publish/lua/pnacl 111 lua_SRCS = $(lua_SRC_DIR)/build.sh 112 lua_TGTS = $(lua_TGT_DIR)/lua.pexe \ 113 $(lua_TGT_DIR)/scimark.lua \ 114 $(lua_TGT_DIR)/binarytrees.lua \ 115 $(lua_TGT_DIR)/luadata.tar \ 116 $(lua_TGT_DIR)/lua.nmf \ 117 $(lua_TGT_DIR)/hterm.concat.js 118 119 $(lua_TGTS): $(lua_SRCS) 120 lua/build.sh 121 122 # 123 # Voronoi 124 # 125 voronoi_SRC_DIR = voronoi 126 voronoi_TGT_DIR = voronoi/pnacl/Release 127 voronoi_SRCS = $(voronoi_SRC_DIR)/voronoi.cc \ 128 $(voronoi_SRC_DIR)/Makefile \ 129 common/fps.h 130 voronoi_TGTS = $(voronoi_TGT_DIR)/voronoi.pexe \ 131 $(voronoi_TGT_DIR)/voronoi.nmf 132 133 $(voronoi_TGTS): $(voronoi_SRCS) 134 $(MAKE) -C voronoi TOOLCHAIN=pnacl CONFIG=Release 135 136 # 137 # Life 138 # 139 life_SRC_DIR = life 140 life_TGT_DIR = life/pnacl/Release 141 life_SRCS = $(life_SRC_DIR)/life.c \ 142 $(life_SRC_DIR)/Makefile \ 143 common/fps.h 144 life_TGTS = $(life_TGT_DIR)/life.pexe \ 145 $(life_TGT_DIR)/life.nmf 146 147 $(life_TGTS): $(life_SRCS) 148 $(MAKE) -C life TOOLCHAIN=pnacl CONFIG=Release 149 150 # 151 # SmoothLife 152 # 153 smoothlife_SRC_DIR = smoothlife 154 smoothlife_TGT_DIR = smoothlife/out 155 smoothlife_SRCS = $(smoothlife_SRC_DIR)/build.sh 156 smoothlife_TGTS = $(smoothlife_TGT_DIR)/smoothnacl.pexe \ 157 $(smoothlife_TGT_DIR)/smoothnacl.nmf 158 159 $(smoothlife_TGTS): $(smoothlife_SRCS) 160 smoothlife/build.sh 161 162 163 # 164 # Rotating Cube 165 # 166 cube_SRC_DIR = cube 167 cube_TGT_DIR = cube/pnacl/Release 168 cube_SRCS = $(cube_SRC_DIR)/cube.cc \ 169 $(cube_SRC_DIR)/matrix.cc \ 170 $(cube_SRC_DIR)/matrix.h \ 171 $(cube_SRC_DIR)/texture.cc \ 172 $(cube_SRC_DIR)/Makefile \ 173 common/fps.h 174 cube_TGTS = $(cube_TGT_DIR)/cube.pexe \ 175 $(cube_TGT_DIR)/cube.nmf 176 177 $(cube_TGTS): $(cube_SRCS) 178 $(MAKE) -C cube TOOLCHAIN=pnacl CONFIG=Release 179 180 ############################################################################### 181 182 SHELL = /bin/bash 183 184 OSHELPERS = python $(NACL_SDK_ROOT)/tools/oshelpers.py 185 GETOS := python $(NACL_SDK_ROOT)/tools/getos.py 186 WHICH := $(OSHELPERS) which 187 188 # Try the location of gsutil on the bots first... 189 BOT_GSUTIL = /b/build/scripts/slave/gsutil 190 ifneq (,$(wildcard $(BOT_GSUTIL))) 191 GSUTIL = $(BOT_GSUTIL) 192 else 193 GSUTIL = $(shell $(WHICH) gsutil) 194 ifeq (,$(wildcard $(GSUTIL))) 195 $(error Unable to find gstuil) 196 endif 197 endif 198 199 # 200 # Define some variables for the given project. 201 # 202 # FOO_UPLOADS: 203 # All files to upload for this project. 204 # FOO_CONTINUOUS_DIR: 205 # URL of the continuous build directory for this 206 # project and revision. 207 # FOO_CONTINUOUS_UPLOADS: 208 # URLs of all files that will be uploaded for this 209 # project and revision. 210 # FOO_PUBLISH_DIR: 211 # URL of the publish directory for this project and revision. 212 # 213 # $1 = NAME (e.g. earth) 214 # 215 define PROJECT 216 $(1)_UPLOADS = $$($(1)_TGTS) $$($(1)_EXTRA_UPLOADS) 217 $(1)_CONTINUOUS_DIR = $(GS_URL_CONTINUOUS)/$(REVISION)/$(1)/ 218 $(1)_CONTINUOUS_UPLOADS = $$(addprefix $$($(1)_CONTINUOUS_DIR),$$(notdir $$($(1)_UPLOADS))) 219 $(1)_PUBLISH_DIR = $(GS_URL_PUBLISH)/$(REVISION)/$(1)/ 220 221 all: $$($(1)_TGTS) 222 223 .PHONY: $(1) 224 $(1): $$($(1)_TGTS) 225 endef 226 227 228 # 229 # Define rules to upload the project files to the continuous builder directory 230 # on CDS. 231 # 232 # $1 = NAME (e.g. earth) 233 # 234 define UPLOAD_RULE 235 .PHONY: upload-$(1) 236 upload-$(1): revision-check 237 @echo "Uploading $$(notdir $$($(1)_UPLOADS)) to $$($(1)_CONTINUOUS_DIR)" 238 @$(GSUTIL) cp -q -a public-read $$($(1)_UPLOADS) $$($(1)_CONTINUOUS_DIR) 239 240 upload: upload-$(1) 241 endef 242 243 # 244 # Define rules to copy the project files from the continuous builder 245 # directory to the publish directory. 246 # 247 # $1 = NAME (e.g. earth) 248 # 249 define PUBLISH_RULE 250 .PHONY: publish-$(1) 251 publish-$(1): revision-check 252 @echo "Testing that files to publish '$(1)' exist on CDS..." 253 @$(GSUTIL) ls $$($(1)_CONTINUOUS_UPLOADS) 254 @echo OK. 255 @echo "About to publish revision $(REVISION) of '$(1)'..." 256 @read -p "Continue? " -n 1 -r && \ 257 echo && \ 258 if [[ ! $$$${REPLY} =~ ^[Yy]$$$$ ]]; then \ 259 exit 1; \ 260 fi; 261 @echo "Publishing..." 262 @$(GSUTIL) cp -q -p $$($(1)_CONTINUOUS_UPLOADS) $$($(1)_PUBLISH_DIR) 263 @echo "Done." 264 265 publish: publish-$(1) 266 endef 267 268 269 ############################################################################### 270 # RULES 271 272 .PHONY: all 273 all: 274 275 $(foreach project,$(PROJECTS),$(eval $(call PROJECT,$(project)))) 276 277 .PHONY: revision-check 278 revision-check: 279 ifeq (,$(REVISION)) 280 $(error Unknown revision number. Run with REVSION=<...>) 281 endif 282 283 .PHONY: upload 284 upload: all 285 286 .PHONY: publish 287 publish: 288 289 $(foreach project,$(PROJECTS),$(eval $(call UPLOAD_RULE,$(project)))) 290 $(foreach project,$(PROJECTS),$(eval $(call PUBLISH_RULE,$(project)))) 291