To get rid of the fixed-size problems, I can recommend you to build your own SPI interface. You can add PIO's to your system design and modify your top-level entity file and change their Inputs and outputs as signals. For example I have used a slave device (wiz550io) which waits for 32-bits SPI signal for writing to a register and for reading you first write 24-bits and receive the 8-bits in the same frame. For this reason I prepared a 32-bits PIO for writing, a 8-bits PIO for reading and another PIO to control, I added an extra process into my top-level entity and also added MISO, MOSI, CLK, CS as new ports and I am dividing clock to create the clock for SPI.
For your situation, you can use the incoming spi clock to trigger your process and write the incoming data to a reading PIO register. To receive an interrupt you can assign another PIO block with IRQ.