mirror of https://github.com/Nonannet/pelfy.git
Docker cross compilation scripts for test generation updated
This commit is contained in:
parent
ea2a3ebca9
commit
f06f68681b
|
@ -1,43 +0,0 @@
|
||||||
# Start with a base image containing build tools and libraries
|
|
||||||
FROM debian:stable
|
|
||||||
|
|
||||||
# Set the working directory
|
|
||||||
WORKDIR /src
|
|
||||||
|
|
||||||
# Install necessary build tools
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
build-essential \
|
|
||||||
gcc
|
|
||||||
# g++ \
|
|
||||||
# make \
|
|
||||||
# wget \
|
|
||||||
# curl \
|
|
||||||
# git \
|
|
||||||
# ca-certificates \
|
|
||||||
# bison \
|
|
||||||
# flex \
|
|
||||||
# python3 \
|
|
||||||
# texinfo
|
|
||||||
|
|
||||||
# Install cross-compilers for x86, ARM, MIPS, and RISC-V
|
|
||||||
RUN apt-get install -y \
|
|
||||||
gcc-12-arm-linux-gnueabihf \
|
|
||||||
gcc-12-mips-linux-gnu \
|
|
||||||
gcc-12-riscv64-linux-gnu \
|
|
||||||
gcc-12-aarch64-linux-gnu
|
|
||||||
|
|
||||||
# Copy the C file into the container
|
|
||||||
COPY test.c /src/
|
|
||||||
|
|
||||||
# Compile the C file for x86
|
|
||||||
CMD gcc -c -O0 test.c -o ../obj/test-x86-o0.o && \
|
|
||||||
gcc -c -O3 test.c -o ../obj/test-x86-o3.o && \
|
|
||||||
# Compile the C file for ARM
|
|
||||||
arm-linux-gnueabihf-gcc-12 -c -O0 test.c -o ../obj/test-arm-o0.o && \
|
|
||||||
arm-linux-gnueabihf-gcc-12 -c -O3 test.c -o ../obj/test-arm-o3.o && \
|
|
||||||
# Compile the C file for MIPS
|
|
||||||
mips-linux-gnu-gcc-12 -c -O0 test.c -o ../obj/test-mips-o0.o && \
|
|
||||||
mips-linux-gnu-gcc-12 -c -O3 test.c -o ../obj/test-mips-o3.o && \
|
|
||||||
# Compile the C file for RISC-V
|
|
||||||
riscv64-linux-gnu-gcc-12 -c -O0 test.c -o ../obj/test-riscv-o0.o && \
|
|
||||||
riscv64-linux-gnu-gcc-12 -c -O3 test.c -o ../obj/test-riscv-o3.o
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
docker build -t pelfy-test-cross-compiler .
|
|
||||||
docker run --rm -v $(pwd)/obj:/obj pelfy-test-cross-compiler
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
# Start with a base image containing build tools and libraries
|
||||||
|
FROM debian:stable
|
||||||
|
|
||||||
|
# Set the working directory
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
# Install necessary build tools
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
gcc
|
||||||
|
# g++ \
|
||||||
|
# make \
|
||||||
|
# wget \
|
||||||
|
# curl \
|
||||||
|
# git \
|
||||||
|
# ca-certificates \
|
||||||
|
# bison \
|
||||||
|
# flex \
|
||||||
|
# python3 \
|
||||||
|
# texinfo
|
||||||
|
|
||||||
|
# Install cross-compilers for x86, ARM, MIPS, and RISC-V
|
||||||
|
RUN apt-get install -y \
|
||||||
|
gcc-12-arm-linux-gnueabihf \
|
||||||
|
gcc-12-mips-linux-gnu \
|
||||||
|
gcc-12-riscv64-linux-gnu \
|
||||||
|
gcc-12-aarch64-linux-gnu
|
||||||
|
|
||||||
|
RUN apt-get install -y \
|
||||||
|
gcc-12-riscv32-linux-gnu \
|
||||||
|
gcc-12-aarch64-linux-gnu
|
||||||
|
|
||||||
|
COPY * /src/
|
||||||
|
|
||||||
|
CMD bash make_objs.sh gcc -O0 && \
|
||||||
|
bash make_objs.sh gcc -O3 && \
|
||||||
|
bash make_objs.sh arm-linux-gnueabihf-gcc-12 -O0 && \
|
||||||
|
bash make_objs.sh arm-linux-gnueabihf-gcc-12 -O3 && \
|
||||||
|
bash make_objs.sh aarch64-linux-gnueabihf-gcc-12 -O0 && \
|
||||||
|
bash make_objs.sh aarch64-linux-gnueabihf-gcc-12 -O3 && \
|
||||||
|
bash make_objs.sh mips-linux-gnu-gcc-12 -O0 && \
|
||||||
|
bash make_objs.sh mips-linux-gnu-gcc-12 -O3 && \
|
||||||
|
bash make_objs.sh riscv32-linux-gnu-gcc-12 -O0 && \
|
||||||
|
bash make_objs.sh riscv32-linux-gnu-gcc-12 -O3 && \
|
||||||
|
bash make_objs.sh riscv64-linux-gnu-gcc-12 -O0 && \
|
||||||
|
bash make_objs.sh riscv64-linux-gnu-gcc-12 -O3
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if correct number of arguments is provided
|
||||||
|
if [ $# -lt 2 ]; then
|
||||||
|
echo "Usage: $0 <compiler> <optimization_flag>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
COMPILER=$1
|
||||||
|
OPTIMIZATION_FLAG=$2
|
||||||
|
|
||||||
|
# Check if there are any .c files in the directory
|
||||||
|
if ls *.c &> /dev/null; then
|
||||||
|
for file in *.c; do
|
||||||
|
obj_file="${file%}_${COMPILER}_${OPTIMIZATION_FLAG}.o"
|
||||||
|
echo "Compiling $file -> $obj_file with $COMPILER and $OPTIMIZATION_FLAG"
|
||||||
|
$COMPILER -c "$file" $OPTIMIZATION_FLAG -o "$obj_file"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Compilation failed for $file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "All files compiled successfully."
|
||||||
|
else
|
||||||
|
echo "No .c files found in the current directory."
|
||||||
|
exit 2
|
||||||
|
fi
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
docker build -t pelfy-test-cross-compiler .
|
||||||
|
docker run --rm -v $(pwd)/../obj:/obj pelfy-test-cross-compiler
|
|
@ -1,13 +1,28 @@
|
||||||
import pelfy
|
import pelfy
|
||||||
|
import glob
|
||||||
|
|
||||||
|
def known_name(text: str):
|
||||||
|
return not text.isnumeric() and not text.startswith('0x')
|
||||||
|
|
||||||
def test_simple_c():
|
def test_simple_c():
|
||||||
elf = pelfy.open_elf_file('tests/obj/test3_o3.o')
|
for path in glob.glob('tests/obj/*.o'):
|
||||||
|
print(f'Open {path}...')
|
||||||
|
elf = pelfy.open_elf_file(path)
|
||||||
|
|
||||||
print(elf.sections)
|
print(elf)
|
||||||
print(elf.symbols)
|
print(elf.sections)
|
||||||
print(elf.code_relocations)
|
print(elf.symbols)
|
||||||
|
print(elf.code_relocations)
|
||||||
|
print('\n')
|
||||||
|
|
||||||
|
for section in elf.sections:
|
||||||
|
assert known_name(section.description), f"Section type {section.type} for {elf.architecture} in {path} is unknown."
|
||||||
|
|
||||||
|
for sym in elf.symbols:
|
||||||
|
assert known_name(sym.info), f"Symbol info {sym.info} for {elf.architecture} in {path} is unknown."
|
||||||
|
|
||||||
|
for reloc in elf.get_relocations():
|
||||||
|
assert known_name(reloc.type), f"Relocation type {reloc.type} for {elf.architecture} in {path} is unknown."
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_simple_c()
|
test_simple_c()
|
||||||
|
|
Loading…
Reference in New Issue