From f8971907d7ee78dec9e7325e6c68485c49c0387b Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Thu, 16 May 2024 10:18:50 +0100 Subject: [PATCH 1/4] update deps --- .gitmodules | 2 +- deps/ledger-zxlib | 2 +- deps/nanos-secure-sdk | 2 +- deps/nanosplus-secure-sdk | 2 +- deps/nanox-secure-sdk | 2 +- tests_zemu/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.gitmodules b/.gitmodules index 5024ec55..f944d5e0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "deps/nanos-secure-sdk"] path = deps/nanos-secure-sdk - url = https://github.com/LedgerHQ/nanos-secure-sdk.git + url = https://github.com/LedgerHQ/ledger-secure-sdk.git [submodule "deps/nanox-secure-sdk"] path = deps/nanox-secure-sdk url = https://github.com/LedgerHQ/ledger-secure-sdk.git diff --git a/deps/ledger-zxlib b/deps/ledger-zxlib index 9e9cb2b2..a669ab07 160000 --- a/deps/ledger-zxlib +++ b/deps/ledger-zxlib @@ -1 +1 @@ -Subproject commit 9e9cb2b21fdf94a6b1f7d71ee6f89ca8101712ce +Subproject commit a669ab077a3acbf80dd27d9563c2b5d35620d67a diff --git a/deps/nanos-secure-sdk b/deps/nanos-secure-sdk index 74ca336c..e0d514f4 160000 --- a/deps/nanos-secure-sdk +++ b/deps/nanos-secure-sdk @@ -1 +1 @@ -Subproject commit 74ca336caa23db2c64cc42424ac9e32f6988df09 +Subproject commit e0d514f4e4b063226b09cdb239d8daa67601fc70 diff --git a/deps/nanosplus-secure-sdk b/deps/nanosplus-secure-sdk index c69c3018..e0d514f4 160000 --- a/deps/nanosplus-secure-sdk +++ b/deps/nanosplus-secure-sdk @@ -1 +1 @@ -Subproject commit c69c301833ee3c7b1966b9efe96e706ce0c78d74 +Subproject commit e0d514f4e4b063226b09cdb239d8daa67601fc70 diff --git a/deps/nanox-secure-sdk b/deps/nanox-secure-sdk index c69c3018..e0d514f4 160000 --- a/deps/nanox-secure-sdk +++ b/deps/nanox-secure-sdk @@ -1 +1 @@ -Subproject commit c69c301833ee3c7b1966b9efe96e706ce0c78d74 +Subproject commit e0d514f4e4b063226b09cdb239d8daa67601fc70 diff --git a/tests_zemu/package.json b/tests_zemu/package.json index 08cdfc99..9d37bcb5 100644 --- a/tests_zemu/package.json +++ b/tests_zemu/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@zondax/ledger-cosmos-js": "^3.0.3", - "@zondax/zemu": "^0.48.0" + "@zondax/zemu": "^0.49.0" }, "devDependencies": { "@types/jest": "^29.5.12", From 787dd56911c9aee24a43f07a0bb1c4ae2c321d71 Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Thu, 16 May 2024 10:52:58 +0100 Subject: [PATCH 2/4] define MIN_STACK_SIZE --- app/Makefile | 6 +++++- app/src/common/tx.c | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/Makefile b/app/Makefile index 53b11936..f73c5aae 100755 --- a/app/Makefile +++ b/app/Makefile @@ -68,7 +68,11 @@ ifneq ($(TARGET_NAME),TARGET_NANOS) DEFINES += COMPILE_TEXTUAL endif -APP_STACK_MIN_SIZE := 1600 +ifeq ($(TARGET_NAME),TARGET_NANOS) + APP_STACK_MIN_SIZE := 1600 +else ifeq ($(TARGET_NAME),TARGET_NANOX) + APP_STACK_MIN_SIZE := 3800 +endif include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.platform CFLAGS += -I$(MY_DIR)/../deps/tinycbor/src diff --git a/app/src/common/tx.c b/app/src/common/tx.c index 60e1d7ab..06af1e1a 100644 --- a/app/src/common/tx.c +++ b/app/src/common/tx.c @@ -21,9 +21,12 @@ #include #include "zxmacros.h" -#if defined(TARGET_NANOX) || defined(TARGET_NANOS2) || defined(TARGET_STAX) +#if defined(TARGET_NANOS2) || defined(TARGET_STAX) #define RAM_BUFFER_SIZE 8192 #define FLASH_BUFFER_SIZE 16384 +#elif defined(TARGET_NANOX) +#define RAM_BUFFER_SIZE 8158 +#define FLASH_BUFFER_SIZE 16384 #elif defined(TARGET_NANOS) #define RAM_BUFFER_SIZE 0 #define FLASH_BUFFER_SIZE 8192 From 811295d073bbcc7f26b4efded80c1c1b2a596dcc Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Thu, 16 May 2024 10:53:17 +0100 Subject: [PATCH 3/4] update snapshots --- app/Makefile.version | 2 +- tests_zemu/snapshots/s-mainmenu/00004.png | Bin 465 -> 465 bytes tests_zemu/snapshots/s-mainmenu/00010.png | Bin 465 -> 465 bytes tests_zemu/snapshots/sp-mainmenu/00004.png | Bin 396 -> 395 bytes tests_zemu/snapshots/sp-mainmenu/00010.png | Bin 396 -> 395 bytes tests_zemu/snapshots/st-mainmenu/00001.png | Bin 13589 -> 13485 bytes tests_zemu/snapshots/x-mainmenu/00004.png | Bin 396 -> 395 bytes tests_zemu/snapshots/x-mainmenu/00010.png | Bin 396 -> 395 bytes 8 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Makefile.version b/app/Makefile.version index f3f985a2..782e3ff0 100644 --- a/app/Makefile.version +++ b/app/Makefile.version @@ -3,4 +3,4 @@ APPVERSION_M=2 # This is the `spec_version` field of `Runtime` APPVERSION_N=35 # This is the patch version of this release -APPVERSION_P=20 +APPVERSION_P=21 diff --git a/tests_zemu/snapshots/s-mainmenu/00004.png b/tests_zemu/snapshots/s-mainmenu/00004.png index 777fac66949cd373a7fb1dbdde205f9211ee125a..d8e6401169b230a05ce14b8a83212a1401b1163c 100644 GIT binary patch delta 430 zcmV;f0a5LngO=_u{>sJp9bT4d=F@FPO&%N;p$32Cq3hOw{ zA{Ughkl9(^44zpycDl*{T^(`Jr18|@t)AkA57-g5p}$Xmrpcw0HHXKDuseIfS& zECa;ul1JPk_yZh@&;ZSJYHHj-OOi`+yQYFbB@3yyj;=4v-s_W z-Mz`W{{fA2T|{|@qq(*i7nju<*~+Evf1l+~qb}$}QzsG*E%@a!5^Kdz0{{R3005PE Y0j=uc<5c_qAMCA(*;(HV=A1Zoy2}7n9dS{l@zmk1p5hZ9uq|v&z08A=w~CW+Svl^fYXt~>A@>C= z1H{`UkGMtf2TaU>?GI%Dk;n){2E=_I>%c?k`5Ml>8lbiXHXuJ81s+vT6-+Y&h_=`U zP(Mr2Q|%MUD1Ruz>%003YD YoLngO=_u{>sJp9bT4d=F@FPO&%N;p$32Cq3hOw{ zA{Ughkl9(^44zpycDl*{T^(`Jr18|@t)AkA57-g5p}$Xmrpcw0HHXKDuseIfS& zECa;ul1JPk_yZh@&;ZSJYHHj-OOi`+yQYFbB@3yyj;=4v-s_W z-Mz`W{{fA2T|{|@qq(*i7nju<*~+Evf1l+~qb}$}QzsG*E%@a!5^Kdz0{{R3005PE Y0j=uc<5c_qAMCA(*;(HV=A1Zoy2}7n9dS{l@zmk1p5hZ9uq|v&z08A=w~CW+Svl^fYXt~>A@>C= z1H{`UkGMtf2TaU>?GI%Dk;n){2E=_I>%c?k`5Ml>8lbiXHXuJ81s+vT6-+Y&h_=`U zP(Mr2Q|%MUD1Ruz>%003YD Yo_bLaCHbrrb_fte? zZ+*7A`tJrs_N6_674lP6roY@8aMdgM!`wLeCwuCdE=|!%Un=-+!LqF4f3LdS?%X|| zd{I}U$0?Y1YPAf1bRPFDxl{N4EzXz9-L>EPDzm|Ub4#nMt$R$er}|e5mfI(6b*xzb zL$22Hu7dF2OsR!xza|^9&AZWRQ^;3+>EYg;Uy?o2i+bFx^i#HPe(?I`t{%}$b=^0I zUh9XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWKpV< delta 369 zcmeBX?qQywQXlN;;uumf=k3kFyu%7S4T)xN)$aWF*mqhkU}F2hkj(bEul~aRN4NbaK-GX>@OngJZ3TMofe(qy5!oebKjd6ItFIG;Qb*5Piy`^^Q&w9!E%S_NmZd%5B1Vk`dwfD_Qerf z8+p&|3pR0|ov`YIMclMJ?kc+}tN$LKS8|M}zFbPUpw7(J>TsitPxZ^yt2^556W01x zy#FCrYkgWl_;0e>LbYG*6PrEWI8ChJbKmsvFW1cD)7Cz*n4S}RLSFsh>&&=wvM|d9L{Gc8h4SZ(+Ba>dk#t&$~S>$MJksc&~Bg zT9Z0%tySA>YW7yuK6!Fc-&4pSb-yfM{Elt$^2@_>H!&gwjr%WF6J5ra7jI4W1&MmP L`njxgN@xNA`?slI diff --git a/tests_zemu/snapshots/sp-mainmenu/00010.png b/tests_zemu/snapshots/sp-mainmenu/00010.png index 71c7d7128a1ecd75b87ab08b63affa0e7dd50b25..d32e423268167a2c3af977464a6a7d3735cc8452 100644 GIT binary patch delta 368 zcmeBS?q;5#QXk~$;uumf=k3jCp+gEh4uK_iIDf|neS5^N+|1%6@3rFI=c}2FGe4}# z_bLaCHbrrb_fte? zZ+*7A`tJrs_N6_674lP6roY@8aMdgM!`wLeCwuCdE=|!%Un=-+!LqF4f3LdS?%X|| zd{I}U$0?Y1YPAf1bRPFDxl{N4EzXz9-L>EPDzm|Ub4#nMt$R$er}|e5mfI(6b*xzb zL$22Hu7dF2OsR!xza|^9&AZWRQ^;3+>EYg;Uy?o2i+bFx^i#HPe(?I`t{%}$b=^0I zUh9XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWKpV< delta 369 zcmeBX?qQywQXlN;;uumf=k3kFyu%7S4T)xN)$aWF*mqhkU}F2hkj(bEul~aRN4NbaK-GX>@OngJZ3TMofe(qy5!oebKjd6ItFIG;Qb*5Piy`^^Q&w9!E%S_NmZd%5B1Vk`dwfD_Qerf z8+p&|3pR0|ov`YIMclMJ?kc+}tN$LKS8|M}zFbPUpw7(J>TsitPxZ^yt2^556W01x zy#FCrYkgWl_;0e>LbYG*6PrEWI8ChJbKmsvFW1cD)7Cz*n4S}RLSFsh>&&=wvM|d9L{Gc8h4SZ(+Ba>dk#t&$~S>$MJksc&~Bg zT9Z0%tySA>YW7yuK6!Fc-&4pSb-yfM{Elt$^2@_>H!&gwjr%WF6J5ra7jI4W1&MmP L`njxgN@xNA`?slI diff --git a/tests_zemu/snapshots/st-mainmenu/00001.png b/tests_zemu/snapshots/st-mainmenu/00001.png index 397e01862091bef73ba6127e0ad64ce9e3066b1a..b5a83442715abff715888c672853cdb046212eff 100644 GIT binary patch delta 10749 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 F{|CQmoo)aC delta 10851 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 Ux_YpxQ2+z1ZS)ZPz&7gt0P=+Uh5!Hn diff --git a/tests_zemu/snapshots/x-mainmenu/00004.png b/tests_zemu/snapshots/x-mainmenu/00004.png index 71c7d7128a1ecd75b87ab08b63affa0e7dd50b25..d32e423268167a2c3af977464a6a7d3735cc8452 100644 GIT binary patch delta 368 zcmeBS?q;5#QXk~$;uumf=k3jCp+gEh4uK_iIDf|neS5^N+|1%6@3rFI=c}2FGe4}# z_bLaCHbrrb_fte? zZ+*7A`tJrs_N6_674lP6roY@8aMdgM!`wLeCwuCdE=|!%Un=-+!LqF4f3LdS?%X|| zd{I}U$0?Y1YPAf1bRPFDxl{N4EzXz9-L>EPDzm|Ub4#nMt$R$er}|e5mfI(6b*xzb zL$22Hu7dF2OsR!xza|^9&AZWRQ^;3+>EYg;Uy?o2i+bFx^i#HPe(?I`t{%}$b=^0I zUh9XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWKpV< delta 369 zcmeBX?qQywQXlN;;uumf=k3kFyu%7S4T)xN)$aWF*mqhkU}F2hkj(bEul~aRN4NbaK-GX>@OngJZ3TMofe(qy5!oebKjd6ItFIG;Qb*5Piy`^^Q&w9!E%S_NmZd%5B1Vk`dwfD_Qerf z8+p&|3pR0|ov`YIMclMJ?kc+}tN$LKS8|M}zFbPUpw7(J>TsitPxZ^yt2^556W01x zy#FCrYkgWl_;0e>LbYG*6PrEWI8ChJbKmsvFW1cD)7Cz*n4S}RLSFsh>&&=wvM|d9L{Gc8h4SZ(+Ba>dk#t&$~S>$MJksc&~Bg zT9Z0%tySA>YW7yuK6!Fc-&4pSb-yfM{Elt$^2@_>H!&gwjr%WF6J5ra7jI4W1&MmP L`njxgN@xNA`?slI diff --git a/tests_zemu/snapshots/x-mainmenu/00010.png b/tests_zemu/snapshots/x-mainmenu/00010.png index 71c7d7128a1ecd75b87ab08b63affa0e7dd50b25..d32e423268167a2c3af977464a6a7d3735cc8452 100644 GIT binary patch delta 368 zcmeBS?q;5#QXk~$;uumf=k3jCp+gEh4uK_iIDf|neS5^N+|1%6@3rFI=c}2FGe4}# z_bLaCHbrrb_fte? zZ+*7A`tJrs_N6_674lP6roY@8aMdgM!`wLeCwuCdE=|!%Un=-+!LqF4f3LdS?%X|| zd{I}U$0?Y1YPAf1bRPFDxl{N4EzXz9-L>EPDzm|Ub4#nMt$R$er}|e5mfI(6b*xzb zL$22Hu7dF2OsR!xza|^9&AZWRQ^;3+>EYg;Uy?o2i+bFx^i#HPe(?I`t{%}$b=^0I zUh9XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWKpV< delta 369 zcmeBX?qQywQXlN;;uumf=k3kFyu%7S4T)xN)$aWF*mqhkU}F2hkj(bEul~aRN4NbaK-GX>@OngJZ3TMofe(qy5!oebKjd6ItFIG;Qb*5Piy`^^Q&w9!E%S_NmZd%5B1Vk`dwfD_Qerf z8+p&|3pR0|ov`YIMclMJ?kc+}tN$LKS8|M}zFbPUpw7(J>TsitPxZ^yt2^556W01x zy#FCrYkgWl_;0e>LbYG*6PrEWI8ChJbKmsvFW1cD)7Cz*n4S}RLSFsh>&&=wvM|d9L{Gc8h4SZ(+Ba>dk#t&$~S>$MJksc&~Bg zT9Z0%tySA>YW7yuK6!Fc-&4pSb-yfM{Elt$^2@_>H!&gwjr%WF6J5ra7jI4W1&MmP L`njxgN@xNA`?slI From 3741997f13b7fe65cdea5fbe5067c6e95c72c360 Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Thu, 16 May 2024 13:57:19 +0100 Subject: [PATCH 4/4] remove conan --- CMakeLists.txt | 32 +- cmake/Hunter/config.cmake | 1 + cmake/HunterGate.cmake | 543 ++++++++++++++++++++++++++++ cmake/conan/CMakeLists.txt | 15 - cmake/gtest/CMakeLists.txt | 31 -- cmake/gtest/CMakeLists.txt.gtest.in | 16 - conanfile.txt | 6 - 7 files changed, 565 insertions(+), 79 deletions(-) create mode 100644 cmake/Hunter/config.cmake create mode 100644 cmake/HunterGate.cmake delete mode 100644 cmake/conan/CMakeLists.txt delete mode 100644 cmake/gtest/CMakeLists.txt delete mode 100644 cmake/gtest/CMakeLists.txt.gtest.in delete mode 100644 conanfile.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index bd698708..fbcb8699 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,12 +14,22 @@ #* limitations under the License. #******************************************************************************** cmake_minimum_required(VERSION 3.0) +include("cmake/HunterGate.cmake") +HunterGate( + URL "https://github.com/cpp-pm/hunter/archive/v0.25.5.tar.gz" + SHA1 "a20151e4c0740ee7d0f9994476856d813cdead29" + LOCAL +) + project(ledger-cosmos VERSION 0.0.0) enable_testing() cmake_policy(SET CMP0025 NEW) set(CMAKE_CXX_STANDARD 11) +set(HUNTER_STATUS_DEBUG ON) +set(HUNTER_TLS_VERIFY OFF) + option(ENABLE_FUZZING "Build with fuzzing instrumentation and build fuzz targets" OFF) option(ENABLE_COVERAGE "Build with source code coverage instrumentation" OFF) option(ENABLE_SANITIZERS "Build with ASAN and UBSAN" OFF) @@ -30,6 +40,13 @@ string(APPEND CMAKE_LINKER_FLAGS " -fno-omit-frame-pointer -g") add_definitions(-DAPP_STANDARD) +hunter_add_package(fmt) +find_package(fmt CONFIG REQUIRED) +hunter_add_package(jsoncpp) +find_package(jsoncpp CONFIG REQUIRED) +hunter_add_package(GTest) +find_package(GTest CONFIG REQUIRED) + if(ENABLE_FUZZING) add_definitions(-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION=1) SET(ENABLE_SANITIZERS ON CACHE BOOL "Sanitizer automatically enabled" FORCE) @@ -71,9 +88,6 @@ if(ENABLE_SANITIZERS) string(APPEND CMAKE_LINKER_FLAGS " -fsanitize=address,undefined -fsanitize-recover=address,undefined") endif() -include(cmake/conan/CMakeLists.txt) -add_subdirectory(cmake/gtest) - string(APPEND CMAKE_CXX_FLAGS " -fsanitize=address -fno-omit-frame-pointer") string(APPEND CMAKE_LINKER_FLAGS " -fsanitize=address -fno-omit-frame-pointer") @@ -135,24 +149,20 @@ file(GLOB_RECURSE TESTS_SRC add_executable(unittests ${TESTS_SRC}) target_include_directories(unittests PRIVATE - ${gtest_SOURCE_DIR}/include - ${gmock_SOURCE_DIR}/include - ${CONAN_INCLUDE_DIRS_FMT} - ${CONAN_INCLUDE_DIRS_JSONCPP} ${CMAKE_CURRENT_SOURCE_DIR}/deps/jsmn/src ${CMAKE_CURRENT_SOURCE_DIR}/deps/tinycbor/src ) target_link_libraries(unittests PRIVATE - gtest_main + GTest::gtest_main app_lib - CONAN_PKG::fmt - CONAN_PKG::jsoncpp) + fmt::fmt + JsonCpp::JsonCpp) add_compile_definitions(TESTVECTORS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/tests/") add_compile_definitions(APP_TESTING=1) add_compile_definitions(COMPILE_TEXTUAL=1) -add_test(unittests ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittests) +add_test(NAME unittests COMMAND unittests) set_tests_properties(unittests PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests) ############################################################## diff --git a/cmake/Hunter/config.cmake b/cmake/Hunter/config.cmake new file mode 100644 index 00000000..0703ceb0 --- /dev/null +++ b/cmake/Hunter/config.cmake @@ -0,0 +1 @@ +hunter_config(GTest VERSION 1.14.0) diff --git a/cmake/HunterGate.cmake b/cmake/HunterGate.cmake new file mode 100644 index 00000000..17c6d380 --- /dev/null +++ b/cmake/HunterGate.cmake @@ -0,0 +1,543 @@ +# Copyright (c) 2013-2019, Ruslan Baratov +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This is a gate file to Hunter package manager. +# Include this file using `include` command and add package you need, example: +# +# cmake_minimum_required(VERSION 3.5) +# +# include("cmake/HunterGate.cmake") +# HunterGate( +# URL "https://github.com/path/to/hunter/archive.tar.gz" +# SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d" +# ) +# +# project(MyProject) +# +# hunter_add_package(Foo) +# hunter_add_package(Boo COMPONENTS Bar Baz) +# +# Projects: +# * https://github.com/cpp-pm/gate/ +# * https://github.com/cpp-pm/hunter + +option(HUNTER_ENABLED "Enable Hunter package manager support" ON) + +if(HUNTER_ENABLED) + if(CMAKE_VERSION VERSION_LESS "3.5") + message( + FATAL_ERROR + "At least CMake version 3.5 required for Hunter dependency management." + " Update CMake or set HUNTER_ENABLED to OFF." + ) + endif() +endif() + +include(CMakeParseArguments) # cmake_parse_arguments + +option(HUNTER_STATUS_PRINT "Print working status" ON) +option(HUNTER_STATUS_DEBUG "Print a lot info" OFF) +option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON) +set(HUNTER_ROOT "" CACHE FILEPATH "Override the HUNTER_ROOT.") + +set(HUNTER_ERROR_PAGE "https://hunter.readthedocs.io/en/latest/reference/errors") + +function(hunter_gate_status_print) + if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG) + foreach(print_message ${ARGV}) + message(STATUS "[hunter] ${print_message}") + endforeach() + endif() +endfunction() + +function(hunter_gate_status_debug) + if(HUNTER_STATUS_DEBUG) + foreach(print_message ${ARGV}) + string(TIMESTAMP timestamp) + message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}") + endforeach() + endif() +endfunction() + +function(hunter_gate_error_page error_page) + message("------------------------------ ERROR ------------------------------") + message(" ${HUNTER_ERROR_PAGE}/${error_page}.html") + message("-------------------------------------------------------------------") + message("") + message(FATAL_ERROR "") +endfunction() + +function(hunter_gate_internal_error) + message("") + foreach(print_message ${ARGV}) + message("[hunter ** INTERNAL **] ${print_message}") + endforeach() + message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") + message("") + hunter_gate_error_page("error.internal") +endfunction() + +function(hunter_gate_fatal_error) + cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}") + if("${hunter_ERROR_PAGE}" STREQUAL "") + hunter_gate_internal_error("Expected ERROR_PAGE") + endif() + message("") + foreach(x ${hunter_UNPARSED_ARGUMENTS}) + message("[hunter ** FATAL ERROR **] ${x}") + endforeach() + message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]") + message("") + hunter_gate_error_page("${hunter_ERROR_PAGE}") +endfunction() + +function(hunter_gate_user_error) + hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data") +endfunction() + +function(hunter_gate_self root version sha1 result) + string(COMPARE EQUAL "${root}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("root is empty") + endif() + + string(COMPARE EQUAL "${version}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("version is empty") + endif() + + string(COMPARE EQUAL "${sha1}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("sha1 is empty") + endif() + + string(SUBSTRING "${sha1}" 0 7 archive_id) + + if(EXISTS "${root}/cmake/Hunter") + set(hunter_self "${root}") + else() + set( + hunter_self + "${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked" + ) + endif() + + set("${result}" "${hunter_self}" PARENT_SCOPE) +endfunction() + +# Set HUNTER_GATE_ROOT cmake variable to suitable value. +function(hunter_gate_detect_root) + # Check CMake variable + if(HUNTER_ROOT) + set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable") + return() + endif() + + # Check environment variable + if(DEFINED ENV{HUNTER_ROOT}) + set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT detected by environment variable") + return() + endif() + + # Check HOME environment variable + if(DEFINED ENV{HOME}) + set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable") + return() + endif() + + # Check SYSTEMDRIVE and USERPROFILE environment variable (windows only) + if(WIN32) + if(DEFINED ENV{SYSTEMDRIVE}) + set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug( + "HUNTER_ROOT set using SYSTEMDRIVE environment variable" + ) + return() + endif() + + if(DEFINED ENV{USERPROFILE}) + set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE) + hunter_gate_status_debug( + "HUNTER_ROOT set using USERPROFILE environment variable" + ) + return() + endif() + endif() + + hunter_gate_fatal_error( + "Can't detect HUNTER_ROOT" + ERROR_PAGE "error.detect.hunter.root" + ) +endfunction() + +function(hunter_gate_download dir) + string( + COMPARE + NOTEQUAL + "$ENV{HUNTER_DISABLE_AUTOINSTALL}" + "" + disable_autoinstall + ) + if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL) + hunter_gate_fatal_error( + "Hunter not found in '${dir}'" + "Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'" + "Settings:" + " HUNTER_ROOT: ${HUNTER_GATE_ROOT}" + " HUNTER_SHA1: ${HUNTER_GATE_SHA1}" + ERROR_PAGE "error.run.install" + ) + endif() + string(COMPARE EQUAL "${dir}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("Empty 'dir' argument") + endif() + + string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("HUNTER_GATE_SHA1 empty") + endif() + + string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad) + if(is_bad) + hunter_gate_internal_error("HUNTER_GATE_URL empty") + endif() + + set(done_location "${dir}/DONE") + set(sha1_location "${dir}/SHA1") + + set(build_dir "${dir}/Build") + set(cmakelists "${dir}/CMakeLists.txt") + + hunter_gate_status_debug("Locking directory: ${dir}") + file(LOCK "${dir}" DIRECTORY GUARD FUNCTION) + hunter_gate_status_debug("Lock done") + + if(EXISTS "${done_location}") + # while waiting for lock other instance can do all the job + hunter_gate_status_debug("File '${done_location}' found, skip install") + return() + endif() + + file(REMOVE_RECURSE "${build_dir}") + file(REMOVE_RECURSE "${cmakelists}") + + file(MAKE_DIRECTORY "${build_dir}") # check directory permissions + + # Disabling languages speeds up a little bit, reduces noise in the output + # and avoids path too long windows error + file( + WRITE + "${cmakelists}" + "cmake_minimum_required(VERSION 3.5)\n" + "if(POLICY CMP0114)\n" + " cmake_policy(SET CMP0114 NEW)\n" + "endif()\n" + "if(POLICY CMP0135)\n" + " cmake_policy(SET CMP0135 NEW)\n" + "endif()\n" + "project(HunterDownload LANGUAGES NONE)\n" + "include(ExternalProject)\n" + "ExternalProject_Add(\n" + " Hunter\n" + " URL\n" + " \"${HUNTER_GATE_URL}\"\n" + " URL_HASH\n" + " SHA1=${HUNTER_GATE_SHA1}\n" + " DOWNLOAD_DIR\n" + " \"${dir}\"\n" + " TLS_VERIFY\n" + " ${HUNTER_TLS_VERIFY}\n" + " SOURCE_DIR\n" + " \"${dir}/Unpacked\"\n" + " CONFIGURE_COMMAND\n" + " \"\"\n" + " BUILD_COMMAND\n" + " \"\"\n" + " INSTALL_COMMAND\n" + " \"\"\n" + ")\n" + ) + + if(HUNTER_STATUS_DEBUG) + set(logging_params "") + else() + set(logging_params OUTPUT_QUIET) + endif() + + hunter_gate_status_debug("Run generate") + + # Need to add toolchain file too. + # Otherwise on Visual Studio + MDD this will fail with error: + # "Could not find an appropriate version of the Windows 10 SDK installed on this machine" + if(EXISTS "${CMAKE_TOOLCHAIN_FILE}") + get_filename_component(absolute_CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE) + set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${absolute_CMAKE_TOOLCHAIN_FILE}") + else() + # 'toolchain_arg' can't be empty + set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=") + endif() + + string(COMPARE EQUAL "${CMAKE_MAKE_PROGRAM}" "" no_make) + if(no_make) + set(make_arg "") + else() + # Test case: remove Ninja from PATH but set it via CMAKE_MAKE_PROGRAM + set(make_arg "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}") + endif() + + execute_process( + COMMAND + "${CMAKE_COMMAND}" + "-H${dir}" + "-B${build_dir}" + "-G${CMAKE_GENERATOR}" + "${toolchain_arg}" + ${make_arg} + WORKING_DIRECTORY "${dir}" + RESULT_VARIABLE download_result + ${logging_params} + ) + + if(NOT download_result EQUAL 0) + hunter_gate_internal_error( + "Configure project failed." + "To reproduce the error run: ${CMAKE_COMMAND} -H${dir} -B${build_dir} -G${CMAKE_GENERATOR} ${toolchain_arg} ${make_arg}" + "In directory ${dir}" + ) + endif() + + hunter_gate_status_print( + "Initializing Hunter workspace (${HUNTER_GATE_SHA1})" + " ${HUNTER_GATE_URL}" + " -> ${dir}" + ) + execute_process( + COMMAND "${CMAKE_COMMAND}" --build "${build_dir}" + WORKING_DIRECTORY "${dir}" + RESULT_VARIABLE download_result + ${logging_params} + ) + + if(NOT download_result EQUAL 0) + hunter_gate_internal_error("Build project failed") + endif() + + file(REMOVE_RECURSE "${build_dir}") + file(REMOVE_RECURSE "${cmakelists}") + + file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}") + file(WRITE "${done_location}" "DONE") + + hunter_gate_status_debug("Finished") +endfunction() + +# Must be a macro so master file 'cmake/Hunter' can +# apply all variables easily just by 'include' command +# (otherwise PARENT_SCOPE magic needed) +macro(HunterGate) + if(HUNTER_GATE_DONE) + # variable HUNTER_GATE_DONE set explicitly for external project + # (see `hunter_download`) + set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES) + endif() + + # First HunterGate command will init Hunter, others will be ignored + get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET) + + if(NOT HUNTER_ENABLED) + # Empty function to avoid error "unknown function" + function(hunter_add_package) + endfunction() + + set( + _hunter_gate_disabled_mode_dir + "${CMAKE_CURRENT_LIST_DIR}/cmake/Hunter/disabled-mode" + ) + if(EXISTS "${_hunter_gate_disabled_mode_dir}") + hunter_gate_status_debug( + "Adding \"disabled-mode\" modules: ${_hunter_gate_disabled_mode_dir}" + ) + list(APPEND CMAKE_PREFIX_PATH "${_hunter_gate_disabled_mode_dir}") + endif() + elseif(_hunter_gate_done) + hunter_gate_status_debug("Secondary HunterGate (use old settings)") + hunter_gate_self( + "${HUNTER_CACHED_ROOT}" + "${HUNTER_VERSION}" + "${HUNTER_SHA1}" + _hunter_self + ) + include("${_hunter_self}/cmake/Hunter") + else() + set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}") + + string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name) + if(_have_project_name) + hunter_gate_fatal_error( + "Please set HunterGate *before* 'project' command. " + "Detected project: ${PROJECT_NAME}" + ERROR_PAGE "error.huntergate.before.project" + ) + endif() + + cmake_parse_arguments( + HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV} + ) + + string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1) + string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url) + string( + COMPARE + NOTEQUAL + "${HUNTER_GATE_UNPARSED_ARGUMENTS}" + "" + _have_unparsed + ) + string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global) + string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath) + + if(_have_unparsed) + hunter_gate_user_error( + "HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}" + ) + endif() + if(_empty_sha1) + hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory") + endif() + if(_empty_url) + hunter_gate_user_error("URL suboption of HunterGate is mandatory") + endif() + if(_have_global) + if(HUNTER_GATE_LOCAL) + hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)") + endif() + if(_have_filepath) + hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)") + endif() + endif() + if(HUNTER_GATE_LOCAL) + if(_have_global) + hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)") + endif() + if(_have_filepath) + hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)") + endif() + endif() + if(_have_filepath) + if(_have_global) + hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)") + endif() + if(HUNTER_GATE_LOCAL) + hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)") + endif() + endif() + + hunter_gate_detect_root() # set HUNTER_GATE_ROOT + + # Beautify path, fix probable problems with windows path slashes + get_filename_component( + HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE + ) + hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}") + if(NOT HUNTER_ALLOW_SPACES_IN_PATH) + string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces) + if(NOT _contain_spaces EQUAL -1) + hunter_gate_fatal_error( + "HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces." + "Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error" + "(Use at your own risk!)" + ERROR_PAGE "error.spaces.in.hunter.root" + ) + endif() + endif() + + string( + REGEX + MATCH + "[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*" + HUNTER_GATE_VERSION + "${HUNTER_GATE_URL}" + ) + string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty) + if(_is_empty) + set(HUNTER_GATE_VERSION "unknown") + endif() + + hunter_gate_self( + "${HUNTER_GATE_ROOT}" + "${HUNTER_GATE_VERSION}" + "${HUNTER_GATE_SHA1}" + _hunter_self + ) + + set(_master_location "${_hunter_self}/cmake/Hunter") + if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter") + # Hunter downloaded manually (e.g. by 'git clone') + set(_unused "xxxxxxxxxx") + set(HUNTER_GATE_SHA1 "${_unused}") + set(HUNTER_GATE_VERSION "${_unused}") + else() + get_filename_component(_archive_id_location "${_hunter_self}/.." ABSOLUTE) + set(_done_location "${_archive_id_location}/DONE") + set(_sha1_location "${_archive_id_location}/SHA1") + + # Check Hunter already downloaded by HunterGate + if(NOT EXISTS "${_done_location}") + hunter_gate_download("${_archive_id_location}") + endif() + + if(NOT EXISTS "${_done_location}") + hunter_gate_internal_error("hunter_gate_download failed") + endif() + + if(NOT EXISTS "${_sha1_location}") + hunter_gate_internal_error("${_sha1_location} not found") + endif() + file(READ "${_sha1_location}" _sha1_value) + string(TOLOWER "${_sha1_value}" _sha1_value_lower) + string(TOLOWER "${HUNTER_GATE_SHA1}" _HUNTER_GATE_SHA1_lower) + string(COMPARE EQUAL "${_sha1_value_lower}" "${_HUNTER_GATE_SHA1_lower}" _is_equal) + if(NOT _is_equal) + hunter_gate_internal_error( + "Short SHA1 collision:" + " ${_sha1_value} (from ${_sha1_location})" + " ${HUNTER_GATE_SHA1} (HunterGate)" + ) + endif() + if(NOT EXISTS "${_master_location}") + hunter_gate_user_error( + "Master file not found:" + " ${_master_location}" + "try to update Hunter/HunterGate" + ) + endif() + endif() + include("${_master_location}") + set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES) + endif() +endmacro() diff --git a/cmake/conan/CMakeLists.txt b/cmake/conan/CMakeLists.txt deleted file mode 100644 index e8924378..00000000 --- a/cmake/conan/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Download automatically, you can also just copy the conan.cmake file - -if (NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake") - message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan") - file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.16.1/conan.cmake" - "${CMAKE_BINARY_DIR}/conan.cmake") -endif () -include(${CMAKE_BINARY_DIR}/conan.cmake) - -conan_check(REQUIRED) - -conan_cmake_run(CONANFILE conanfile.txt - BASIC_SETUP - CMAKE_TARGETS - BUILD missing) diff --git a/cmake/gtest/CMakeLists.txt b/cmake/gtest/CMakeLists.txt deleted file mode 100644 index eea7d079..00000000 --- a/cmake/gtest/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -############################## -# Google Test -# Based on instructions in https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -# Download and unpack googletest at configure time -configure_file(CMakeLists.txt.gtest.in ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt) - -execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) -if (result) - message(FATAL_ERROR "CMake step for googletest failed: ${result}") -endif () - -execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) -if (result) - message(FATAL_ERROR "Build step for googletest failed: ${result}") -endif () - -# Prevent overriding the parent project's compiler/linker settings on Windows -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - -add_subdirectory( - ${CMAKE_BINARY_DIR}/googletest-src - ${CMAKE_BINARY_DIR}/googletest-build -) - -if (CMAKE_VERSION VERSION_LESS 2.8.11) - include_directories("${gtest_SOURCE_DIR}/include") -endif () diff --git a/cmake/gtest/CMakeLists.txt.gtest.in b/cmake/gtest/CMakeLists.txt.gtest.in deleted file mode 100644 index b4566319..00000000 --- a/cmake/gtest/CMakeLists.txt.gtest.in +++ /dev/null @@ -1,16 +0,0 @@ -# Based on https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -cmake_minimum_required(VERSION 3.0.0) - -project(googletest-download NONE) - -include(ExternalProject) -ExternalProject_Add(googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.11.0 - SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - ) diff --git a/conanfile.txt b/conanfile.txt deleted file mode 100644 index 9639b968..00000000 --- a/conanfile.txt +++ /dev/null @@ -1,6 +0,0 @@ -[requires] -jsoncpp/1.9.5 -fmt/8.1.1 - -[generators] -cmake