Binary size reduction from cfl removal

For CONFIG_REALTIME_ONLY && !CONFIG_AV1_DECODER:
remove cfl tool.

~3.2% reduction in binary size, for arm64 build,
with build flags:
-DCONFIG_REALTIME_ONLY=1 -DCONFIG_AV1_HIGHBITDEPTH=0
-DCONFIG_QUANT_MATRIX=0 -DCONFIG_AV1_DECODER=0

Bug: aomedia:3248
Change-Id: I0a055ebddbde55fb1bd3ea83924a1dd17b3f834f
diff --git a/av1/av1.cmake b/av1/av1.cmake
index 9a0dff8..a9abf93 100644
--- a/av1/av1.cmake
+++ b/av1/av1.cmake
@@ -549,7 +549,8 @@
 
 if(CONFIG_REALTIME_ONLY)
   if(NOT CONFIG_AV1_DECODER)
-    list(REMOVE_ITEM AOM_AV1_COMMON_SOURCES
+    list(REMOVE_ITEM AOM_AV1_COMMON_SOURCES "${AOM_ROOT}/av1/common/cfl.c"
+                     "${AOM_ROOT}/av1/common/cfl.h"
                      "${AOM_ROOT}/av1/common/restoration.c"
                      "${AOM_ROOT}/av1/common/restoration.h"
                      "${AOM_ROOT}/av1/common/warped_motion.c"
@@ -557,6 +558,7 @@
                      "${AOM_ROOT}/av1/common/warp_plane_sve.c")
 
     list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_SSE2
+                     "${AOM_ROOT}/av1/common/x86/cfl_sse2.c"
                      "${AOM_ROOT}/av1/common/x86/warp_plane_sse2.c"
                      "${AOM_ROOT}/av1/common/x86/wiener_convolve_sse2.c")
 
@@ -567,9 +569,11 @@
 
     list(
       REMOVE_ITEM AOM_AV1_COMMON_INTRIN_SSSE3
+                  "${AOM_ROOT}/av1/common/x86/cfl_ssse3.c"
                   "${AOM_ROOT}/av1/common/x86/highbd_wiener_convolve_ssse3.c")
 
     list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_AVX2
+                     "${AOM_ROOT}/av1/common/x86/cfl_avx2.c"
                      "${AOM_ROOT}/av1/common/x86/highbd_warp_affine_avx2.c"
                      "${AOM_ROOT}/av1/common/x86/highbd_wiener_convolve_avx2.c"
                      "${AOM_ROOT}/av1/common/x86/selfguided_avx2.c"
@@ -577,6 +581,7 @@
                      "${AOM_ROOT}/av1/common/x86/wiener_convolve_avx2.c")
 
     list(REMOVE_ITEM AOM_AV1_COMMON_INTRIN_NEON
+                     "${AOM_ROOT}/av1/common/arm/cfl_neon.c"
                      "${AOM_ROOT}/av1/common/arm/highbd_warp_plane_neon.c"
                      "${AOM_ROOT}/av1/common/arm/highbd_wiener_convolve_neon.c"
                      "${AOM_ROOT}/av1/common/arm/selfguided_neon.c"
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index a550dc2..1e5a090 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -2183,6 +2183,11 @@
                                                  va_list args) {
   struct av1_extracfg extra_cfg = ctx->extra_cfg;
   extra_cfg.enable_cfl_intra = CAST(AV1E_SET_ENABLE_CFL_INTRA, args);
+#if CONFIG_REALTIME_ONLY
+  if (extra_cfg.enable_cfl_intra) {
+    ERROR("cfl can't be turned on in realtime only build.");
+  }
+#endif
   return update_extra_cfg(ctx, &extra_cfg);
 }
 
diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h
index 113b3f1..99ca541 100644
--- a/av1/common/av1_common_int.h
+++ b/av1/common/av1_common_int.h
@@ -1257,7 +1257,9 @@
   }
 }
 
+#if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
 void cfl_init(CFL_CTX *cfl, const SequenceHeader *seq_params);
+#endif
 
 static inline int av1_num_planes(const AV1_COMMON *cm) {
   return cm->seq_params->monochrome ? 1 : MAX_MB_PLANE;
@@ -1300,7 +1302,9 @@
   }
   xd->mi_stride = cm->mi_params.mi_stride;
   xd->error_info = cm->error;
+#if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
   cfl_init(&xd->cfl, cm->seq_params);
+#endif
 }
 
 static inline void set_entropy_context(MACROBLOCKD *xd, int mi_row, int mi_col,
diff --git a/av1/common/av1_rtcd_defs.pl b/av1/common/av1_rtcd_defs.pl
index ec85e2a..889f952 100644
--- a/av1/common/av1_rtcd_defs.pl
+++ b/av1/common/av1_rtcd_defs.pl
@@ -617,33 +617,35 @@
 }
 
 # CFL
