csmith-project / creduce

C-Reduce, a C and C++ program reducer
Other
1.31k stars 123 forks source link

Homebrew creduce doesn't support Apple Silicon #243

Open sethfri opened 2 years ago

sethfri commented 2 years ago

brew install creduce currently fails on Apple Silicon Macs with the error llvm@9: The x86_64 architecture is required for this software.

According to #232, since creduce is still using LLVM 9, it is unable to support Apple Silicon. I see that there are branches for LLVM 10, 11, and 12, but I'm unsure what the status is. Is there a roadmap or any sort of plan for updated LLVM version support? I would love to pitch in and help get this landed, but I'm unsure where to start or how to help.

Thank you!

eeide commented 2 years ago

Hi! The plan (I expect) is to simply catch up to current LLVM. We are far behind, and the extra value of catching up version-by-version is probably limited at this point.

I hope to catch up soon. I don't like being so far behind. I am still catching up somewhat from an overloaded spring semester, but I hope to have cycles to work on this in the next few weeks.

Patches are always welcome! I expect that a branch from our LLVM 12 branch is likely to be the shortest path to catching up, but I have not tried this.

chenyang78 commented 2 years ago

@sethfri Thank you for raising the issue! We have branches that work for LLVM 11/12/13 and hopefully we could make a new release for a more recent LLVM version as Eric says.

marxin commented 2 years ago

You can try C-Vise that support all LLVM releases since version 9: https://github.com/marxin/cvise

carlocab commented 2 years ago

Try brew install --HEAD creduce. It builds from the tip of the llvm-13.0 branch and uses llvm@13.

You'll need to build from source, though, and there are several reasons why that may fail. But let me know if it doesn't work, and I'll try to fix it.

oraluben commented 2 years ago

Try brew install --HEAD creduce. It builds from the tip of the llvm-13.0 branch and uses llvm@13.

You'll need to build from source, though, and there are several reasons why that may fail. But let me know if it doesn't work, and I'll try to fix it.

Thanks! It looks like the llvm 13 support is not up-to-date with the llvm 13 in homebrew, right? @carlocab

$ brew install --HEAD creduce
==> Downloading https://github.com/csmith-project/creduce/commit/e9bb8686c5ef83a961f63744671c5e70066cba4e.patch?full_index=1
Already downloaded: /Users/yyc/Library/Caches/Homebrew/downloads/2eda452d8d2879573ff5a78ce63c2704666efb23c1056dc0704f9cf47e328463--e9bb8686c5ef83a961f63744671c5e70066cba4e.patch
==> Downloading https://cpan.metacpan.org/authors/id/N/NE/NEILB/Exporter-Lite-0.08.tar.gz
Already downloaded: /Users/yyc/Library/Caches/Homebrew/downloads/40ac43144db0d5ccc80a202f7f75f24ed11e5d3f0e47c416c176c67243773a35--Exporter-Lite-0.08.tar.gz
==> Downloading https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/File-Which-1.23.tar.gz
Already downloaded: /Users/yyc/Library/Caches/Homebrew/downloads/ac058c779bbc10a3fde41595501e92336c72109a29a028daeeef46d048a1378c--File-Which-1.23.tar.gz
==> Downloading https://cpan.metacpan.org/authors/id/G/GW/GWARD/Getopt-Tabular-0.3.tar.gz
Already downloaded: /Users/yyc/Library/Caches/Homebrew/downloads/5351f165fad5444e3e804f3bbd048183c1b3f564b331193a16032cb691bdc5f1--Getopt-Tabular-0.3.tar.gz
==> Downloading https://cpan.metacpan.org/authors/id/A/AB/ABIGAIL/Regexp-Common-2017060201.tar.gz
Already downloaded: /Users/yyc/Library/Caches/Homebrew/downloads/baf74d4a0bb7c91bae4dbb0c10bb6974f218b9ce233fa0cc488cfc039d48eb4d--Regexp-Common-2017060201.tar.gz
==> Cloning https://github.com/csmith-project/creduce.git
Updating /Users/yyc/Library/Caches/Homebrew/creduce--git
==> Checking out branch llvm-13.0
Already on 'llvm-13.0'
Your branch is up to date with 'origin/llvm-13.0'.
HEAD is now at 4ae77d1 built with llvm-13.0 release
==> Patching
==> Applying e9bb8686c5ef83a961f63744671c5e70066cba4e.patch
patching file clang_delta/CMakeLists.txt
Hunk #1 FAILED at 86.
1 out of 1 hunk FAILED -- saving rejects to file clang_delta/CMakeLists.txt.rej
patching file clang_delta/Makefile.am
Hunk #1 FAILED at 127.
1 out of 1 hunk FAILED -- saving rejects to file clang_delta/Makefile.am.rej
patching file clang_delta/Makefile.in
Hunk #1 FAILED at 575.
1 out of 1 hunk FAILED -- saving rejects to file clang_delta/Makefile.in.rej

