Subversion Repositories QNX 8.QNX8 GNU binutils

Rev

Rev 19 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 19 Rev 20
Line 35... Line 35...
35
        exit 1
35
        exit 1
36
}
36
}
37
 
37
 
38
# verify we're a x86_64 Linux host
38
# verify we're a x86_64 Linux host
39
if [ ! "$(uname)" = "Linux" ] || [ ! "$(uname -m)" = "x86_64" ]; then
39
if [ ! "$(uname)" = "Linux" ] || [ ! "$(uname -m)" = "x86_64" ]; then
40
        print_error_and_die "Error: this script requires a x86_64 Linux machine (possibly a virtual machine) as the build host."
40
        print_error_and_die "Error: this script requires a x86_64 Linux machine (possibly a virtual machine, or WSL2) as the build host."
41
fi
41
fi
42
 
42
 
43
# verify that we have the required tools
43
# verify that we have the required tools
44
for REQUIRED_TOOL in ${REQUIRED_TOOLS}; do
44
for REQUIRED_TOOL in ${REQUIRED_TOOLS}; do
45
        "${REQUIRED_TOOL}" --version > /dev/null 2>&1 || print_error_and_die \
45
        "${REQUIRED_TOOL}" --version > /dev/null 2>&1 || print_error_and_die \
Line 71... Line 71...
71
        # we're not in WSL. We can expect reasonably good file access speeds to the QNX SDP that's bundled with this repository, so just use it.
71
        # we're not in WSL. We can expect reasonably good file access speeds to the QNX SDP that's bundled with this repository, so just use it.
72
        QNXSDK_CANONICAL_PATH="$(realpath "${CURRENT_DIR}/${QNXSDK_PATH}")"
72
        QNXSDK_CANONICAL_PATH="$(realpath "${CURRENT_DIR}/${QNXSDK_PATH}")"
73
fi
73
fi
74
 
74
 
75
# verify that the symlinks are deployed in the SDK -- just test one of them in each relevant directory ($QNX_HOST for the tools, $QNX_TARGET for the sysroot)
75
# verify that the symlinks are deployed in the SDK -- just test one of them in each relevant directory ($QNX_HOST for the tools, $QNX_TARGET for the sysroot)
76
if [ ! -e "${QNXSDK_CANONICAL_PATH}/${QNXSDK_HOSTPATH}/usr/bin/ntox86_64-gcc" ] || [ ! -e "${QNXSDK_CANONICAL_PATH}/${QNXSDK_TARGETPATH}/usr/include/readline.h" ]; then
76
if [ ! -e "${QNXSDK_CANONICAL_PATH}/${QNXSDK_HOSTPATH}/usr/bin/ntox86_64-gcc" ]; then
77
        print_error_and_die \
-
 
78
                "Error: the toolchain platform-specific symbolic links have not been deployed in this QNX SDK. Please run" \
77
        # symlinks not deployed in the QNX SDK: do so
79
                "(on a POSIX machine:)" \
78
        OLDDIR="$(pwd)"
80
                "       cd ${QNXSDK_CANONICAL_PATH}" \
79
        cd "${QNXSDK_CANONICAL_PATH}"
81
                "       find . -name symlinks.lst -exec ./symlinks.sh {} create \\; && printf 'present' > .symlinks-state" \
80
        find . -name symlinks.lst -exec ./symlinks.sh {} create \; && printf 'present-v2' > .symlinks-state
82
                "(else on a Windows machine:)" \
-
 
83
                "       cd ${QNXSDK_CANONICAL_PATH}" \
81
        cd "${OLDDIR}"
84
                "       host\\win64\\x86_64\\usr\\bin\\busybox.exe sh -c \"find . -name symlinks.lst -exec ./symlinks.sh {} create \\; && printf 'present' > .symlinks-state\"" \
-
 
85
                "Note that this step WILL take time on a Win32 machine, but is only done once."
-
 
86
fi
82
fi
87
 
83
 
88
# Create a symlink in /tmp that will lead to the QNX platform SDK so as to avoid spaces in paths if it doesn't exist already
84
# Create a symlink in /tmp that will lead to the QNX platform SDK so as to avoid spaces in paths if it doesn't exist already
89
# (this is totally prohibitive with the official QNX toolchain)
85
# (this is totally prohibitive with the official QNX toolchain)
90
if [ ! -L /tmp/qnxsdk ] || [ ! "$(readlink /tmp/qnxsdk)" = "${QNXSDK_CANONICAL_PATH}" ]; then
86
if [ ! -L /tmp/qnxsdk ] || [ ! "$(readlink /tmp/qnxsdk)" = "${QNXSDK_CANONICAL_PATH}" ]; then
Line 117... Line 113...
117
                        rm -f "${CURRENT_DIR}/${2}"
