VCVRack / rack-plugin-toolchain

53 stars 12 forks source link

make docker-build fails on M1 #9

Closed Normalised closed 1 year ago

Normalised commented 3 years ago

Installed docker for ARM. Created and added osxcross package to rack-plugin-toolchain directory. Build fails with this output :

make_docker_build_output.txt

cschol commented 3 years ago

How much RAM do you have?

Normalised commented 3 years ago

Machine has 16gb. I changed the settings in the docker app : Resources -> Advanced and changed memory to 8gb. Ran docker builder prune and make docker-build again, still fails. Last part of log is :

#15 1654.7 /home/build/rack-plugin-toolchain/osxcross/build/llvm-10.0.1.src/lib/CodeGen/SelectionDAG/TargetLowering.cpp:7659:75: note: parameter passing for argument of type 'llvm::SDNodeFlags' changed in GCC 9.1
#15 1654.7  7659 |     Res = DAG.getNode(BaseOpcode, dl, EltVT, Res, Ops[i], Node->getFlags());
#15 1654.7       |                                                                           ^
#15 1654.8 In file included from /home/build/rack-plugin-toolchain/osxcross/build/llvm-10.0.1.src/include/llvm/CodeGen/TargetLowering.h:35,
#15 1654.8                  from /home/build/rack-plugin-toolchain/osxcross/build/llvm-10.0.1.src/lib/CodeGen/SelectionDAG/TargetLowering.cpp:13:
#15 1654.8 /home/build/rack-plugin-toolchain/osxcross/build/llvm-10.0.1.src/include/llvm/CodeGen/SelectionDAG.h: In member function 'void llvm::TargetLowering::softenSetCCOperands(llvm::SelectionDAG&, llvm::EVT, llvm::SDValue&, llvm::SDValue&, llvm::ISD::CondCode&, const llvm::SDLoc&, llvm::SDValue, llvm::SDValue, llvm::SDValue&, bool) const':
#15 1654.8 /home/build/rack-plugin-toolchain/osxcross/build/llvm-10.0.1.src/include/llvm/CodeGen/SelectionDAG.h:1008:67: note: parameter passing for argument of type 'llvm::SDNodeFlags' changed in GCC 9.1
#15 1654.8  1008 |     return getNode(ISD::SETCC, DL, VT, LHS, RHS, getCondCod
#15 1654.8 [output clipped, log limit 1MiB reached]
------
executor failed running [/bin/sh -c make toolchain-mac]: exit code: 2
cschol commented 3 years ago

I ran into the same problem on an 2012 Macbook Pro. 8GB is not enough RAM for the build process. The problem is that it tries to parallelize the build implicitly. I am working on an update to the Makefile that will correctly propagate a -j argument to the build process underneath and then running -j 1 (no parallel build) will make the build succeed. Downsize is that it takes about 6-8 hours for the tool chain build to finish.

Normalised commented 3 years ago

Ok, thanks for the info. It looks like it takes the input to -j from the current docker config. I've turned the number of CPUs down to 2 in the docker settings. I'll let you know how it goes.

Normalised commented 3 years ago

1 CPU, 10 GB, still fails.

#15 15.88 + cmake .. -DCMAKE_INSTALL_PREFIX=/home/build/rack-plugin-toolchain/local -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=OFF -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=1
#15 19.11 /usr/bin/ar: creating t.a
#15 23.67 -- Version: 0.0.0
#15 24.22 -- Performing Test HAVE_GNU_POSIX_REGEX
#15 24.22 -- Performing Test HAVE_GNU_POSIX_REGEX
#15 24.24 -- Performing Test HAVE_GNU_POSIX_REGEX -- failed to compile
#15 24.24 -- Performing Test HAVE_POSIX_REGEX
#15 24.24 -- Performing Test HAVE_POSIX_REGEX
#15 24.36 -- Performing Test HAVE_POSIX_REGEX -- success
#15 24.36 -- Performing Test HAVE_STEADY_CLOCK
#15 24.36 -- Performing Test HAVE_STEADY_CLOCK
#15 24.44 -- Performing Test HAVE_STEADY_CLOCK -- success
#15 28.29 + make -j 1 VERBOSE=1

was the command it was running and ended with

executor failed running [/bin/sh -c make toolchain-mac]: exit code: 2
make: *** [docker-build] Error 1
docb commented 2 years ago

This is not docker related, but found out that there is for compiling llvm a JOBS environment variable used which is not set - so if empty make will only see -j and use all cpus available (32 in my case), so JOBS=8 make toolchain-all did the job and only used 8 GB. It seems that 1 GB per CPU is necessary

cschol commented 2 years ago

@docb That was my experience on a Mac in general and the reason why I implemented the JOBS environment variable to be passed to the underlying build processes (I need to run JOBS=1 make on my old 2012 Macbook Pro). Thank you for confirming.

cschol commented 1 year ago

This issue is resolved with the latest toolchain updates, which have been confirmed to work on M1 and M2 platforms.