From 4ee517f1d3c00ad2af7e805da9c1878c8d8f6e58 Mon Sep 17 00:00:00 2001 From: Alice Date: Wed, 27 May 2026 11:17:51 +0200 Subject: [PATCH] added toolchain file for cross compilation --- CMakeLists.txt | 12 +++++ .../matterhornServer/CMakeLists.txt | 44 ++++++++++++------- .../matterhornServer/src/MatterhornApp.cpp | 6 +-- .../matterhornServer/toolchain.cmake | 17 +++++++ 4 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 slsDetectorServers/matterhornServer/toolchain.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index cfdaa7b14..d973dfc77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -249,6 +249,18 @@ if(SLS_BUILD_ONLY_MOENCH) set(SLS_USE_MOENCH ON CACHE BOOL "Enable" FORCE) endif() +option(SLS_BUILD_ONLY_MATTERHORN "compile only Matterhorn" OFF) +if(SLS_BUILD_ONLY_MATTERHORN) + message(STATUS "Build MATTERHORN server only!") + set(SLS_BUILD_SHARED_LIBRARIES OFF CACHE BOOL "Disabled for MATTERHORN_ONLY" FORCE) + set(SLS_USE_TEXTCLIENT OFF CACHE BOOL "Disabled for MATTERHORN_ONLY" FORCE) + set(SLS_USE_DETECTOR ON CACHE BOOL "Disabled for MATTERHORN_ONLY" FORCE) + set(SLS_USE_RECEIVER OFF CACHE BOOL "Disabled for MATTERHORN_ONLY" FORCE) + set(SLS_USE_RECEIVER_BINARIES OFF CACHE BOOL "Disabled for MATTERHORN_ONLY" FORCE) + set(SLS_USE_SERVER ON CACHE BOOL "Enable building cpp server" FORCE) + set(SLS_USE_MATTERHORN ON CACHE BOOL "Enable Matterhorn" FORCE) +endif() + #Convenience option to switch off defaults when building Jungfrau binaries only option(SLS_BUILD_ONLY_JUNGFRAU "compile only Jungfrau" OFF) if(SLS_BUILD_ONLY_JUNGFRAU) diff --git a/slsDetectorServers/matterhornServer/CMakeLists.txt b/slsDetectorServers/matterhornServer/CMakeLists.txt index 73d97030e..dea7eddf4 100644 --- a/slsDetectorServers/matterhornServer/CMakeLists.txt +++ b/slsDetectorServers/matterhornServer/CMakeLists.txt @@ -6,11 +6,19 @@ set(MATTERHORN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/HelperFunctions.cpp ) + if(SLS_USE_SIMULATOR) list(APPEND MATTERHORN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/VirtualMatterhornServer.cpp) + set(MATTERHORN_SERVER_HEADER "VirtualMatterhornServer.h") + add_executable(matterhornDetectorServer_virtual ${MATTERHORN_SOURCES}) + target_compile_definitions(matterhornDetectorServer_virtual PRIVATE + MATTERHORN_SERVER_HEADER= + MATTERHORN_SERVER_CLASS=VirtualMatterhornServer + ) + target_include_directories(matterhornDetectorServer_virtual PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/../../slsSupportLib/include @@ -29,31 +37,35 @@ if(SLS_USE_SIMULATOR) install(TARGETS matterhornDetectorServer_virtual RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) -else() - list(APPEND MATTERHORN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/MatterhornServer.cpp) +endif() # maybe better to have a else if build with simulators on one always uses the virtual server in MatterhornApp - add_executable(matterhornDetectorServer ${MATTERHORN_SOURCES}) +list(APPEND MATTERHORN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/MatterhornServer.cpp) - target_include_directories(matterhornDetectorServer +add_executable(matterhornDetectorServer ${MATTERHORN_SOURCES}) + +target_compile_definitions(matterhornDetectorServer PRIVATE + MATTERHORN_SERVER_HEADER= + MATTERHORN_SERVER_CLASS=MatterhornServer +) + +target_include_directories(matterhornDetectorServer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/../../slsSupportLib/include ${CMAKE_CURRENT_SOURCE_DIR}/../slsDetectorServer_cpp/include) - target_link_libraries(matterhornDetectorServer - PUBLIC - slsSupportStatic - #slsDetectorStatic - slsServerStatic) +target_link_libraries(matterhornDetectorServer + PUBLIC + slsSupportStatic + slsServerStatic) - set_target_properties(matterhornDetectorServer PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin - ) +set_target_properties(matterhornDetectorServer PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) - install(TARGETS matterhornDetectorServer - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ) +install(TARGETS matterhornDetectorServer + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) -endif() if(SLS_USE_TESTS) add_subdirectory(tests) diff --git a/slsDetectorServers/matterhornServer/src/MatterhornApp.cpp b/slsDetectorServers/matterhornServer/src/MatterhornApp.cpp index 8c37df196..d41fe9157 100644 --- a/slsDetectorServers/matterhornServer/src/MatterhornApp.cpp +++ b/slsDetectorServers/matterhornServer/src/MatterhornApp.cpp @@ -1,5 +1,5 @@ #include "CommandLineOptions.h" -#include "VirtualMatterhornServer.h" +#include MATTERHORN_SERVER_HEADER #include "sls/logger.h" #include "sls/sls_detector_exceptions.h" #include "sls/versionAPI.h" @@ -75,7 +75,7 @@ int main(int argc, char *argv[]) { LOG(TLogLevel::logINFOBLUE) << "Stop Server [" << opts.port + 1 << "]"; try { - VirtualMatterhornServer stopServer(opts.port + 1); + MATTERHORN_SERVER_CLASS stopServer(opts.port + 1); while (!interruption) { pause(); // wait for signal to exit } @@ -93,7 +93,7 @@ int main(int argc, char *argv[]) { LOG(TLogLevel::logINFOBLUE) << "Control Server [" << opts.port << "]\n"; try { - VirtualMatterhornServer server( + MATTERHORN_SERVER_CLASS server( opts.port); // TODO use virtual if compiled with virtual // simulators on while (!interruption) { diff --git a/slsDetectorServers/matterhornServer/toolchain.cmake b/slsDetectorServers/matterhornServer/toolchain.cmake new file mode 100644 index 000000000..d9b669799 --- /dev/null +++ b/slsDetectorServers/matterhornServer/toolchain.cmake @@ -0,0 +1,17 @@ +#Usage: cmake .. -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DSLS_BUILD_ONLY_MATTERHORN=ON + +set(SLS_ARM_COMPILER "/psi.ch/group/detector/firmware/arm64_linux/arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu/" CACHE PATH "Path to the ARM cross compiler") + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +set(CMAKE_C_COMPILER "${SLS_ARM_COMPILER}/bin/aarch64-none-linux-gnu-gcc") +set(CMAKE_CXX_COMPILER "${SLS_ARM_COMPILER}/bin/aarch64-none-linux-gnu-g++") + +set(CMAKE_AR "${SLS_ARM_COMPILER}/bin/aarch64-none-linux-gnu-ar") +set(CMAKE_RANLIB "${SLS_ARM_COMPILER}/bin/aarch64-none-linux-gnu-ranlib") + +set(CMAKE_FIND_ROOT_PATH "${SLS_ARM_COMPILER}") +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +