Skip to content

1.99.19-beta breaks Flow build #92

@gabelevi

Description

@gabelevi

For github.com/facebook/flow, 1.99.19-beta has broken our build

opam install ocp-build.1.99.18-beta
make all-ocp // Works fine
opam install ocp-build.1.99.19-beta
make all-ocp // Fails

The linker is failing with this error

Undefined symbols for architecture x86_64:
  "_LZ4_compressBound", referenced from:
      _write_at in libmlhh-heap.a(hh_shared.o)
  "_LZ4_compress_default", referenced from:
      _write_at in libmlhh-heap.a(hh_shared.o)
  "_LZ4_decompress_safe", referenced from:
      _hh_get_and_deserialize in libmlhh-heap.a(hh_shared.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
File "_none_", line 1:
Error: Error while building custom runtime system

The failing command for 1.99.19-beta looks like this

 '/Users/glevi/.opam/4.03.0/bin/ocamlc.opt' '-o' './_obuild/flow/flow.byte' '-I' './_obuild/flow' '-I' './src' '-I' './_obuild/flow-commands' '-I' '.' '-I' './_obuild/flow-server' '-I' './_obuild/hh-socket' '-I' './_obuild/flow-services-port' '-I' './_obuild/flow-services-inference' '-I' './_obuild/flow-server-env' '-I' './src/server' '-I' './_obuild/hh-dfind' '-I' './_obuild/tp-avl' '-I' './_obuild/hh-fsnotify' '-I' './_obuild/hh-fsnotify-darwin' '-I' './_obuild/flow-persistent-connection' '-I' './_obuild/flow-common-audit' '-I' './_obuild/flow-services-flowFileGen' '-I' './_obuild/flow-services-autocomplete' '-I' './_obuild/flow-typing' '-I' './_obuild/flow-parsing' '-I' './_obuild/flow-parser-utils' '-I' './_obuild/flow-common-errors' '-I' './_obuild/flow-common-profiling' '-I' './_obuild/flow-embedded' '-I' './_obuild/hh-win32res' '-I' './_obuild/hh-find' '-I' './_obuild/flow-shmem' '-I' './_obuild/flow-server-files' '-I' './_obuild/flow-common-config' '-I' './_obuild/flow-dts' '-I' './_obuild/flow-common' '-I' './_obuild/hh-procs' '-I' './_obuild/flow-stubs' '-I' './_obuild/flow-common-utils' '-I' './_obuild/hh-utils' '-I' './hack/utils' '-I' './_obuild/hh-utils-relative-path' '-I' './_obuild/hh-utils-sys' '-I' './_obuild/hh-utils-disk' '-I' './_obuild/hh-injector-default' '-I' './_obuild/hh-utils-string' '-I' './_obuild/hh-heap' '-I' './_obuild/lz4' '-I' './_obuild/hh-stubs' '-I' './_obuild/hh-utils-core' '-I' './_obuild/hh-utils-json' '-I' './_obuild/tp-core' '-I' './_obuild/hh-utils-collections' '-I' '/Users/glevi/.opam/4.03.0/lib/ocaml' '-I' './_obuild/flow-parser' '-I' '/Users/glevi/.opam/4.03.0/lib/sedlex' '-I' '/Users/glevi/.opam/4.03.0/lib/gen' '-I' './_obuild/ROOTPROJECT' '/Users/glevi/.opam/4.03.0/lib/ocaml/unix.cma' '/Users/glevi/.opam/4.03.0/lib/ocaml/bigarray.cma' '/Users/glevi/.opam/4.03.0/lib/gen/gen.cma' '/Users/glevi/.opam/4.03.0/lib/sedlex/sedlexing.cma' './_obuild/flow-parser/flow-parser.cma' '/Users/glevi/.opam/4.03.0/lib/ocaml/str.cma' '-thread' './_obuild/hh-utils-collections/hh-utils-collections.cma' '-thread' './_obuild/tp-core/tp-core.cma' '-thread' './_obuild/hh-utils-json/hh-utils-json.cma' '-thread' './_obuild/hh-utils-core/hh-utils-core.cma' '-thread' './_obuild/hh-stubs/hh-stubs.cma' '-thread' '-thread' './_obuild/hh-heap/hh-heap.cma' '-thread' './_obuild/hh-utils-string/hh-utils-string.cma' '-thread' './_obuild/hh-injector-default/hh-injector-default.cma' '-thread' './_obuild/hh-utils-disk/hh-utils-disk.cma' '-thread' './_obuild/hh-utils-sys/hh-utils-sys.cma' '-thread' './_obuild/hh-utils-relative-path/hh-utils-relative-path.cma' '-thread' './_obuild/hh-utils/hh-utils.cma' './_obuild/flow-common-utils/flow-common-utils.cma' './_obuild/flow-stubs/flow-stubs.cma' '-thread' './_obuild/hh-procs/hh-procs.cma' './_obuild/flow-common/flow-common.cma' './_obuild/flow-dts/flow-dts.cma' './_obuild/flow-common-config/flow-common-config.cma' './_obuild/flow-server-files/flow-server-files.cma' './_obuild/flow-shmem/flow-shmem.cma' '-thread' './_obuild/hh-find/hh-find.cma' '-thread' './_obuild/hh-win32res/hh-win32res.cma' './_obuild/flow-embedded/flow-embedded.cma' './_obuild/flow-common-profiling/flow-common-profiling.cma' './_obuild/flow-common-errors/flow-common-errors.cma' './_obuild/flow-parser-utils/flow-parser-utils.cma' './_obuild/flow-parsing/flow-parsing.cma' './_obuild/flow-typing/flow-typing.cma' './_obuild/flow-services-autocomplete/flow-services-autocomplete.cma' './_obuild/flow-services-flowFileGen/flow-services-flowFileGen.cma' './_obuild/flow-common-audit/flow-common-audit.cma' './_obuild/flow-persistent-connection/flow-persistent-connection.cma' '-thread' './_obuild/hh-fsnotify-darwin/hh-fsnotify-darwin.cma' '-thread' '-thread' './_obuild/tp-avl/tp-avl.cma' '-thread' './_obuild/hh-dfind/hh-dfind.cma' './_obuild/flow-server-env/flow-server-env.cma' './_obuild/flow-services-inference/flow-services-inference.cma' './_obuild/flow-services-port/flow-services-port.cma' '-thread' './_obuild/hh-socket/hh-socket.cma' './_obuild/flow-server/flow-server.cma' './_obuild/flow-commands/flow-commands.cma' './_obuild/flow/flow.cmo'

I think the key difference is that 1.99.19-beta is missing the '-cclib' '-lmllz4' which 1.99.18-beta has when I run it with --verbosity 4

The linking command that is failing looks like this for 1.99.18-beta

'/Users/glevi/.opam/4.03.0/bin/ocamlc.opt' '-o' './_obuild/flow/flow.byte' '-I' './_obuild/flow' '-I' './src' '-I' './_obuild/flow-commands' '-I' '.' '-I' './_obuild/flow-server' '-I' './_obuild/flow-services-inference' '-I' './_obuild/flow-server-env' '-I' './src/server' '-I' './_obuild/flow-persistent-connection' '-I' './_obuild/flow-services-autocomplete' '-I' './_obuild/flow-services-port' '-I' './_obuild/flow-services-flowFileGen' '-I' './_obuild/flow-embedded' '-I' './_obuild/flow-parsing' '-I' './_obuild/flow-shmem' '-I' './_obuild/flow-typing' '-I' './_obuild/flow-common-errors' '-I' './_obuild/flow-server-files' '-I' './_obuild/flow-common-config' '-I' './_obuild/hh-dfind' '-I' './_obuild/hh-fsnotify' '-I' './_obuild/flow-common' '-I' './_obuild/flow-common-profiling' '-I' './_obuild/flow-dts' '-I' './_obuild/flow-common-utils' '-I' './_obuild/hh-procs' '-I' './_obuild/hh-win32res' '-I' './_obuild/hh-find' '-I' './_obuild/hh-socket' '-I' './_obuild/hh-fsnotify-darwin' '-I' './_obuild/hh-utils' '-I' './hack/utils' '-I' './_obuild/hh-utils-relative-path' '-I' './_obuild/hh-heap' '-I' './_obuild/hh-utils-sys' '-I' './_obuild/hh-utils-core' '-I' './_obuild/hh-utils-json' '-I' './_obuild/hh-utils-disk' '-I' './_obuild/flow-parser-utils' '-I' './_obuild/flow-parser' '-I' './_obuild/lz4' '-I' './_obuild/hh-utils-string' '-I' './_obuild/hh-utils-collections' '-I' './_obuild/hh-injector-default' '-I' './_obuild/hh-stubs' '-I' './_obuild/tp-avl' '-I' './_obuild/tp-core' '-I' '/Users/glevi/.opam/4.03.0/lib/ocaml/threads' '-I' '/Users/glevi/.opam/4.03.0/lib/ocaml' '-I' '/Users/glevi/.opam/4.03.0/lib/sedlex' '-I' '/Users/glevi/.opam/4.03.0/lib/gen' '-I' './_obuild/ROOTPROJECT' '-I' './_obuild/flow-common-audit' '-I' './_obuild/flow-stubs' 'flow-stubs.cma' 'flow-common-audit.cma' 'str.cma' 'unix.cma' 'gen.cma' 'sedlexing.cma' 'bigarray.cma' '-thread' 'threads.cma' '-thread' 'tp-core.cma' '-thread' 'tp-avl.cma' '-thread' 'hh-stubs.cma' '-thread' 'hh-injector-default.cma' '-thread' 'hh-utils-collections.cma' '-thread' 'hh-utils-string.cma' '-thread' '-cclib' '-lmllz4' 'flow-parser.cma' 'flow-parser-utils.cma' '-thread' 'hh-utils-disk.cma' '-thread' 'hh-utils-json.cma' '-thread' 'hh-utils-core.cma' '-thread' 'hh-utils-sys.cma' '-thread' 'hh-heap.cma' '-thread' 'hh-utils-relative-path.cma' '-thread' 'hh-utils.cma' '-thread' 'hh-fsnotify-darwin.cma' '-thread' 'hh-socket.cma' '-thread' 'hh-find.cma' '-thread' 'hh-win32res.cma' '-thread' 'hh-procs.cma' 'flow-common-utils.cma' 'flow-dts.cma' 'flow-common-profiling.cma' 'flow-common.cma' '-thread' '-thread' 'hh-dfind.cma' 'flow-common-config.cma' 'flow-server-files.cma' 'flow-common-errors.cma' 'flow-typing.cma' 'flow-shmem.cma' 'flow-parsing.cma' 'flow-embedded.cma' 'flow-services-flowFileGen.cma' 'flow-services-port.cma' 'flow-services-autocomplete.cma' 'flow-persistent-connection.cma' 'flow-server-env.cma' 'flow-services-inference.cma' 'flow-server.cma' 'flow-commands.cma' './_obuild/flow/flow.cmo'

Our lz4 library is a c-only library, which is defined here: https://github.com/facebook/flow/blob/master/ocp_build_hack.ocp.fb#L23

The .ocp.fb files are basically just .ocp build but with file globbing support (when you run make all-ocp, it compiles the actual .ocp files)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions