cmake_minimum_required(VERSION 3.18) set(CMAKE_CXX_STANDARD 23) include_guard(GLOBAL) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_INCLUDE_CURRENT_DIR ON) # set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC OFF) # set(TARGET_SYSROOT /home/nikita/rpi/rpi-sysroot) set(TARGET_SYSROOT /home/nikita/rpi/rpi_zero-sysroot) set(CMAKE_SYSROOT ${TARGET_SYSROOT}) message("CMAKE_SYSROOT: ${CMAKE_SYSROOT}") set(CMAKE_LIBRARY_PATH ${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu) # arch: set(ENV{PKG_CONFIG_PATH} $PKG_CONFIG_PATH:/usr/lib/aarch64-linux-gnu/pkgconfig) # gentoo: # set(ENV{PKG_CONFIG_PATH} $PKG_CONFIG_PATH:/usr/lib/aarch64-rpi5-linux-gnu/pkgconfig) set(ENV{PKG_CONFIG_LIBDIR} /usr/lib/pkgconfig:/usr/share/pkgconfig/:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig:${TARGET_SYSROOT}/usr/lib/pkgconfig) set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${TARGET_SYSROOT}/usr/include") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}") # NOTE: on your rpi you'll need to install # libcamera-dev, libcamera-ipa (TODO: check if ipa is needed) # libqt6gui6 # libqt6httpserver6 # libqt6serialport6 (if you want to control your 3d printer from rpi) # libtbb-dev (or just comment out source code related to execution policies) # libpistache-dev - TODO: remove this dep, orpheus uses qt http server # don't forget to rsync local copy of rpi fs with real rpi fs # NOTE: to be able to run orpheus remotely from QtCreator, run this on your RPI: # $ sudo chown -R user:adm /usr/local/bin/ # NOTE: to use rotary encoder you'll need WiringPi which is not in rpi repos, so # $ git clone https://github.com/WiringPi/WiringPi.git # check README.md for installation instructions. You may get this while installing # .deb package, but it's ok: # N: Download is performed unsandboxed as root as file # '/home/user/git/third_party/WiringPi/wiringpi_3.12_arm64.deb' couldn't be # accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) # NOTE: I've added ld symlink on host to be able to run moc # arch: # sudo ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1 # gentoo: # sudo ln -s /usr/aarch64-rpi5-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1 # # TODO: check how to add this env var to cmake, it's needed to run moc, # otherwise you'll get the following error # # ...../rpi-sysroot/usr/lib/qt6/libexec/moc: error while loading shared libraries: # libpcre2-16.so.0: cannot open shared object file: No such file or directory # # export this path for qtcreator: # LD_LIBRARY_PATH=/home/nikita/rpi/rpi-sysroot/usr/lib/aarch64-linux-gnu/:$LD_LIBRARY_PATH set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(CMAKE_BUILD_RPATH ${TARGET_SYSROOT}) find_package(PkgConfig REQUIRED) pkg_check_modules(LIBCAMERA REQUIRED IMPORTED_TARGET libcamera) find_library(LIBCAMERA_LIBRARY libcamera.so REQUIRED) find_library(LIBCAMERA_BASE_LIBRARY libcamera-base.so REQUIRED) message(STATUS ${CAMERA_INCLUDE_DIRS}) message(STATUS ${LIBCAMERA_LIBRARY}) message(STATUS ${LIBCAMERA_BASE_LIBRARY}) pkg_check_modules(CAMERA REQUIRED libcamera) set(LIBCAMERA_LIBRARIES "${LIBCAMERA_LIBRARY}" "${LIBCAMERA_BASE_LIBRARY}") project(orpheus LANGUAGES CXX) find_package(OpenMP) if (OPENMP_FOUND) message("found openmp") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std:c++latest") set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std:c++latest") find_package(Qt6 6.4 REQUIRED COMPONENTS Gui Quick HttpServer SerialPort) find_package(TBB REQUIRED) qt_standard_project_setup(REQUIRES 6.4) include_directories(. "${CAMERA_INCLUDE_DIRS}" src) # libpistache pkg_check_modules(Pistache REQUIRED IMPORTED_TARGET libpistache) # add_executable(${PROJECT_NAME} qt_add_executable(apporpheus httpservice.h httpservice.cpp imagealgos.h imagealgos.cpp macro.h main.cpp LibCamera.h LibCamera.cpp genetic_algos.h genetic_algos.cpp rotaryencoder.h rotaryencoder.cpp printerclient.h printerclient.cpp fuck_intel.h src/pixels.h src/pixels.cpp src/constants.h src/typedefs.h src/dumps.h src/dumps.cpp src/calibration.h src/calibration.cpp profile.h profile.cpp src/camera/ov9281.h src/camera/ov9281.cpp src/image.h src/image.cpp src/laser.h src/laser.cpp src/camera/innomakerov9281.h src/camera/innomakerov9281.cpp src/camera/icamera.h ) target_link_libraries(app${PROJECT_NAME} PRIVATE "${LIBCAMERA_LIBRARIES}" PkgConfig::Pistache Qt6::Gui Qt6::HttpServer Qt6::SerialPort wiringPi TBB::tbb ) include(GNUInstallDirs) install(TARGETS app${PROJECT_NAME} BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) if ("${CMAKE_BUILD_TYPE}" MATCHES "Release") # message("it's Debug") else() #message("it's not Debug") endif() # add_compile_options(-Wall -Wextra -Wpedantic) add_compile_options(-Ofast -fno-unroll-loops -Wall)