mrrl

Minimal Reliable Reproducible Linux
git clone https://ccx.te2000.cz/git/mrrl
Log | Files | Refs | Submodules | README

musl-cross-make:bootstrap-1 (6703B)


      1 #!/usr/bin/env pthbs-build
      2 #@pragma:nofail_digest
      3 #@pragma:nosandbox
      4 #@pragma:nopath
      5 #+musl-cross-make.a6dd1a5bb85d66548633e88b73189e4b778d12d25a02e2ea1558067729467f51
      6 #+nawk.abe3790fd5e321ccd4e1ab7dab56339222e2eee686bc4b2241e7853104a4a500
      7 #@sha256:0cdd76777a0dfd3dd3a63f215f030208ddb91c2361d2bcc02acec0f1c16b6a2e:musl-cross-make/sources/binutils-2.44.tar.gz
      8 #@sha256:a3c2b80201b89e68616f4ad30bc66aee4927c3ce50e33929ca819d5c43538898:musl-cross-make/sources/gmp-6.3.0.tar.xz
      9 #@sha256:b67ba0383ef7e8a8563734e2e889ef5ec3c3b898a01d00fa0a6869ad81c6ce01:musl-cross-make/sources/mpfr-4.2.2.tar.xz
     10 #@sha256:9b607166a1c999d8326098121222feb080a20a3253975fcdfa2de96ba7f757a7:musl-cross-make/sources/linux-6.17.tar.xz
     11 #@sha256:ab642492f5cf882b74aa0cb730cd410a81edcdbec895183ce930e706c1c759b8:musl-cross-make/sources/mpc-1.3.1.tar.gz
     12 #@sha256:9c4ce6dbb040568fdc545588ac03c5cbc95a8dbf0c7aa490170843afb59ca8f5:musl-cross-make/sources/gcc-13.4.0.tar.xz
     13 #@sha256:a9a118bbe84d8764da0ea0d28b3ab3fae8477fc7e4085d90102b8596fc7c75e4:musl-cross-make/sources/musl-1.2.5.tar.gz
     14 #@sha256:75d5d255a2a273b6e651f82eecfabf6cbcd8eaeae70e86b417384c8f4a58d8d3:musl-cross-make/sources/config.sub
     15 #@sha256:4213e75809588e3f32ae0fde8fb11df2dfd6e0e013762ff5ee951c3aadb7ffc0:musl-cross-make/patches/linux-6.17/0001-no-rsync-headers.diff
     16 #@git:cf9b601eba1b8c4a3c0655ba25d7fc8cfa365cbc:musl-cross-make
     17 
     18 
     19 # - build script start -
     20 
     21 PATH="$pthbs_build_environment/command:$PATH"
     22 prefix=/home/ccx/versions/$pthbs_package
     23 dest=${pthbs_destdir%/}${prefix}
     24 cd 'musl-cross-make'
     25 
     26 export TZ=UTC
     27 export SOURCE_DATE_EPOCH=1748000928  # mtime for gcc-14.3.0.tar.xz
     28 
     29 bootstrap=/home/ccx/versions/musl-cross-make.a6dd1a5bb85d66548633e88b73189e4b778d12d25a02e2ea1558067729467f51
     30 "$bootstrap/bin/x86_64-linux-musl-gcc" --version
     31 
     32 # silence unpacking of tarballs
     33 sed -i -e 's|tar \([zjJ]\)xvf |tar \1xf |' ./Makefile
     34 
     35 cat >./config.mak <<EOF
     36 OUTPUT=${pthbs_destdir%/}/home/ccx/versions/$pthbs_package
     37 TARGET=x86_64-linux-musl
     38 GCC_VER=13.4.0
     39 EOF
     40 
     41 CC="${bootstrap}/bin/x86_64-linux-musl-gcc"
     42 printf '%s\n' >>config.mak \
     43 	"bbin=$bootstrap/bin" \
     44 	"repro=-ffile-prefix-map=${pthbs_workdir}=builddir" '
     45 LINUX_VER=6.17
     46 st=-static --static
     47 fl=-g0 -O2 ${st} ${repro}
     48 COMMON_CONFIG += CFLAGS="-std=gnu17 ${fl}"
     49 COMMON_CONFIG += CXXFLAGS=" -std=gnu++11 ${fl}"
     50 COMMON_CONFIG += FFLAGS="${fl}"LDFLAGS="-s ${st}"
     51 COMMON_CONFIG += CC="${bbin}/x86_64-linux-musl-gcc ${st}"
     52 COMMON_CONFIG += CXX="${bbin}/x86_64-linux-musl-g++ ${st}"
     53 '
     54 
     55 test -f ./hashes/"gcc-13.4.0.tar.xz.sha1" || (
     56 	cd sources 
     57 	sha1sum "gcc-13.4.0.tar.xz" >../hashes/"gcc-13.4.0.tar.xz.sha1"
     58 )
     59 
     60 # make sure sources are considered fresh by make
     61 touch ./sources/*
     62 
     63 ${CC:-gcc} --version
     64 ${CC:-gcc} -dumpmachine
     65 cat -n config.mak
     66 
     67 # Patch linker path for dynamic executables
     68 make gcc-'13.4.0'
     69 sed -i -e 's|/lib/ld-musl-|/home/ccx/versions/'"$pthbs_package"'/x86_64-linux-musl/lib/ld-musl-|' ./gcc-'13.4.0'/gcc/config/*/linux*.h
     70 make -j${JOBS:-1} -l$((1+${JOBS:-1})) || make -d || exit $?
     71 make install || exit $?
     72 
     73 # Override linker symlink
     74 for linkname in "$dest"'/x86_64-linux-musl/lib/'ld-musl-*so*; do
     75 	ln -s -f libc.so "$linkname"
     76 done
     77 
     78 # Validate the C compiler
     79 "$dest"/bin/x86_64-linux-musl-gcc --version
     80 printf '%s\n' 'int main(void) { return 0; }' >true.c
     81 "$dest"/bin/x86_64-linux-musl-gcc -o true-dl true.c
     82 "$dest"/bin/x86_64-linux-musl-readelf --string-dump=.interp true-dl >true.linker
     83 grep -F "$pthbs_package" true.linker
     84 "$dest"/bin/x86_64-linux-musl-gcc -static -o true-sl true.c
     85 ./true-sl
     86 
     87 # Validate the C++ compiler
     88 "$dest"/bin/x86_64-linux-musl-g++ --version
     89 printf '%s\n' >sort.cpp '
     90 #include <iostream>
     91 #include <vector>
     92 #include <algorithm>
     93 #include <iterator>
     94 int main() {
     95        using namespace std;
     96        istream_iterator<int> first(cin);
     97        istream_iterator<int> last;
     98        vector<int> vec(first, last);
     99        sort(vec.begin(), vec.end());
    100        cout << "Sorted:" << endl;
    101        copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "\n"));
    102        return 0;
    103 }
    104 '
    105 "$dest"/bin/x86_64-linux-musl-g++ -o sort-dl sort.cpp
    106 "$dest"/bin/x86_64-linux-musl-readelf --string-dump=.interp sort-dl >sort.linker
    107 grep -F "$pthbs_package" sort.linker
    108 "$dest"/bin/x86_64-linux-musl-g++ -static -o sort-sl sort.cpp
    109 ./sort-sl >sort.out <<EOF
    110 5
    111 3
    112 1
    113 2
    114 4
    115 EOF
    116 printf '%s\n' >sort.expected Sorted: 1 2 3 4 5
    117 cmp sort.out sort.expected
    118 
    119 if which dejagnu 2>/dev/null; then
    120 	make -j${JOBS:-1} -l$((1+${JOBS:-1})) -C build/local/x86_64-linux-musl/obj_gcc -k check-gcc
    121 	mkdir "$dest/test-results"
    122 	find build/local/x86_64-linux-musl/obj_gcc \
    123 		-name '*.sum' -exec mv -v '{}' "$dest/test-results/" \;
    124 fi
    125 
    126 
    127 
    128 test -f "$dest/x86_64-linux-musl/include/linux/landlock.h"
    129 
    130 cd "$pthbs_destdir/home/ccx/versions/$pthbs_package"
    131 find -type d -o -print | awk -F/ '
    132 BEGIN {
    133 	x["./bin/x86_64-linux-musl-g++"]=1
    134 	x["./bin/x86_64-linux-musl-gcc"]=1
    135 }
    136 
    137 function r1(s) {
    138 	sub("^[.]/[^/]*", ".", s)
    139 	return s
    140 }
    141 function s1(repl, s) {
    142 	sub("^[.]/[^/]*", "./"repl, s)
    143 	return s
    144 }
    145 function link(src) {
    146 	x[$0]=0
    147 	printf "%s\t%s\n", $0, src
    148 	printf "genlinks >>%s\t%s<<\n", $0, src >>"/dev/stderr"
    149 }
    150 $1!="."{exit 1}
    151 $2 == "bin" && $3 ~ /^x86_64-linux-musl-/ { target=$3; sub("x86_64-linux-musl-", "", target); link("./command/" target) }
    152 
    153 $2 == "env" { link($0); next }
    154 $2 == ".env-template" { link($0); next }
    155 
    156 $2 == "command" { link($0); next }
    157 $2 == "command" { link($0); next }
    158 $2 == "bin" { link(s1("command", $0)); next }
    159 $2 == "sbin" { link(s1("command", $0)); next }
    160 
    161 $2 == "library.so" { link($0); next }
    162 $2 == "library" { link($0); next }
    163 $2 == "lib" && $NF ~ /\.l?a$/ { link(s1("library", $0)); next }
    164 $2 == "lib" && $NF ~ /\.so(\..*)?$/ { link(s1("library.so", $0)); next }
    165 
    166 $2 == "share" && $3 == "info" { link(s1("info", r1($0))); next }
    167 $2 == "share" && $3 == "man" { link(s1("man", r1($0))); next }
    168 $2 == "share" && $3 == "doc" { link(s1("doc", r1($0))); next }
    169 
    170 $2 == "config" { link($0); next }
    171 $2 == "man" { link($0); next }
    172 $2 == "info" { link($0); next }
    173 $2 == "doc" { link($0); next }
    174 $2 == "data" { link($0); next }
    175 $2 == "include" { link($0); next }
    176 
    177 $2 == "share" && $3 ~ /^(icons|terminfo)$/ { link(r1($0)); next }
    178 
    179 $2 == "library.ocaml" { link($0); next }
    180 
    181 $2 == "keys" { link($0); next }
    182 $2 == "zsh" { link($0); next }
    183 $2 == "vimfiles" { link($0); next }
    184 $2 == "icons" { link($0); next }
    185 $2 == "terminfo" { link($0); next }
    186 
    187 
    188 { printf "genlinks ##%s## skipped\n", $0 >>"/dev/stderr" }
    189 
    190 END {
    191 	for(fname in x) { printf "DEBUG: x[\"%s\"]=\"%s\"\n", fname, x[fname] >"/dev/stderr" }
    192 	retcode = 0
    193 	for(fname in x) {
    194 		if(x[fname]) {
    195 			printf "ERROR: missing expected file \"%s\"\n", fname >"/dev/stderr"
    196 			retcode = 3
    197 		}
    198 	}
    199 	exit retcode
    200 }' >.install-links.new
    201 mv .install-links.new .install-links
    202