Do not report this issue to Homebrew/brew or Homebrew/core!

Please create pull requests instead of asking for help on Homebrew's GitHub,
Twitter or any other official channels.
carlocab commented 2 years ago

I've opened https://github.com/Homebrew/homebrew-core/pull/106720 to fix the problem you're seeing. (I can't promise that won't just lead to another one, though.)

Edit: Fix merged now. Try brew update && brew install --HEAD creduce.

carlocab commented 2 years ago

It builds now, but doesn't quite work:

==> creduce test1.sh test1.c
prereqs not found for pass pass_indent at /opt/homebrew/Cellar/creduce/HEAD-4ae77d1_3/libexec/creduce line 376.
 at /opt/homebrew/Cellar/creduce/HEAD-4ae77d1_3/libexec/creduce line 35.
        main::__ANON__("prereqs not found for pass pass_indent at /opt/homebrew/Cella"...) called at /opt/homebrew/Cellar/creduce/HEAD-4ae77d1_3/libexec/creduce line 376
        main::call_prereq_check("pass_indent") called at /opt/homebrew/Cellar/creduce/HEAD-4ae77d1_3/libexec/creduce line 1041

Not sure what's wrong, unfortunately. If someone can give me a hint, I can try to fix the Homebrew formula.

oraluben commented 2 years ago

It's due to failure of creduce/pass_indent.pm::check_prereqs, which checks for the executable clang-format. This binary is installed with llvm@13 (in /opt/homebrew/Cellar/llvm@13/13.0.1/bin) but not in search path.

Is this something that an be fixed by Homebrew formula? @carlocab

carlocab commented 2 years ago

Yes. https://github.com/Homebrew/homebrew-core/pull/106743 Edit: Now merged. The example I gave above should work now. You may need to brew uninstall creduce && brew install --HEAD creduce if you had installed an earlier broken version.

Thanks for the tip!

carlocab commented 2 years ago

Incidentally, I noticed that creduce builds some additional executables that the Homebrew formula currently doesn't expose to the user (as they are installed into a location that typically isn't in the user's PATH):

Are these just helper binaries for creduce, or should a user be able to access any of them directly? (Except perhaps for unifdef, as that shadows /usr/bin/uninfdef on macOS.)

oraluben commented 2 years ago

Are these just helper binaries for creduce, or should a user be able to access any of them directly? (Except perhaps for unifdef, as that shadows /usr/bin/uninfdef on macOS.)

As a normal end user, I'm not aware of any of those executables.

carlocab commented 2 years ago

Well, no one's complained about them being hidden away in libexec, and you don't seem to be missing them, so I'm okay with keeping them there for now. We can always fix it if someone is actually interested in using them directly.

dlesbre commented 5 months ago

A similar issue appears on ubuntu 24.04. I can apt install creduce just fine, but running it fails with the same error message (modulo install paths).

prereqs not found for pass pass_indent at /usr/bin/creduce line 376.
 at /usr/bin/creduce line 35.
        main::__ANON__("prereqs not found for pass pass_indent at /usr/bin/creduce li"...) called at /usr/bin/creduce line 376
        main::call_prereq_check("pass_indent") called at /usr/bin/creduce line 1041