summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 43cd7c7b3710236072716deb8444f407e2b668aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
cmake_minimum_required(VERSION 3.16)

set(CMAKE_CXX_STANDARD 23)

cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC OFF)

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(TARGET_SYSROOT /home/nikita/rpi/rpi-sysroot)
set(CMAKE_SYSROOT ${TARGET_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: 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)

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
)
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)