PR #22649 opened by Kacper Michajłow (kasper93) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22649 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22649.patch
In cases when preprocesor would remove all code, nasm would produce empty object files. This is technically not wrong, but often cause issues with various tooling: * NASM fails to emit CodeView debug info when there is no code [1] * Older VS2022 builds hangs on empty files [2] * binutils strip errors when there is no sections [3] error: the input file '.o' has no sections [1] https://github.com/netwide-assembler/nasm/issues/216 [2] https://developercommunity.visualstudio.com/t/MSVC-Hangs-when-compiling-ffmpeg-When-l/10233953 [3] https://trac.ffmpeg.org/ticket/6711 From b750313b52d32bff58eb113e3c516a4d75d59550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]> Date: Sat, 28 Mar 2026 01:20:49 +0100 Subject: [PATCH] Makefile: don't produce empty object files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In cases when preprocesor would remove all code, nasm would produce empty object files. This is technically not wrong, but often cause issues with various tooling: * NASM fails to emit CodeView debug info when there is no code [1] * Older VS2022 builds hangs on empty files [2] * binutils strip errors when there is no sections [3] error: the input file '.o' has no sections [1] https://github.com/netwide-assembler/nasm/issues/216 [2] https://developercommunity.visualstudio.com/t/MSVC-Hangs-when-compiling-ffmpeg-When-l/10233953 [3] https://trac.ffmpeg.org/ticket/6711 Signed-off-by: Kacper Michajłow <[email protected]> --- Makefile | 5 ++++- ffbuild/arch.mak | 8 ++++++++ libavcodec/x86/Makefile | 27 +++++++++++-------------- libavcodec/x86/vvc/Makefile | 2 +- libavfilter/x86/Makefile | 40 ++++++++++++++++++++----------------- libavutil/x86/Makefile | 3 ++- libswscale/x86/Makefile | 3 ++- 7 files changed, 51 insertions(+), 37 deletions(-) diff --git a/Makefile b/Makefile index f296e87ed4..9b5b5b1eda 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,10 @@ ffbuild/.config: $(CONFIGURABLE_COMPONENTS) SUBDIR_VARS := CLEANFILES FFLIBS HOSTPROGS TESTPROGS TOOLS \ HEADERS ARCH_HEADERS BUILT_HEADERS SKIPHEADERS \ ARMV5TE-OBJS ARMV6-OBJS ARMV8-OBJS VFP-OBJS NEON-OBJS \ - ALTIVEC-OBJS VSX-OBJS X86ASM-OBJS \ + ALTIVEC-OBJS VSX-OBJS \ + X86ASM-OBJS X86ASM_X64-OBJS X86ASM_X32-OBJS \ + X86ASM_AVX2-OBJS X86ASM_SSSE3-OBJS X86ASM_AESNI-OBJS \ + X86ASM_X64_AVX2-OBJS X86ASM_X64_AVX512ICL-OBJS \ MIPSFPU-OBJS MIPSDSPR2-OBJS MIPSDSP-OBJS MSA-OBJS \ MMI-OBJS LSX-OBJS LASX-OBJS RV-OBJS RVV-OBJS RVVB-OBJS \ OBJS SHLIBOBJS STLIBOBJS HOSTOBJS TESTOBJS SIMD128-OBJS \ diff --git a/ffbuild/arch.mak b/ffbuild/arch.mak index 13e1eb33bc..f7445d808a 100644 --- a/ffbuild/arch.mak +++ b/ffbuild/arch.mak @@ -25,4 +25,12 @@ OBJS-$(HAVE_RV_ZVBB) += $(RVVB-OBJS) $(RVVB-OBJS-yes) OBJS-$(HAVE_SIMD128) += $(SIMD128-OBJS) $(SIMD128-OBJS-yes) +X86ASM_X64-OBJS-$(HAVE_AVX2_EXTERNAL) += $(X86ASM_X64_AVX2-OBJS) $(X86ASM_X64_AVX2-OBJS-yes) +X86ASM_X64-OBJS-$(HAVE_AVX512ICL_EXTERNAL) += $(X86ASM_X64_AVX512ICL-OBJS) $(X86ASM_X64_AVX512ICL-OBJS-yes) +X86ASM-OBJS-$(ARCH_X86_64) += $(X86ASM_X64-OBJS) $(X86ASM_X64-OBJS-yes) +X86ASM-OBJS-$(ARCH_X86_32) += $(X86ASM_X32-OBJS) $(X86ASM_X32-OBJS-yes) +X86ASM-OBJS-$(HAVE_AVX2_EXTERNAL) += $(X86ASM_AVX2-OBJS) $(X86ASM_AVX2-OBJS-yes) +X86ASM-OBJS-$(HAVE_SSSE3_EXTERNAL) += $(X86ASM_SSSE3-OBJS) $(X86ASM_SSSE3-OBJS-yes) +X86ASM-OBJS-$(HAVE_AESNI_EXTERNAL) += $(X86ASM_AESNI-OBJS) $(X86ASM_AESNI-OBJS-yes) + OBJS-$(HAVE_X86ASM) += $(X86ASM-OBJS) $(X86ASM-OBJS-yes) diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile index bf723ed1a6..ea0ff2245e 100644 --- a/libavcodec/x86/Makefile +++ b/libavcodec/x86/Makefile @@ -126,11 +126,8 @@ X86ASM-OBJS-$(CONFIG_QPELDSP) += x86/qpeldsp.o \ X86ASM-OBJS-$(CONFIG_RV34DSP) += x86/rv34dsp.o X86ASM-OBJS-$(CONFIG_VC1DSP) += x86/vc1dsp_loopfilter.o \ x86/vc1dsp_mc.o x86/fpel.o -ifdef ARCH_X86_64 -X86ASM-OBJS-$(CONFIG_IDCTDSP) += x86/simple_idct10.o -else -X86ASM-OBJS-$(CONFIG_IDCTDSP) += x86/simple_idct.o -endif +X86ASM_X64-OBJS-$(CONFIG_IDCTDSP) += x86/simple_idct10.o +X86ASM_X32-OBJS-$(CONFIG_IDCTDSP) += x86/simple_idct.o X86ASM-OBJS-$(CONFIG_VIDEODSP) += x86/videodsp.o X86ASM-OBJS-$(CONFIG_VP3DSP) += x86/vp3dsp.o X86ASM-OBJS-$(CONFIG_VP8DSP) += x86/vp8dsp.o \ @@ -144,9 +141,9 @@ X86ASM-OBJS-$(CONFIG_ADPCM_G722_DECODER) += x86/g722dsp.o X86ASM-OBJS-$(CONFIG_ADPCM_G722_ENCODER) += x86/g722dsp.o X86ASM-OBJS-$(CONFIG_ALAC_DECODER) += x86/alacdsp.o X86ASM-OBJS-$(CONFIG_APNG_DECODER) += x86/pngdsp.o -X86ASM-OBJS-$(CONFIG_APV_DECODER) += x86/apv_dsp.o +X86ASM_X64-OBJS-$(CONFIG_APV_DECODER) += x86/apv_dsp.o X86ASM-OBJS-$(CONFIG_CAVS_DECODER) += x86/cavsidct.o x86/cavs_qpel.o -X86ASM-OBJS-$(CONFIG_CFHD_ENCODER) += x86/cfhdencdsp.o +X86ASM_X64-OBJS-$(CONFIG_CFHD_ENCODER) += x86/cfhdencdsp.o X86ASM-OBJS-$(CONFIG_CFHD_DECODER) += x86/cfhddsp.o X86ASM-OBJS-$(CONFIG_DCA_DECODER) += x86/dcadsp.o x86/synth_filter.o X86ASM-OBJS-$(CONFIG_DIRAC_DECODER) += x86/diracdsp.o \ @@ -159,31 +156,31 @@ X86ASM-OBJS-$(CONFIG_FLAC_ENCODER) += x86/flac_dsp_gpl.o endif X86ASM-OBJS-$(CONFIG_JPEG2000_DECODER) += x86/jpeg2000dsp.o X86ASM-OBJS-$(CONFIG_LSCR_DECODER) += x86/pngdsp.o -X86ASM-OBJS-$(CONFIG_MLP_DECODER) += x86/mlpdsp.o +X86ASM_X64-OBJS-$(CONFIG_MLP_DECODER) += x86/mlpdsp.o X86ASM-OBJS-$(CONFIG_MPEG4_DECODER) += x86/xvididct.o X86ASM-OBJS-$(CONFIG_PNG_DECODER) += x86/pngdsp.o -X86ASM-OBJS-$(CONFIG_PRORES_DECODER) += x86/proresdsp.o -X86ASM-OBJS-$(CONFIG_PRORES_RAW_DECODER) += x86/proresdsp.o +X86ASM_X64-OBJS-$(CONFIG_PRORES_DECODER) += x86/proresdsp.o +X86ASM_X64-OBJS-$(CONFIG_PRORES_RAW_DECODER) += x86/proresdsp.o X86ASM-OBJS-$(CONFIG_RV40_DECODER) += x86/rv40dsp.o X86ASM-OBJS-$(CONFIG_SBC_ENCODER) += x86/sbcdsp.o X86ASM-OBJS-$(CONFIG_SVQ1_ENCODER) += x86/svq1enc.o X86ASM-OBJS-$(CONFIG_TAK_DECODER) += x86/takdsp.o -X86ASM-OBJS-$(CONFIG_TRUEHD_DECODER) += x86/mlpdsp.o +X86ASM_X64-OBJS-$(CONFIG_TRUEHD_DECODER) += x86/mlpdsp.o X86ASM-OBJS-$(CONFIG_TTA_DECODER) += x86/ttadsp.o X86ASM-OBJS-$(CONFIG_TTA_ENCODER) += x86/ttaencdsp.o X86ASM-OBJS-$(CONFIG_UTVIDEO_DECODER) += x86/utvideodsp.o -X86ASM-OBJS-$(CONFIG_V210_ENCODER) += x86/v210enc.o +X86ASM_SSSE3-OBJS-$(CONFIG_V210_ENCODER) += x86/v210enc.o X86ASM-OBJS-$(CONFIG_V210_DECODER) += x86/v210.o X86ASM-OBJS-$(CONFIG_VORBIS_DECODER) += x86/vorbisdsp.o X86ASM-OBJS-$(CONFIG_VP6_DECODER) += x86/vp6dsp.o X86ASM-OBJS-$(CONFIG_VP9_DECODER) += x86/vp9intrapred.o \ x86/vp9intrapred_16bpp.o \ x86/vp9itxfm.o \ - x86/vp9itxfm_avx2.o \ - x86/vp9itxfm_avx512.o \ x86/vp9itxfm_16bpp.o \ - x86/vp9itxfm_16bpp_avx512.o \ x86/vp9lpf.o \ x86/vp9lpf_16bpp.o \ x86/vp9mc.o \ x86/vp9mc_16bpp.o +X86ASM_X64_AVX2-OBJS-$(CONFIG_VP9_DECODER) += x86/vp9itxfm_avx2.o +X86ASM_X64_AVX512ICL-OBJS-$(CONFIG_VP9_DECODER) += x86/vp9itxfm_avx512.o \ + x86/vp9itxfm_16bpp_avx512.o diff --git a/libavcodec/x86/vvc/Makefile b/libavcodec/x86/vvc/Makefile index 0cebfb4e9e..72e445d324 100644 --- a/libavcodec/x86/vvc/Makefile +++ b/libavcodec/x86/vvc/Makefile @@ -4,10 +4,10 @@ clean:: X86ASM-OBJS-$(CONFIG_VVC_DECODER) += x86/vvc/dsp_init.o \ x86/vvc/alf.o \ x86/vvc/dmvr.o \ - x86/vvc/mc.o \ x86/vvc/of.o \ x86/vvc/sad.o \ x86/vvc/sao.o \ x86/vvc/sao_10bit.o \ x86/h26x/h2656dsp.o \ x86/h26x/h2656_inter.o +X86ASM_X64_AVX2-OBJS-$(CONFIG_VVC_DECODER) += x86/vvc/mc.o diff --git a/libavfilter/x86/Makefile b/libavfilter/x86/Makefile index ade0efc9ae..95dc72ea1c 100644 --- a/libavfilter/x86/Makefile +++ b/libavfilter/x86/Makefile @@ -5,19 +5,20 @@ X86ASM-OBJS-$(CONFIG_SCENE_SAD) += x86/scene_sad.o x86/scene_sad_in X86ASM-OBJS-$(CONFIG_AFIR_FILTER) += x86/af_afir.o x86/af_afir_init.o X86ASM-OBJS-$(CONFIG_ANLMDN_FILTER) += x86/af_anlmdn.o x86/af_anlmdn_init.o -X86ASM-OBJS-$(CONFIG_ATADENOISE_FILTER) += x86/vf_atadenoise.o \ - x86/vf_atadenoise_init.o -X86ASM-OBJS-$(CONFIG_BLACKDETECT_FILTER) += x86/vf_blackdetect.o \ - x86/vf_blackdetect_init.o +X86ASM_X64-OBJS-$(CONFIG_ATADENOISE_FILTER) += x86/vf_atadenoise.o +X86ASM-OBJS-$(CONFIG_ATADENOISE_FILTER) += x86/vf_atadenoise_init.o +X86ASM_AVX2-OBJS-$(CONFIG_BLACKDETECT_FILTER) += x86/vf_blackdetect.o +X86ASM-OBJS-$(CONFIG_BLACKDETECT_FILTER) += x86/vf_blackdetect_init.o X86ASM-OBJS-$(CONFIG_BLEND_FILTER) += x86/vf_blend.o x86/vf_blend_init.o X86ASM-OBJS-$(CONFIG_BWDIF_FILTER) += x86/vf_bwdif.o x86/vf_bwdif_init.o -X86ASM-OBJS-$(CONFIG_COLORDETECT_FILTER) += x86/vf_colordetect.o \ - x86/vf_colordetect_init.o -X86ASM-OBJS-$(CONFIG_COLORSPACE_FILTER) += x86/colorspacedsp.o \ - x86/colorspacedsp_init.o -X86ASM-OBJS-$(CONFIG_CONVOLUTION_FILTER) += x86/vf_convolution.o \ - x86/vf_convolution_init.o -X86ASM-OBJS-$(CONFIG_EBUR128_FILTER) += x86/f_ebur128.o x86/f_ebur128_init.o +X86ASM_AVX2-OBJS-$(CONFIG_COLORDETECT_FILTER) += x86/vf_colordetect.o +X86ASM-OBJS-$(CONFIG_COLORDETECT_FILTER) += x86/vf_colordetect_init.o +X86ASM_X64-OBJS-$(CONFIG_COLORSPACE_FILTER) += x86/colorspacedsp.o +X86ASM-OBJS-$(CONFIG_COLORSPACE_FILTER) += x86/colorspacedsp_init.o +X86ASM_X64-OBJS-$(CONFIG_CONVOLUTION_FILTER) += x86/vf_convolution.o +X86ASM-OBJS-$(CONFIG_CONVOLUTION_FILTER) += x86/vf_convolution_init.o +X86ASM_X64-OBJS-$(CONFIG_EBUR128_FILTER) += x86/f_ebur128.o +X86ASM-OBJS-$(CONFIG_EBUR128_FILTER) += x86/f_ebur128_init.o X86ASM-OBJS-$(CONFIG_EQ_FILTER) += x86/vf_eq.o x86/vf_eq_init.o X86ASM-OBJS-$(CONFIG_FRAMERATE_FILTER) += x86/vf_framerate.o \ x86/vf_framerate_init.o @@ -25,7 +26,8 @@ X86ASM-OBJS-$(CONFIG_FSPP_FILTER) += x86/vf_fspp.o x86/vf_fspp_init.o X86ASM-OBJS-$(CONFIG_GBLUR_FILTER) += x86/vf_gblur.o x86/vf_gblur_init.o X86ASM-OBJS-$(CONFIG_GRADFUN_FILTER) += x86/vf_gradfun.o \ x86/vf_gradfun_init.o -X86ASM-OBJS-$(CONFIG_HALDCLUT_FILTER) += x86/vf_lut3d.o x86/vf_lut3d_init.o +X86ASM_X64-OBJS-$(CONFIG_HALDCLUT_FILTER) += x86/vf_lut3d.o +X86ASM-OBJS-$(CONFIG_HALDCLUT_FILTER) += x86/vf_lut3d_init.o X86ASM-OBJS-$(CONFIG_HFLIP_FILTER) += x86/vf_hflip.o x86/vf_hflip_init.o X86ASM-OBJS-$(CONFIG_HQDN3D_FILTER) += x86/vf_hqdn3d.o x86/vf_hqdn3d_init.o X86ASM-OBJS-$(CONFIG_IDET_FILTER) += x86/vf_idetdsp.o \ @@ -34,13 +36,14 @@ X86ASM-OBJS-$(CONFIG_INTERLACE_FILTER) += x86/vf_interlace.o \ x86/vf_tinterlace_init.o X86ASM-OBJS-$(CONFIG_LIMITER_FILTER) += x86/vf_limiter.o \ x86/vf_limiter_init.o -X86ASM-OBJS-$(CONFIG_LUT3D_FILTER) += x86/vf_lut3d.o x86/vf_lut3d_init.o +X86ASM_X64-OBJS-$(CONFIG_LUT3D_FILTER) += x86/vf_lut3d.o +X86ASM-OBJS-$(CONFIG_LUT3D_FILTER) += x86/vf_lut3d_init.o X86ASM-OBJS-$(CONFIG_MASKEDCLAMP_FILTER) += x86/vf_maskedclamp.o \ x86/vf_maskedclamp_init.o X86ASM-OBJS-$(CONFIG_MASKEDMERGE_FILTER) += x86/vf_maskedmerge.o \ x86/vf_maskedmerge_init.o -X86ASM-OBJS-$(CONFIG_NLMEANS_FILTER) += x86/vf_nlmeans.o \ - x86/vf_nlmeans_init.o +X86ASM_X64_AVX2-OBJS-$(CONFIG_NLMEANS_FILTER) += x86/vf_nlmeans.o +X86ASM-OBJS-$(CONFIG_NLMEANS_FILTER) += x86/vf_nlmeans_init.o X86ASM-OBJS-$(CONFIG_OVERLAY_FILTER) += x86/vf_overlay.o \ x86/vf_overlay_init.o X86ASM-OBJS-$(CONFIG_PP7_FILTER) += x86/vf_pp7.o x86/vf_pp7_init.o @@ -52,8 +55,8 @@ X86ASM-OBJS-$(CONFIG_REMOVEGRAIN_FILTER) += x86/vf_removegrain.o \ endif X86ASM-OBJS-$(CONFIG_SHOWCQT_FILTER) += x86/avf_showcqt.o \ x86/avf_showcqt_init.o -X86ASM-OBJS-$(CONFIG_SOBEL_FILTER) += x86/vf_convolution.o \ - x86/vf_convolution_init.o +X86ASM_X64-OBJS-$(CONFIG_SOBEL_FILTER) += x86/vf_convolution.o +X86ASM-OBJS-$(CONFIG_SOBEL_FILTER) += x86/vf_convolution_init.o X86ASM-OBJS-$(CONFIG_SSIM_FILTER) += x86/vf_ssim.o x86/vf_ssim_init.o X86ASM-OBJS-$(CONFIG_STEREO3D_FILTER) += x86/vf_stereo3d.o \ x86/vf_stereo3d_init.o @@ -65,7 +68,8 @@ X86ASM-OBJS-$(CONFIG_TINTERLACE_FILTER) += x86/vf_interlace.o \ X86ASM-OBJS-$(CONFIG_TRANSPOSE_FILTER) += x86/vf_transpose.o \ x86/vf_transpose_init.o X86ASM-OBJS-$(CONFIG_VOLUME_FILTER) += x86/af_volume.o x86/af_volume_init.o -X86ASM-OBJS-$(CONFIG_V360_FILTER) += x86/vf_v360.o x86/vf_v360_init.o +X86ASM_AVX2-OBJS-$(CONFIG_V360_FILTER) += x86/vf_v360.o +X86ASM-OBJS-$(CONFIG_V360_FILTER) += x86/vf_v360_init.o X86ASM-OBJS-$(CONFIG_W3FDIF_FILTER) += x86/vf_w3fdif.o x86/vf_w3fdif_init.o X86ASM-OBJS-$(CONFIG_XPSNR_FILTER) += x86/vf_psnr.o x86/vf_psnr_init.o X86ASM-OBJS-$(CONFIG_YADIF_FILTER) += x86/vf_yadif.o x86/yadif-16.o \ diff --git a/libavutil/x86/Makefile b/libavutil/x86/Makefile index bc3c63fe78..7fdd6e8893 100644 --- a/libavutil/x86/Makefile +++ b/libavutil/x86/Makefile @@ -2,7 +2,8 @@ OBJS += x86/cpu.o \ EMMS_OBJS_$(HAVE_MMX_INLINE)_$(HAVE_MMX_EXTERNAL)_$(HAVE_MM_EMPTY) = x86/emms.o -X86ASM-OBJS += x86/aes.o x86/aes_init.o \ +X86ASM_AESNI-OBJS += x86/aes.o +X86ASM-OBJS += x86/aes_init.o \ x86/cpuid.o \ x86/crc.o \ $(EMMS_OBJS__yes_) \ diff --git a/libswscale/x86/Makefile b/libswscale/x86/Makefile index a6aa89e21a..54f6a5bcac 100644 --- a/libswscale/x86/Makefile +++ b/libswscale/x86/Makefile @@ -9,12 +9,13 @@ OBJS-$(CONFIG_XMM_CLOBBER_TEST) += x86/w64xmmtest.o X86ASM-OBJS += x86/input.o \ x86/output.o \ x86/scale.o \ - x86/scale_avx2.o \ x86/range_convert.o \ x86/rgb_2_rgb.o \ x86/yuv_2_rgb.o \ x86/yuv2yuvX.o \ +X86ASM_X64_AVX2-OBJS += x86/scale_avx2.o + ifdef ARCH_X86_64 X86ASM-OBJS-$(CONFIG_UNSTABLE) += x86/ops_int.o \ x86/ops_float.o \ -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
