win stancils added

This commit is contained in:
Nicolas 2025-10-07 23:20:43 +02:00
parent a965ab607e
commit c7c3ad3553
13 changed files with 72 additions and 49 deletions

View File

@ -10,7 +10,7 @@ jobs:
build_stencils: build_stencils:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Install cross compilers - name: Install cross compilers
run: | run: |
@ -19,7 +19,8 @@ jobs:
gcc-12-aarch64-linux-gnu \ gcc-12-aarch64-linux-gnu \
gcc-12-arm-linux-gnueabihf \ gcc-12-arm-linux-gnueabihf \
gcc-12-mips-linux-gnu \ gcc-12-mips-linux-gnu \
gcc-12-riscv64-linux-gnu gcc-12-riscv64-linux-gnu \
gcc-12-mingw-w64-x86-64
- name: Build object files - name: Build object files
run: bash src/copapy/obj/crosscompile.sh run: bash src/copapy/obj/crosscompile.sh
@ -38,7 +39,7 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest] os: [ubuntu-latest, windows-latest, macos-latest]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v4
with: with:

View File

@ -7,7 +7,28 @@ on:
branches: [main] branches: [main]
jobs: jobs:
build_stencils:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install cross compilers
run: |
sudo apt-get update
sudo apt-get install -y \
gcc-12-mingw-w64-x86-64
- name: Build ops obj files
run: |
bash src/copapy/obj/nativecompile.sh
- uses: actions/upload-artifact@v4
with:
name: stencil-object-files
path: src/copapy/obj/*.o
build-ubuntu: build-ubuntu:
needs: [build_stencils]
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
@ -18,6 +39,16 @@ jobs:
- name: Check out code - name: Check out code
uses: actions/checkout@v4 uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: stencil-object-files
path: src/copapy/obj
- name: Install compiler
run: |
sudo apt-get update
sudo apt-get install -y gcc-12-mingw-w64-x86-64
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5 uses: actions/setup-python@v5
with: with:
@ -26,25 +57,20 @@ jobs:
- name: Install Python dependencies - name: Install Python dependencies
run: python -m pip install -e .[dev] run: python -m pip install -e .[dev]
- name: Build ops obj files
run: |
bash src/copapy/obj/nativecompile.sh
- name: Compile coparun - name: Compile coparun
run: | run: |
mkdir -p bin mkdir -p bin
gcc -O3 -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -Werror -g src/coparun/runmem.c src/coparun/coparun.c src/coparun/mem_man.c -o bin/coparun gcc -O3 -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -Werror -g src/coparun/runmem.c src/coparun/coparun.c src/coparun/mem_man.c -o bin/coparun
- name: Run tests with pytest
run: pytest
- name: Type checking with mypy
run: mypy
#- name: Lint code with flake8 #- name: Lint code with flake8
# run: flake8 # run: flake8
- name: Upload obj files
uses: actions/upload-artifact@v4
if: strategy.job-index == 0
with:
name: stencil-object-files
path: src/copapy/obj/*.o
- name: Upload compiled runner - name: Upload compiled runner
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
if: strategy.job-index == 0 if: strategy.job-index == 0
@ -52,14 +78,8 @@ jobs:
name: runner-linux name: runner-linux
path: bin/* path: bin/*
- name: Run tests with pytest
run: pytest
- name: Type checking with mypy
run: mypy
build-windows: build-windows:
needs: [build-ubuntu] needs: [build_stencils]
runs-on: windows-latest runs-on: windows-latest
strategy: strategy:

View File

@ -14,14 +14,9 @@ def get_var_name(var: Any, scope: dict[str, Any] = globals()) -> list[str]:
return [name for name, value in scope.items() if value is var] return [name for name, value in scope.items() if value is var]
def get_local_arch() -> str:
arch_translation_table = {'AMD64': 'x86_64'}
return arch_translation_table.get(platform.machine(), platform.machine())
def stencil_db_from_package(arch: str = 'native', optimization: str = 'O3') -> stencil_database: def stencil_db_from_package(arch: str = 'native', optimization: str = 'O3') -> stencil_database:
if arch == 'native': if arch == 'native':
arch = get_local_arch() arch = platform.machine()
stencil_data = pkgutil.get_data(__name__, f"obj/stencils_{arch}_{optimization}.o") stencil_data = pkgutil.get_data(__name__, f"obj/stencils_{arch}_{optimization}.o")
assert stencil_data, f"stencils_{arch}_{optimization} not found" assert stencil_data, f"stencils_{arch}_{optimization} not found"
return stencil_database(stencil_data) return stencil_database(stencil_data)
@ -485,16 +480,15 @@ class Target():
else: else:
raise ValueError(f"Unsupported variable type: {var_type}") raise ValueError(f"Unsupported variable type: {var_type}")
def read_variable_remote(self, net: Net) -> None: def read_variable_remote(self, net: Net) -> None:
dw = binw.data_writer(self.sdb.byteorder) dw = binw.data_writer(self.sdb.byteorder)
add_read_command(dw, self._variables, net) add_read_command(dw, self._variables, net)
assert coparun(dw.get_data()) > 0 assert coparun(dw.get_data()) > 0
def add_read_command(dw: binw.data_writer, variables: dict[Net, tuple[int, int, str]], net: Net) -> None: def add_read_command(dw: binw.data_writer, variables: dict[Net, tuple[int, int, str]], net: Net) -> None:
assert net in variables, f"Variable {net} not found in data writer variables" assert net in variables, f"Variable {net} not found in data writer variables"
addr, lengths, _ = variables[net] addr, lengths, _ = variables[net]
dw.write_com(binw.Command.READ_DATA) dw.write_com(binw.Command.READ_DATA)
dw.write_int(addr) dw.write_int(addr)
dw.write_int(lengths) dw.write_int(lengths)

View File

@ -55,6 +55,7 @@ class data_writer():
with open(path, 'wb') as f: with open(path, 'wb') as f:
f.write(self.get_data()) f.write(self.get_data())
class data_reader(): class data_reader():
def __init__(self, data: bytes | bytearray, byteorder: ByteOrder): def __init__(self, data: bytes | bytearray, byteorder: ByteOrder):
self._data = data self._data = data
@ -77,7 +78,7 @@ class data_reader():
self._index += 1 self._index += 1
return ret return ret
def read_bytes(self, num_bytes: int) -> bytes: def read_bytes(self, num_bytes: int) -> bytes | bytearray:
ret = self._data[self._index:self._index + num_bytes] ret = self._data[self._index:self._index + num_bytes]
self._index += num_bytes self._index += num_bytes
return ret return ret

View File

@ -7,7 +7,7 @@ op_signs = {'add': '+', 'sub': '-', 'mul': '*', 'div': '/',
def get_function_start() -> str: def get_function_start() -> str:
return """ return """
__attribute__((ms_abi)) int function_start(){ int function_start(){
result_int(0); // dummy call instruction before marker gets striped result_int(0); // dummy call instruction before marker gets striped
asm volatile (".long 0xE2401F0F"); asm volatile (".long 0xE2401F0F");
return 1; return 1;
@ -17,7 +17,7 @@ def get_function_start() -> str:
def get_function_end() -> str: def get_function_end() -> str:
return """ return """
__attribute__((ms_abi)) int function_end(){ int function_end(){
result_int(0); result_int(0);
asm volatile (".long 0xE1401F0F"); asm volatile (".long 0xE1401F0F");
return 1; return 1;

View File

@ -21,6 +21,9 @@ mkdir -p $DEST
# Native x86_64 # Native x86_64
gcc-12 -$OPT -c $SRC -o $DEST/stencils_x86_64_$OPT.o gcc-12 -$OPT -c $SRC -o $DEST/stencils_x86_64_$OPT.o
# Windows x86_64 (ARM64)
x86_64-w64-mingw32-gcc -$OPT -c $SRC -o $DEST/stencils_AMD64_$OPT.o
# ARM64 # ARM64
aarch64-linux-gnu-gcc-12 -$OPT -c $SRC -o $DEST/stencils_aarch64_$OPT.o aarch64-linux-gnu-gcc-12 -$OPT -c $SRC -o $DEST/stencils_aarch64_$OPT.o

View File

@ -12,3 +12,6 @@ gcc-12 -c $SRC -O0 -o $DEST/stencils_x86_64_O0.o
gcc-12 -c $SRC -O1 -o $DEST/stencils_x86_64_O1.o gcc-12 -c $SRC -O1 -o $DEST/stencils_x86_64_O1.o
gcc-12 -c $SRC -O2 -o $DEST/stencils_x86_64_O2.o gcc-12 -c $SRC -O2 -o $DEST/stencils_x86_64_O2.o
gcc-12 -c $SRC -O3 -o $DEST/stencils_x86_64_O3.o gcc-12 -c $SRC -O3 -o $DEST/stencils_x86_64_O3.o
# Windows x86_64 (ARM64)
x86_64-w64-mingw32-gcc -O3 -c $SRC -o $DEST/stencils_AMD64_$OPT.o

View File

@ -1,6 +1,6 @@
from copapy import const, Target from copapy import const, Target
from pytest import approx from pytest import approx
import time
def function(c1, c2): def function(c1, c2):
i1 = c1 * 3.3 + 5 i1 = c1 * 3.3 + 5

View File

@ -1,7 +1,6 @@
from copapy import Write, const from copapy import Write, const
import copapy import copapy
import subprocess import subprocess
import struct
from copapy import binwrite from copapy import binwrite
@ -51,6 +50,7 @@ def test_compile():
print(result) print(result)
assert 'Return value: 1' in result assert 'Return value: 1' in result
if __name__ == "__main__": if __name__ == "__main__":
#test_example() #test_example()
test_compile() test_compile()

View File

@ -1,8 +1,9 @@
from copapy import stencil_database, stencil_db, get_local_arch from copapy import stencil_database, stencil_db
import platform
def test_list_symbols(): def test_list_symbols():
arch = get_local_arch() arch = platform.machine()
sdb = stencil_database(f'src/copapy/obj/stencils_{arch}_O3.o') sdb = stencil_database(f'src/copapy/obj/stencils_{arch}_O3.o')
print('----') print('----')
#print(sdb.function_definitions) #print(sdb.function_definitions)
@ -12,7 +13,7 @@ def test_list_symbols():
def test_start_end_function(): def test_start_end_function():
arch = get_local_arch() arch = platform.machine()
sdb = stencil_database(f'src/copapy/obj/stencils_{arch}_O3.o') sdb = stencil_database(f'src/copapy/obj/stencils_{arch}_O3.o')
for sym_name in sdb.function_definitions.keys(): for sym_name in sdb.function_definitions.keys():
data = sdb.elf.symbols[sym_name].data data = sdb.elf.symbols[sym_name].data