1
1
mirror of https://github.com/rui314/mold.git synced 2024-09-21 09:57:18 +03:00

Define BINDIR, LIBDIR and MANDIR

So that it is easy to specify alternative install target paths.
This commit is contained in:
Rui Ueyama 2021-11-19 16:52:16 +09:00
parent 8b41bb923a
commit 39676ef7a9
3 changed files with 28 additions and 36 deletions

View File

@ -1,3 +1,10 @@
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
LIBDIR ?= $(PREFIX)/lib
MANDIR ?= $(PREFIX)/share/man
D = $(DESTDIR)
ifeq ($(origin CC), default) ifeq ($(origin CC), default)
CC = clang CC = clang
endif endif
@ -10,7 +17,7 @@ OS ?= $(shell uname -s)
CPPFLAGS = -pthread -std=c++20 -fPIE -DMOLD_VERSION=\"0.9.6\" \ CPPFLAGS = -pthread -std=c++20 -fPIE -DMOLD_VERSION=\"0.9.6\" \
-fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables \ -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables \
$(EXTRA_CPPFLAGS) -DLIBDIR="\"$(LIBDIR)\"" $(EXTRA_CPPFLAGS)
LDFLAGS += $(EXTRA_LDFLAGS) LDFLAGS += $(EXTRA_LDFLAGS)
LIBS = -pthread -lz -lxxhash -ldl -lm LIBS = -pthread -lz -lxxhash -ldl -lm
@ -18,8 +25,6 @@ SRCS=$(wildcard *.cc elf/*.cc macho/*.cc)
HEADERS=$(wildcard *.h elf/*.h macho/*.h) HEADERS=$(wildcard *.h elf/*.h macho/*.h)
OBJS=$(SRCS:%.cc=out/%.o) OBJS=$(SRCS:%.cc=out/%.o)
PREFIX ?= /usr/local
DEST = $(DESTDIR)$(PREFIX)
DEBUG ?= 0 DEBUG ?= 0
LTO ?= 0 LTO ?= 0
ASAN ?= 0 ASAN ?= 0
@ -113,26 +118,26 @@ test tests check: all
endif endif
install: all install: all
install -m 755 -d $(DEST)/bin install -m 755 -d $D$(BINDIR)
install -m 755 mold $(DEST)/bin install -m 755 mold $D$(BINDIR)
strip $(DEST)/bin/mold strip $D$(BINDIR)/mold
install -m 755 -d $(DEST)/lib/mold install -m 755 -d $D$(LIBDIR)/mold
install -m 644 mold-wrapper.so $(DEST)/lib/mold install -m 644 mold-wrapper.so $D$(LIBDIR)/mold
strip $(DEST)/lib/mold/mold-wrapper.so strip $D$(LIBDIR)/mold/mold-wrapper.so
install -m 755 -d $(DEST)/share/man/man1 install -m 755 -d $D$(MANDIR)/man1
install -m 644 docs/mold.1 $(DEST)/share/man/man1 install -m 644 docs/mold.1 $D$(MANDIR)/man1
rm -f $(DEST)/share/man/man1/mold.1.gz rm -f $D$(MANDIR)/man1/mold.1.gz
gzip -9 $(DEST)/share/man/man1/mold.1 gzip -9 $D$(MANDIR)/man1/mold.1
ln -sf mold $(DEST)/bin/ld.mold ln -sf mold $D$(BINDIR)/ld.mold
ln -sf mold $(DEST)/bin/ld64.mold ln -sf mold $D$(BINDIR)/ld64.mold
uninstall: uninstall:
rm -f $(DEST)/bin/mold $(DEST)/bin/ld.mold $(DEST)/bin/ld64.mold rm -f $D$(BINDIR)/mold $D$(BINDIR)/ld.mold $D$(BINDIR)/ld64.mold
rm -f $(DEST)/share/man/man1/mold.1.gz rm -f $D$(MANDIR)/man1/mold.1.gz
rm -rf $(DEST)/lib/mold rm -rf $D$(LIBDIR)/mold
clean: clean:
rm -rf *~ mold mold-wrapper.so out ld ld64.mold rm -rf *~ mold mold-wrapper.so out ld ld64.mold

View File

@ -272,11 +272,13 @@ std::string find_dso(Context<E> &ctx, const std::string &self) {
if (is_regular_file(path)) if (is_regular_file(path))
return path; return path;
// If not exist, mold might be installed as $PREFIX/bin/mold and the #ifdef LIBDIR
// DSO as $PREFIX/lib/mold/mold-wrapper.so. // If not found, search $(LIBDIR)/mold, which is /usr/local/lib/mold
path = path_clean(self + "/../../lib/mold/mold-wrapper.so"); // by default.
path = path_clean(LIBDIR "/mold/mold-wrapper.so");
if (is_regular_file(path)) if (is_regular_file(path))
return path; return path;
#endif
Fatal(ctx) << "mold-wrapper.so is missing"; Fatal(ctx) << "mold-wrapper.so is missing";
} }

View File

@ -21,19 +21,4 @@ cp $mold-wrapper.so $t/bin
$t/bin/mold -run bash -c 'echo $LD_PRELOAD' | grep -q '/bin/mold-wrapper.so' $t/bin/mold -run bash -c 'echo $LD_PRELOAD' | grep -q '/bin/mold-wrapper.so'
rm -rf $t
mkdir -p $t/bin $t/lib/mold
cp $mold $t/bin
cp $mold-wrapper.so $t/lib/mold
$t/bin/mold -run bash -c 'echo $LD_PRELOAD' | grep -q '/lib/mold/mold-wrapper.so'
rm -rf $t
mkdir -p $t/bin $t/lib/mold
cp $mold $t/bin
cp $mold-wrapper.so $t/bin
cp $mold-wrapper.so $t/lib/mold
$t/bin/mold -run bash -c 'echo $LD_PRELOAD' | grep -q '/bin/mold-wrapper.so'
echo OK echo OK