From 586abb15ff2856550910b0af34a449794c4cbc5b Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Mon, 16 Feb 2026 14:46:44 +0500 Subject: [PATCH 01/10] build(arm): #47: add conan profile for arm compiling --- profiles/to-dos-conan-profile-arm64.conf | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 profiles/to-dos-conan-profile-arm64.conf diff --git a/profiles/to-dos-conan-profile-arm64.conf b/profiles/to-dos-conan-profile-arm64.conf new file mode 100644 index 0000000..7f8564e --- /dev/null +++ b/profiles/to-dos-conan-profile-arm64.conf @@ -0,0 +1,12 @@ +[settings] +os=Linux +arch=armv8 +build_type=Debug +compiler=clang +compiler.version=14 +compiler.libcxx=libstdc++11 +compiler.cppstd=gnu20 + +[conf] +tools.build:compiler_executables={"c":"clang","cpp":"clang++"} +tools.system.package_manager:mode=install From 8a6351b2751d7430039cd11044e2d3eb83b87bd4 Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Tue, 17 Feb 2026 18:00:25 +0500 Subject: [PATCH 02/10] chore(build): #47: experiment with boost build options try to build with restriction options for successfull build for arm --- profiles/to-dos-conan-profile-arm64.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/profiles/to-dos-conan-profile-arm64.conf b/profiles/to-dos-conan-profile-arm64.conf index 7f8564e..21ad0c0 100644 --- a/profiles/to-dos-conan-profile-arm64.conf +++ b/profiles/to-dos-conan-profile-arm64.conf @@ -7,6 +7,10 @@ compiler.version=14 compiler.libcxx=libstdc++11 compiler.cppstd=gnu20 +[options] +boost/*:with_stacktrace_backtrace=False +boost/*:without_locale=True + [conf] tools.build:compiler_executables={"c":"clang","cpp":"clang++"} tools.system.package_manager:mode=install From f1634e6624502977527ff5127805105455a120bd Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Tue, 17 Feb 2026 18:01:33 +0500 Subject: [PATCH 03/10] chore(build): #47: update drogon version drogon with 1.9.10 doesent build even for x86-64 --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index 0307e98..b86ec9b 100644 --- a/conanfile.py +++ b/conanfile.py @@ -43,5 +43,5 @@ def package(self): cmake.install() def requirements(self): - self.requires("drogon/1.9.10") + self.requires("drogon/1.9.12") self.requires("gtest/1.14.0") From 6b5def6afb7e8d0264016c27a9429bf85a857a76 Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Wed, 18 Feb 2026 19:12:37 +0500 Subject: [PATCH 04/10] chore(build): #47: add build flags cos' build of drogon deps didnt get right arm enviroment variables --- profiles/to-dos-conan-profile-arm64.conf | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/profiles/to-dos-conan-profile-arm64.conf b/profiles/to-dos-conan-profile-arm64.conf index 21ad0c0..055d54d 100644 --- a/profiles/to-dos-conan-profile-arm64.conf +++ b/profiles/to-dos-conan-profile-arm64.conf @@ -8,9 +8,23 @@ compiler.libcxx=libstdc++11 compiler.cppstd=gnu20 [options] -boost/*:with_stacktrace_backtrace=False boost/*:without_locale=True +boost/*:without_stacktrace=True [conf] tools.build:compiler_executables={"c":"clang","cpp":"clang++"} tools.system.package_manager:mode=install + +[buildenv] +CFLAGS=--target=aarch64-linux-gnu +CXXFLAGS=--target=aarch64-linux-gnu +LDFLAGS=--target=aarch64-linux-gnu +CC=clang +CXX=clang++ +LD=aarch64-linux-gnu-ld +AR=aarch64-linux-gnu-ar +RANLIB=aarch64-linux-gnu-ranlib +NM=aarch64-linux-gnu-nm +STRIP=aarch64-linux-gnu-strip +OBJCOPY=aarch64-linux-gnu-objcopy +OBJDUMP=aarch64-linux-gnu-objdump \ No newline at end of file From 724c2d85415ede1a51609bd83e8d8fa131c5307f Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Wed, 18 Feb 2026 19:13:24 +0500 Subject: [PATCH 05/10] chore(build): #47: add conan receipts of libodb and libodb-pgsql --- deps/libodb-pgsql/conanfile.py | 81 ++++++++++++++++++++++++++++++++++ deps/libodb/conanfile.py | 75 +++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 deps/libodb-pgsql/conanfile.py create mode 100644 deps/libodb/conanfile.py diff --git a/deps/libodb-pgsql/conanfile.py b/deps/libodb-pgsql/conanfile.py new file mode 100644 index 0000000..eac86a3 --- /dev/null +++ b/deps/libodb-pgsql/conanfile.py @@ -0,0 +1,81 @@ +from conan import ConanFile +from conan.tools.gnu import Autotools, AutotoolsToolchain, AutotoolsDeps +from conan.tools.files import get, copy, rmdir +from conan.tools.layout import basic_layout +import os + +required_conan_version = ">=2.0" + +class LibODBPgsqlConan(ConanFile): + name = "libodb-pgsql" + version = "2.5.0" + + license = "GPL-2.0-only OR proprietary" + url = "https://github.com/your-username/conan-libodb-pgsql" + homepage = "https://www.codesynthesis.com/products/odb/" + description = "PostgreSQL database support for ODB ORM" + topics = ("orm", "database", "postgresql", "c++", "persistence") + + package_type = "library" + settings = "os", "arch", "compiler", "build_type" + + options = { + "shared": [True, False], + "fPIC": [True, False], + } + + default_options = { + "shared": False, + "fPIC": True, + } + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + + def requirements(self): + self.requires("libodb/2.4.0") + self.requires("libpq/16.8") + + def layout(self): + basic_layout(self, src_folder="src") + + def source(self): + get(self, + f"https://www.codesynthesis.com/download/odb/{self.version}/libodb-pgsql-{self.version}.tar.gz", + strip_root=True) + + def generate(self): + tc = AutotoolsToolchain(self) + tc.generate() + + deps = AutotoolsDeps(self) + deps.generate() + + def build(self): + autotools = Autotools(self) + autotools.configure() + autotools.make() + + def package(self): + autotools = Autotools(self) + autotools.install() + + copy(self, "LICENSE", + src=self.source_folder, + dst=os.path.join(self.package_folder, "licenses")) + + rmdir(self, os.path.join(self.package_folder, "share")) + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) + + def package_info(self): + self.cpp_info.libs = ["odb-pgsql"] + + self.cpp_info.requires = ["libodb::libodb", "libpq::pq"] + + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.system_libs.append("pthread") \ No newline at end of file diff --git a/deps/libodb/conanfile.py b/deps/libodb/conanfile.py new file mode 100644 index 0000000..993ca31 --- /dev/null +++ b/deps/libodb/conanfile.py @@ -0,0 +1,75 @@ +from conan import ConanFile +from conan.tools.gnu import Autotools, AutotoolsToolchain, AutotoolsDeps +from conan.tools.files import get, copy, rmdir +from conan.tools.layout import basic_layout +import os + +required_conan_version = ">=2.0" + +class LibODBConan(ConanFile): + name = "libodb" + version = "2.5.0" + + license = "GPL-2.0-only" + url = "https://github.com/aasheptunov" + homepage = "https://www.codesynthesis.com/products/odb/" + description = "ODB is an object-relational mapping (ORM) system for C++" + topics = ("orm", "database", "sql", "c++", "persistence") + + package_type = "library" + settings = "os", "arch", "compiler", "build_type" + + options = { + "shared": [True, False], + "fPIC": [True, False], + } + + default_options = { + "shared": False, + "fPIC": True, + } + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + + def layout(self): + basic_layout(self, src_folder="odb") + + def source(self): + get(self, + f"https://www.codesynthesis.com/download/odb/{self.version}/libodb-{self.version}.tar.gz", + strip_root=True) + + def generate(self): + tc = AutotoolsToolchain(self) + tc.generate() + + deps = AutotoolsDeps(self) + deps.generate() + + def build(self): + autotools = Autotools(self) + autotools.configure() + autotools.make() + + def package(self): + autotools = Autotools(self) + autotools.install() + + copy(self, "LICENSE", + src=self.source_folder, + dst=os.path.join(self.package_folder, "licenses")) + + rmdir(self, os.path.join(self.package_folder, "share")) + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) + + def package_info(self): + self.cpp_info.libs = ["odb"] + + if self.settings.os in ["Linux", "FreeBSD"]: + self.cpp_info.system_libs.append("pthread") \ No newline at end of file From e22d6066e123a97169c69209a54a244e96ac2a45 Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Wed, 18 Feb 2026 19:14:05 +0500 Subject: [PATCH 06/10] chore(build): #47: add to deps libodb and libodb-pgsql --- conanfile.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conanfile.py b/conanfile.py index b86ec9b..a42ae0d 100644 --- a/conanfile.py +++ b/conanfile.py @@ -45,3 +45,5 @@ def package(self): def requirements(self): self.requires("drogon/1.9.12") self.requires("gtest/1.14.0") + self.requires("libodb/2.5.0@cppget/stable") + self.requires("libodb-pgsql/2.5.0@cppget/stable") From 96dea7c28aaa9de7ec67bba5bb0da56fb5699c4a Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Thu, 26 Feb 2026 16:34:54 +0500 Subject: [PATCH 07/10] chore(dockerfile): #47: add cross-compile dependencies --- .devcontainer/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d0cf18c..63e1edd 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -3,6 +3,7 @@ FROM mcr.microsoft.com/devcontainers/base:ubuntu-22.04 AS base RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ && apt-get -y install --no-install-recommends \ build-essential clang lld make gdb cmake ninja-build \ + crossbuild-essential-arm64 \ git curl wget unzip sudo \ pip \ clang-format clang-tidy \ From 1295df409ae035070f5562234b060892cc3c66cd Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Thu, 26 Feb 2026 16:41:40 +0500 Subject: [PATCH 08/10] chore(tests): #47: add condition for skipping tests after build --- test/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a25a440..f2d5e77 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -17,4 +17,10 @@ target_include_directories(${TEST_PROJECT} PRIVATE ${CMAKE_SOURCE_DIR}/src ) -gtest_discover_tests(${TEST_PROJECT}) \ No newline at end of file +if(CMAKE_CROSSCOMPILING) + message(STATUS "Cross-compiling for ${CMAKE_SYSTEM_PROCESSOR}, skipping test discovery") + add_test(NAME ${TEST_PROJECT} + COMMAND ${TEST_PROJECT}) +else() + gtest_discover_tests(${TEST_PROJECT}) +endif() From 5e06401f59080c612bc46b8067cc0ed52bda583a Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Thu, 26 Feb 2026 17:02:27 +0500 Subject: [PATCH 09/10] chore: #47: delete unnecessary conan recipes --- deps/libodb-pgsql/conanfile.py | 81 ---------------------------------- deps/libodb/conanfile.py | 75 ------------------------------- 2 files changed, 156 deletions(-) delete mode 100644 deps/libodb-pgsql/conanfile.py delete mode 100644 deps/libodb/conanfile.py diff --git a/deps/libodb-pgsql/conanfile.py b/deps/libodb-pgsql/conanfile.py deleted file mode 100644 index eac86a3..0000000 --- a/deps/libodb-pgsql/conanfile.py +++ /dev/null @@ -1,81 +0,0 @@ -from conan import ConanFile -from conan.tools.gnu import Autotools, AutotoolsToolchain, AutotoolsDeps -from conan.tools.files import get, copy, rmdir -from conan.tools.layout import basic_layout -import os - -required_conan_version = ">=2.0" - -class LibODBPgsqlConan(ConanFile): - name = "libodb-pgsql" - version = "2.5.0" - - license = "GPL-2.0-only OR proprietary" - url = "https://github.com/your-username/conan-libodb-pgsql" - homepage = "https://www.codesynthesis.com/products/odb/" - description = "PostgreSQL database support for ODB ORM" - topics = ("orm", "database", "postgresql", "c++", "persistence") - - package_type = "library" - settings = "os", "arch", "compiler", "build_type" - - options = { - "shared": [True, False], - "fPIC": [True, False], - } - - default_options = { - "shared": False, - "fPIC": True, - } - - def config_options(self): - if self.settings.os == "Windows": - del self.options.fPIC - - def configure(self): - if self.options.shared: - self.options.rm_safe("fPIC") - - def requirements(self): - self.requires("libodb/2.4.0") - self.requires("libpq/16.8") - - def layout(self): - basic_layout(self, src_folder="src") - - def source(self): - get(self, - f"https://www.codesynthesis.com/download/odb/{self.version}/libodb-pgsql-{self.version}.tar.gz", - strip_root=True) - - def generate(self): - tc = AutotoolsToolchain(self) - tc.generate() - - deps = AutotoolsDeps(self) - deps.generate() - - def build(self): - autotools = Autotools(self) - autotools.configure() - autotools.make() - - def package(self): - autotools = Autotools(self) - autotools.install() - - copy(self, "LICENSE", - src=self.source_folder, - dst=os.path.join(self.package_folder, "licenses")) - - rmdir(self, os.path.join(self.package_folder, "share")) - rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) - - def package_info(self): - self.cpp_info.libs = ["odb-pgsql"] - - self.cpp_info.requires = ["libodb::libodb", "libpq::pq"] - - if self.settings.os in ["Linux", "FreeBSD"]: - self.cpp_info.system_libs.append("pthread") \ No newline at end of file diff --git a/deps/libodb/conanfile.py b/deps/libodb/conanfile.py deleted file mode 100644 index 993ca31..0000000 --- a/deps/libodb/conanfile.py +++ /dev/null @@ -1,75 +0,0 @@ -from conan import ConanFile -from conan.tools.gnu import Autotools, AutotoolsToolchain, AutotoolsDeps -from conan.tools.files import get, copy, rmdir -from conan.tools.layout import basic_layout -import os - -required_conan_version = ">=2.0" - -class LibODBConan(ConanFile): - name = "libodb" - version = "2.5.0" - - license = "GPL-2.0-only" - url = "https://github.com/aasheptunov" - homepage = "https://www.codesynthesis.com/products/odb/" - description = "ODB is an object-relational mapping (ORM) system for C++" - topics = ("orm", "database", "sql", "c++", "persistence") - - package_type = "library" - settings = "os", "arch", "compiler", "build_type" - - options = { - "shared": [True, False], - "fPIC": [True, False], - } - - default_options = { - "shared": False, - "fPIC": True, - } - - def config_options(self): - if self.settings.os == "Windows": - del self.options.fPIC - - def configure(self): - if self.options.shared: - self.options.rm_safe("fPIC") - - def layout(self): - basic_layout(self, src_folder="odb") - - def source(self): - get(self, - f"https://www.codesynthesis.com/download/odb/{self.version}/libodb-{self.version}.tar.gz", - strip_root=True) - - def generate(self): - tc = AutotoolsToolchain(self) - tc.generate() - - deps = AutotoolsDeps(self) - deps.generate() - - def build(self): - autotools = Autotools(self) - autotools.configure() - autotools.make() - - def package(self): - autotools = Autotools(self) - autotools.install() - - copy(self, "LICENSE", - src=self.source_folder, - dst=os.path.join(self.package_folder, "licenses")) - - rmdir(self, os.path.join(self.package_folder, "share")) - rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) - - def package_info(self): - self.cpp_info.libs = ["odb"] - - if self.settings.os in ["Linux", "FreeBSD"]: - self.cpp_info.system_libs.append("pthread") \ No newline at end of file From 18d27efcf61bc45ffed1019399d75d2695edc792 Mon Sep 17 00:00:00 2001 From: Oleg Kl Date: Thu, 26 Feb 2026 17:09:57 +0500 Subject: [PATCH 10/10] docs(README): #47: add instructions how to buid for ARM --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index c529a7a..f29eaa1 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,12 @@ In the configuration options, select the `'conan-debug' config`. When the project configuration is finished, click Build to build the project.

cmakeBuild

+#### Build for ARMv8 + +To compile dependencies this project to run to-dos-api in the **ARMv8** environment, use the command `conan install . -pr:h profiles/to-dos-conan-profile-arm64.conf --build=missing` instead of the one specified in the previous paragraph in the terminal. + +When dependencies are built, use the command `conan build . -pr:h profiles/to-dos-conan-profile-arm64.conf` to build to-dos-api for running in an **ARMv8** environment. + ### Project run #### Before launching web server: