blob: dbd53f2018ececdaab56fdaa222ecc3484a7e14e [file] [log] [blame]
Kai Ninomiyaad7831f2020-06-09 18:22:08 -07001/* eslint-disable node/no-unpublished-require */
2/* eslint-disable prettier/prettier */
3/* eslint-disable no-console */
4
Kai Ninomiya00ea1162019-10-11 16:44:14 -04005module.exports = function (grunt) {
Kai Ninomiya450c54e2018-12-27 00:09:44 +00006 // Project configuration.
7 grunt.initConfig({
Kai Ninomiya2c554492019-06-17 18:25:05 -07008 pkg: grunt.file.readJSON('package.json'),
Kai Ninomiya450c54e2018-12-27 00:09:44 +00009
Kai Ninomiyadc98c8d2020-01-06 19:36:00 -080010 clean: {
Austin Engcdc88042021-04-05 15:32:51 -070011 out: ['out/', 'out-wpt/', 'out-node/'],
Kai Ninomiyadc98c8d2020-01-06 19:36:00 -080012 },
Kai Ninomiyac6ebe292018-12-27 02:39:54 +000013
14 run: {
Kai Ninomiya2b894ca2019-06-26 16:48:50 -070015 'generate-version': {
Kai Ninomiyacb7e03d2019-08-02 19:19:48 -070016 cmd: 'node',
17 args: ['tools/gen_version'],
Kai Ninomiya2b894ca2019-06-26 16:48:50 -070018 },
Kai Ninomiya00ea1162019-10-11 16:44:14 -040019 'generate-listings': {
20 cmd: 'node',
Kai Ninomiya0dd77362022-01-24 15:33:46 -080021 args: ['tools/gen_listings', 'out/', 'src/webgpu', 'src/stress', 'src/manual', 'src/unittests', 'src/demo'],
Kai Ninomiya00ea1162019-10-11 16:44:14 -040022 },
23 'generate-wpt-cts-html': {
24 cmd: 'node',
Kai Ninomiya8ec39402021-11-01 11:25:52 -070025 args: ['tools/gen_wpt_cts_html', 'out-wpt/cts.https.html', 'src/common/templates/cts.https.html'],
Kai Ninomiya00ea1162019-10-11 16:44:14 -040026 },
Kai Ninomiyaad7831f2020-06-09 18:22:08 -070027 unittest: {
Kai Ninomiyacb7e03d2019-08-02 19:19:48 -070028 cmd: 'node',
Luca Casonatod5536f82021-09-10 01:50:25 +020029 args: ['tools/run_node', 'unittests:*'],
Kai Ninomiya190a5302019-06-18 19:49:54 -070030 },
Kai Ninomiya2c554492019-06-17 18:25:05 -070031 'build-out': {
Kai Ninomiyacb7e03d2019-08-02 19:19:48 -070032 cmd: 'node',
François Beaufortcb55a622019-09-19 13:02:58 +020033 args: [
34 'node_modules/@babel/cli/bin/babel',
Kai Ninomiya20bc11b2020-03-31 14:45:44 -070035 '--extensions=.ts',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -070036 '--source-maps=true',
Kai Ninomiya20bc11b2020-03-31 14:45:44 -070037 '--out-dir=out/',
François Beaufortcb55a622019-09-19 13:02:58 +020038 'src/',
39 ],
Kai Ninomiya80a62622019-04-15 16:15:14 -070040 },
Kai Ninomiyaad7831f2020-06-09 18:22:08 -070041 'build-out-wpt': {
42 cmd: 'node',
43 args: [
44 'node_modules/@babel/cli/bin/babel',
45 '--extensions=.ts',
46 '--source-maps=false',
47 '--delete-dir-on-start',
48 '--out-dir=out-wpt/',
49 'src/',
50 '--only=src/common/framework/',
51 '--only=src/common/runtime/helper/',
52 '--only=src/common/runtime/wpt.ts',
53 '--only=src/webgpu/',
54 // These files will be generated, instead of compiled from TypeScript.
Kai Ninomiya374a2c82021-06-08 18:44:42 -070055 '--ignore=src/common/internal/version.ts',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -070056 '--ignore=src/webgpu/listing.ts',
57 ],
58 },
Austin Engcdc88042021-04-05 15:32:51 -070059 'build-out-node': {
Austin Eng5f1926b2021-03-16 08:30:29 -070060 cmd: 'node',
61 args: [
62 'node_modules/typescript/lib/tsc.js',
Austin Engcdc88042021-04-05 15:32:51 -070063 '--project', 'node.tsconfig.json',
64 '--outDir', 'out-node/',
Ben Clayton54bf5c22021-10-19 17:32:58 +010065 '--incremental', 'true',
66 '--tsBuildInfoFile', 'out-node/build.tsbuildinfo',
Austin Eng5f1926b2021-03-16 08:30:29 -070067 '--noEmit', 'false',
68 '--declaration', 'false'
69 ],
70 },
Yan, Shaoboc53abb72021-07-28 09:33:51 +080071 'copy-assets': {
72 cmd: 'node',
73 args: [
74 'node_modules/@babel/cli/bin/babel',
75 'src/resources/',
76 '--out-dir=out/resources/',
77 '--copy-files'
78 ],
79 },
80 'copy-assets-wpt': {
81 cmd: 'node',
82 args: [
83 'node_modules/@babel/cli/bin/babel',
84 'src/resources/',
85 '--out-dir=out-wpt/resources/',
86 '--copy-files'
87 ],
88 },
Austin Eng639527e2020-04-14 16:20:36 -070089 lint: {
Kai Ninomiyacb7e03d2019-08-02 19:19:48 -070090 cmd: 'node',
Kai Ninomiya26b45b22020-05-29 14:59:43 -070091 args: ['node_modules/eslint/bin/eslint', 'src/**/*.ts', '--max-warnings=0'],
Kai Ninomiyacb7e03d2019-08-02 19:19:48 -070092 },
Austin Engcd7e9e92022-04-13 16:22:23 -070093 presubmit: {
94 cmd: 'node',
95 args: ['tools/presubmit'],
96 },
Austin Eng639527e2020-04-14 16:20:36 -070097 fix: {
Kai Ninomiyacb7e03d2019-08-02 19:19:48 -070098 cmd: 'node',
Austin Eng639527e2020-04-14 16:20:36 -070099 args: ['node_modules/eslint/bin/eslint', 'src/**/*.ts', '--fix'],
Kai Ninomiyacb7e03d2019-08-02 19:19:48 -0700100 },
Kai Ninomiya8ffa3542020-06-09 18:26:19 -0700101 'autoformat-out-wpt': {
102 cmd: 'node',
Kai Ninomiya40e337a2020-06-15 20:59:13 -0700103 args: ['node_modules/prettier/bin-prettier', '--loglevel=warn', '--write', 'out-wpt/**/*.js'],
Kai Ninomiyad40a30f2021-06-08 18:10:59 -0700104 },
105 tsdoc: {
106 cmd: 'node',
107 args: ['node_modules/typedoc/bin/typedoc'],
108 },
Kai Ninomiyad9d1bdc2022-03-09 14:50:10 -0800109 'tsdoc-treatWarningsAsErrors': {
110 cmd: 'node',
111 args: ['node_modules/typedoc/bin/typedoc', '--treatWarningsAsErrors'],
112 },
Kai Ninomiyaccdb2c22021-09-29 15:26:57 -0700113
114 serve: {
115 cmd: 'node',
116 args: ['node_modules/http-server/bin/http-server', '-p8080', '-a127.0.0.1', '-c-1']
117 }
Kai Ninomiyac6ebe292018-12-27 02:39:54 +0000118 },
119
Kai Ninomiya94388f42019-06-26 17:53:20 -0700120 copy: {
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700121 'out-wpt-generated': {
Kai Ninomiyad07072a2019-07-26 15:20:09 -0700122 files: [
Kai Ninomiya374a2c82021-06-08 18:44:42 -0700123 { expand: true, cwd: 'out', src: 'common/internal/version.js', dest: 'out-wpt/' },
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700124 { expand: true, cwd: 'out', src: 'webgpu/listing.js', dest: 'out-wpt/' },
125 ],
126 },
127 'out-wpt-htmlfiles': {
128 files: [
Yan, Shaobod96bee32020-04-23 10:55:52 +0800129 { expand: true, cwd: 'src', src: 'webgpu/**/*.html', dest: 'out-wpt/' },
Kai Ninomiyad07072a2019-07-26 15:20:09 -0700130 ],
Kai Ninomiya94388f42019-06-26 17:53:20 -0700131 },
132 },
133
Kai Ninomiyac6ebe292018-12-27 02:39:54 +0000134 ts: {
Kai Ninomiyac3202822019-06-26 16:47:44 -0700135 check: {
Kai Ninomiya0c6121a2019-01-07 17:27:17 -0800136 tsconfig: {
Kai Ninomiya2c554492019-06-17 18:25:05 -0700137 tsconfig: 'tsconfig.json',
Kai Ninomiya0c6121a2019-01-07 17:27:17 -0800138 passThrough: true,
139 },
140 },
Kai Ninomiya450c54e2018-12-27 00:09:44 +0000141 },
Kai Ninomiya450c54e2018-12-27 00:09:44 +0000142 });
143
Kai Ninomiya2c554492019-06-17 18:25:05 -0700144 grunt.loadNpmTasks('grunt-contrib-clean');
Kai Ninomiya94388f42019-06-26 17:53:20 -0700145 grunt.loadNpmTasks('grunt-contrib-copy');
Kai Ninomiya2c554492019-06-17 18:25:05 -0700146 grunt.loadNpmTasks('grunt-run');
147 grunt.loadNpmTasks('grunt-ts');
Kai Ninomiya450c54e2018-12-27 00:09:44 +0000148
Kai Ninomiyae3268372019-07-01 10:31:55 -0700149 const helpMessageTasks = [];
150 function registerTaskAndAddToHelp(name, desc, deps) {
Kai Ninomiyac6ebe292018-12-27 02:39:54 +0000151 grunt.registerTask(name, deps);
Kai Ninomiyae3268372019-07-01 10:31:55 -0700152 addExistingTaskToHelp(name, desc);
153 }
154 function addExistingTaskToHelp(name, desc) {
155 helpMessageTasks.push({ name, desc });
Kai Ninomiyac6ebe292018-12-27 02:39:54 +0000156 }
157
Kai Ninomiyafc235402020-01-10 15:41:07 -0800158 grunt.registerTask('set-quiet-mode', () => {
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700159 grunt.log.write('Running tasks');
Kai Ninomiyafc235402020-01-10 15:41:07 -0800160 require('quiet-grunt');
161 });
162
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700163 grunt.registerTask('build-standalone', 'Build out/ (no checks, no WPT)', [
Kai Ninomiya2c554492019-06-17 18:25:05 -0700164 'run:build-out',
Yan, Shaoboc53abb72021-07-28 09:33:51 +0800165 'run:copy-assets',
Kai Ninomiya2b894ca2019-06-26 16:48:50 -0700166 'run:generate-version',
Kai Ninomiya2c554492019-06-17 18:25:05 -0700167 'run:generate-listings',
Kai Ninomiya8803c5e2020-01-10 11:22:45 -0800168 ]);
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700169 grunt.registerTask('build-wpt', 'Build out/ (no checks)', [
170 'run:build-out-wpt',
Yan, Shaoboc53abb72021-07-28 09:33:51 +0800171 'run:copy-assets-wpt',
Kai Ninomiya8ffa3542020-06-09 18:26:19 -0700172 'run:autoformat-out-wpt',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700173 'run:generate-version',
174 'run:generate-listings',
175 'copy:out-wpt-generated',
176 'copy:out-wpt-htmlfiles',
Kai Ninomiya00ea1162019-10-11 16:44:14 -0400177 'run:generate-wpt-cts-html',
Kai Ninomiyac6ebe292018-12-27 02:39:54 +0000178 ]);
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700179 grunt.registerTask('build-done-message', () => {
Kai Ninomiyafc235402020-01-10 15:41:07 -0800180 process.stderr.write('\nBuild completed! Running checks/tests');
Kai Ninomiya8803c5e2020-01-10 11:22:45 -0800181 });
Kai Ninomiyac6ebe292018-12-27 02:39:54 +0000182
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700183 registerTaskAndAddToHelp('pre', 'Run all presubmit checks: standalone+wpt+typecheck+unittest+lint', [
Kai Ninomiyafc235402020-01-10 15:41:07 -0800184 'set-quiet-mode',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700185 'clean',
186 'build-standalone',
187 'build-wpt',
Austin Engcdc88042021-04-05 15:32:51 -0700188 'run:build-out-node',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700189 'build-done-message',
190 'ts:check',
Austin Engcd7e9e92022-04-13 16:22:23 -0700191 'run:presubmit',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700192 'run:unittest',
Austin Eng639527e2020-04-14 16:20:36 -0700193 'run:lint',
Kai Ninomiyad9d1bdc2022-03-09 14:50:10 -0800194 'run:tsdoc-treatWarningsAsErrors',
Kai Ninomiya8803c5e2020-01-10 11:22:45 -0800195 ]);
Kai Ninomiya971207d2020-11-17 19:30:48 -0800196 registerTaskAndAddToHelp('standalone', 'Build standalone and typecheck', [
Kai Ninomiyafc235402020-01-10 15:41:07 -0800197 'set-quiet-mode',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700198 'build-standalone',
199 'build-done-message',
Kai Ninomiya8803c5e2020-01-10 11:22:45 -0800200 'ts:check',
Kai Ninomiya8803c5e2020-01-10 11:22:45 -0800201 ]);
Kai Ninomiya971207d2020-11-17 19:30:48 -0800202 registerTaskAndAddToHelp('wpt', 'Build for WPT and typecheck', [
Kai Ninomiyaa4bbb6a2020-01-10 18:23:30 -0800203 'set-quiet-mode',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700204 'build-wpt',
205 'build-done-message',
Kai Ninomiyaa4bbb6a2020-01-10 18:23:30 -0800206 'ts:check',
Kai Ninomiya971207d2020-11-17 19:30:48 -0800207 ]);
208 registerTaskAndAddToHelp('unittest', 'Build standalone, typecheck, and unittest', [
209 'standalone',
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700210 'run:unittest',
Kai Ninomiyaa4bbb6a2020-01-10 18:23:30 -0800211 ]);
Kai Ninomiya971207d2020-11-17 19:30:48 -0800212 registerTaskAndAddToHelp('check', 'Just typecheck', [
Kai Ninomiyafc235402020-01-10 15:41:07 -0800213 'set-quiet-mode',
Kai Ninomiyae3268372019-07-01 10:31:55 -0700214 'ts:check',
Austin Eng639527e2020-04-14 16:20:36 -0700215 ]);
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700216
Kai Ninomiyaccdb2c22021-09-29 15:26:57 -0700217 registerTaskAndAddToHelp('serve', 'Serve out/ on 127.0.0.1:8080 (does NOT compile source)', ['run:serve']);
Austin Eng639527e2020-04-14 16:20:36 -0700218 registerTaskAndAddToHelp('fix', 'Fix lint and formatting', ['run:fix']);
Kai Ninomiya8803c5e2020-01-10 11:22:45 -0800219
Kai Ninomiyaad7831f2020-06-09 18:22:08 -0700220 addExistingTaskToHelp('clean', 'Clean out/ and out-wpt/');
221
Kai Ninomiya2c554492019-06-17 18:25:05 -0700222 grunt.registerTask('default', '', () => {
Kai Ninomiya8803c5e2020-01-10 11:22:45 -0800223 console.error('\nAvailable tasks (see grunt --help for info):');
Kai Ninomiyae3268372019-07-01 10:31:55 -0700224 for (const { name, desc } of helpMessageTasks) {
Kai Ninomiya8803c5e2020-01-10 11:22:45 -0800225 console.error(`$ grunt ${name}`);
226 console.error(` ${desc}`);
Kai Ninomiyac6ebe292018-12-27 02:39:54 +0000227 }
228 });
Kai Ninomiya450c54e2018-12-27 00:09:44 +0000229};