# This target should be run when new files are added or includes changed. This should be
# faster than generate_force because it only runs gazelle on a subset of all Skia files.
generate:
	bazelisk build @org_skia_go_infra//bazel/gazelle:gazelle_cpp
	# We ask git for any file that has changed when compared to origin/main and have gazelle
	# look only at those files. If the diff would be empty, we do not want to run gazelle on
	# every file in Skia, so we add in one folder (example) as a sentinel value. This folder
	# was chosen because there are only a few files in it, so it should be fast to analyze.
	cd .. && git diff --name-only origin/main -- include/ src/ tools/ gm/ tests/ \
		modules/skshaper modules/svg modules/skresources modules/skparagraph modules/skunicode \
		modules/skottie modules/skresources modules/sksg experimental/ffmpeg \
		modules/particles \
		experimental/bazel_test example \
		modules/canvaskit/go \
		infra/bots/task_drivers | \
		xargs bazel-bin/external/org_skia_go_infra/bazel/gazelle/gazelle_cpp_/gazelle_cpp update \
		--third_party_file_map="third_party/file_map_for_bazel.json" example/

# This will force all the folders we care about to have their build files generated. This should
# be run by the CI and locally only when we opt-in a new folder. Any changes here should be
# mirrored in the make generate rule.
generate_force:
	bazelisk build @org_skia_go_infra//bazel/gazelle:gazelle_cpp
	cd .. && bazel-bin/external/org_skia_go_infra/bazel/gazelle/gazelle_cpp_/gazelle_cpp update \
		--third_party_file_map="third_party/file_map_for_bazel.json" \
		include src tools gm tests \
		modules/skshaper modules/svg modules/skresources modules/skparagraph modules/skunicode \
		modules/skottie modules/skresources modules/sksg experimental/ffmpeg \
		modules/particles \
		experimental/bazel_test example \
		modules/canvaskit/go \
		infra/bots/task_drivers

# This target should be run after the go.mod file is updated (e.g. version rolls or new updates)
gazelle_update_repo:
	cd .. && bazelisk run //:gazelle -- update-repos -from_file=go.mod -to_macro=go_repositories.bzl%go_repositories

# Run this target to test all known working Bazel builds
known_good_builds:
	bazelisk build //experimental/bazel_test/... --config=clang_linux
	bazelisk run //experimental/bazel_test:bazel_test_exe --config=clang_linux
	bazelisk build //:skia_core --config=clang_linux
	bazelisk build //src/sksl/lex:sksllex --config=clang_linux
	bazelisk build //tools/skdiff --config=clang_linux
	bazelisk build //tools/skslc --config=clang_linux
	bazelisk build //modules/canvaskit:canvaskit_wasm --compilation_mode opt --sandbox_base=/dev/shm

	# Test the enforcement of include what you use
	bazelisk build //example:hello_world_gl --config=clang_linux --features skia_enforce_iwyu
 	# Both with and without a GPU backend should be error free (i.e. IWYU should let us
 	# conditionally import things.
	bazelisk build //src/svg/... --config=clang_linux --features skia_enforce_iwyu \
		--gpu_backend=gl_backend --include_decoder=jpeg_decode_codec
	bazelisk build //src/svg/... --config=clang_linux --features skia_enforce_iwyu
	bazelisk build //tools/debugger --config=clang_linux --gpu_backend=gl_backend \
		--features skia_enforce_iwyu
	bazelisk build //:skia_core --config=clang_linux --features skia_enforce_iwyu
	bazelisk build //src/utils/... --config=clang_linux --features skia_enforce_iwyu
	bazelisk build //src/utils/... --config=clang_linux --gpu_backend=gl_backend \
		--features skia_enforce_iwyu

rbe_known_good_builds:
	bazelisk build //experimental/bazel_test/... --config=linux_rbe
	bazelisk run //experimental/bazel_test:bazel_test_exe --config=linux_rbe
	bazelisk build //:skia_core --config=linux_rbe
	bazelisk build //src/sksl/lex:sksllex --config=linux_rbe
	bazelisk build //tools/skdiff --config=linux_rbe
	bazelisk build //tools/skslc --config=linux_rbe
	# TODO(kjlubick) CanvasKit in release mode (i.e. with Closure) requires
	# https://github.com/emscripten-core/emscripten/pull/16640 to land
	bazelisk build //modules/canvaskit:canvaskit_wasm --compilation_mode dbg --config=linux_rbe \
		--jobs 100

	# Test the enforcement of include what you use
	bazelisk build //example:hello_world_gl --config=linux_rbe --features skia_enforce_iwyu
 	# Both with and without a GPU backend should be error free (i.e. IWYU should let us
 	# conditionally import things.
	bazelisk build //src/svg/... --config=linux_rbe --features skia_enforce_iwyu \
		--gpu_backend=gl_backend --include_decoder=jpeg_decode_codec
	bazelisk build //src/svg/... --config=linux_rbe --features skia_enforce_iwyu
	bazelisk build //tools/debugger --config=linux_rbe --gpu_backend=gl_backend \
		--features skia_enforce_iwyu
	bazelisk build //:skia_core --config=linux_rbe --features skia_enforce_iwyu
