Skip to content

[Bug]: libjpeg_turbo on MacOS Apple silicon failing due to jsimd #6566

@dreisicht

Description

@dreisicht

What happened?

I'm building libtiff where I have libjpeg_turbo as a dependency. When building this I'm getting a linking error regarding jsimd:

[ 73%] Linking CXX executable tiffcrop
Undefined symbols for architecture arm64:
  "_jsimd_can_convsamp", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_can_convsamp_float", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_can_encode_mcu_AC_first_prepare", referenced from:
      _start_pass_phuff in libjpeg.a[13](jcphuff.o)
  "_jsimd_can_encode_mcu_AC_refine_prepare", referenced from:
      _start_pass_phuff in libjpeg.a[13](jcphuff.o)
  "_jsimd_can_fdct_float", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_can_fdct_ifast", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_can_fdct_islow", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_can_h1v2_fancy_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_can_h2v1_downsample", referenced from:
      _jinit_downsampler in libjpeg.a[56](jcsample-8.o)
  "_jsimd_can_h2v1_fancy_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_can_h2v1_merged_upsample", referenced from:
      _jinit_merged_upsampler in libjpeg.a[77](jdmerge-8.o)
  "_jsimd_can_h2v1_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_can_h2v2_downsample", referenced from:
      _jinit_downsampler in libjpeg.a[56](jcsample-8.o)
  "_jsimd_can_h2v2_fancy_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_can_h2v2_merged_upsample", referenced from:
      _jinit_merged_upsampler in libjpeg.a[77](jdmerge-8.o)
  "_jsimd_can_h2v2_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_can_huff_encode_one_block", referenced from:
      _start_pass_huff in libjpeg.a[5](jchuff.o)
  "_jsimd_can_idct_2x2", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_can_idct_4x4", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_can_idct_float", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_can_idct_ifast", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_can_idct_islow", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_can_quantize", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_can_quantize_float", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_can_rgb_gray", referenced from:
      _jinit_color_converter in libjpeg.a[39](jccolor-8.o)
  "_jsimd_can_rgb_ycc", referenced from:
      _jinit_color_converter in libjpeg.a[39](jccolor-8.o)
  "_jsimd_can_ycc_rgb", referenced from:
      _jinit_color_deconverter in libjpeg.a[64](jdcolor-8.o)
  "_jsimd_can_ycc_rgb565", referenced from:
      _jinit_color_deconverter in libjpeg.a[64](jdcolor-8.o)
  "_jsimd_convsamp", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_convsamp_float", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_encode_mcu_AC_first_prepare", referenced from:
      _start_pass_phuff in libjpeg.a[13](jcphuff.o)
  "_jsimd_encode_mcu_AC_refine_prepare", referenced from:
      _start_pass_phuff in libjpeg.a[13](jcphuff.o)
  "_jsimd_fdct_float", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_fdct_ifast", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_fdct_islow", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_h1v2_fancy_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_h2v1_downsample", referenced from:
      _jinit_downsampler in libjpeg.a[56](jcsample-8.o)
  "_jsimd_h2v1_fancy_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_h2v1_merged_upsample", referenced from:
      _jinit_merged_upsampler in libjpeg.a[77](jdmerge-8.o)
  "_jsimd_h2v1_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_h2v2_downsample", referenced from:
      _jinit_downsampler in libjpeg.a[56](jcsample-8.o)
  "_jsimd_h2v2_fancy_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_h2v2_merged_upsample", referenced from:
      _jinit_merged_upsampler in libjpeg.a[77](jdmerge-8.o)
  "_jsimd_h2v2_upsample", referenced from:
      _jinit_upsampler in libjpeg.a[83](jdsample-8.o)
  "_jsimd_huff_encode_one_block", referenced from:
      _encode_mcu_huff in libjpeg.a[5](jchuff.o)
      _encode_mcu_huff in libjpeg.a[5](jchuff.o)
  "_jsimd_idct_2x2", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_idct_4x4", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_idct_float", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_idct_ifast", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_idct_islow", referenced from:
      _start_pass in libjpeg.a[66](jddctmgr-8.o)
  "_jsimd_quantize", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
      _start_pass_fdctmgr in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_quantize_float", referenced from:
      _jinit_forward_dct in libjpeg.a[41](jcdctmgr-8.o)
  "_jsimd_rgb_gray_convert", referenced from:
      _jinit_color_converter in libjpeg.a[39](jccolor-8.o)
  "_jsimd_rgb_ycc_convert", referenced from:
      _jinit_color_converter in libjpeg.a[39](jccolor-8.o)
  "_jsimd_ycc_rgb565_convert", referenced from:
      _jinit_color_deconverter in libjpeg.a[64](jdcolor-8.o)
  "_jsimd_ycc_rgb_convert", referenced from:
      _jinit_color_deconverter in libjpeg.a[64](jdcolor-8.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Error in child process '/usr/bin/xcrun'. 1
make[2]: *** [tools/CMakeFiles/tiffcrop.dir/build.make:108: tools/tiffcrop] Error 1
make[1]: *** [CMakeFiles/Makefile2:958: tools/CMakeFiles/tiffcrop.dir/all] Error 2
make: *** [Makefile:146: all] Error 2

This is the target I'm building:

cmake(
    name = "libtiff",
    cache_entries = {
        "BUILD_SHARED_LIBS": "OFF",
        "JPEG": "OFF",
        "LZMA2": "OFF",
        "LZW": "OFF",
    },
    # Prefer passing CMake options explicitly so the project respects them.
    env = {
        "BUILD_SHARED_LIBS": "OFF",
        # disable optional codecs and tools/tests that pull in libjpeg/jsimd and lzma
        "JPEG": "OFF",
        "JPEG12": "OFF",
        "LZMA": "OFF",
        "BUILD_TOOLS": "OFF",
        "BUILD_TESTS": "OFF",
        "CMAKE_BUILD_PARALLEL_LEVEL": "32",
    },
    lib_source = "@libtiff_src//:all_srcs",
    out_include_dir = "include",
    out_static_libs = [
        "libtiff.a",
        "libtiffxx.a",
    ],
    visibility = ["//visibility:public"],
    deps = [
        "@libjpeg_turbo",
        "@simde",
        "@zstd",
        # "@zlib",
    ],
)

Version

Development (host) and target OS/architectures:

Output of bazel --version:
bazel 8.4.2-homebrew

Version of relevant rules from the WORKSPACE or MODULE.bazel file:

bazel_dep(name = "apple_support", version = "1.24.5", repo_name = "build_bazel_apple_support")
bazel_dep(name = "rules_cc", version = "0.2.14")
bazel_dep(name = "rules_foreign_cc", version = "0.15.1")
bazel_dep(name = "googletest", version = "1.17.0")
bazel_dep(name = "protobuf", version = "33.0")
bazel_dep(name = "libjpeg_turbo", version = "3.1.2")
bazel_dep(name = "simde", version = "0.8.2")

Language(s) and/or frameworks involved:

How to reproduce

git clone https://github.com/dreisicht/libtiff_bazel
bazel build :libtiff

Any other information?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions