diff options
-rw-r--r-- | meta/recipes-devtools/prelink/prelink_git.bb | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/meta/recipes-devtools/prelink/prelink_git.bb b/meta/recipes-devtools/prelink/prelink_git.bb index 5d9f260f85..0856b1c667 100644 --- a/meta/recipes-devtools/prelink/prelink_git.bb +++ b/meta/recipes-devtools/prelink/prelink_git.bb | |||
@@ -44,6 +44,99 @@ BBCLASSEXTEND = "native" | |||
44 | EXTRA_OECONF = "--disable-selinux --with-pkgversion=${PV}-${PR} \ | 44 | EXTRA_OECONF = "--disable-selinux --with-pkgversion=${PV}-${PR} \ |
45 | --with-bugurl=http://bugzilla.yoctoproject.org/" | 45 | --with-bugurl=http://bugzilla.yoctoproject.org/" |
46 | 46 | ||
47 | |||
48 | # | ||
49 | # For target prelink we need to ensure paths match the lib path layout | ||
50 | # including for any configured multilibs | ||
51 | # | ||
52 | python do_linkerpaths () { | ||
53 | values = all_multilib_tune_list(["TUNE_ARCH", "baselib", "ABIEXTENSION"], d) | ||
54 | |||
55 | arches = values["TUNE_ARCH"] | ||
56 | baselibs = values["baselib"] | ||
57 | abis = values["ABIEXTENSION"] | ||
58 | |||
59 | def replace_lines(f, search, replacement, d, firstonly = False, secondonly = False): | ||
60 | f = d.expand(f) | ||
61 | if search == replacement: | ||
62 | return | ||
63 | bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f)) | ||
64 | with open(f, "r") as data: | ||
65 | lines = data.readlines() | ||
66 | with open(f, "w") as data: | ||
67 | for line in lines: | ||
68 | if not secondonly and not firstonly: | ||
69 | line = line.replace(search, replacement) | ||
70 | elif secondonly and search in line: | ||
71 | secondonly = False | ||
72 | elif firstonly and search and search in line: | ||
73 | line = line.replace(search, replacement) | ||
74 | search = None | ||
75 | data.write(line) | ||
76 | |||
77 | def replace_lines_rtld(f, search, replacement, section, d): | ||
78 | f = d.expand(f) | ||
79 | bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f)) | ||
80 | with open(f, "r") as data: | ||
81 | lines = data.readlines() | ||
82 | found = False | ||
83 | found2 = False | ||
84 | with open(f, "w") as data: | ||
85 | for line in lines: | ||
86 | if section in line: | ||
87 | if section == "else" and "if" in line: | ||
88 | found = False | ||
89 | else: | ||
90 | found = True | ||
91 | if found and "dst_LIB =" in line: | ||
92 | found2 = True | ||
93 | elif "}" in line: | ||
94 | found = False | ||
95 | found2 = False | ||
96 | if found2: | ||
97 | line = line.replace(search, replacement) | ||
98 | data.write(line) | ||
99 | |||
100 | for i, arch in enumerate(arches): | ||
101 | tune_baselib = baselibs[i] | ||
102 | abi = abis[i] | ||
103 | |||
104 | bits = 32 | ||
105 | if arch == "powerpc": | ||
106 | replace_lines("${S}/src/arch-ppc.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d) | ||
107 | elif arch == "powerpc64": | ||
108 | replace_lines("${S}/src/arch-ppc64.c", "/lib64/ld64.so.1", "/" + tune_baselib + "/ld64.so.1", d) | ||
109 | bits = 64 | ||
110 | elif arch == "x86_64": | ||
111 | if abi == "x32": | ||
112 | replace_lines("${S}/src/arch-x86_64.c", "/libx32/ld-linux-x32.so.2", "/" + tune_baselib + "/ld-linux-x32.so.2", d) | ||
113 | else: | ||
114 | replace_lines("${S}/src/arch-x86_64.c", "/lib64/ld-linux-x86-64.so.2", "/" + tune_baselib + "/ld-linux-x86-64.so.2", d) | ||
115 | bits = 64 | ||
116 | elif arch == "arm": | ||
117 | replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux.so.3", "/" + tune_baselib + "/ld-linux.so.3", d) | ||
118 | replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux-armhf.so.3", "/" + tune_baselib + "/ld-linux-armhf.so.3", d) | ||
119 | elif arch == "mips" or arch == "mipsel": | ||
120 | replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, firstonly=True) | ||
121 | replace_lines("${S}/src/arch-mips.c", "/lib32/ld.so.1", "/" + tune_baselib + "/ld.so.1", d) | ||
122 | elif arch == "mips64" or arch == "mips64el": | ||
123 | replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, secondonly=True) | ||
124 | replace_lines("${S}/src/arch-mips.c", "/lib64/ld.so.1", "/" + tune_baselib + "/ld.so.1", d) | ||
125 | bits = 64 | ||
126 | elif arch.endswith("86"): | ||
127 | replace_lines("${S}/src/arch-i386.c", "/lib/ld-linux.so.2", "/" + tune_baselib + "/ld-linux.so.2", d) | ||
128 | if bits == 32 and tune_baselib != "lib": | ||
129 | replace_lines_rtld("${S}/src/rtld/rtld.c", "lib", tune_baselib, "else", d) | ||
130 | if bits == 64 and tune_baselib != "lib64": | ||
131 | replace_lines_rtld("${S}/src/rtld/rtld.c", "lib64", tune_baselib, "use_64bit", d) | ||
132 | } | ||
133 | |||
134 | python () { | ||
135 | overrides = d.getVar("OVERRIDES", True).split(":") | ||
136 | if "class-target" in overrides: | ||
137 | bb.build.addtask('do_linkerpaths', 'do_configure', 'do_patch', d) | ||
138 | } | ||
139 | |||
47 | do_configure_prepend () { | 140 | do_configure_prepend () { |
48 | # Disable documentation! | 141 | # Disable documentation! |
49 | echo "all:" > ${S}/doc/Makefile.am | 142 | echo "all:" > ${S}/doc/Makefile.am |