First: Do you have enough main line track to divide it into blocks? You need a minimum of four blocks for a working signal system. For your signals to indicate track occupancy in both directions and improperly lined (or lined in reverse) turnouts, you must have a track circuit, which requires blocks bounded by insulated joints. If you cannot make four blocks of at least a train length each, just go for action signals.
Here's what I suggest: Use Custom Signals now, while you still can. It is a well-designed, plug and play system, although it takes some thought in design and some care in installation. It requires insulated joints. If the price is too high, get a small loan and Use Custom Signals while it's still possible. Remember what your namesake Thomas Aquinas said: "A block signal system cannot attain salvation in the absence of insulated blocks."
And that's just for simple ABS, where signals only indicate either proceed, approach, or stop. If you want route indication at turnouts, then you are getting into something more complex.
If you already have ballasted track and no insulated joints already in place, then Custom Signals or any other system that relies on track circuits to activate signals is going to be somewhat more difficult, as you will have to remove or cut and insulate rail already in place.
If you are satisfied with having action signals, then, in my opinion, the best solution is Z-Stuff semaphores. They are activated by sensors, and I understand that they can be daisy chained. If not daisy chained, they will operate, but will not indicate track occupancy, so they will not degrade for opposing traffic as a train approaches.
For most O gauge operaters, the complexity of an automatic block signal system is more complex than they can enjoy, and action signals are really what they wanted in the first place.