113
                        rm -f "${CURRENT_DIR}/${2}"
118
                        exit 1
114
                        exit 1
119
                fi
115
                fi
120
        fi
116
        fi
121
        echo "Extracting ${1} sources..."
117
        echo "Extracting ${1} sources..."
-
 
118
        STARTDIR="$(pwd)"
122
        cd "$(dirname "${1}")"
119
        cd "$(dirname "${1}")"
123
        if echo "${2}"|grep -q "\.tar\.bz2$"; then
120
        if echo "${2}"|grep -q "\.tar\.bz2$"; then
124
                # BZip2 tarball
121
                # BZip2 tarball
125
                tar xjf "${CURRENT_DIR}/${2}" || exit 1
122
                tar xjf "${CURRENT_DIR}/${2}" || exit 1
126
        elif echo "${2}"|grep -q "\.tar\.xz$"; then
123
        elif echo "${2}"|grep -q "\.tar\.xz$"; then
Line 128... Line 125...
128
                tar xJf "${CURRENT_DIR}/${2}" || exit 1
125
                tar xJf "${CURRENT_DIR}/${2}" || exit 1
129
        elif echo "${2}"|grep -q "\.tar\.gz$"; then
126
        elif echo "${2}"|grep -q "\.tar\.gz$"; then
130
                # GZipped tarball
127
                # GZipped tarball
131
                tar xzf "${CURRENT_DIR}/${2}" || exit 1
128
                tar xzf "${CURRENT_DIR}/${2}" || exit 1
132
        else
129
        else
133
                echo "Error: unsupported file extension. Please improve the download_and_unpack_if_necessary() shell function to support it."
130
                print_error_and_die "Error: unsupported file extension. Please improve the download_and_unpack_if_necessary() shell function to support it."
134
                exit 1
-
 
135
        fi
131
        fi
136
        # make sure the expected directory is here after extraction
132
        # make sure the expected directory is here after extraction
137
        if [ ! -d "${1}" ]; then
133
        if [ ! -d "$(basename "${1}")" ]; then
138
                echo "Error: couldn't find ${1} in extracted sources."
134
                print_error_and_die "Error: couldn't find ${1} in extracted sources."
139
                exit 1
-
 
140
        fi
135
        fi
141
        # do we have a patchset to apply ?
136
        # do we have a patchset to apply ?
142
        if [ -n "${4}" ]; then
137
        if [ -n "${4}" ]; then
-
 
138
                if [ ! -s "${CURRENT_DIR}/${2}.patchset" ]; then
143
                echo "Downloading ${1} patchset from ${4}..."
139
                        echo "Downloading ${1} patchset from ${4}..."
144
                wget -O "${CURRENT_DIR}/${2}.patchset" "${4}" || exit 1
140
                        wget -O "${CURRENT_DIR}/${2}.patchset" "${4}" || exit 1
-
 
141
                fi
145
                echo "Applying patchset..."
142
                echo "Applying patchset..."
146
                OLDDIR="$(pwd)"
143
                OLDDIR="$(pwd)"
147
                cd "${1}"
144
                cd "$(basename "${1}")"
148
                patch -N -Z -p1 < "${CURRENT_DIR}/${2}.patchset" || exit 1
145
                patch -N -Z -p1 < "${CURRENT_DIR}/${2}.patchset" || exit 1
149
                cd "${OLDDIR}"
146
                cd "${OLDDIR}"
150
                unset OLDDIR
147
                unset OLDDIR
151
        fi
148
        fi
-
 
149
        cd "${STARTDIR}"
-
 
150
        unset STARTDIR
152
        return 0
151
        return 0
153
}
152
}
154
download_and_unpack_if_necessary "${BINUTILS_SOURCES_DIR}" "${BINUTILS_SOURCES_FILE}" "${BINUTILS_SOURCES_URL}" || exit 1
153
download_and_unpack_if_necessary "${BINUTILS_SOURCES_DIR}" "${BINUTILS_SOURCES_FILE}" "${BINUTILS_SOURCES_URL}" || exit 1
155
 
154
 
156
# change directory to the binutils sources
155
# change directory to the binutils sources