From f8971907d7ee78dec9e7325e6c68485c49c0387b Mon Sep 17 00:00:00 2001 From: Carlos Medeiros <carlos.medeiros@zondax.ch> Date: Thu, 16 May 2024 10:18:50 +0100 Subject: [PATCH 1/6] 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 <carlos.medeiros@zondax.ch> Date: Thu, 16 May 2024 10:52:58 +0100 Subject: [PATCH 2/6] 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 <string.h> #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 <carlos.medeiros@zondax.ch> Date: Thu, 16 May 2024 10:53:17 +0100 Subject: [PATCH 3/6] 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;f0a5<Z1JMJJEq~o|gdhxsW2gK65A4P61uc`!UkSPrJLkJ{1XNBSB#{UJ008(P z&z+vTaeeSn|AOz;ACP2wtp0+NS!w{jmYcHAowmo%{eB@j5HmyX!0+&Z=BP@1Eqikp zg=<7)c$nVDdx99%Y;Y4U*#T`y@>LngO=_u{>sJp9bT4d=F@FPO&%N;p$32Cq3hOw{ zA{Ughkl9(^44zpycDl*{T^(`Jr18|@t)AkA57-g5p<d>}$Xmrpcw0HHXKDuseIfS& zECa;ul1JPk_yZ<p!1jwWfJkHnA_L-UAN#;V==mPby&Isn1vVf*9R(g;PZdlv1BkZR z22ejs(^L70WPcPC=cp4=P%uOng1npA@2o^J3eu<Uk*(kra~drLGh5B<EGP{XCRq#e zPThEtrm4IXcbcGJSD2|hK+NjTN%B>h@&;ZSJYHHj-OOi`+yQYFbB@3yyj;=4v-s_W z-Mz`W{{fA2T|{|@qq(*i7nju<*~+Evf1l+~qb}$}QzsG*E%@a!5^Kdz0{{R3005PE Y0j=uc<JmfJcK`qY07*qoM6N<$f;-m8hyVZp delta 430 zcmV;f0a5<Z1JMJJEq}|Bgdhw><5c_qAMC<jFhiyDYJ%MYQ}?Vad8ju5l1Kyq004ZE z^PuxEt}jmYFL;c8fh5~L`VBtJPy=vZF3O$<ZTs*2dLcRxGehmb@9=@<sG0Z~_T(xG z*NDj2VQL?51~IDGU=eOv0mUV`R|ayEa#hoR^}s;)iS5y5fPd_{*Z#qAPhqNwb?j!) z7L>A(*;(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|%MUD1Ru<Q9GibV2CaRc{k(P;vu6+MnU@2y|NU%Vosr?U}meCotd+F6{l%P z)`GlKH~uiwR9=eP&3xY7LRTIj<bLZ`-1}0AtCt2(Tw2JITmf+vvyZ?eyj)Skv-s(& zRVK#$4=8-rkr!MR_ZH*gvRWa#z3BeyxIeXSL0|eL9Ve@pt<)B4nX~DCK>z>%003YD Yo<l0-<CDK#YXATM07*qoM6N<$g1=|ZumAu6 diff --git a/tests_zemu/snapshots/s-mainmenu/00010.png b/tests_zemu/snapshots/s-mainmenu/00010.png index 777fac66949cd373a7fb1dbdde205f9211ee125a..d8e6401169b230a05ce14b8a83212a1401b1163c 100644 GIT binary patch delta 430 zcmV;f0a5<Z1JMJJEq~o|gdhxsW2gK65A4P61uc`!UkSPrJLkJ{1XNBSB#{UJ008(P z&z+vTaeeSn|AOz;ACP2wtp0+NS!w{jmYcHAowmo%{eB@j5HmyX!0+&Z=BP@1Eqikp zg=<7)c$nVDdx99%Y;Y4U*#T`y@>LngO=_u{>sJp9bT4d=F@FPO&%N;p$32Cq3hOw{ zA{Ughkl9(^44zpycDl*{T^(`Jr18|@t)AkA57-g5p<d>}$Xmrpcw0HHXKDuseIfS& zECa;ul1JPk_yZ<p!1jwWfJkHnA_L-UAN#;V==mPby&Isn1vVf*9R(g;PZdlv1BkZR z22ejs(^L70WPcPC=cp4=P%uOng1npA@2o^J3eu<Uk*(kra~drLGh5B<EGP{XCRq#e zPThEtrm4IXcbcGJSD2|hK+NjTN%B>h@&;ZSJYHHj-OOi`+yQYFbB@3yyj;=4v-s_W z-Mz`W{{fA2T|{|@qq(*i7nju<*~+Evf1l+~qb}$}QzsG*E%@a!5^Kdz0{{R3005PE Y0j=uc<JmfJcK`qY07*qoM6N<$f;-m8hyVZp delta 430 zcmV;f0a5<Z1JMJJEq}|Bgdhw><5c_qAMC<jFhiyDYJ%MYQ}?Vad8ju5l1Kyq004ZE z^PuxEt}jmYFL;c8fh5~L`VBtJPy=vZF3O$<ZTs*2dLcRxGehmb@9=@<sG0Z~_T(xG z*NDj2VQL?51~IDGU=eOv0mUV`R|ayEa#hoR^}s;)iS5y5fPd_{*Z#qAPhqNwb?j!) z7L>A(*;(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|%MUD1Ru<Q9GibV2CaRc{k(P;vu6+MnU@2y|NU%Vosr?U}meCotd+F6{l%P z)`GlKH~uiwR9=eP&3xY7LRTIj<bLZ`-1}0AtCt2(Tw2JITmf+vvyZ?eyj)Skv-s(& zRVK#$4=8-rkr!MR_ZH*gvRWa#z3BeyxIeXSL0|eL9Ve@pt<)B4nX~DCK>z>%003YD Yo<l0-<CDK#YXATM07*qoM6N<$g1=|ZumAu6 diff --git a/tests_zemu/snapshots/sp-mainmenu/00004.png b/tests_zemu/snapshots/sp-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<X}L62jZO_9WP!__KiJpcsH}WaPpUThXlL%94w~?r?{#doAK^>_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 zUh9<nuRj#3letfJ)>XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z<E+B1{HK=RE?xI-*XF%{E&rTvko)^~!>>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWKpV< delta 369 zcmeBX?qQywQXlN;;uumf=k3kFyu%7S4T)xN)$aWF*mqhkU}F2hkj(bEul~<l#G<i@ z({pYR0|FdS7ZMcQcwC>aRN4NbaK-GX>@OngJZ3TMofe(qy5!oebKjd6ItFIG;Qb<b zxA4~MJ?~e@mwj3ALSpLv$jqwQS2>*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<GT zxAjiG^ZMiemi8<MmCn<KAGa<DyL!>|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<X}L62jZO_9WP!__KiJpcsH}WaPpUThXlL%94w~?r?{#doAK^>_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 zUh9<nuRj#3letfJ)>XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z<E+B1{HK=RE?xI-*XF%{E&rTvko)^~!>>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWKpV< delta 369 zcmeBX?qQywQXlN;;uumf=k3kFyu%7S4T)xN)$aWF*mqhkU}F2hkj(bEul~<l#G<i@ z({pYR0|FdS7ZMcQcwC>aRN4NbaK-GX>@OngJZ3TMofe(qy5!oebKjd6ItFIG;Qb<b zxA4~MJ?~e@mwj3ALSpLv$jqwQS2>*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<GT zxAjiG^ZMiemi8<MmCn<KAGa<DyL!>|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<X}L62jZO_9WP!__KiJpcsH}WaPpUThXlL%94w~?r?{#doAK^>_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 zUh9<nuRj#3letfJ)>XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z<E+B1{HK=RE?xI-*XF%{E&rTvko)^~!>>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWKpV< delta 369 zcmeBX?qQywQXlN;;uumf=k3kFyu%7S4T)xN)$aWF*mqhkU}F2hkj(bEul~<l#G<i@ z({pYR0|FdS7ZMcQcwC>aRN4NbaK-GX>@OngJZ3TMofe(qy5!oebKjd6ItFIG;Qb<b zxA4~MJ?~e@mwj3ALSpLv$jqwQS2>*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<GT zxAjiG^ZMiemi8<MmCn<KAGa<DyL!>|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<X}L62jZO_9WP!__KiJpcsH}WaPpUThXlL%94w~?r?{#doAK^>_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 zUh9<nuRj#3letfJ)>XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z<E+B1{HK=RE?xI-*XF%{E&rTvko)^~!>>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWKpV< delta 369 zcmeBX?qQywQXlN;;uumf=k3kFyu%7S4T)xN)$aWF*mqhkU}F2hkj(bEul~<l#G<i@ z({pYR0|FdS7ZMcQcwC>aRN4NbaK-GX>@OngJZ3TMofe(qy5!oebKjd6ItFIG;Qb<b zxA4~MJ?~e@mwj3ALSpLv$jqwQS2>*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<GT zxAjiG^ZMiemi8<MmCn<KAGa<DyL!>|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 <carlos.medeiros@zondax.ch> Date: Thu, 16 May 2024 13:57:19 +0100 Subject: [PATCH 4/6] 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 From 0c63112ca7a40842180d8296d3ea15260d593b38 Mon Sep 17 00:00:00 2001 From: Carlos Medeiros <carlos.medeiros@zondax.ch> Date: Thu, 16 May 2024 17:23:03 +0100 Subject: [PATCH 5/6] setting APP_MIN_STACK_SIZE for all devices --- app/Makefile | 2 +- app/Makefile.version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Makefile b/app/Makefile index f73c5aae..aba35df4 100755 --- a/app/Makefile +++ b/app/Makefile @@ -70,7 +70,7 @@ endif ifeq ($(TARGET_NAME),TARGET_NANOS) APP_STACK_MIN_SIZE := 1600 -else ifeq ($(TARGET_NAME),TARGET_NANOX) +else APP_STACK_MIN_SIZE := 3800 endif diff --git a/app/Makefile.version b/app/Makefile.version index 782e3ff0..cbfcb90d 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=21 +APPVERSION_P=22 From 1f07be703de138a78748070d57e30c5df3970365 Mon Sep 17 00:00:00 2001 From: Carlos Medeiros <carlos.medeiros@zondax.ch> Date: Thu, 16 May 2024 17:23:13 +0100 Subject: [PATCH 6/6] update snapshots --- tests_zemu/snapshots/s-mainmenu/00004.png | Bin 465 -> 469 bytes tests_zemu/snapshots/s-mainmenu/00010.png | Bin 465 -> 469 bytes tests_zemu/snapshots/sp-mainmenu/00004.png | Bin 395 -> 397 bytes tests_zemu/snapshots/sp-mainmenu/00010.png | Bin 395 -> 397 bytes tests_zemu/snapshots/st-mainmenu/00001.png | Bin 13485 -> 13429 bytes tests_zemu/snapshots/x-mainmenu/00004.png | Bin 395 -> 397 bytes tests_zemu/snapshots/x-mainmenu/00010.png | Bin 395 -> 397 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests_zemu/snapshots/s-mainmenu/00004.png b/tests_zemu/snapshots/s-mainmenu/00004.png index d8e6401169b230a05ce14b8a83212a1401b1163c..44954afe8f727ec12b167d398431a5a6e4ebb461 100644 GIT binary patch delta 443 zcmV;s0Yv`M1JwhNB!8SqL_t(|ob8#*a>FnPMRBM3{}1-UU8vO%UKMg;;r5=DM=v`U zBmp4;0002q$g$J08_y?~`V)Mv{(vOgWAzujn572bzTA{OcG@1_?fpRvAZCU>fVc38 z=B!G5EPHbog=<7)oG^Wiw}P0}Y;Y4U*#XTZxmN~qlX6wle}DDFK=;D-7&Acj-W&hH z@kn8+!a7c~=m<(#$Q-O2gEb4sPFESAt0NwoG@d%V*HgUk1v|nvG|Idfd9Sz$Z!5?3 zOzi-nFXTRfWq|m&<Po<B{(y-Yu>GJ6AQBmY$bh)-V;^`3J)gt5X9M)Uzy{=}qrju< zse)-{0MQrQ0DtOdX?m)2A{hn6IqF0d6im^DAg?iAt#)jdjDqy7duA(m#hgY<!OUJW zJ2O{{Ur~T$Ey%ld<KJeQ%1d#l8BCaqF_i}hxqtO6?trPp)k}j5mlm=lcR*aloFgy^ zFIV*NEPi`XIxV>y*8LyQc&#IwtJU5s*B0aAvRWg1yfo<Xx4I0*j-WSvy&0?MUK)$F l;>f4)DFgrj008h0`2vzc>D@U?z%Bp)002ovPDHLkV1k^Z(?9?K delta 439 zcmV;o0Z9JU1JMJJB!8GmL_t(|ob8$2a)clZg=44t{txWM?gcHA&0h(+5<BO+as*UP zAS96p0002^AkUqiyK#N+QU8MP)gO>#d#wI~lUZs2zLuM^&z-i%&;5QOIuJ8M@4)Zy zf##@6d@Xx(7lms?WO$g~$9sYp)ogGRF4+NXN%B=0$W3agnt$t84-9lKY>zPmWY4|v z3CBH!sS4{j%_0|+vXI$X-wd8vICi?q09_q%(WLRz;jNzHg%8*fwxM3;!N^<1NqAd1 zu4ifo2z?><0W1T=?vh8`BKQL)X2AA~GJr^A1R?|CYajc-L+JS)&b=F;w*@vJKOF@g zT~8HEGXsdW*nb94KTFe7`H5r{6z8ZDQBW{M7lOQ-+3&1GG78eC?vbtF6>}Ob1v6XC z>?|k^6((5=@=o1&lBTJ=6nC1SU{{!_JV4Cq&q?xCneql+8a!TFINi)=liUGu6?2Zj zB)nYF!?XD9h26c$y8i)<b6rGvhoiZ+7#Ek-8rjOF?l6C!<xit7=tENy4lVfQG7@XW hPXhn|0001$cmb{I;p5plaCZOz002ovPDHLkV1kFt%-{e3 diff --git a/tests_zemu/snapshots/s-mainmenu/00010.png b/tests_zemu/snapshots/s-mainmenu/00010.png index d8e6401169b230a05ce14b8a83212a1401b1163c..44954afe8f727ec12b167d398431a5a6e4ebb461 100644 GIT binary patch delta 443 zcmV;s0Yv`M1JwhNB!8SqL_t(|ob8#*a>FnPMRBM3{}1-UU8vO%UKMg;;r5=DM=v`U zBmp4;0002q$g$J08_y?~`V)Mv{(vOgWAzujn572bzTA{OcG@1_?fpRvAZCU>fVc38 z=B!G5EPHbog=<7)oG^Wiw}P0}Y;Y4U*#XTZxmN~qlX6wle}DDFK=;D-7&Acj-W&hH z@kn8+!a7c~=m<(#$Q-O2gEb4sPFESAt0NwoG@d%V*HgUk1v|nvG|Idfd9Sz$Z!5?3 zOzi-nFXTRfWq|m&<Po<B{(y-Yu>GJ6AQBmY$bh)-V;^`3J)gt5X9M)Uzy{=}qrju< zse)-{0MQrQ0DtOdX?m)2A{hn6IqF0d6im^DAg?iAt#)jdjDqy7duA(m#hgY<!OUJW zJ2O{{Ur~T$Ey%ld<KJeQ%1d#l8BCaqF_i}hxqtO6?trPp)k}j5mlm=lcR*aloFgy^ zFIV*NEPi`XIxV>y*8LyQc&#IwtJU5s*B0aAvRWg1yfo<Xx4I0*j-WSvy&0?MUK)$F l;>f4)DFgrj008h0`2vzc>D@U?z%Bp)002ovPDHLkV1k^Z(?9?K delta 439 zcmV;o0Z9JU1JMJJB!8GmL_t(|ob8$2a)clZg=44t{txWM?gcHA&0h(+5<BO+as*UP zAS96p0002^AkUqiyK#N+QU8MP)gO>#d#wI~lUZs2zLuM^&z-i%&;5QOIuJ8M@4)Zy zf##@6d@Xx(7lms?WO$g~$9sYp)ogGRF4+NXN%B=0$W3agnt$t84-9lKY>zPmWY4|v z3CBH!sS4{j%_0|+vXI$X-wd8vICi?q09_q%(WLRz;jNzHg%8*fwxM3;!N^<1NqAd1 zu4ifo2z?><0W1T=?vh8`BKQL)X2AA~GJr^A1R?|CYajc-L+JS)&b=F;w*@vJKOF@g zT~8HEGXsdW*nb94KTFe7`H5r{6z8ZDQBW{M7lOQ-+3&1GG78eC?vbtF6>}Ob1v6XC z>?|k^6((5=@=o1&lBTJ=6nC1SU{{!_JV4Cq&q?xCneql+8a!TFINi)=liUGu6?2Zj zB)nYF!?XD9h26c$y8i)<b6rGvhoiZ+7#Ek-8rjOF?l6C!<xit7=tENy4lVfQG7@XW hPXhn|0001$cmb{I;p5plaCZOz002ovPDHLkV1kFt%-{e3 diff --git a/tests_zemu/snapshots/sp-mainmenu/00004.png b/tests_zemu/snapshots/sp-mainmenu/00004.png index d32e423268167a2c3af977464a6a7d3735cc8452..2ff8585b5d94e21c7054712e892f2d80165f6b94 100644 GIT binary patch delta 370 zcmeBX?q!~!QXk^!;uumf=k3kFz7_?ZhQzYX<`4h5zl#0VsFN72d8{yF?w|XU0~0(B zzPb{`fB*;7g#-mR9@ppls$hRnc!%#=(<-iTmDq+t{p}~ZJl1ZV`<{K3qvW)O<`U<7 zWcjP#ewY1vxKD11q1)5{t4#Ku&0)E^dhNmLwA%W>53(1wJ=vi>w?KSzDF65MZ(kg- zt+Ac7Y{4e3-l$a{EaIl=vCidxs`LNG<a09~zW1wQ{C0ksySwa(`G?~kUyVF+SboDb zr9J*N{dIFPCv^TZV_&HDYxYLAi6@*UR`9uRdia-X=J82upIA)KiGAVoIAs0uO3U&k z@mnJLCO?Vm|F53ChH0XT-t8mTo1#L~*I4TBzOjFY%CzZcCUw@E&pEG^`Pu*Egr>B2 zs|s%w%Ej8&iiei(e!X*6<$Lpw=Nlw{zYVB;7*$tWvTl_zB4`*MeE!2^bB2RWjq5)< ONZ8ZW&t;ucLK6UTxvp&h delta 368 zcmeBW?q;5#QXk~$;uumf=k3jCp+gEh4uK_iIDf|neS5^N+|1%6@3rFI=c}2FGe4}# z<X}L62jZO_9WP!__KiJpcsH}WaPpUThXlL%94w~?r?{#doAK^>_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 zUh9<nuRj#3letfJ)>XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z<E+B1{HK=RE?xI-*XF%{E&rTvko)^~!>>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWx=YH diff --git a/tests_zemu/snapshots/sp-mainmenu/00010.png b/tests_zemu/snapshots/sp-mainmenu/00010.png index d32e423268167a2c3af977464a6a7d3735cc8452..2ff8585b5d94e21c7054712e892f2d80165f6b94 100644 GIT binary patch delta 370 zcmeBX?q!~!QXk^!;uumf=k3kFz7_?ZhQzYX<`4h5zl#0VsFN72d8{yF?w|XU0~0(B zzPb{`fB*;7g#-mR9@ppls$hRnc!%#=(<-iTmDq+t{p}~ZJl1ZV`<{K3qvW)O<`U<7 zWcjP#ewY1vxKD11q1)5{t4#Ku&0)E^dhNmLwA%W>53(1wJ=vi>w?KSzDF65MZ(kg- zt+Ac7Y{4e3-l$a{EaIl=vCidxs`LNG<a09~zW1wQ{C0ksySwa(`G?~kUyVF+SboDb zr9J*N{dIFPCv^TZV_&HDYxYLAi6@*UR`9uRdia-X=J82upIA)KiGAVoIAs0uO3U&k z@mnJLCO?Vm|F53ChH0XT-t8mTo1#L~*I4TBzOjFY%CzZcCUw@E&pEG^`Pu*Egr>B2 zs|s%w%Ej8&iiei(e!X*6<$Lpw=Nlw{zYVB;7*$tWvTl_zB4`*MeE!2^bB2RWjq5)< ONZ8ZW&t;ucLK6UTxvp&h delta 368 zcmeBW?q;5#QXk~$;uumf=k3jCp+gEh4uK_iIDf|neS5^N+|1%6@3rFI=c}2FGe4}# z<X}L62jZO_9WP!__KiJpcsH}WaPpUThXlL%94w~?r?{#doAK^>_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 zUh9<nuRj#3letfJ)>XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z<E+B1{HK=RE?xI-*XF%{E&rTvko)^~!>>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWx=YH diff --git a/tests_zemu/snapshots/st-mainmenu/00001.png b/tests_zemu/snapshots/st-mainmenu/00001.png index b5a83442715abff715888c672853cdb046212eff..db957736590993d6a694065f8a5c493bd186f34f 100644 GIT binary patch delta 11651 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�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 delta 11769 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 diff --git a/tests_zemu/snapshots/x-mainmenu/00004.png b/tests_zemu/snapshots/x-mainmenu/00004.png index d32e423268167a2c3af977464a6a7d3735cc8452..2ff8585b5d94e21c7054712e892f2d80165f6b94 100644 GIT binary patch delta 370 zcmeBX?q!~!QXk^!;uumf=k3kFz7_?ZhQzYX<`4h5zl#0VsFN72d8{yF?w|XU0~0(B zzPb{`fB*;7g#-mR9@ppls$hRnc!%#=(<-iTmDq+t{p}~ZJl1ZV`<{K3qvW)O<`U<7 zWcjP#ewY1vxKD11q1)5{t4#Ku&0)E^dhNmLwA%W>53(1wJ=vi>w?KSzDF65MZ(kg- zt+Ac7Y{4e3-l$a{EaIl=vCidxs`LNG<a09~zW1wQ{C0ksySwa(`G?~kUyVF+SboDb zr9J*N{dIFPCv^TZV_&HDYxYLAi6@*UR`9uRdia-X=J82upIA)KiGAVoIAs0uO3U&k z@mnJLCO?Vm|F53ChH0XT-t8mTo1#L~*I4TBzOjFY%CzZcCUw@E&pEG^`Pu*Egr>B2 zs|s%w%Ej8&iiei(e!X*6<$Lpw=Nlw{zYVB;7*$tWvTl_zB4`*MeE!2^bB2RWjq5)< ONZ8ZW&t;ucLK6UTxvp&h delta 368 zcmeBW?q;5#QXk~$;uumf=k3jCp+gEh4uK_iIDf|neS5^N+|1%6@3rFI=c}2FGe4}# z<X}L62jZO_9WP!__KiJpcsH}WaPpUThXlL%94w~?r?{#doAK^>_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 zUh9<nuRj#3letfJ)>XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z<E+B1{HK=RE?xI-*XF%{E&rTvko)^~!>>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWx=YH diff --git a/tests_zemu/snapshots/x-mainmenu/00010.png b/tests_zemu/snapshots/x-mainmenu/00010.png index d32e423268167a2c3af977464a6a7d3735cc8452..2ff8585b5d94e21c7054712e892f2d80165f6b94 100644 GIT binary patch delta 370 zcmeBX?q!~!QXk^!;uumf=k3kFz7_?ZhQzYX<`4h5zl#0VsFN72d8{yF?w|XU0~0(B zzPb{`fB*;7g#-mR9@ppls$hRnc!%#=(<-iTmDq+t{p}~ZJl1ZV`<{K3qvW)O<`U<7 zWcjP#ewY1vxKD11q1)5{t4#Ku&0)E^dhNmLwA%W>53(1wJ=vi>w?KSzDF65MZ(kg- zt+Ac7Y{4e3-l$a{EaIl=vCidxs`LNG<a09~zW1wQ{C0ksySwa(`G?~kUyVF+SboDb zr9J*N{dIFPCv^TZV_&HDYxYLAi6@*UR`9uRdia-X=J82upIA)KiGAVoIAs0uO3U&k z@mnJLCO?Vm|F53ChH0XT-t8mTo1#L~*I4TBzOjFY%CzZcCUw@E&pEG^`Pu*Egr>B2 zs|s%w%Ej8&iiei(e!X*6<$Lpw=Nlw{zYVB;7*$tWvTl_zB4`*MeE!2^bB2RWjq5)< ONZ8ZW&t;ucLK6UTxvp&h delta 368 zcmeBW?q;5#QXk~$;uumf=k3jCp+gEh4uK_iIDf|neS5^N+|1%6@3rFI=c}2FGe4}# z<X}L62jZO_9WP!__KiJpcsH}WaPpUThXlL%94w~?r?{#doAK^>_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 zUh9<nuRj#3letfJ)>XBA^?DkqrKje6-q3Z=xkr~fdGFaHalB{OJU=<<^Ur)o+xe#o z<E+B1{HK=RE?xI-*XF%{E&rTvko)^~!>>c8e}3Jl=0b!G!@q;Vj!RhCe)cb44ifcr L^>bP0l+XkKWx=YH