-add_proto qw/cfl_subtract_average_fn cfl_get_subtract_average_fn/, "TX_SIZE tx_size";
-specialize qw/cfl_get_subtract_average_fn sse2 avx2 neon vsx/;
+if ((aom_config("CONFIG_REALTIME_ONLY") ne "yes") ||
+      (aom_config("CONFIG_AV1_DECODER") eq "yes")) {
+  add_proto qw/cfl_subtract_average_fn cfl_get_subtract_average_fn/, "TX_SIZE tx_size";
+  specialize qw/cfl_get_subtract_average_fn sse2 avx2 neon vsx/;
 
-add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd/, "TX_SIZE tx_size";
-specialize qw/cfl_get_luma_subsampling_420_lbd ssse3 avx2 neon/;
+  add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_420_lbd/, "TX_SIZE tx_size";
+  specialize qw/cfl_get_luma_subsampling_420_lbd ssse3 avx2 neon/;
 
-add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd/, "TX_SIZE tx_size";
-specialize qw/cfl_get_luma_subsampling_422_lbd ssse3 avx2 neon/;
+  add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_422_lbd/, "TX_SIZE tx_size";
+  specialize qw/cfl_get_luma_subsampling_422_lbd ssse3 avx2 neon/;
 
-add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd/, "TX_SIZE tx_size";
-specialize qw/cfl_get_luma_subsampling_444_lbd ssse3 avx2 neon/;
+  add_proto qw/cfl_subsample_lbd_fn cfl_get_luma_subsampling_444_lbd/, "TX_SIZE tx_size";
+  specialize qw/cfl_get_luma_subsampling_444_lbd ssse3 avx2 neon/;
 
-if (aom_config("CONFIG_AV1_HIGHBITDEPTH") eq "yes") {
-  add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd/, "TX_SIZE tx_size";
-  specialize qw/cfl_get_luma_subsampling_420_hbd ssse3 avx2 neon/;
+  if (aom_config("CONFIG_AV1_HIGHBITDEPTH") eq "yes") {
+    add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_420_hbd/, "TX_SIZE tx_size";
+    specialize qw/cfl_get_luma_subsampling_420_hbd ssse3 avx2 neon/;
 
-  add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd/, "TX_SIZE tx_size";
-  specialize qw/cfl_get_luma_subsampling_422_hbd ssse3 avx2 neon/;
+    add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_422_hbd/, "TX_SIZE tx_size";
+    specialize qw/cfl_get_luma_subsampling_422_hbd ssse3 avx2 neon/;
 
-  add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd/, "TX_SIZE tx_size";
-  specialize qw/cfl_get_luma_subsampling_444_hbd ssse3 avx2 neon/;
+    add_proto qw/cfl_subsample_hbd_fn cfl_get_luma_subsampling_444_hbd/, "TX_SIZE tx_size";
+    specialize qw/cfl_get_luma_subsampling_444_hbd ssse3 avx2 neon/;
 
-  add_proto qw/cfl_predict_hbd_fn cfl_get_predict_hbd_fn/, "TX_SIZE tx_size";
-  specialize qw/cfl_get_predict_hbd_fn ssse3 avx2 neon/;
+    add_proto qw/cfl_predict_hbd_fn cfl_get_predict_hbd_fn/, "TX_SIZE tx_size";
+    specialize qw/cfl_get_predict_hbd_fn ssse3 avx2 neon/;
+  }
+  add_proto qw/cfl_predict_lbd_fn cfl_get_predict_lbd_fn/, "TX_SIZE tx_size";
+  specialize qw/cfl_get_predict_lbd_fn ssse3 avx2 neon/;
 }
 
-add_proto qw/cfl_predict_lbd_fn cfl_get_predict_lbd_fn/, "TX_SIZE tx_size";
-specialize qw/cfl_get_predict_lbd_fn ssse3 avx2 neon/;
-
 1;
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c
index e2a7510..33016a2 100644
--- a/av1/common/reconintra.c
+++ b/av1/common/reconintra.c
@@ -1850,6 +1850,7 @@
   const int angle_delta = mbmi->angle_delta[plane != AOM_PLANE_Y] * ANGLE_STEP;
   const SequenceHeader *seq_params = cm->seq_params;
 
+#if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
   if (plane != AOM_PLANE_Y && mbmi->uv_mode == UV_CFL_PRED) {
 #if CONFIG_DEBUG
     assert(is_cfl_allowed(xd));
@@ -1882,6 +1883,7 @@
     av1_cfl_predict_block(xd, dst, dst_stride, tx_size, plane);
     return;
   }
+#endif  // !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
   av1_predict_intra_block(
       xd, seq_params->sb_size, seq_params->enable_intra_edge_filter, pd->width,
       pd->height, tx_size, mode, angle_delta, use_palette, filter_intra_mode,
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 1c0a8fb..5456d5a 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -1461,8 +1461,10 @@
   av1_init_above_context(&cm->above_contexts, av1_num_planes(cm), tile_row,
                          &td->mb.e_mbd);
 
+#if !CONFIG_REALTIME_ONLY
   if (cpi->oxcf.intra_mode_cfg.enable_cfl_intra)
     cfl_init(&td->mb.e_mbd.cfl, cm->seq_params);
+#endif
 
   if (td->mb.txfm_search_info.mb_rd_record != NULL) {
     av1_crc32c_calculator_init(
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index a300f88..447cae4 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -831,9 +831,11 @@
   // skip_txfm = 1 is very expensive.
   mbmi->skip_txfm = 0;
 
+#if !CONFIG_REALTIME_ONLY
   if (plane == AOM_PLANE_Y && xd->cfl.store_y) {
     cfl_store_tx(xd, blk_row, blk_col, tx_size, plane_bsize);
   }
+#endif
 }
 
 static void encode_block_intra_and_set_context(int plane, int block,
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c
index 82b1753..fcffd7a 100644
--- a/av1/encoder/ethread.c
+++ b/av1/encoder/ethread.c
@@ -711,8 +711,9 @@
 
     av1_init_above_context(&cm->above_contexts, av1_num_planes(cm), tile_row,
                            &td->mb.e_mbd);
-
+#if !CONFIG_REALTIME_ONLY
     cfl_init(&td->mb.e_mbd.cfl, cm->seq_params);
+#endif
     if (td->mb.txfm_search_info.mb_rd_record != NULL) {
       av1_crc32c_calculator_init(
           &td->mb.txfm_search_info.mb_rd_record->crc_calculator);
diff --git a/av1/encoder/partition_search.c b/av1/encoder/partition_search.c
index 49294cb..d81efec 100644
--- a/av1/encoder/partition_search.c
+++ b/av1/encoder/partition_search.c
@@ -564,9 +564,11 @@
                   (mbmi->skip_txfm || seg_skip) && is_inter_block(mbmi), xd);
   }
 
+#if !CONFIG_REALTIME_ONLY
   if (is_inter_block(mbmi) && !xd->is_chroma_ref && is_cfl_allowed(xd)) {
     cfl_store_block(xd, mbmi->bsize, mbmi->tx_size);
   }
+#endif
   if (!dry_run) {
     if (cpi->oxcf.pass == AOM_RC_ONE_PASS && cpi->svc.temporal_layer_id == 0 &&
         cpi->sf.rt_sf.use_temporal_noise_estimate &&
diff --git a/av1/encoder/tx_search.c b/av1/encoder/tx_search.c
index 48d5f12..7e51f21 100644
--- a/av1/encoder/tx_search.c
+++ b/av1/encoder/tx_search.c
@@ -3045,10 +3045,12 @@
                  &txb_ctx, args->ftxs_mode, args->skip_trellis,
                  args->best_rd - args->current_rd, &this_rd_stats);
 
+#if !CONFIG_REALTIME_ONLY
   if (plane == AOM_PLANE_Y && xd->cfl.store_y) {
     assert(!is_inter || plane_bsize < BLOCK_8X8);
     cfl_store_tx(xd, blk_row, blk_col, tx_size, plane_bsize);
   }
+#endif
 
 #if CONFIG_RD_DEBUG
   update_txb_coeff_cost(&this_rd_stats, plane, this_rd_stats.rate);
diff --git a/test/test.cmake b/test/test.cmake
index fac95e8..b3e3308 100644
--- a/test/test.cmake
+++ b/test/test.cmake
@@ -157,7 +157,7 @@
               "${AOM_ROOT}/test/simd_impl.h")
 
   if(CONFIG_REALTIME_ONLY AND NOT CONFIG_AV1_DECODER)
-    list(REMOVE_ITEM AOM_UNIT_TEST_COMMON_SOURCES
+    list(REMOVE_ITEM AOM_UNIT_TEST_COMMON_SOURCES "${AOM_ROOT}/test/cfl_test.cc"
                      "${AOM_ROOT}/test/hiprec_convolve_test.cc"
                      "${AOM_ROOT}/test/hiprec_convolve_test_util.cc"
                      "${AOM_ROOT}/test/hiprec_convolve_test_util.h")