annotate src/link.sh @ 33566:e1e3805fcd96 v9.0.2028

patch 9.0.2028: confusing build dependencies Commit: https://github.com/vim/vim/commit/5d03525cdef5db1b1cedfa26c6f8a21aaa207ec0 Author: Yee Cheng Chin <ychin.git@gmail.com> Date: Sun Oct 15 09:50:53 2023 +0200 patch 9.0.2028: confusing build dependencies Problem: confusing build dependencies Solution: clean them up, make them parallelizable Separate vim binary and unittest dependencies, make them parallelizable Clean up make dependencies so Vim and unit test binaries only depend on the object files they need. This fixes an existing issue where after running unit tests, the Vim binary would be invalidated, which results in it having to be linked again when running script tests, even though Vim was already previously built. Make link.sh (script we use to link those binaries) generate namespaced temporary files for each app to avoid them colliding with each other. This allows `unittesttargets` to be built in parallel. These fixes are useful when using link-time-optimization as the link phase could now take minutes rather than a few seconds. closes: #13344 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
author Christian Brabandt <cb@256bit.org>
date Sun, 15 Oct 2023 10:00:03 +0200
parents 1ccc1ace9e5b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 #! /bin/sh
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 # link.sh -- try linking Vim with different sets of libraries, finding the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 # minimal set for fastest startup. The problem is that configure adds a few
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 # libraries when they exist, but this doesn't mean they are needed for Vim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 # Author: Bram Moolenaar
2629
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
8 # Last change: 2010 Nov 03
1125
96cd8222a819 updated for version 7.1a
vimboss
parents: 137
diff changeset
9 # License: Public domain
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 # Warning: This fails miserably if the linker doesn't return an error code!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 # Otherwise this script is fail-safe, falling back to the original full link
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 # command if anything fails.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
16 echo "$LINK " >link_$PROG.cmd
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 exit_value=0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18
2629
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
19 if test "$LINK_AS_NEEDED" = yes; then
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
20 echo "link.sh: \$LINK_AS_NEEDED set to 'yes': invoking linker directly."
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
21 cat link_$PROG.cmd
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
22 if sh link_$PROG.cmd; then
2629
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
23 exit_value=0
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
24 echo "link.sh: Linked fine"
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
25 else
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
26 exit_value=$?
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
27 echo "link.sh: Linking failed"
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
28 fi
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
29 else
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
30 if test -f auto/link.sed; then
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
31
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 # If auto/link.sed already exists, use it. We assume a previous run of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 # link.sh has found the correct set of libraries.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 echo "link.sh: The file 'auto/link.sed' exists, which is going to be used now."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 echo "link.sh: If linking fails, try deleting the auto/link.sed file."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 echo "link.sh: If this fails too, try creating an empty auto/link.sed file."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 # If linking works with the full link command, try removing some libraries,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 # that are known not to be needed on at least one system.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 # Remove auto/pathdef.c if there is a new link command and compile it again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 # There is a loop to remove libraries that appear several times.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 # Notes:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 # - Can't remove Xext; It links fine but will give an error when running gvim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 # with Motif.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 # - Don't remove the last -lm: On HP-UX Vim links OK but crashes when the GTK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 # GUI is started, because the "floor" symbol could not be resolved.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 #
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
52 cat link_$PROG.cmd
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
53 if sh link_$PROG.cmd; then
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 touch auto/link.sed
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
55 cp link_$PROG.cmd linkit_$PROG.sh
2370
454f314d0e61 Make it possible to load Perl dynamically on Unix. (James Vega)
Bram Moolenaar <bram@vim.org>
parents: 2196
diff changeset
56 for libname in SM ICE nsl dnet dnet_stub inet socket dir elf iconv Xt Xmu Xp Xpm X11 Xdmcp x w perl dl pthread thread readline m crypt attr; do
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 cont=yes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 while test -n "$cont"; do
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
59 if grep "l$libname " linkit_$PROG.sh >/dev/null; then
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
60 if test ! -f link1_$PROG.sed; then
2196
99e5a139e67a Change wording in link.sh: "remove" -> "omit"
Bram Moolenaar <bram@vim.org>
parents: 1125
diff changeset
61 echo "link.sh: OK, linking works, let's try omitting a few libraries."
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 echo "link.sh: See auto/link.log for details."
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 rm -f auto/link.log
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 fi
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
65 echo "s/-l$libname *//" >link1_$PROG.sed
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
66 sed -f auto/link.sed <link_$PROG.cmd >linkit2_$PROG.sh
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
67 sed -f link1_$PROG.sed <linkit2_$PROG.sh >linkit_$PROG.sh
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 # keep the last -lm
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
69 if test $libname != "m" || grep "lm " linkit_$PROG.sh >/dev/null; then
2196
99e5a139e67a Change wording in link.sh: "remove" -> "omit"
Bram Moolenaar <bram@vim.org>
parents: 1125
diff changeset
70 echo "link.sh: Trying to omit the $libname library..."
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
71 cat linkit_$PROG.sh >>auto/link.log
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 # Redirect this link output, it may contain error messages which
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 # should be ignored.
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
74 if sh linkit_$PROG.sh >>auto/link.log 2>&1; then
2196
99e5a139e67a Change wording in link.sh: "remove" -> "omit"
Bram Moolenaar <bram@vim.org>
parents: 1125
diff changeset
75 echo "link.sh: Vim doesn't need the $libname library!"
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
76 cat link1_$PROG.sed >>auto/link.sed
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 rm -f auto/pathdef.c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 else
2196
99e5a139e67a Change wording in link.sh: "remove" -> "omit"
Bram Moolenaar <bram@vim.org>
parents: 1125
diff changeset
79 echo "link.sh: Vim DOES need the $libname library."
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 cont=
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
81 cp link_$PROG.cmd linkit_$PROG.sh
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 cont=
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
85 cp link_$PROG.cmd linkit_$PROG.sh
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 cont=
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
89 cp link_$PROG.cmd linkit_$PROG.sh
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 done
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 done
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 if test ! -f auto/pathdef.c; then
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 $MAKE objects/pathdef.o
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 fi
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
96 if test ! -f link1_$PROG.sed; then
2196
99e5a139e67a Change wording in link.sh: "remove" -> "omit"
Bram Moolenaar <bram@vim.org>
parents: 1125
diff changeset
97 echo "link.sh: Linked fine, no libraries can be omitted"
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
98 touch link3_$PROG.sed
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 exit_value=$?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 # Now do the real linking.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 if test -s auto/link.sed; then
2196
99e5a139e67a Change wording in link.sh: "remove" -> "omit"
Bram Moolenaar <bram@vim.org>
parents: 1125
diff changeset
109 echo "link.sh: Using auto/link.sed file to omit a few libraries"
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
110 sed -f auto/link.sed <link_$PROG.cmd >linkit_$PROG.sh
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
111 cat linkit_$PROG.sh
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
112 if sh linkit_$PROG.sh; then
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 exit_value=0
2196
99e5a139e67a Change wording in link.sh: "remove" -> "omit"
Bram Moolenaar <bram@vim.org>
parents: 1125
diff changeset
114 echo "link.sh: Linked fine with a few libraries omitted"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 exit_value=$?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 echo "link.sh: Linking failed, making auto/link.sed empty and trying again"
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
118 mv -f auto/link.sed link2_$PROG.sed
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 touch auto/link.sed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 rm -f auto/pathdef.c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 $MAKE objects/pathdef.o
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 fi
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
124 if test -f auto/link.sed -a ! -s auto/link.sed -a ! -f link3_$PROG.sed; then
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 echo "link.sh: Using unmodified link command"
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
126 cat link_$PROG.cmd
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
127 if sh link_$PROG.cmd; then
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 exit_value=0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 echo "link.sh: Linked OK"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 exit_value=$?
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
132 if test -f link2_$PROG.sed; then
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 echo "link.sh: Linking doesn't work at all, removing auto/link.sed"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 rm -f auto/link.sed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 fi
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138
2629
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
139 fi
1ccc1ace9e5b updated for version 7.3.050
Bram Moolenaar <bram@vim.org>
parents: 2370
diff changeset
140
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 # cleanup
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 #
33566
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
144 rm -f link_$PROG.cmd linkit_$PROG.sh link1_$PROG.sed link2_$PROG.sed \
e1e3805fcd96 patch 9.0.2028: confusing build dependencies
Christian Brabandt <cb@256bit.org>
parents: 2629
diff changeset
145 link3_$PROG.sed linkit2_$PROG.sh
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 # return an error code if something went wrong
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 exit $exit_value
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 # vim:set sw=2 et: