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(TARGET_SYSROOT /home/nikita/rpi/radxa-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/:${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig:${CMAKE_SYSROOT}/usr/lib/pkgconfig) set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${CMAKE_SYSROOT}/usr/include") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}") # NOTE: /aarch64-none-linux-gnu/bin/ld: cannot find -lm: No such file or directory # DOESN'T WORK sudo apt install build-essential # NOTE: in case of header issues during inno-maker driver compilation - try to # reinstall linux-headers-, like this # sudo apt install linux-headers-6.6.74+rpt-rpi-v8 --reinstall # NOTE: on your rpi you'll need to install # libcamera-dev, libcamera-ipa (TODO: check if ipa is needed) # libqt6gui6 # libqt6quickcontrols2-6 # qt6-declarative-dev* # qt6-websockets-dev # pigpio-tools # fakeroot # 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 # $ sudo apt install git # $ git clone https://github.com/WiringPi/WiringPi.git # check README.md for installation instructions. # $ sudo apt install fakeroot # $ cd WiringPi # $ ./build debian # $ mv debian-template/*.deb . # $ sudo apt install ./*.deb # 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) # run rsyng and cmake again # 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 ${CMAKE_SYSROOT}/usr) 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 ${CMAKE_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} file(GLOB_RECURSE SOURCES src/*.h src/*.cpp src/*.c src/*.qrc) message("sources: ${SOURCES}") qt_add_executable(apporpheus ${SOURCES}) 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 Release") # add_compile_options(-Ofast -fno-unroll-loops -Wall) add_compile_options(-Ofast -Wall) # add_compile_options(-Wall -Wextra -Wpedantic) # add_compile_options(-O3 -Wall) else() message("it's not Release") endif()