diff --git a/extra/mold/build b/extra/mold/build index b540d835..f09e441d 100755 --- a/extra/mold/build +++ b/extra/mold/build @@ -6,8 +6,14 @@ # for performing LTO. # export LDFLAGS="$LDFLAGS -static" -make -make PREFIX=/usr install +patch -p1 < elf_amd64_only.patch + +cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib + +cmake --build build +cmake --install build # Create a symbolic link so users can use mold as the linker system-wide # (without need for special CFLAGS/CXXFLAGS). diff --git a/extra/mold/checksums b/extra/mold/checksums index 61952cfb..3422c488 100644 --- a/extra/mold/checksums +++ b/extra/mold/checksums @@ -1 +1,2 @@ -47e6c48d20f49e5b47dfb8197dd9ffcb11a8833d614f7a03bd29741c658a69cd +55f67a0531cd357fa8c8aa16f9664954188f49537126e9bd35240846de3c3434 +9961e46306499052f631563dad64f084934b422347911287024379e9712fa703 diff --git a/extra/mold/depends b/extra/mold/depends index f820a97c..4e92c6ec 100644 --- a/extra/mold/depends +++ b/extra/mold/depends @@ -1,3 +1,4 @@ -cmake make +cmake make openssl zlib +zstd diff --git a/extra/mold/patches/elf_amd64_only.patch b/extra/mold/patches/elf_amd64_only.patch new file mode 100644 index 00000000..8de947fe --- /dev/null +++ b/extra/mold/patches/elf_amd64_only.patch @@ -0,0 +1,116 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index dcbfc2d..d5b3d71 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -183,7 +183,7 @@ add_dependencies(mold git_hash) + # As a workaround, we create a .cc file for each target and spawn many + # compiler instances. This is hacky but greatly reduces compile time. + list(APPEND MOLD_ELF_TARGETS +- X86_64 I386 ARM64 ARM32 RV32LE RV32BE RV64LE RV64BE PPC64V2 SPARC64) ++ X86_64) + + list(APPEND MOLD_ELF_TEMPLATE_FILES + elf/cmdline.cc +@@ -203,20 +203,6 @@ list(APPEND MOLD_ELF_TEMPLATE_FILES + elf/thunks.cc + ) + +-list(APPEND MOLD_MACHO_TARGETS X86_64 ARM64) +- +-list(APPEND MOLD_MACHO_TEMPLATE_FILES +- macho/cmdline.cc +- macho/dead-strip.cc +- macho/input-files.cc +- macho/input-sections.cc +- macho/lto.cc +- macho/main.cc +- macho/mapfile.cc +- macho/output-chunks.cc +- macho/tapi.cc +- ) +- + function(mold_instantiate_templates SOURCE TARGET) + set(PATH ${CMAKE_BINARY_DIR}/${SOURCE}.${TARGET}.cc) + file(WRITE ${PATH} "#define MOLD_${TARGET} 1 +@@ -232,30 +218,15 @@ foreach (SOURCE IN LISTS MOLD_ELF_TEMPLATE_FILES) + endforeach() + endforeach() + +-foreach (SOURCE IN LISTS MOLD_MACHO_TEMPLATE_FILES) +- foreach(TARGET IN LISTS MOLD_MACHO_TARGETS) +- mold_instantiate_templates(${SOURCE} ${TARGET}) +- endforeach() +-endforeach() +- + # Add other non-template source files. + target_sources(mold PRIVATE + compress.cc + demangle.cc +- elf/arch-arm32.cc +- elf/arch-arm64.cc +- elf/arch-i386.cc +- elf/arch-ppc64v2.cc +- elf/arch-riscv.cc +- elf/arch-sparc64.cc + elf/arch-x86-64.cc + filepath.cc + git-hash.cc + glob.cc + hyperloglog.cc +- macho/arch-arm64.cc +- macho/arch-x86-64.cc +- macho/yaml.cc + main.cc + multi-glob.cc + perf.cc +diff --git a/elf/main.cc b/elf/main.cc +index b63bba6..c46ffc9 100644 +--- a/elf/main.cc ++++ b/elf/main.cc +@@ -388,33 +388,6 @@ int elf_main(int argc, char **argv) { + if (ctx.arg.emulation == MachineType::NONE) + ctx.arg.emulation = deduce_machine_type(ctx, file_args); + +- // Redo if -m is not x86-64. +- if (ctx.arg.emulation != E::machine_type) { +- switch (ctx.arg.emulation) { +- case MachineType::I386: +- return elf_main(argc, argv); +- case MachineType::ARM64: +- return elf_main(argc, argv); +- case MachineType::ARM32: +- return elf_main(argc, argv); +- case MachineType::RV64LE: +- return elf_main(argc, argv); +- case MachineType::RV64BE: +- return elf_main(argc, argv); +- case MachineType::RV32LE: +- return elf_main(argc, argv); +- case MachineType::RV32BE: +- return elf_main(argc, argv); +- case MachineType::PPC64V2: +- return elf_main(argc, argv); +- case MachineType::SPARC64: +- return elf_main(argc, argv); +- default: +- unreachable(); +- } +- unreachable(); +- } +- + Timer t_all(ctx, "all"); + + install_signal_handler(); +diff --git a/main.cc b/main.cc +index 0f78eff..b4002f8 100644 +--- a/main.cc ++++ b/main.cc +@@ -108,8 +108,5 @@ i64 get_default_thread_count() { + int main(int argc, char **argv) { + mold::mold_version = mold::get_mold_version(); + +- std::string cmd = mold::filepath(argv[0]).filename().string(); +- if (cmd == "ld64" || cmd == "ld64.mold") +- return mold::macho::main(argc, argv); + return mold::elf::main(argc, argv); + } diff --git a/extra/mold/sources b/extra/mold/sources index c25e2040..0463d460 100644 --- a/extra/mold/sources +++ b/extra/mold/sources @@ -1 +1,2 @@ https://github.com/rui314/mold/archive/vVERSION.tar.gz +patches/elf_amd64_only.patch diff --git a/extra/mold/version b/extra/mold/version index 4ff136af..104216de 100644 --- a/extra/mold/version +++ b/extra/mold/version @@ -1 +1 @@ -1.4.2 1 +1.5.0 1