ISISComputingGroup / IBEX

Top level repository for IBEX stories
4 stars 2 forks source link

Add PVA to every IOC #8298

Closed rerpha closed 1 month ago

rerpha commented 2 months ago

As a developer I would like to utilise pvaccess which can be run in parallel with channel access. This will mean we can use pva-only libraries going forwards.

this is quite easy to do - see https://github.com/ISISComputingGroup/EPICS-ioc/pull/845 for the KEPCO IOC.

also done https://github.com/ISISComputingGroup/EPICS-base/pull/52/files for the template build.mak for future IOCs.

We shoudl also test against this and make the ioc test framework try over pva as well.

Acceptance criteria

FreddieAkeroyd commented 2 months ago

We should also allow for using PVXS as an aletrnative as per https://epics.anl.gov/tech-talk/2024/msg00460.php

rerpha commented 2 months ago

does that look correct (both branches have it) @FreddieAkeroyd ? it seems to work OK.

If so I might add those lines to every IOC's build.mak then create a ticket to use PVA for the test framework

FreddieAkeroyd commented 2 months ago

Given this is a change to every ioc build.mak, I would like to first think if we actually do this change as is or create a fragment to include instead and make that change to build.mak, just on the principle of avoiding duplication and ease of future changes. I know it does potentially make our makefile less portable for others to pick up, but that may be minor. It may be we want to break into several separate .mak and then depending on choices in ioc generator we have a different Makefile at top level etc.

rerpha commented 2 months ago

If that now looks OK @FreddieAkeroyd i may start including the pva.mak to every IOC

FreddieAkeroyd commented 2 months ago

I've changed to use CONFIG_PVA_ISIS and also used $(CONFIG) for the include as $(TOP) is relative to IOC.

FreddieAkeroyd commented 2 months ago

We may need to be a little careful going forwards. We already define WITH_PVA and WITH_QSRV within areaDetector, so any areaDetector based IOC is already PVA capable and we need to check that including a dbd multiple times in not an issue. At the moment PVA is only visible on the instrument as we have no PVA gateways, but i checked a pvget on ISISDAE PVS when logged onto EMMA-A and that works fine.

rerpha commented 1 month ago

Maybe in that case we just don't include it on IOCs that already include areadetector? If so, ones to avoid would be: WEBCAM GENICAM CAENMCA ANDOR ANDOR3 NGEM ISISDAE NCINDG

Any others?

FreddieAkeroyd commented 1 month ago

As we always user the AREA_DETECTOR macro to point to areaDetector (and only include it when we use areaDetector) we can probably just test for that macro as per above PR

rerpha commented 1 month ago

ok - i guess we could add those lines to every IOC's build.mak then?

FreddieAkeroyd commented 1 month ago

Yes - the only minor exception is that the ioc called TEST already explicitly includes V4 so as well as adding this include you should remove its explicit reference to v4 dbd and libraries. To make sure it will work with a static linux link, the new include needs to be added before linking to EPICS_BASE_IOC_LIBS as is done in template build.mak You could probably use sed to insert the necessary lines before $(APPNAME)_LIBS += $(EPICS_BASE_IOC_LIBS) in each file

rerpha commented 1 month ago

https://github.com/ISISComputingGroup/EPICS-ioc/pull/848 https://github.com/ISISComputingGroup/IBEX/pull/8328 https://github.com/ISISComputingGroup/EPICS-base/pull/55

The command i used was (by adding the 4 lines to add.txt): sed -i '/# Finally link to the EPICS Base libraries/r add.txt' ./*/*-IOC-01*/src/build.mak

To review this, check lines have been added to every IOC, and pick some at random and do pvget -p pva xxx where xxx is a random PV name

FreddieAkeroyd commented 1 month ago

@rerpha that has added the line after $(APPNAME)_LIBS += $(EPICS_BASE_IOC_LIBS) i believe it needs to be before this line or else it will fail with the single pass linux static linker. You could add it after the text "# Finally link to the EPICS Base libraries" which i think is everywhere?

rerpha commented 1 month ago

@rerpha that has added the line after $(APPNAME)_LIBS += $(EPICS_BASE_IOC_LIBS) i believe it needs to be before this line or else it will fail with the single pass linux static linker. You could add it after the text "# Finally link to the EPICS Base libraries" which i think is everywhere?

cheers, just done that instead