From 4f3160ce1371fb6842f025f71f87b20621adb75b Mon Sep 17 00:00:00 2001 From: coder Date: Wed, 30 Oct 2024 19:17:53 +0800 Subject: [PATCH 1/3] =?UTF-8?q?support=20hide=20status=20bar=20and=20notif?= =?UTF-8?q?ication=20bar=20with=20x86=20enabled=C3=A2=C2=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 12 + build-profile.json5 | 19 ++ ...B3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.cer | 50 ++++ ...B3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.csr | 9 + ...B3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.p12 | Bin 0 -> 1128 bytes ...B3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.p7b | Bin 0 -> 4147 bytes .../ac/b0eca54788fd4b21bd3ba3abfd2f501b | 1 + .../ce/e7733f68bcda4805a0453be79bc20906 | Bin 0 -> 48 bytes .../fd/0/de0fbf6a1bc04eada7b9cb60129d5461 | 1 + .../fd/1/3df64899195f4316b804534f5ab56874 | 1 + .../fd/2/4451656e28de49c1840565f4e33aae91 | 1 + entry/3rdParty/cmake-examples-master.zip | Bin 0 -> 341217 bytes entry/3rdParty/cmake-examples/.gitignore | 64 +++++ .../01-basic/A-hello-cmake/CMakeLists.txt | 10 + .../01-basic/A-hello-cmake/README.adoc | 265 ++++++++++++++++++ .../01-basic/A-hello-cmake/main.cpp | 7 + .../01-basic/B-hello-headers/CMakeLists.txt | 23 ++ .../01-basic/B-hello-headers/README.adoc | 188 +++++++++++++ .../01-basic/B-hello-headers/include/Hello.h | 10 + .../01-basic/B-hello-headers/src/Hello.cpp | 8 + .../01-basic/B-hello-headers/src/main.cpp | 8 + .../01-basic/C-static-library/CMakeLists.txt | 33 +++ .../01-basic/C-static-library/README.adoc | 164 +++++++++++ .../C-static-library/include/static/Hello.h | 10 + .../01-basic/C-static-library/src/Hello.cpp | 8 + .../01-basic/C-static-library/src/main.cpp | 8 + .../01-basic/D-shared-library/CMakeLists.txt | 33 +++ .../01-basic/D-shared-library/README.adoc | 125 +++++++++ .../D-shared-library/include/shared/Hello.h | 10 + .../01-basic/D-shared-library/src/Hello.cpp | 8 + .../01-basic/D-shared-library/src/main.cpp | 8 + .../01-basic/E-installing/CMakeLists.txt | 53 ++++ .../01-basic/E-installing/README.adoc | 235 ++++++++++++++++ .../01-basic/E-installing/cmake-examples.conf | 1 + .../E-installing/include/installing/Hello.h | 10 + .../01-basic/E-installing/src/Hello.cpp | 8 + .../01-basic/E-installing/src/main.cpp | 8 + .../01-basic/F-build-type/CMakeLists.txt | 19 ++ .../01-basic/F-build-type/README.adoc | 158 +++++++++++ .../F-build-type/cmake-gui-build-type.png | Bin 0 -> 90872 bytes .../01-basic/F-build-type/main.cpp | 7 + .../01-basic/G-compile-flags/CMakeLists.txt | 14 + .../01-basic/G-compile-flags/README.adoc | 138 +++++++++ .../01-basic/G-compile-flags/main.cpp | 17 ++ .../H-third-party-library/CMakeLists.txt | 24 ++ .../H-third-party-library/README.adoc | 213 ++++++++++++++ .../01-basic/H-third-party-library/main.cpp | 24 ++ .../I-compiling-with-clang/CMakeLists.txt | 10 + .../I-compiling-with-clang/README.adoc | 126 +++++++++ .../01-basic/I-compiling-with-clang/main.cpp | 7 + .../I-compiling-with-clang/pre_test.sh | 9 + .../I-compiling-with-clang/run_test.sh | 17 ++ .../J-building-with-ninja/CMakeLists.txt | 10 + .../J-building-with-ninja/README.adoc | 160 +++++++++++ .../01-basic/J-building-with-ninja/main.cpp | 7 + .../J-building-with-ninja/pre_test.sh | 9 + .../J-building-with-ninja/run_test.sh | 11 + .../K-imported-targets/CMakeLists.txt | 24 ++ .../01-basic/K-imported-targets/README.adoc | 94 +++++++ .../01-basic/K-imported-targets/main.cpp | 24 ++ .../01-basic/K-imported-targets/run_test.sh | 12 + .../01-basic/L-cpp-standard/README.adoc | 11 + .../i-common-method/CMakeLists.txt | 24 ++ .../i-common-method/README.adoc | 111 ++++++++ .../L-cpp-standard/i-common-method/main.cpp | 8 + .../ii-cxx-standard/CMakeLists.txt | 13 + .../ii-cxx-standard/README.adoc | 88 ++++++ .../L-cpp-standard/ii-cxx-standard/main.cpp | 8 + .../iii-compile-features/CMakeLists.txt | 16 ++ .../iii-compile-features/README.adoc | 97 +++++++ .../iii-compile-features/main.cpp | 8 + .../cmake-examples/01-basic/README.adoc | 19 ++ .../C-static-library/CMakeLists.txt | 33 +++ .../C-static-library/README.adoc | 164 +++++++++++ .../C-static-library/include/static/Hello.h | 10 + .../C-static-library/src/Hello.cpp | 8 + .../C-static-library/src/main.cpp | 8 + .../D-shared-library/CMakeLists.txt | 33 +++ .../D-shared-library/README.adoc | 125 +++++++++ .../D-shared-library/include/shared/Hello.h | 10 + .../D-shared-library/src/Hello.cpp | 8 + .../D-shared-library/src/main.cpp | 8 + entry/oh-package-lock.json5 | 35 +++ entry/oh-package.json5 | 22 +- .../libtetrahedron_napi.so/oh-package.json5 | 6 + .../tetrahedron_napi.d.ts | 17 ++ entry/oh_modules/harlibrary/.gitignore | 6 + entry/oh_modules/harlibrary/BuildProfile.ets | 17 ++ entry/oh_modules/harlibrary/Index.ets | 1 + .../oh_modules/harlibrary/build-profile.json5 | 43 +++ .../oh_modules/harlibrary/consumer-rules.txt | 0 entry/oh_modules/harlibrary/hvigorfile.ts | 6 + .../harlibrary/obfuscation-rules.txt | 23 ++ .../harlibrary/oh-package-lock.json5 | 18 ++ entry/oh_modules/harlibrary/oh-package.json5 | 11 + .../harlibrary/src/main/cpp/CMakeLists.txt | 15 + .../harlibrary/src/main/cpp/napi_init.cpp | 53 ++++ .../main/cpp/types/libharlibrary/Index.d.ts | 1 + .../cpp/types/libharlibrary/oh-package.json5 | 6 + .../src/main/ets/components/MainPage.ets | 22 ++ .../src/main/ets/utils/ComponentUtils.ets | 7 + .../src/main/ets/utils/PropertyUtils.ts | 25 ++ .../harlibrary/src/main/module.json5 | 12 + .../main/resources/base/element/string.json | 8 + .../main/resources/en_US/element/string.json | 8 + .../main/resources/zh_CN/element/string.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 35 +++ .../src/ohosTest/ets/test/List.test.ets | 5 + .../harlibrary/src/ohosTest/module.json5 | 14 + .../harlibrary/src/test/List.test.ets | 5 + .../harlibrary/src/test/LocalUnit.test.ets | 33 +++ .../main/ets/entryability/EntryAbility.ets | 48 ++++ entry/src/main/ets/pages/Index.ets | 101 ++----- entry/src/main/module.json5 | 3 +- harlibrary/.gitignore | 6 + harlibrary/BuildProfile.ets | 17 ++ harlibrary/Index.ets | 1 + harlibrary/build-profile.json5 | 43 +++ harlibrary/consumer-rules.txt | 0 harlibrary/hvigorfile.ts | 6 + harlibrary/obfuscation-rules.txt | 23 ++ harlibrary/oh-package-lock.json5 | 18 ++ harlibrary/oh-package.json5 | 11 + harlibrary/src/main/cpp/CMakeLists.txt | 15 + harlibrary/src/main/cpp/napi_init.cpp | 53 ++++ .../main/cpp/types/libharlibrary/Index.d.ts | 1 + .../cpp/types/libharlibrary/oh-package.json5 | 6 + .../src/main/ets/components/MainPage.ets | 22 ++ .../src/main/ets/utils/ComponentUtils.ets | 7 + .../src/main/ets/utils/PropertyUtils.ts | 25 ++ harlibrary/src/main/module.json5 | 12 + .../main/resources/base/element/string.json | 8 + .../main/resources/en_US/element/string.json | 8 + .../main/resources/zh_CN/element/string.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 35 +++ .../src/ohosTest/ets/test/List.test.ets | 5 + harlibrary/src/ohosTest/module.json5 | 14 + harlibrary/src/test/List.test.ets | 5 + harlibrary/src/test/LocalUnit.test.ets | 33 +++ oh-package-lock.json5 | 19 ++ 140 files changed, 4261 insertions(+), 97 deletions(-) create mode 100644 .gitignore create mode 100644 cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.cer create mode 100644 cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.csr create mode 100644 cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.p12 create mode 100644 cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.p7b create mode 100644 cert/material/ac/b0eca54788fd4b21bd3ba3abfd2f501b create mode 100644 cert/material/ce/e7733f68bcda4805a0453be79bc20906 create mode 100644 cert/material/fd/0/de0fbf6a1bc04eada7b9cb60129d5461 create mode 100644 cert/material/fd/1/3df64899195f4316b804534f5ab56874 create mode 100644 cert/material/fd/2/4451656e28de49c1840565f4e33aae91 create mode 100644 entry/3rdParty/cmake-examples-master.zip create mode 100644 entry/3rdParty/cmake-examples/.gitignore create mode 100644 entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/B-hello-headers/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/B-hello-headers/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/B-hello-headers/include/Hello.h create mode 100644 entry/3rdParty/cmake-examples/01-basic/B-hello-headers/src/Hello.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/B-hello-headers/src/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/C-static-library/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/C-static-library/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/C-static-library/include/static/Hello.h create mode 100644 entry/3rdParty/cmake-examples/01-basic/C-static-library/src/Hello.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/C-static-library/src/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/D-shared-library/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/D-shared-library/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/D-shared-library/include/shared/Hello.h create mode 100644 entry/3rdParty/cmake-examples/01-basic/D-shared-library/src/Hello.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/D-shared-library/src/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/E-installing/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/E-installing/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/E-installing/cmake-examples.conf create mode 100644 entry/3rdParty/cmake-examples/01-basic/E-installing/include/installing/Hello.h create mode 100644 entry/3rdParty/cmake-examples/01-basic/E-installing/src/Hello.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/E-installing/src/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/F-build-type/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/F-build-type/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/F-build-type/cmake-gui-build-type.png create mode 100644 entry/3rdParty/cmake-examples/01-basic/F-build-type/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/G-compile-flags/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/G-compile-flags/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/G-compile-flags/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/H-third-party-library/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/H-third-party-library/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/H-third-party-library/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/pre_test.sh create mode 100644 entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/run_test.sh create mode 100644 entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/pre_test.sh create mode 100644 entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/run_test.sh create mode 100644 entry/3rdParty/cmake-examples/01-basic/K-imported-targets/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/K-imported-targets/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/K-imported-targets/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/K-imported-targets/run_test.sh create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/README.adoc create mode 100644 entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/main.cpp create mode 100644 entry/3rdParty/cmake-examples/01-basic/README.adoc create mode 100644 entry/3rdParty/cmake-examples/C-static-library/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/C-static-library/README.adoc create mode 100644 entry/3rdParty/cmake-examples/C-static-library/include/static/Hello.h create mode 100644 entry/3rdParty/cmake-examples/C-static-library/src/Hello.cpp create mode 100644 entry/3rdParty/cmake-examples/C-static-library/src/main.cpp create mode 100644 entry/3rdParty/cmake-examples/D-shared-library/CMakeLists.txt create mode 100644 entry/3rdParty/cmake-examples/D-shared-library/README.adoc create mode 100644 entry/3rdParty/cmake-examples/D-shared-library/include/shared/Hello.h create mode 100644 entry/3rdParty/cmake-examples/D-shared-library/src/Hello.cpp create mode 100644 entry/3rdParty/cmake-examples/D-shared-library/src/main.cpp create mode 100644 entry/oh-package-lock.json5 create mode 100644 entry/oh_modules/@types/libtetrahedron_napi.so/oh-package.json5 create mode 100644 entry/oh_modules/@types/libtetrahedron_napi.so/tetrahedron_napi.d.ts create mode 100644 entry/oh_modules/harlibrary/.gitignore create mode 100644 entry/oh_modules/harlibrary/BuildProfile.ets create mode 100644 entry/oh_modules/harlibrary/Index.ets create mode 100644 entry/oh_modules/harlibrary/build-profile.json5 create mode 100644 entry/oh_modules/harlibrary/consumer-rules.txt create mode 100644 entry/oh_modules/harlibrary/hvigorfile.ts create mode 100644 entry/oh_modules/harlibrary/obfuscation-rules.txt create mode 100644 entry/oh_modules/harlibrary/oh-package-lock.json5 create mode 100644 entry/oh_modules/harlibrary/oh-package.json5 create mode 100644 entry/oh_modules/harlibrary/src/main/cpp/CMakeLists.txt create mode 100644 entry/oh_modules/harlibrary/src/main/cpp/napi_init.cpp create mode 100644 entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts create mode 100644 entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 create mode 100644 entry/oh_modules/harlibrary/src/main/ets/components/MainPage.ets create mode 100644 entry/oh_modules/harlibrary/src/main/ets/utils/ComponentUtils.ets create mode 100644 entry/oh_modules/harlibrary/src/main/ets/utils/PropertyUtils.ts create mode 100644 entry/oh_modules/harlibrary/src/main/module.json5 create mode 100644 entry/oh_modules/harlibrary/src/main/resources/base/element/string.json create mode 100644 entry/oh_modules/harlibrary/src/main/resources/en_US/element/string.json create mode 100644 entry/oh_modules/harlibrary/src/main/resources/zh_CN/element/string.json create mode 100644 entry/oh_modules/harlibrary/src/ohosTest/ets/test/Ability.test.ets create mode 100644 entry/oh_modules/harlibrary/src/ohosTest/ets/test/List.test.ets create mode 100644 entry/oh_modules/harlibrary/src/ohosTest/module.json5 create mode 100644 entry/oh_modules/harlibrary/src/test/List.test.ets create mode 100644 entry/oh_modules/harlibrary/src/test/LocalUnit.test.ets create mode 100644 harlibrary/.gitignore create mode 100644 harlibrary/BuildProfile.ets create mode 100644 harlibrary/Index.ets create mode 100644 harlibrary/build-profile.json5 create mode 100644 harlibrary/consumer-rules.txt create mode 100644 harlibrary/hvigorfile.ts create mode 100644 harlibrary/obfuscation-rules.txt create mode 100644 harlibrary/oh-package-lock.json5 create mode 100644 harlibrary/oh-package.json5 create mode 100644 harlibrary/src/main/cpp/CMakeLists.txt create mode 100644 harlibrary/src/main/cpp/napi_init.cpp create mode 100644 harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts create mode 100644 harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 create mode 100644 harlibrary/src/main/ets/components/MainPage.ets create mode 100644 harlibrary/src/main/ets/utils/ComponentUtils.ets create mode 100644 harlibrary/src/main/ets/utils/PropertyUtils.ts create mode 100644 harlibrary/src/main/module.json5 create mode 100644 harlibrary/src/main/resources/base/element/string.json create mode 100644 harlibrary/src/main/resources/en_US/element/string.json create mode 100644 harlibrary/src/main/resources/zh_CN/element/string.json create mode 100644 harlibrary/src/ohosTest/ets/test/Ability.test.ets create mode 100644 harlibrary/src/ohosTest/ets/test/List.test.ets create mode 100644 harlibrary/src/ohosTest/module.json5 create mode 100644 harlibrary/src/test/List.test.ets create mode 100644 harlibrary/src/test/LocalUnit.test.ets create mode 100644 oh-package-lock.json5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d2ff201 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/build-profile.json5 b/build-profile.json5 index d8c1dc5..51e62cc 100644 --- a/build-profile.json5 +++ b/build-profile.json5 @@ -15,6 +15,21 @@ { "name": "release" } + ], + "signingConfigs": [ + { + "name": "default", + "type": "HarmonyOS", + "material": { + "certpath": ".\\cert\\default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.cer", + "storePassword": "0000001A3FA694C3FCF944B762B2EDE61D1BD2A3ACFAE23A757BE9349E879275E206FFAE5312FF850B89", + "keyAlias": "debugKey", + "keyPassword": "0000001ADF54A0019B7770B046A447A2C1C4D3965FC648654571B14F0A75F31AE7C76C6762BD8D3C99E3", + "profile": ".\\cert\\default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.p7b", + "signAlg": "SHA256withECDSA", + "storeFile": ".\\cert\\default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.p12" + } + } ] }, "modules": [ @@ -29,6 +44,10 @@ ] } ] + }, + { + "name": "harlibrary", + "srcPath": "./harlibrary", } ] } \ No newline at end of file diff --git a/cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.cer b/cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.cer new file mode 100644 index 0000000..6f43026 --- /dev/null +++ b/cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.cer @@ -0,0 +1,50 @@ +-----BEGIN CERTIFICATE----- +MIICGjCCAaGgAwIBAgIIShhpn519jNAwCgYIKoZIzj0EAwMwUzELMAkGA1UEBhMC +Q04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UE +AwwVSHVhd2VpIENCRyBSb290IENBIEcyMB4XDTIwMDMxNjAzMDQzOVoXDTQ5MDMx +NjAzMDQzOVowUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UE +CwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEWidkGnDSOw3/HE2y2GHl+fpWBIa5S+IlnNrs +GUvwC1I2QWvtqCHWmwFlFK95zKXiM8s9yV3VVXh7ivN8ZJO3SC5N1TCrvB2lpHMB +wcz4DA0kgHCMm/wDec6kOHx1xvCRo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUo45a9Vq8cYwqaiVyfkiS4pLcIAAwCgYIKoZI +zj0EAwMDZwAwZAIwMypeB7P0IbY7c6gpWcClhRznOJFj8uavrNu2PIoz9KIqr3jn +BlBHJs0myI7ntYpEAjBbm8eDMZY5zq5iMZUC6H7UzYSix4Uy1YlsLVV738PtKP9h +FTjgDHctXJlC5L7+ZDY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDATCCAoigAwIBAgIIXmuDXbWpOB8wCgYIKoZIzj0EAwMwUzELMAkGA1UEBhMC +Q04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UE +AwwVSHVhd2VpIENCRyBSb290IENBIEcyMB4XDTIwMDcwOTAyMDQyNFoXDTMwMDcw +NzAyMDQyNFowYjELMAkGA1UEBgwCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UE +CwwKSHVhd2VpIENCRzEtMCsGA1UEAwwkSHVhd2VpIENCRyBEZXZlbG9wZXIgUmVs +YXRpb25zIENBIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE65LdoIZh1hlpZ2gP +bJ6gPhHsvYSRe22KETgdqeVeYnrbRHI9wsPT6RGYS+pU4mPl6wxzgDMqN6SY/BoZ +luhkE1PzaHoPoNIWIq0O33hpyKyyYwAacIUEjYurkw1E9r9no4IBGDCCARQwHwYD +VR0jBBgwFoAUo45a9Vq8cYwqaiVyfkiS4pLcIAAwHQYDVR0OBBYEFNtek7Ij6NDk +/nF6Zumkc0dbf/NeMEYGA1UdIAQ/MD0wOwYEVR0gADAzMDEGCCsGAQUFBwIBFiVo +dHRwOi8vY3BraS1jYXdlYi5odWF3ZWkuY29tL2Nwa2kvY3BzMBIGA1UdEwEB/wQI +MAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMGYGA1UdHwRfMF0wW6BZoFeGVWh0dHA6 +Ly9jcGtpLWNhd2ViLmh1YXdlaS5jb20vY3BraS9zZXJ2bGV0L2NybEZpbGVEb3du +LmNybD9jZXJ0eXBlPTEwJi9yb290X2cyX2NybC5jcmwwCgYIKoZIzj0EAwMDZwAw +ZAIwWO1X5q2MdfpR1Q237GpUHGbL1C13rGyFg2p3AYo44FpZ2/A9ss0wOHKM4KDl +ZPqdAjBLkf8NPZy7KVog98+iCTLq35DJ2ZVxkCxknA9YhiHVyXf4HPm4JlT7rW7o +Q+FzM3c= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICxDCCAkugAwIBAgIOY8vE6OkO9/XGeeDIpjEwCgYIKoZIzj0EAwMwYjELMAkG +A1UEBgwCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEt +MCsGA1UEAwwkSHVhd2VpIENCRyBEZXZlbG9wZXIgUmVsYXRpb25zIENBIEcyMB4X +DTI0MTAyODA4Mzg1MloXDTI1MTAyODA4Mzg1MlowdTELMAkGA1UEBhMCQ04xEjAQ +BgNVBAoMCeeOi+a1t+azojEcMBoGA1UECwwTMTUzNzc1OTcyOTM2MTYyNTcyOTE0 +MDIGA1UEAwwr546L5rW35rOiKDE1Mzc3NTk3MjkzNjE2MjU3MjkpXCxEZXZlbG9w +bWVudDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMA7SKr6joFZwWjtatg8i9zy +8f954PbiqoF/iDImn+h20HubLTGIstnOpmUxgbF3xJr10QL/DLw1MbAEiICzIQOj +gdEwgc4wHQYDVR0OBBYEFB10xuE25rjnAQbTT1KJW3JrVA1TMAwGA1UdEwEB/wQC +MAAwHwYDVR0jBBgwFoAU216TsiPo0OT+cXpm6aRzR1t/814wWQYDVR0fBFIwUDBO +oEygSoZIaHR0cDovL2g1aG9zdGluZy1kcmNuLmRiYW5rY2RuLmNuL2NjaDUvY3Js +L2hkcmNhZzIvSHVhd2VpQ0JHSERSRzJjcmwuY3JsMA4GA1UdDwEB/wQEAwIHgDAT +BgNVHSUEDDAKBggrBgEFBQcDAzAKBggqhkjOPQQDAwNnADBkAjBo6n7vy18DpvJK +Qg4SRB9HfNZdwhNRUNDhSkwTqTGqzPuk0QkNqon90m1FpubkrxMCMH1Olb+oWtyn +X89rF7R812sSymxIoSISYPprp6wnLm6x3zmSPWHLCSgKF5AxG1XXAg== +-----END CERTIFICATE----- diff --git a/cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.csr b/cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.csr new file mode 100644 index 0000000..d641f8a --- /dev/null +++ b/cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.csr @@ -0,0 +1,9 @@ +-----BEGIN NEW CERTIFICATE REQUEST----- +MIIBNjCB3AIBADBKMQkwBwYDVQQGEwAxCTAHBgNVBAgTADEJMAcGA1UEBxMAMQkw +BwYDVQQKEwAxCTAHBgNVBAsTADERMA8GA1UEAxMIRGVidWdLZXkwWTATBgcqhkjO +PQIBBggqhkjOPQMBBwNCAATAO0iq+o6BWcFo7WrYPIvc8vH/eeD24qqBf4gyJp/o +dtB7my0xiLLZzqZlMYGxd8Sa9dEC/wy8NTGwBIiAsyEDoDAwLgYJKoZIhvcNAQkO +MSEwHzAdBgNVHQ4EFgQUHXTG4TbmuOcBBtNPUolbcmtUDVMwCgYIKoZIzj0EAwID +SQAwRgIhAIYgn5WA6B8Mm9UcfsWxgjlm5lMs4aWaJRJ9Jj6fuiKUAiEA8KUX544s +/GCRES0B4O/epGdTWGUSF38c//vx0/+f6SA= +-----END NEW CERTIFICATE REQUEST----- diff --git a/cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.p12 b/cert/default_ndk-calvin_7uTTjJB3dQRBtifxluAoShBg45VsdrhvVFGduGPiikE=.p12 new file mode 100644 index 0000000000000000000000000000000000000000..9df101e4f6d85e874c6609bb4d0429e3a3f5bb2e GIT binary patch literal 1128 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 co$EnO?U6xB$?~C_# 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%0D1XGWXH7zwSl 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 PD3!W7OPwV$N2mV*kwf`d literal 0 HcmV?d00001 diff --git a/entry/3rdParty/cmake-examples/.gitignore b/entry/3rdParty/cmake-examples/.gitignore new file mode 100644 index 0000000..53bde5a --- /dev/null +++ b/entry/3rdParty/cmake-examples/.gitignore @@ -0,0 +1,64 @@ +CMakeCache.txt +CMakeFiles +Makefile +cmake_install.cmake +install_manifest.txt + +# +# Sublime Test +# +# cache files for sublime text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# workspace files are user-specific +*.sublime-workspace + +# project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using SublimeText +# *.sublime-project + +# +# C / C++ +# + +# Compiled Object files +*.slo +*.lo +*.o +*.obj +*.ko +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll +*.so.* +*.dylib + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib +*.lo + +# Executables +*.exe +*.out +*.app + +/**/build +/**/build.* + +.tags +.vscode diff --git a/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/CMakeLists.txt new file mode 100644 index 0000000..0a43a8e --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/CMakeLists.txt @@ -0,0 +1,10 @@ +# Set the minimum version of CMake that can be used +# To find the cmake version run +# $ cmake --version +cmake_minimum_required(VERSION 3.5) + +# Set the project name +project (hello_cmake) + +# Add an executable +add_executable(hello_cmake main.cpp) diff --git a/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/README.adoc b/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/README.adoc new file mode 100644 index 0000000..453b410 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/README.adoc @@ -0,0 +1,265 @@ += Hello CMake +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +Shows a very basic hello world example. + +The files in this tutorial are below: + +``` +A-hello-cmake$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[CMakeLists.txt] - Contains the CMake commands you wish to run + * link:main.cpp[main.cpp] - A simple "Hello World" cpp file. + +# Concepts + +### CMakeLists.txt + +CMakeLists.txt is the file which should store all your CMake commands. When +cmake is run in a folder it will look for this file and if it does not exist cmake +will exit with an error. + +### Minimum CMake version + +When creating a project using CMake, you can specify the minimum version +of CMake that is supported. + +[source,cmake] +---- +cmake_minimum_required(VERSION 3.5) +---- + + +### Projects + +A CMake build can include a project name to make referencing certain +variables easier when using multiple projects. + +[source,cmake] +---- +project (hello_cmake) +---- + + +### Creating an Executable + +The +add_executable()+ command specifies that an executable should be +build from the specified source files, in this example main.cpp. The +first argument to the +add_executable()+ function is the name of the +executable to be built, and the second argument is the list of source files to compile. + +[source,cmake] +---- +add_executable(hello_cmake main.cpp) +---- + + +[NOTE] +==== +A shorthand that some people use is to have the project name and +executable name the same. This allows you to specify the CMakeLists.txt +as follows, + +[source,cmake] +---- +cmake_minimum_required(VERSION 2.6) +project (hello_cmake) +add_executable(${PROJECT_NAME} main.cpp) +---- + +In this example, the +project()+ function, will create a variable ++${PROJECT_NAME}+ with the value hello_cmake. This can then be passed to +the +add_executable()+ function to output a 'hello_cmake' executable. +==== + + +### Binary Directory + +The root or top level folder that you run the cmake command from is known as your +CMAKE_BINARY_DIR and is the root folder for all your binary files. +CMake supports building and generating your binary files both in-place and also +out-of-source. + + +#### In-Place Build + +In-place builds generate all temporary build files in the same directory structure +as the source code. This means that all Makefiles and object files are interspersed +with your normal code. To create an in-place build target run the cmake command +in your root directory. For example: + +[source,bash] +---- +A-hello-cmake$ cmake . +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/A-hello-cmake + +A-hello-cmake$ tree +. +├── CMakeCache.txt +├── CMakeFiles +│   ├── 2.8.12.2 +│   │   ├── CMakeCCompiler.cmake +│   │   ├── CMakeCXXCompiler.cmake +│   │   ├── CMakeDetermineCompilerABI_C.bin +│   │   ├── CMakeDetermineCompilerABI_CXX.bin +│   │   ├── CMakeSystem.cmake +│   │   ├── CompilerIdC +│   │   │   ├── a.out +│   │   │   └── CMakeCCompilerId.c +│   │   └── CompilerIdCXX +│   │   ├── a.out +│   │   └── CMakeCXXCompilerId.cpp +│   ├── cmake.check_cache +│   ├── CMakeDirectoryInformation.cmake +│   ├── CMakeOutput.log +│   ├── CMakeTmp +│   ├── hello_cmake.dir +│   │   ├── build.make +│   │   ├── cmake_clean.cmake +│   │   ├── DependInfo.cmake +│   │   ├── depend.make +│   │   ├── flags.make +│   │   ├── link.txt +│   │   └── progress.make +│   ├── Makefile2 +│   ├── Makefile.cmake +│   ├── progress.marks +│   └── TargetDirectories.txt +├── cmake_install.cmake +├── CMakeLists.txt +├── main.cpp +├── Makefile +---- + + +#### Out-of-Source Build + +Out-of-source builds allow you to create a single build folder that can be anywhere on +your file system. All temporary build and object files are located in this directory keeping +your source tree clean. To create an out-of-source build run the cmake command in +the build folder and point it to the directory with your root CMakeLists.txt file. +Using out-of-source builds if you want to recreate your cmake environment +from scratch, you only need to delete your build directory and then rerun cmake. + +For example: + +[source,bash] +---- +A-hello-cmake$ mkdir build + +A-hello-cmake$ cd build/ + +matrim@freyr:~/workspace/cmake-examples/01-basic/A-hello-cmake/build$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/A-hello-cmake/build + +A-hello-cmake/build$ cd .. + +A-hello-cmake$ tree +. +├── build +│   ├── CMakeCache.txt +│   ├── CMakeFiles +│   │   ├── 2.8.12.2 +│   │   │   ├── CMakeCCompiler.cmake +│   │   │   ├── CMakeCXXCompiler.cmake +│   │   │   ├── CMakeDetermineCompilerABI_C.bin +│   │   │   ├── CMakeDetermineCompilerABI_CXX.bin +│   │   │   ├── CMakeSystem.cmake +│   │   │   ├── CompilerIdC +│   │   │   │   ├── a.out +│   │   │   │   └── CMakeCCompilerId.c +│   │   │   └── CompilerIdCXX +│   │   │   ├── a.out +│   │   │   └── CMakeCXXCompilerId.cpp +│   │   ├── cmake.check_cache +│   │   ├── CMakeDirectoryInformation.cmake +│   │   ├── CMakeOutput.log +│   │   ├── CMakeTmp +│   │   ├── hello_cmake.dir +│   │   │   ├── build.make +│   │   │   ├── cmake_clean.cmake +│   │   │   ├── DependInfo.cmake +│   │   │   ├── depend.make +│   │   │   ├── flags.make +│   │   │   ├── link.txt +│   │   │   └── progress.make +│   │   ├── Makefile2 +│   │   ├── Makefile.cmake +│   │   ├── progress.marks +│   │   └── TargetDirectories.txt +│   ├── cmake_install.cmake +│   └── Makefile +├── CMakeLists.txt +├── main.cpp +---- + +All examples in this tutorial will use out-of-source builds. + + +# Building the Examples + +Below is sample output from building this example. + +[source,bash] +---- +$ mkdir build + +$ cd build + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /workspace/cmake-examples/01-basic/hello_cmake/build + +$ make +Scanning dependencies of target hello_cmake +[100%] Building CXX object CMakeFiles/hello_cmake.dir/hello_cmake.cpp.o +Linking CXX executable hello_cmake +[100%] Built target hello_cmake + +$ ./hello_cmake +Hello CMake! +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/main.cpp b/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/main.cpp new file mode 100644 index 0000000..750dcac --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/A-hello-cmake/main.cpp @@ -0,0 +1,7 @@ +#include + +int main(int argc, char *argv[]) +{ + std::cout << "Hello CMake!" << std::endl; + return 0; +} \ No newline at end of file diff --git a/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/CMakeLists.txt new file mode 100644 index 0000000..2c63e2c --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/CMakeLists.txt @@ -0,0 +1,23 @@ +# Set the minimum version of CMake that can be used +# To find the cmake version run +# $ cmake --version +cmake_minimum_required(VERSION 3.5) + +# Set the project name +project (hello_headers) + +# Create a sources variable with a link to all cpp files to compile +set(SOURCES + src/Hello.cpp + src/main.cpp +) + +# Add an executable with the above sources +add_executable(hello_headers ${SOURCES}) + +# Set the directories that should be included in the build command for this target +# when running g++ these will be included as -I/directory/path/ +target_include_directories(hello_headers + PRIVATE + ${PROJECT_SOURCE_DIR}/include +) diff --git a/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/README.adoc b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/README.adoc new file mode 100644 index 0000000..16db117 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/README.adoc @@ -0,0 +1,188 @@ += Hello Headers +:toc: +:toc-placement!: + +toc::[] + + +# Introduction + +Shows a hello world example which uses a different folder for source and include +files. + +The files in this tutorial include: + +``` +B-hello-headers$ tree +. +├── CMakeLists.txt +├── include +│   └── Hello.h +└── src + ├── Hello.cpp + └── main.cpp +``` + + * link:CMakeLists.txt[CMakeLists.txt] - Contains the CMake commands you wish to run. + * link:include/Hello.h[include/Hello.h] - The header file to include. + * link:src/Hello.cpp[src/Hello.cpp] - A source file to compile. + * link:src/main.cpp[src/main.cpp] - The source file with main. + + +# Concepts + +## Directory Paths + +CMake syntax specifies a number of https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/Useful-Variables[variables] +which can be used to help find useful directories in your project or source tree. +Some of these include: + +[cols=",",options="header",] +|======================================================================= +|Variable |Info +|CMAKE_SOURCE_DIR |The root source directory + +|CMAKE_CURRENT_SOURCE_DIR |The current source directory if using +sub-projects and directories. + +|PROJECT_SOURCE_DIR |The source directory of the current cmake project. + +|CMAKE_BINARY_DIR |The root binary / build directory. This is the +directory where you ran the cmake command. + +|CMAKE_CURRENT_BINARY_DIR |The build directory you are currently in. + +|PROJECT_BINARY_DIR |The build directory for the current project. +|======================================================================= + +## Source Files Variable + +Creating a variable which includes the source files allows you to be +clearer about these files and easily add them to multiple commands, for example, +the +add_executable()+ function. + +[source,cmake] +---- +# Create a sources variable with a link to all cpp files to compile +set(SOURCES + src/Hello.cpp + src/main.cpp +) + +add_executable(${PROJECT_NAME} ${SOURCES}) +---- + +[NOTE] +==== +An alternative to setting specific file names in the +SOURCES+ variable is +to use a GLOB command to find files using wildcard pattern matching. + +[source,cmake] +---- +file(GLOB SOURCES "src/*.cpp") +---- +==== + + +[TIP] +==== +For modern CMake it is NOT recommended to use a variable for sources. Instead it is +typical to directly declare the sources in the add_xxx function. + +This is particularly important for glob commands which may not always show you the +correct results if you add a new source file. +==== + +## Including Directories + +When you have different include folders, you can make your compiler aware of them using the ++target_include_directories()+ link:https://cmake.org/cmake/help/v3.0/command/target_include_directories.html[function]. When compiling this target this will add these directories to the compiler with the -I flag e.g. `-I/directory/path` + +[source,cmake] +---- +target_include_directories(target + PRIVATE + ${PROJECT_SOURCE_DIR}/include +) +---- + +The +PRIVATE+ identifier specifies the scope of the include. This is important for libraries and is explained in the next example. More details on the function is available link:https://cmake.org/cmake/help/v3.0/command/target_include_directories.html[here] + +# Building the Example + +## Standard Output + +The standard output from building this example is presented below. + +[source,bash] +---- +$ mkdir build + +$ cd build + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build + +$ make +Scanning dependencies of target hello_headers +[ 50%] Building CXX object CMakeFiles/hello_headers.dir/src/Hello.cpp.o +[100%] Building CXX object CMakeFiles/hello_headers.dir/src/main.cpp.o +Linking CXX executable hello_headers +[100%] Built target hello_headers + +$ ./hello_headers +Hello Headers! +---- + + +## Verbose Output + +In the previous examples, when running the make command the output only +shows the status of the build. To see the full output for debugging +purposes you can add +VERBOSE=1+ flag when running make. + +The VERBOSE output is show below, and a examination of the output shows +the include directories being added to the c++ compiler command. + +[source,bash] +---- +$ make clean + +$ make VERBOSE=1 +/usr/bin/cmake -H/home/matrim/workspace/cmake-examples/01-basic/hello_headers -B/home/matrim/workspace/cmake-examples/01-basic/hello_headers/build --check-build-system CMakeFiles/Makefile.cmake 0 +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build/CMakeFiles /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build/CMakeFiles/progress.marks +make -f CMakeFiles/Makefile2 all +make[1]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/hello_headers/build' +make -f CMakeFiles/hello_headers.dir/build.make CMakeFiles/hello_headers.dir/depend +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/hello_headers/build' +cd /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/matrim/workspace/cmake-examples/01-basic/hello_headers /home/matrim/workspace/cmake-examples/01-basic/hello_headers /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build/CMakeFiles/hello_headers.dir/DependInfo.cmake --color= +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/hello_headers/build' +make -f CMakeFiles/hello_headers.dir/build.make CMakeFiles/hello_headers.dir/build +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/hello_headers/build' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build/CMakeFiles 1 +[ 50%] Building CXX object CMakeFiles/hello_headers.dir/src/Hello.cpp.o +/usr/bin/c++ -I/home/matrim/workspace/cmake-examples/01-basic/hello_headers/include -o CMakeFiles/hello_headers.dir/src/Hello.cpp.o -c /home/matrim/workspace/cmake-examples/01-basic/hello_headers/src/Hello.cpp +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build/CMakeFiles 2 +[100%] Building CXX object CMakeFiles/hello_headers.dir/src/main.cpp.o +/usr/bin/c++ -I/home/matrim/workspace/cmake-examples/01-basic/hello_headers/include -o CMakeFiles/hello_headers.dir/src/main.cpp.o -c /home/matrim/workspace/cmake-examples/01-basic/hello_headers/src/main.cpp +Linking CXX executable hello_headers +/usr/bin/cmake -E cmake_link_script CMakeFiles/hello_headers.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/hello_headers.dir/src/Hello.cpp.o CMakeFiles/hello_headers.dir/src/main.cpp.o -o hello_headers -rdynamic +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/hello_headers/build' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build/CMakeFiles 1 2 +[100%] Built target hello_headers +make[1]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/hello_headers/build' +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/hello_headers/build/CMakeFiles 0 +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/include/Hello.h b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/include/Hello.h new file mode 100644 index 0000000..f838400 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/include/Hello.h @@ -0,0 +1,10 @@ +#ifndef __HELLO_H__ +#define __HELLO_H__ + +class Hello +{ +public: + void print(); +}; + +#endif diff --git a/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/src/Hello.cpp b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/src/Hello.cpp new file mode 100644 index 0000000..54d7e15 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/src/Hello.cpp @@ -0,0 +1,8 @@ +#include + +#include "Hello.h" + +void Hello::print() +{ + std::cout << "Hello Headers!" << std::endl; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/src/main.cpp b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/src/main.cpp new file mode 100644 index 0000000..62a1520 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/B-hello-headers/src/main.cpp @@ -0,0 +1,8 @@ +#include "Hello.h" + +int main(int argc, char *argv[]) +{ + Hello hi; + hi.print(); + return 0; +} \ No newline at end of file diff --git a/entry/3rdParty/cmake-examples/01-basic/C-static-library/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/C-static-library/CMakeLists.txt new file mode 100644 index 0000000..3dc8210 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/C-static-library/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.5) + +project(hello_library) + +############################################################ +# Create a library +############################################################ + +#Generate the static library from the library sources +add_library(hello_library STATIC + src/Hello.cpp +) + +target_include_directories(hello_library + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) + + +############################################################ +# Create an executable +############################################################ + +# Add an executable with the above sources +add_executable(hello_binary + src/main.cpp +) + +# link the new hello_library target with the hello_binary target +target_link_libraries( hello_binary + PRIVATE + hello_library +) diff --git a/entry/3rdParty/cmake-examples/01-basic/C-static-library/README.adoc b/entry/3rdParty/cmake-examples/01-basic/C-static-library/README.adoc new file mode 100644 index 0000000..5f30a87 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/C-static-library/README.adoc @@ -0,0 +1,164 @@ += Static Library +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +Shows a hello world example which first creates and links a static library. This is a +simplified example showing the library and binary in the same folder. Typically +these would be in sub-projects as described in section link:../../02-sub-projects[02-sub-projects] + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── include +│   └── static +│   └── Hello.h +└── src + ├── Hello.cpp + └── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:include/static/Hello.h[] - The header file to include + * link:src/Hello.cpp[] - A source file to compile + * link:src/main.cpp[] - The source file with main + + +# Concepts + +## Adding a Static Library + +The +add_library()+ function is used to create a library from some source files. +This is called as follows: + +[source,cmake] +---- +add_library(hello_library STATIC + src/Hello.cpp +) +---- + +This will be used to create a static library with the name libhello_library.a with +the sources in the +add_library+ call. + +[NOTE] +==== +As mentioned in the previous example, we pass the source files directly to the ++add_library+ call, as recommended for modern CMake. +==== + +## Populating Including Directories + +In this example, we include directories in the library using the +target_include_directories()+ function with the scope set to +PUBLIC+. + +[source,cmake] +---- +target_include_directories(hello_library + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) +---- + +This will cause the included directory used in the following places: + +* When compiling the library +* When compiling any additional target that links the library. + +The meaning of scopes are: + +* +PRIVATE+ - the directory is added to this target's include directories +* +INTERFACE+ - the directory is added to the include directories for any targets that link this library. +* +PUBLIC+ - As above, it is included in this library and also any targets that link this library. + + +[TIP] +==== +For public headers it is often a good idea to have your include folder be "namespaced" +with sub-directories. + +The directory passed to +target_include_directories+ will be the root of your +include directory tree and your C++ files should include the path from there to your header. + +For this example you can see that we do it as follows: +[source,cpp] +---- +#include "static/Hello.h" +---- + +Using this method means that there is less chance of header filename clashes when +you use multiple libraries in your project. +==== + +## Linking a Library + +When creating an executable that will use your library you must tell the compiler +about the library. This can be done using the +target_link_libraries()+ function. + +[source,cmake] +---- +add_executable(hello_binary + src/main.cpp +) + +target_link_libraries( hello_binary + PRIVATE + hello_library +) +---- + +This tells CMake to link the hello_library against the hello_binary executable +during link time. It will also propagate any include directories with +PUBLIC+ or +INTERFACE+ scope + from the linked library target. + +An example of this being called by the compiler is + +``` +/usr/bin/c++ CMakeFiles/hello_binary.dir/src/main.cpp.o -o hello_binary -rdynamic libhello_library.a +``` + + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/C-static-library/build + +$ make +Scanning dependencies of target hello_library +[ 50%] Building CXX object CMakeFiles/hello_library.dir/src/Hello.cpp.o +Linking CXX static library libhello_library.a +[ 50%] Built target hello_library +Scanning dependencies of target hello_binary +[100%] Building CXX object CMakeFiles/hello_binary.dir/src/main.cpp.o +Linking CXX executable hello_binary +[100%] Built target hello_binary + +$ ls +CMakeCache.txt CMakeFiles cmake_install.cmake hello_binary libhello_library.a Makefile + +$ ./hello_binary +Hello Static Library! +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/C-static-library/include/static/Hello.h b/entry/3rdParty/cmake-examples/01-basic/C-static-library/include/static/Hello.h new file mode 100644 index 0000000..f838400 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/C-static-library/include/static/Hello.h @@ -0,0 +1,10 @@ +#ifndef __HELLO_H__ +#define __HELLO_H__ + +class Hello +{ +public: + void print(); +}; + +#endif diff --git a/entry/3rdParty/cmake-examples/01-basic/C-static-library/src/Hello.cpp b/entry/3rdParty/cmake-examples/01-basic/C-static-library/src/Hello.cpp new file mode 100644 index 0000000..3b15c03 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/C-static-library/src/Hello.cpp @@ -0,0 +1,8 @@ +#include + +#include "static/Hello.h" + +void Hello::print() +{ + std::cout << "Hello Static Library!" << std::endl; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/C-static-library/src/main.cpp b/entry/3rdParty/cmake-examples/01-basic/C-static-library/src/main.cpp new file mode 100644 index 0000000..bec6b3e --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/C-static-library/src/main.cpp @@ -0,0 +1,8 @@ +#include "static/Hello.h" + +int main(int argc, char *argv[]) +{ + Hello hi; + hi.print(); + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/D-shared-library/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/CMakeLists.txt new file mode 100644 index 0000000..49bf0d3 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.5) + +project(hello_library) + +############################################################ +# Create a library +############################################################ + +#Generate the shared library from the library sources +add_library(hello_library SHARED + src/Hello.cpp +) +add_library(hello::library ALIAS hello_library) + +target_include_directories(hello_library + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) + +############################################################ +# Create an executable +############################################################ + +# Add an executable with the above sources +add_executable(hello_binary + src/main.cpp +) + +# link the new hello_library target with the hello_binary target +target_link_libraries( hello_binary + PRIVATE + hello::library +) diff --git a/entry/3rdParty/cmake-examples/01-basic/D-shared-library/README.adoc b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/README.adoc new file mode 100644 index 0000000..adda586 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/README.adoc @@ -0,0 +1,125 @@ += Shared Library +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +Shows a hello world example which first creates and links a shared library. + +This also shows how to create an link:https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#alias-targets[alias target] + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── include +│   └── shared +│   └── Hello.h +└── src + ├── Hello.cpp + └── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:include/shared/Hello.h[] - The header file to include + * link:src/Hello.cpp[] - A source file to compile + * link:src/main.cpp[] - The source file with main + + +# Concepts + +## Adding a Shared Library + +As with the previous example on static libraries, the +add_library()+ function +is also used to create a shared library from some source files. +This is called as follows: + +[source,cmake] +---- +add_library(hello_library SHARED + src/Hello.cpp +) +---- + +This will be used to create a shared library with the name libhello_library.so with +the sources passed to the +add_library()+ function. + +## Alias Target + +As the name suggests an link:https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#alias-targets[alias target] is an alternative name for a target that can be used instead of the real target name in read-only contexts. + +[source,cmake] +---- +add_library(hello::library ALIAS hello_library) +---- + +As shown below, this allows you to reference the target using the alias name when linking it against other targets. + +## Linking a Shared Library + +Linking a shared library is the same as linking a static library. When creating your +executable use the the +target_link_library()+ function to point to your library + +[source,cmake] +---- +add_executable(hello_binary + src/main.cpp +) + +target_link_libraries(hello_binary + PRIVATE + hello::library +) +---- + +This tells CMake to link the hello_library against the hello_binary executable using the alias target name. + +An example of this being called by the linker is + +``` +/usr/bin/c++ CMakeFiles/hello_binary.dir/src/main.cpp.o -o hello_binary -rdynamic libhello_library.so -Wl,-rpath,/home/matrim/workspace/cmake-examples/01-basic/D-shared-library/build +``` + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/D-shared-library/build + +$ make +Scanning dependencies of target hello_library +[ 50%] Building CXX object CMakeFiles/hello_library.dir/src/Hello.cpp.o +Linking CXX shared library libhello_library.so +[ 50%] Built target hello_library +Scanning dependencies of target hello_binary +[100%] Building CXX object CMakeFiles/hello_binary.dir/src/main.cpp.o +Linking CXX executable hello_binary +[100%] Built target hello_binary + +$ ls +CMakeCache.txt CMakeFiles cmake_install.cmake hello_binary libhello_library.so Makefile + +$ ./hello_binary +Hello Shared Library! +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/D-shared-library/include/shared/Hello.h b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/include/shared/Hello.h new file mode 100644 index 0000000..f838400 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/include/shared/Hello.h @@ -0,0 +1,10 @@ +#ifndef __HELLO_H__ +#define __HELLO_H__ + +class Hello +{ +public: + void print(); +}; + +#endif diff --git a/entry/3rdParty/cmake-examples/01-basic/D-shared-library/src/Hello.cpp b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/src/Hello.cpp new file mode 100644 index 0000000..865e58f --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/src/Hello.cpp @@ -0,0 +1,8 @@ +#include + +#include "shared/Hello.h" + +void Hello::print() +{ + std::cout << "Hello Shared Library!" << std::endl; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/D-shared-library/src/main.cpp b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/src/main.cpp new file mode 100644 index 0000000..a57a9e9 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/D-shared-library/src/main.cpp @@ -0,0 +1,8 @@ +#include "shared/Hello.h" + +int main(int argc, char *argv[]) +{ + Hello hi; + hi.print(); + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/E-installing/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/E-installing/CMakeLists.txt new file mode 100644 index 0000000..5d03c5c --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/E-installing/CMakeLists.txt @@ -0,0 +1,53 @@ +cmake_minimum_required(VERSION 3.5) + +project(cmake_examples_install) + +############################################################ +# Create a library +############################################################ + +#Generate the shared library from the library sources +add_library(cmake_examples_inst SHARED + src/Hello.cpp +) + +target_include_directories(cmake_examples_inst + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) + +############################################################ +# Create an executable +############################################################ + +# Add an executable with the above sources +add_executable(cmake_examples_inst_bin + src/main.cpp +) + +# link the new hello_library target with the hello_binary target +target_link_libraries( cmake_examples_inst_bin + PRIVATE + cmake_examples_inst +) + +############################################################ +# Install +############################################################ + +# Binaries +install (TARGETS cmake_examples_inst_bin + DESTINATION bin) + +# Library +# Note: may not work on windows +install (TARGETS cmake_examples_inst + LIBRARY DESTINATION lib) + +# Header files +install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ + DESTINATION include) + +# Config +install (FILES cmake-examples.conf + DESTINATION etc) diff --git a/entry/3rdParty/cmake-examples/01-basic/E-installing/README.adoc b/entry/3rdParty/cmake-examples/01-basic/E-installing/README.adoc new file mode 100644 index 0000000..eb6e6e8 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/E-installing/README.adoc @@ -0,0 +1,235 @@ += Installing +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +This example shows how to generate a `make install` target to install files and +binaries on your system. This is based on the previous shared library example. + +The files in this tutorial are below: + +``` +$ tree +. +├── cmake-examples.conf +├── CMakeLists.txt +├── include +│   └── installing +│   └── Hello.h +├── README.adoc +└── src + ├── Hello.cpp + └── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:cmake-examples.conf[] - An example configuration file + * link:include/installing/Hello.h[] - The header file to include + * link:src/Hello.cpp[] - A source file to compile + * link:src/main.cpp[] - The source file with main + +# Concepts + +## Installing + +CMake offers the ability to add a `make install` target to allow a user to +install binaries, libraries and other files. The base install location is controlled +by the variable +CMAKE_INSTALL_PREFIX+ which can be set using ccmake or by calling +cmake with `cmake .. -DCMAKE_INSTALL_PREFIX=/install/location` + +The files that are installed are controlled by the https://cmake.org/cmake/help/v3.0/command/install.html[+install()+] function. + +[source,cmake] +---- +install (TARGETS cmake_examples_inst_bin + DESTINATION bin) +---- + +Install the binary generated from the target cmake_examples_inst_bin target to +the destination +${CMAKE_INSTALL_PREFIX}/bin+ + +[source,cmake] +---- +install (TARGETS cmake_examples_inst + LIBRARY DESTINATION lib) +---- + +Install the shared library generated from the target cmake_examples_inst target to +the destination +${CMAKE_INSTALL_PREFIX}/lib+ + +[NOTE] +==== +This may not work on windows. On platforms that have DLL targets you +may need to add the following + +[source,cmake] +---- +install (TARGETS cmake_examples_inst + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) +---- +==== + + +[source,cmake] +---- +install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ + DESTINATION include) +---- + +Install the header files for developing against the +cmake_examples_inst+ library +into the +${CMAKE_INSTALL_PREFIX}/include+ directory. + +[source,cmake] +---- +install (FILES cmake-examples.conf + DESTINATION etc) +---- + +Install a configuration file to the destination +${CMAKE_INSTALL_PREFIX}/etc+ + +After `make install` has been run, CMake generates an install_manifest.txt file +which includes details on all installed files. + +[NOTE] +==== +If you run the `make install` command as root, the install_manifest.txt file will +be owned by root. +==== + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build/ + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/E-installing/build + +$ make +Scanning dependencies of target cmake_examples_inst +[ 50%] Building CXX object CMakeFiles/cmake_examples_inst.dir/src/Hello.cpp.o +Linking CXX shared library libcmake_examples_inst.so +[ 50%] Built target cmake_examples_inst +Scanning dependencies of target cmake_examples_inst_bin +[100%] Building CXX object CMakeFiles/cmake_examples_inst_bin.dir/src/main.cpp.o +Linking CXX executable cmake_examples_inst_bin +[100%] Built target cmake_examples_inst_bin + +$ sudo make install +[sudo] password for matrim: +[ 50%] Built target cmake_examples_inst +[100%] Built target cmake_examples_inst_bin +Install the project... +-- Install configuration: "" +-- Installing: /usr/local/bin/cmake_examples_inst_bin +-- Removed runtime path from "/usr/local/bin/cmake_examples_inst_bin" +-- Installing: /usr/local/lib/libcmake_examples_inst.so +-- Installing: /usr/local/etc/cmake-examples.conf + +$ cat install_manifest.txt +/usr/local/bin/cmake_examples_inst_bin +/usr/local/lib/libcmake_examples_inst.so +/usr/local/etc/cmake-examples.conf + +$ ls /usr/local/bin/ +cmake_examples_inst_bin + +$ ls /usr/local/lib +libcmake_examples_inst.so + +$ ls /usr/local/etc/ +cmake-examples.conf + +$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib cmake_examples_inst_bin +Hello Install! +---- + +[NOTE] +==== +If `/usr/local/lib` is not in your library path you may need to add it to the +path before running the binary. +==== + +[[extra-notes]] +Extra Notes +~~~~~~~~~~~ + +[[default-location]] +Overriding the default install location +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As mentioned the default install location is set from the +CMAKE_INSTALL_PREFIX+, +which defaults to `/usr/local/` + +If you want to change this default location for all users you can add the +following code to your top level CMakeLists.txt before adding any binaries or +libraries. + +[source,cmake] +---- +if( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ) + message(STATUS "Setting default CMAKE_INSTALL_PREFIX path to ${CMAKE_BINARY_DIR}/install") + set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE STRING "The path to use for make install" FORCE) +endif() +---- + +This example sets the default install location to under your build directory. + +[[destdir]] +DESTDIR +^^^^^^^ + +If you wish to stage your install to confirm that all files are included the +`make install` target supports the DESTDIR argument. + +``` +make install DESTDIR=/tmp/stage +``` + +This will create the install path `${DESTDIR}/${CMAKE_INSTALL_PREFIX}` for all +your installation files. In this example, it would install all files under the +path `/tmp/stage/usr/local` + +``` +$ tree /tmp/stage +/tmp/stage +└── usr + └── local + ├── bin + │   └── cmake_examples_inst_bin + ├── etc + │   └── cmake-examples.conf + └── lib + └── libcmake_examples_inst.so +``` + +[[uninstall]] +Uninstall +^^^^^^^^^ + +By default CMake does not add a `make uninstall` target. For details on how to generate +an uninstall target see this https://cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F[FAQ] + +For an easy way to remove the files from this example, you can use: + +``` +sudo xargs rm < install_manifest.txt +``` diff --git a/entry/3rdParty/cmake-examples/01-basic/E-installing/cmake-examples.conf b/entry/3rdParty/cmake-examples/01-basic/E-installing/cmake-examples.conf new file mode 100644 index 0000000..d530261 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/E-installing/cmake-examples.conf @@ -0,0 +1 @@ +# Sample configuration file that could be installed diff --git a/entry/3rdParty/cmake-examples/01-basic/E-installing/include/installing/Hello.h b/entry/3rdParty/cmake-examples/01-basic/E-installing/include/installing/Hello.h new file mode 100644 index 0000000..f838400 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/E-installing/include/installing/Hello.h @@ -0,0 +1,10 @@ +#ifndef __HELLO_H__ +#define __HELLO_H__ + +class Hello +{ +public: + void print(); +}; + +#endif diff --git a/entry/3rdParty/cmake-examples/01-basic/E-installing/src/Hello.cpp b/entry/3rdParty/cmake-examples/01-basic/E-installing/src/Hello.cpp new file mode 100644 index 0000000..13350ed --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/E-installing/src/Hello.cpp @@ -0,0 +1,8 @@ +#include + +#include "installing/Hello.h" + +void Hello::print() +{ + std::cout << "Hello Install!" << std::endl; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/E-installing/src/main.cpp b/entry/3rdParty/cmake-examples/01-basic/E-installing/src/main.cpp new file mode 100644 index 0000000..960f3a0 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/E-installing/src/main.cpp @@ -0,0 +1,8 @@ +#include "installing/Hello.h" + +int main(int argc, char *argv[]) +{ + Hello hi; + hi.print(); + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/F-build-type/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/F-build-type/CMakeLists.txt new file mode 100644 index 0000000..cdbfd18 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/F-build-type/CMakeLists.txt @@ -0,0 +1,19 @@ +# Set the minimum version of CMake that can be used +# To find the cmake version run +# $ cmake --version +cmake_minimum_required(VERSION 3.5) + +# Set a default build type if none was specified +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message("Setting build type to 'RelWithDebInfo' as none was specified.") + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" + "MinSizeRel" "RelWithDebInfo") +endif() + +# Set the project name +project (build_type) + +# Add an executable +add_executable(cmake_examples_build_type main.cpp) diff --git a/entry/3rdParty/cmake-examples/01-basic/F-build-type/README.adoc b/entry/3rdParty/cmake-examples/01-basic/F-build-type/README.adoc new file mode 100644 index 0000000..5635286 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/F-build-type/README.adoc @@ -0,0 +1,158 @@ += Build Type +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +CMake has a number of built in build configurations which can be used to compile +your project. These specify the optimization levels and if debug information is +to be included in the binary. + +The levels provided are: + + * Release - Adds the `-O3 -DNDEBUG` flags to the compiler + * Debug - Adds the `-g` flag + * MinSizeRel - Adds `-Os -DNDEBUG` + * RelWithDebInfo - Adds `-O2 -g -DNDEBUG` flags + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:main.cpp[] - The source file with main + +# Concepts + +## Set Build Type + +The build type can be set using the following methods. + + - Using a gui tool such as ccmake / cmake-gui + +image::cmake-gui-build-type.png[cmake-gui build type] + + - Passing into cmake + +[source,cmake] +---- +cmake .. -DCMAKE_BUILD_TYPE=Release +---- + +## Set Default Build Type + +The default build type provided by CMake is to include no compiler flags for +optimization. For some projects you may want to +set a default build type so that you do not have to remember to set it. + +To do this you can add the following to your top level CMakeLists.txt + +[source,cmake] +---- +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message("Setting build type to 'RelWithDebInfo' as none was specified.") + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" + "MinSizeRel" "RelWithDebInfo") +endif() +---- + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build/ + +$ cmake .. +Setting build type to 'RelWithDebInfo' as none was specified. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build + +$ make VERBOSE=1 +/usr/bin/cmake -H/home/matrim/workspace/cmake-examples/01-basic/F-build-type -B/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build --check-build-system CMakeFiles/Makefile.cmake 0 +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/progress.marks +make -f CMakeFiles/Makefile2 all +make[1]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +make -f CMakeFiles/cmake_examples_build_type.dir/build.make CMakeFiles/cmake_examples_build_type.dir/depend +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +cd /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/matrim/workspace/cmake-examples/01-basic/F-build-type /home/matrim/workspace/cmake-examples/01-basic/F-build-type /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/DependInfo.cmake --color= +Dependee "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/DependInfo.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/depend.internal". +Dependee "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/depend.internal". +Scanning dependencies of target cmake_examples_build_type +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +make -f CMakeFiles/cmake_examples_build_type.dir/build.make CMakeFiles/cmake_examples_build_type.dir/build +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles 1 +[100%] Building CXX object CMakeFiles/cmake_examples_build_type.dir/main.cpp.o +/usr/bin/c++ -O2 -g -DNDEBUG -o CMakeFiles/cmake_examples_build_type.dir/main.cpp.o -c /home/matrim/workspace/cmake-examples/01-basic/F-build-type/main.cpp +Linking CXX executable cmake_examples_build_type +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmake_examples_build_type.dir/link.txt --verbose=1 +/usr/bin/c++ -O2 -g -DNDEBUG CMakeFiles/cmake_examples_build_type.dir/main.cpp.o -o cmake_examples_build_type -rdynamic +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles 1 +[100%] Built target cmake_examples_build_type +make[1]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles 0$ mkdir build +$ cd build/ +/build$ cmake .. +Setting build type to 'RelWithDebInfo' as none was specified. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build +/build$ make VERBOSE=1 +/usr/bin/cmake -H/home/matrim/workspace/cmake-examples/01-basic/F-build-type -B/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build --check-build-system CMakeFiles/Makefile.cmake 0 +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/progress.marks +make -f CMakeFiles/Makefile2 all +make[1]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +make -f CMakeFiles/cmake_examples_build_type.dir/build.make CMakeFiles/cmake_examples_build_type.dir/depend +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +cd /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/matrim/workspace/cmake-examples/01-basic/F-build-type /home/matrim/workspace/cmake-examples/01-basic/F-build-type /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/DependInfo.cmake --color= +Dependee "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/DependInfo.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/depend.internal". +Dependee "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles/cmake_examples_build_type.dir/depend.internal". +Scanning dependencies of target cmake_examples_build_type +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +make -f CMakeFiles/cmake_examples_build_type.dir/build.make CMakeFiles/cmake_examples_build_type.dir/build +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles 1 +[100%] Building CXX object CMakeFiles/cmake_examples_build_type.dir/main.cpp.o +/usr/bin/c++ -O2 -g -DNDEBUG -o CMakeFiles/cmake_examples_build_type.dir/main.cpp.o -c /home/matrim/workspace/cmake-examples/01-basic/F-build-type/main.cpp +Linking CXX executable cmake_examples_build_type +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmake_examples_build_type.dir/link.txt --verbose=1 +/usr/bin/c++ -O2 -g -DNDEBUG CMakeFiles/cmake_examples_build_type.dir/main.cpp.o -o cmake_examples_build_type -rdynamic +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles 1 +[100%] Built target cmake_examples_build_type +make[1]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/F-build-type/build' +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/F-build-type/build/CMakeFiles 0 +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/F-build-type/cmake-gui-build-type.png b/entry/3rdParty/cmake-examples/01-basic/F-build-type/cmake-gui-build-type.png new file mode 100644 index 0000000000000000000000000000000000000000..37a92d04898e2e6ff7f626360f4c9ceb81a1e4f4 GIT binary patch literal 90872 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 T993$fAQ#QM+N!zARxkbo#}Bs= literal 0 HcmV?d00001 diff --git a/entry/3rdParty/cmake-examples/01-basic/F-build-type/main.cpp b/entry/3rdParty/cmake-examples/01-basic/F-build-type/main.cpp new file mode 100644 index 0000000..eb3dda0 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/F-build-type/main.cpp @@ -0,0 +1,7 @@ +#include + +int main(int argc, char *argv[]) +{ + std::cout << "Hello Build Type!" << std::endl; + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/CMakeLists.txt new file mode 100644 index 0000000..56e2261 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.5) + +# Set a default C++ compile flag +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEX2" CACHE STRING "Set C++ Compiler Flags" FORCE) + +# Set the project name +project (compile_flags) + +# Add an executable +add_executable(cmake_examples_compile_flags main.cpp) + +target_compile_definitions(cmake_examples_compile_flags + PRIVATE EX3 +) diff --git a/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/README.adoc b/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/README.adoc new file mode 100644 index 0000000..7e55abc --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/README.adoc @@ -0,0 +1,138 @@ += Compile Flags +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +CMake supports setting compile flags in a number of different ways: + + * using +target_compile_definitions()+ function + * using the +CMAKE_C_FLAGS+ and +CMAKE_CXX_FLAGS+ variables. + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:main.cpp[] - The source file with main + +# Concepts + +# Set Per-Target C++ Flags + +The recommended way to set C++ flags in modern CMake is to use per-target flags which can be populated to other targets +through the +target_compile_definitions()+ link:https://cmake.org/cmake/help/v3.0/command/target_compile_definitions.html?highlight=target_compile_definitions[function]. This will populate the link:https://cmake.org/cmake/help/v3.0/prop_tgt/INTERFACE_COMPILE_DEFINITIONS.html#prop_tgt:INTERFACE_COMPILE_DEFINITIONS[INTERFACE_COMPILE_DEFINITIONS] for the library and push the definition to the linked target depending on the scope. + +[source,cmake] +---- +target_compile_definitions(cmake_examples_compile_flags + PRIVATE EX3 +) +---- + +This will cause the compiler to add the definition +-DEX3+ when compiling the target. + +If the target was a library and the scope +PUBLIC+ or +INTERFACE+ has been chosen the definition would also be included in any executables that link this target. + +For compiler options you can also use the +target_compile_options()+ link:https://cmake.org/cmake/help/v3.0/command/target_compile_options.html[function]. + +## Set Default C++ Flags + +The default `CMAKE_CXX_FLAGS` is either empty or contains the appropriate flags +for the build type. + +To set additional default compile flags you can add the following to your +top level CMakeLists.txt + +[source,cmake] +---- +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEX2" CACHE STRING "Set C++ Compiler Flags" FORCE) +---- + +Similarly to +CMAKE_CXX_FLAGS+ other options include: + + * Setting C compiler flags using +CMAKE_C_FLAGS+ + * Setting linker flags using +CMAKE_LINKER_FLAGS+. + +[NOTE] +==== +The values `CACHE STRING "Set C++ Compiler Flags" FORCE` from the above command +are used to force this variable to be set in the CMakeCache.txt file. + +For more details, see https://cmake.org/cmake/help/v3.0/command/set.html[here] +==== + + +Once set the +CMAKE_C_FLAGS+ and +CMAKE_CXX_FLAGS+ will set a compiler flag / definition globally for all targets in this directory or any included sub-directories. This method is not recommended for general usage now and the +target_compile_definitions+ function is preferred. + +### Set CMake Flags + +Similar to the build type a global C++ compiler flag can be set using the following methods. + + - Using a gui tool such as ccmake / cmake-gui + +image::cmake-gui-set-cxx-flag.png[cmake-gui set cxx flag] + + - Passing into cmake + +[source,cmake] +---- +cmake .. -DCMAKE_CXX_FLAGS="-DEX3" +---- + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build/ + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build + +$ make VERBOSE=1 +/usr/bin/cmake -H/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags -B/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build --check-build-system CMakeFiles/Makefile.cmake 0 +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles/progress.marks +make -f CMakeFiles/Makefile2 all +make[1]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build' +make -f CMakeFiles/cmake_examples_compile_flags.dir/build.make CMakeFiles/cmake_examples_compile_flags.dir/depend +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build' +cd /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles/cmake_examples_compile_flags.dir/DependInfo.cmake --color= +Dependee "/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles/cmake_examples_compile_flags.dir/DependInfo.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles/cmake_examples_compile_flags.dir/depend.internal". +Dependee "/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles/cmake_examples_compile_flags.dir/depend.internal". +Scanning dependencies of target cmake_examples_compile_flags +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build' +make -f CMakeFiles/cmake_examples_compile_flags.dir/build.make CMakeFiles/cmake_examples_compile_flags.dir/build +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles 1 +[100%] Building CXX object CMakeFiles/cmake_examples_compile_flags.dir/main.cpp.o +/usr/bin/c++ -DEX2 -o CMakeFiles/cmake_examples_compile_flags.dir/main.cpp.o -c /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/main.cpp +Linking CXX executable cmake_examples_compile_flags +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmake_examples_compile_flags.dir/link.txt --verbose=1 +/usr/bin/c++ -DEX2 CMakeFiles/cmake_examples_compile_flags.dir/main.cpp.o -o cmake_examples_compile_flags -rdynamic +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles 1 +[100%] Built target cmake_examples_compile_flags +make[1]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build' +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/G-compile-flags/build/CMakeFiles 0 +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/main.cpp b/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/main.cpp new file mode 100644 index 0000000..d3a2e5d --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/G-compile-flags/main.cpp @@ -0,0 +1,17 @@ +#include + +int main(int argc, char *argv[]) +{ + std::cout << "Hello Compile Flags!" << std::endl; + + // only print if compile flag set +#ifdef EX2 + std::cout << "Hello Compile Flag EX2!" << std::endl; +#endif + +#ifdef EX3 + std::cout << "Hello Compile Flag EX3!" << std::endl; +#endif + + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/CMakeLists.txt new file mode 100644 index 0000000..85128ef --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.5) + +# Set the project name +project (third_party_include) + + +# find a boost install with the libraries filesystem and system +find_package(Boost 1.46.1 REQUIRED COMPONENTS filesystem system) + +# check if boost was found +if(Boost_FOUND) + message ("boost found") +else() + message (FATAL_ERROR "Cannot find Boost") +endif() + +# Add an executable +add_executable(third_party_include main.cpp) + +# link against the boost libraries +target_link_libraries( third_party_include + PRIVATE + Boost::filesystem +) diff --git a/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/README.adoc b/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/README.adoc new file mode 100644 index 0000000..9e8fcdc --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/README.adoc @@ -0,0 +1,213 @@ += Including Third Party Library +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +Nearly all non-trivial projects will have a requirement for including third party +libraries, headers, or programs. CMake has support for finding the path to these tools using +the `find_package()` function. This will search for CMake modules in the format +"FindXXX.cmake" from the list of folders in `CMAKE_MODULE_PATH`. On linux the +default search path will include `/usr/share/cmake/Modules`. On my system this +includes support for approximately 142 common third party libraries. + + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:main.cpp[] - The source file with main + +# Requirements + +This example requires the boost libraries to be installed in a default system +location. + +# Concepts + +## Finding a Package + +As mentioned above the `find_package()` function will search for CMake modules in the formant +"FindXXX.cmake" from the list of folders in `CMAKE_MODULE_PATH`. The exact +format of the arguments to `find_package` will depend on the module you are looking +for. This is typically documented at the top of the `FindXXX.cmake` file. + +A basic example of finding boost is below: + +[source,cmake] +---- +find_package(Boost 1.46.1 REQUIRED COMPONENTS filesystem system) +---- + +The arguments are: + + * Boost - Name of the library. This is part of used to find the module file FindBoost.cmake + * 1.46.1 - The minimum version of boost to find + * REQUIRED - Tells the module that this is required and to fail if it cannot be found + * COMPONENTS - The list of components to find in the library. + +Boost includes can take more arguments and also make use of other variables. +More complex setups are provided in later examples. + + +## Checking if the package is found + +Most included packages will set a variable `XXX_FOUND`, which can be used to check +if the package is available on the system. + +In this example the variable is `Boost_FOUND`: + +[source,cmake] +---- +if(Boost_FOUND) + message ("boost found") + include_directories(${Boost_INCLUDE_DIRS}) +else() + message (FATAL_ERROR "Cannot find Boost") +endif() +---- + +## Exported Variables + +After a package is found it will often export variables which can inform the user +where to find the library, header, or executable files. Similar to the `XXX_FOUND` +variable, these are package specific and are typically documented at the top of the +`FindXXX.cmake` file. + +The variables exported in this example include: + + * `Boost_INCLUDE_DIRS` - The path to the boost header files. + +In some cases you can also check these variables by examining the cache using +ccmake or cmake-gui. + +## Alias / Imported targets + +Most modern CMake libraries link:https://cmake.org/cmake/help/v3.6/prop_tgt/IMPORTED.html#prop_tgt:IMPORTED[export] +ALIAS+ targets in their module files. +The benefit of imported targets are that they can also populate include directories and linked libraries. + +For example, starting from v3.5+ of CMake, the +Boost module supports this. Similar to using your own ALIAS target for libraires, an +ALIAS+ in a module can make referencing found targets easier. + +In the case of Boost, all targets are exported using the `Boost::` identifier and then the name +of the subsystem. For example you can use: + + * `Boost::boost` for header only libraries + * `Boost::system` for the boost system library. + * `Boost::filesystem` for filesystem library. + +As with your own targets, these targets include their dependencies, so linking against +`Boost::filesystem` will automatically add `Boost::boost` and `Boost::system` dependencies. + +To link against an imported target you can use the following: + +[source,cmake] +---- + target_link_libraries( third_party_include + PRIVATE + Boost::filesystem + ) +---- + +## Non-alias targets + +While most modern libraries use imported targets, not all modules have been updated. In the +case where a library hasn't been updated you will often find the following variables available: + + * xxx_INCLUDE_DIRS - A variable pointing to the include directory for the library. + * xxx_LIBRARY - A variable pointing to the library path. + +These can then be added to your +target_include_directories+ and +target_link_libraries+ as: + +[source,cmake] +---- +# Include the boost headers +target_include_directories( third_party_include + PRIVATE ${Boost_INCLUDE_DIRS} +) + +# link against the boost libraries +target_link_libraries( third_party_include + PRIVATE + ${Boost_SYSTEM_LIBRARY} + ${Boost_FILESYSTEM_LIBRARY} +) +---- + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build/ + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Boost version: 1.54.0 +-- Found the following Boost libraries: +-- filesystem +-- system +boost found +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/H-third-party-library/build + +$ make +Scanning dependencies of target third_party_include +[100%] Building CXX object CMakeFiles/third_party_include.dir/main.cpp.o +Linking CXX executable third_party_include +[100%] Built target third_party_include +matrim@freyr:~/workspace/cmake-examples/01-basic/H-third-party-library/build$ ./ +CMakeFiles/ third_party_include +matrim@freyr:~/workspace/cmake-examples/01-basic/H-third-party-library/build$ ./third_party_include +Hello Third Party Include! +Path is not relative +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Boost version: 1.54.0 +-- Found the following Boost libraries: +-- filesystem +-- system +boost found +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/H-third-party-library/build + +$ make +Scanning dependencies of target third_party_include +[100%] Building CXX object CMakeFiles/third_party_include.dir/main.cpp.o +Linking CXX executable third_party_include +[100%] Built target third_party_include + +$ ./third_party_include +Hello Third Party Include! +Path is not relative + +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/main.cpp b/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/main.cpp new file mode 100644 index 0000000..c7b58af --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/H-third-party-library/main.cpp @@ -0,0 +1,24 @@ +#include +#include +#include + +int main(int argc, char *argv[]) +{ + std::cout << "Hello Third Party Include!" << std::endl; + + // use a shared ptr + boost::shared_ptr isp(new int(4)); + + // trivial use of boost filesystem + boost::filesystem::path path = "/usr/share/cmake/modules"; + if(path.is_relative()) + { + std::cout << "Path is relative" << std::endl; + } + else + { + std::cout << "Path is not relative" << std::endl; + } + + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/CMakeLists.txt new file mode 100644 index 0000000..0a43a8e --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/CMakeLists.txt @@ -0,0 +1,10 @@ +# Set the minimum version of CMake that can be used +# To find the cmake version run +# $ cmake --version +cmake_minimum_required(VERSION 3.5) + +# Set the project name +project (hello_cmake) + +# Add an executable +add_executable(hello_cmake main.cpp) diff --git a/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/README.adoc b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/README.adoc new file mode 100644 index 0000000..3d4ae9c --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/README.adoc @@ -0,0 +1,126 @@ += Compiling with clang +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +When building with CMake it is possible to set the C and C++ compiler. This example +is the same as the link:../A-hello-cmake[hello-cmake] example except that it shows the most basic +method of changing the compiler from the default gcc to http://clang.llvm.org/[clang]. + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:main.cpp[] - A simple "Hello World" cpp file. + +# Concepts + +### Compiler Option + +CMake exposes options to control the programs used to compile and link your code. These +programs include: + + * CMAKE_C_COMPILER - The program used to compile c code. + * CMAKE_CXX_COMPILER - The program used to compile c++ code. + * CMAKE_LINKER - The program used to link your binary. + +[NOTE] +==== +In this example clang-3.6 is installed via the command `sudo apt-get install clang-3.6` +==== + +[NOTE] +==== +This is the most basic and easiest way to invoke clang. Future examples will show better +ways to invoke the compiler. +==== + + +### Setting Flags + +As described in the link:../F-build-type[Build Type] example, you can set CMake options +using either a cmake gui or by passing from the command line. + +Below is an example of passing the compiler via the command line. + +[source,cmake] +---- +cmake .. -DCMAKE_C_COMPILER=clang-3.6 -DCMAKE_CXX_COMPILER=clang++-3.6 +---- + +After setting these options, when your run `make` clang will be used to compile your binary. This +can be seen from the following lines in the make output. + +[source,bash] +---- +/usr/bin/clang++-3.6 -o CMakeFiles/hello_cmake.dir/main.cpp.o -c /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/main.cpp +Linking CXX executable hello_cmake +/usr/bin/cmake -E cmake_link_script CMakeFiles/hello_cmake.dir/link.txt --verbose=1 +/usr/bin/clang++-3.6 CMakeFiles/hello_cmake.dir/main.cpp.o -o hello_cmake -rdynamic +---- + + + +# Building the Examples + +Below is sample output from building this example. + +[source,bash] +---- +$ mkdir build.clang + +$ cd build.clang/ + +$ cmake .. -DCMAKE_C_COMPILER=clang-3.6 -DCMAKE_CXX_COMPILER=clang++-3.6 +-- The C compiler identification is Clang 3.6.0 +-- The CXX compiler identification is Clang 3.6.0 +-- Check for working C compiler: /usr/bin/clang-3.6 +-- Check for working C compiler: /usr/bin/clang-3.6 -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/clang++-3.6 +-- Check for working CXX compiler: /usr/bin/clang++-3.6 -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang + +$ make VERBOSE=1 +/usr/bin/cmake -H/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang -B/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang --check-build-system CMakeFiles/Makefile.cmake 0 +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles/progress.marks +make -f CMakeFiles/Makefile2 all +make[1]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang' +make -f CMakeFiles/hello_cmake.dir/build.make CMakeFiles/hello_cmake.dir/depend +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang' +cd /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles/hello_cmake.dir/DependInfo.cmake --color= +Dependee "/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles/hello_cmake.dir/DependInfo.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles/hello_cmake.dir/depend.internal". +Dependee "/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles/hello_cmake.dir/depend.internal". +Scanning dependencies of target hello_cmake +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang' +make -f CMakeFiles/hello_cmake.dir/build.make CMakeFiles/hello_cmake.dir/build +make[2]: Entering directory `/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles 1 +[100%] Building CXX object CMakeFiles/hello_cmake.dir/main.cpp.o +/usr/bin/clang++-3.6 -o CMakeFiles/hello_cmake.dir/main.cpp.o -c /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/main.cpp +Linking CXX executable hello_cmake +/usr/bin/cmake -E cmake_link_script CMakeFiles/hello_cmake.dir/link.txt --verbose=1 +/usr/bin/clang++-3.6 CMakeFiles/hello_cmake.dir/main.cpp.o -o hello_cmake -rdynamic +make[2]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang' +/usr/bin/cmake -E cmake_progress_report /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles 1 +[100%] Built target hello_cmake +make[1]: Leaving directory `/home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang' +/usr/bin/cmake -E cmake_progress_start /home/matrim/workspace/cmake-examples/01-basic/I-compiling-with-clang/build.clang/CMakeFiles 0 + +$ ./hello_cmake +Hello CMake! +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/main.cpp b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/main.cpp new file mode 100644 index 0000000..750dcac --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/main.cpp @@ -0,0 +1,7 @@ +#include + +int main(int argc, char *argv[]) +{ + std::cout << "Hello CMake!" << std::endl; + return 0; +} \ No newline at end of file diff --git a/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/pre_test.sh b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/pre_test.sh new file mode 100644 index 0000000..5231fcd --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/pre_test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +ROOT_DIR=`pwd` +dir="01-basic/I-compiling-with-clang" + +if [ -d "$ROOT_DIR/$dir/build.clang" ]; then + echo "deleting $dir/build.clang" + rm -r $dir/build.clang +fi diff --git a/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/run_test.sh b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/run_test.sh new file mode 100644 index 0000000..b1ec516 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/I-compiling-with-clang/run_test.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Ubuntu supports multiple versions of clang to be installed at the same time. +# The tests need to determine the clang binary before calling cmake +clang_bin=`which clang` +clang_xx_bin=`which clang++` + +if [ -z $clang_bin ]; then + clang_ver=`dpkg --get-selections | grep clang | grep -v -m1 libclang | cut -f1 | cut -d '-' -f2` + clang_bin="clang-$clang_ver" + clang_xx_bin="clang++-$clang_ver" +fi + +echo "Will use clang [$clang_bin] and clang++ [$clang_xx_bin]" + + +mkdir -p build.clang && cd build.clang && \ + cmake .. -DCMAKE_C_COMPILER=$clang_bin -DCMAKE_CXX_COMPILER=$clang_xx_bin && make diff --git a/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/CMakeLists.txt new file mode 100644 index 0000000..0a43a8e --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/CMakeLists.txt @@ -0,0 +1,10 @@ +# Set the minimum version of CMake that can be used +# To find the cmake version run +# $ cmake --version +cmake_minimum_required(VERSION 3.5) + +# Set the project name +project (hello_cmake) + +# Add an executable +add_executable(hello_cmake main.cpp) diff --git a/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/README.adoc b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/README.adoc new file mode 100644 index 0000000..039374a --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/README.adoc @@ -0,0 +1,160 @@ += Building with ninja +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +As mentioned, CMake is a meta-build system that can be used to + create the build files for many other build tools. This example shows how + to have CMake use the https://ninja-build.org/[ninja build] tool. + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:main.cpp[] - A simple "Hello World" cpp file. + +# Concepts + +### Generators + +CMake https://cmake.org/cmake/help/v3.0/manual/cmake-generators.7.html[generators] are +responsible for writing the input files (e.g. Makefiles) for the underlying build system. Running `cmake --help` +will show the generators available. For cmake v2.8.12.2 the generators supported +on my system include: + +[source,bash] +---- +Generators + +The following generators are available on this platform: + Unix Makefiles = Generates standard UNIX makefiles. + Ninja = Generates build.ninja files (experimental). + CodeBlocks - Ninja = Generates CodeBlocks project files. + CodeBlocks - Unix Makefiles = Generates CodeBlocks project files. + Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files. + Eclipse CDT4 - Unix Makefiles + = Generates Eclipse CDT 4.0 project files. + KDevelop3 = Generates KDevelop 3 project files. + KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files. + Sublime Text 2 - Ninja = Generates Sublime Text 2 project files. + Sublime Text 2 - Unix Makefiles + = Generates Sublime Text 2 project files.Generators +---- + +As specified in this https://stackoverflow.com/questions/25941536/what-is-a-cmake-generator[post], +CMake includes different types of generators such as Command-Line, IDE, and Extra generators. + +#### Command-Line Build Tool Generators + +These generators are for command-line build tools, like Make and Ninja. The chosen tool chain must be configured prior to generating the build system with CMake. + +The supported generators include: + + * Borland Makefiles + * MSYS Makefiles + * MinGW Makefiles + * NMake Makefiles + * NMake Makefiles JOM + * Ninja + * Unix Makefiles + * Watcom WMake + +#### IDE Build Tool Generators + +These generators are for Integrated Development Environments that include their own compiler. Examples are Visual Studio and Xcode which include a compiler natively. + +The supported generators include: + + * Visual Studio 6 + * Visual Studio 7 + * Visual Studio 7 .NET 2003 + * Visual Studio 8 2005 + * Visual Studio 9 2008 + * Visual Studio 10 2010 + * Visual Studio 11 2012 + * Visual Studio 12 2013 + * Xcode + +#### Extra Generators + +These are generators create a configuration to work with an alternative IDE tool and must be included with either an IDE or Command-Line generator. + +The supported generators include: + + * CodeBlocks + * CodeLite + * Eclipse CDT4 + * KDevelop3 + * Kate + * Sublime Text 2 + + +[NOTE] +==== +In this example ninja is installed via the command `sudo apt-get install ninja-build` +==== + +### Calling a Generator + +To call a CMake generator you can use the `-G` command line switch, for example: + +[source,cmake] +---- +cmake .. -G Ninja +---- + +After doing the above CMake will generate the required Ninja build files, which can be run +from using the `ninja` command. + +[source,bash] +---- +$ cmake .. -G Ninja + +$ ls +build.ninja CMakeCache.txt CMakeFiles cmake_install.cmake rules.ninja +---- + +# Building the Examples + +Below is sample output from building this example. + +[source,bash] +---- +$ mkdir build.ninja + +$ cd build.ninja/ + +$ cmake .. -G Ninja +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler using: Ninja +-- Check for working C compiler using: Ninja -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler using: Ninja +-- Check for working CXX compiler using: Ninja -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/J-building-with-ninja/build.ninja + +$ ninja -v +[1/2] /usr/bin/c++ -MMD -MT CMakeFiles/hello_cmake.dir/main.cpp.o -MF "CMakeFiles/hello_cmake.dir/main.cpp.o.d" -o CMakeFiles/hello_cmake.dir/main.cpp.o -c ../main.cpp +[2/2] : && /usr/bin/c++ CMakeFiles/hello_cmake.dir/main.cpp.o -o hello_cmake -rdynamic && : + +$ ls +build.ninja CMakeCache.txt CMakeFiles cmake_install.cmake hello_cmake rules.ninja + +$ ./hello_cmake +Hello CMake! +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/main.cpp b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/main.cpp new file mode 100644 index 0000000..750dcac --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/main.cpp @@ -0,0 +1,7 @@ +#include + +int main(int argc, char *argv[]) +{ + std::cout << "Hello CMake!" << std::endl; + return 0; +} \ No newline at end of file diff --git a/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/pre_test.sh b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/pre_test.sh new file mode 100644 index 0000000..a3f9854 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/pre_test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +ROOT_DIR=`pwd` +dir="01-basic/J-building-with-ninja" + +if [ -d "$ROOT_DIR/$dir/build.ninja" ]; then + echo "deleting $dir/build.ninja" + rm -r $dir/build.ninja +fi diff --git a/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/run_test.sh b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/run_test.sh new file mode 100644 index 0000000..56b171e --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/J-building-with-ninja/run_test.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Travis-ci cmake version doesn't support ninja, so first check if it's supported +ninja_supported=`cmake --help | grep Ninja` + +if [ -z $ninja_supported ]; then + echo "Ninja not supported" + exit +fi + +mkdir -p build.ninja && cd build.ninja && \ + cmake .. -G Ninja && ninja diff --git a/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/CMakeLists.txt new file mode 100644 index 0000000..46eac96 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.5) + +# Set the project name +project (imported_targets) + + +# find a boost install with the libraries filesystem and system +find_package(Boost 1.46.1 REQUIRED COMPONENTS filesystem system) + +# check if boost was found +if(Boost_FOUND) + message ("boost found") +else() + message (FATAL_ERROR "Cannot find Boost") +endif() + +# Add an executable +add_executable(imported_targets main.cpp) + +# link against the boost libraries +target_link_libraries( imported_targets + PRIVATE + Boost::filesystem +) diff --git a/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/README.adoc b/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/README.adoc new file mode 100644 index 0000000..e7b5335 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/README.adoc @@ -0,0 +1,94 @@ += Imported Targets +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +As previously mentioned in the link:../H-third-party-library[third party library], newer +versions of CMake allow you to link third party libraries using link:https://cmake.org/cmake/help/v3.6/prop_tgt/IMPORTED.html#prop_tgt:IMPORTED[imported] +ALIAS+ targets. + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:main.cpp[] - The source file with main + +# Requirements + +This example requires the following: + + * CMake v3.5+ + * The boost libraries to be installed in a default system location. + +# Concepts + +## Imported Target + +Imported targets are read-only targets that are exported by FindXXX modules. + +To include boost filesystem you can do the following: + +[source,cmake] +---- + target_link_libraries( imported_targets + PRIVATE + Boost::filesystem + ) +---- + +This will automtaically link the Boost::filesystem and Boost::system libraries while also including the +Boost include directories. + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build/ + +$ cmake .. +-- The C compiler identification is GNU 5.4.0 +-- The CXX compiler identification is GNU 5.4.0 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Detecting C compile features +-- Detecting C compile features - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Detecting CXX compile features +-- Detecting CXX compile features - done +-- Boost version: 1.58.0 +-- Found the following Boost libraries: +-- filesystem +-- system +boost found +-- Configuring done +-- Generating done +-- Build files have been written to: /data/code/01-basic/K-imported-targets/build + +$ make +Scanning dependencies of target imported_targets +[ 50%] Building CXX object CMakeFiles/imported_targets.dir/main.cpp.o +[100%] Linking CXX executable imported_targets +[100%] Built target imported_targets + + +$ ./imported_targets +Hello Third Party Include! +Path is not relative + + +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/main.cpp b/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/main.cpp new file mode 100644 index 0000000..c7b58af --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/main.cpp @@ -0,0 +1,24 @@ +#include +#include +#include + +int main(int argc, char *argv[]) +{ + std::cout << "Hello Third Party Include!" << std::endl; + + // use a shared ptr + boost::shared_ptr isp(new int(4)); + + // trivial use of boost filesystem + boost::filesystem::path path = "/usr/share/cmake/modules"; + if(path.is_relative()) + { + std::cout << "Path is relative" << std::endl; + } + else + { + std::cout << "Path is not relative" << std::endl; + } + + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/run_test.sh b/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/run_test.sh new file mode 100644 index 0000000..e1efb51 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/K-imported-targets/run_test.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Make sure we have the minimum cmake version +cmake_version=`cmake --version | grep version | cut -d" " -f3` + +[[ "$cmake_version" =~ ([3-9][.][5-9.][.][0-9]) ]] || exit 0 + +echo "correct version of cmake" +mkdir -p build && cd build && cmake .. && make +if [ $? -ne 0 ]; then + echo "Error running example" + exit 1 +fi diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/README.adoc b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/README.adoc new file mode 100644 index 0000000..1aaafb4 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/README.adoc @@ -0,0 +1,11 @@ += C++ Standard + +Since the release of C+\+11 and C++14 a common use case is to invoke the compiler to use these standards. As CMake has evolved, it has added features to make this easier and new versions of CMake have changed how this is achieved. + +The following examples show different methods of setting the C++ standard and what versions of CMake they are available from. + +The examples include: + + - link:i-common-method[common-method]. A simple version that should work with most versions of CMake. + - link:ii-cxx-standard[cxx-standard]. Using the `CMAKE_CXX_STANDARD` variable introduced in CMake v3.1. + - link:iii-compile-features[compile-features]. Using the `target_compile_features` function introduced in CMake v3.1. diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/CMakeLists.txt new file mode 100644 index 0000000..534eb57 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/CMakeLists.txt @@ -0,0 +1,24 @@ +# Set the minimum version of CMake that can be used +# To find the cmake version run +# $ cmake --version +cmake_minimum_required(VERSION 2.8) + +# Set the project name +project (hello_cpp11) + +# try conditional compilation +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) + +# check results and add flag +if(COMPILER_SUPPORTS_CXX11)# + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X)# + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +else() + message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") +endif() + +# Add an executable +add_executable(hello_cpp11 main.cpp) diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/README.adoc b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/README.adoc new file mode 100644 index 0000000..990bd04 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/README.adoc @@ -0,0 +1,111 @@ += C++ Standard Common Method +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +This example shows a common method to set the C++ Standard. This can be used with most versions of CMake. However, if you are targeting a recent version of CMake there are more convenient methods available. + +The files in this tutorial are below: + +``` +A-hello-cmake$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[CMakeLists.txt] - Contains the CMake commands you wish to run + * link:main.cpp[main.cpp] - A simple "Hello World" cpp file targeting C++11. + +# Concepts + +## Checking Compile flags + +CMake has support for attempting to compile a program with any flags you pass into the function `CMAKE_CXX_COMPILER_FLAG`. The result is then stored in a variable that you pass in. + +For example: + +[source,cmake] +---- +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +---- + +This example will attempt to compile a program with the flag `-std=c++11` and store the result in the variable `COMPILER_SUPPORTS_CXX11`. + +The line `include(CheckCXXCompilerFlag)` tells CMake to include this function to make it available for use. + +## Adding the flag + +Once you have determined if the compile supports a flag, you can then use the link:../../G-compile-flags/[standard cmake methods] to add this flag to a target. In this example we use the `CMAKE_CXX_FLAGS` to propegate the flag to all targets . + +[source,cmake] +---- +if(COMPILER_SUPPORTS_CXX11)# + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X)# + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +else() + message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") +endif() +---- + +The above example only checks for the gcc version of the compile flags and supports fallback from C+\+11 to the pre-standardisation C+\+0x flag. In real usage you may want to check for C++14, or add support for different methods of setting the compile, e.g. `-std=gnu++11` + +# Building the Examples + +Below is sample output from building this example. + +[source,bash] +---- +$ mkdir build +$ cd build + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Performing Test COMPILER_SUPPORTS_CXX11 +-- Performing Test COMPILER_SUPPORTS_CXX11 - Success +-- Performing Test COMPILER_SUPPORTS_CXX0X +-- Performing Test COMPILER_SUPPORTS_CXX0X - Success +-- Configuring done +-- Generating done +-- Build files have been written to: /data/code/01-basic/L-cpp-standard/i-common-method/build + +$ make VERBOSE=1 +/usr/bin/cmake -H/data/code/01-basic/L-cpp-standard/i-common-method -B/data/code/01-basic/L-cpp-standard/i-common-method/build --check-build-system CMakeFiles/Makefile.cmake 0 +/usr/bin/cmake -E cmake_progress_start /data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles /data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles/progress.marks +make -f CMakeFiles/Makefile2 all +make[1]: Entering directory `/data/code/01-basic/L-cpp-standard/i-common-method/build' +make -f CMakeFiles/hello_cpp11.dir/build.make CMakeFiles/hello_cpp11.dir/depend +make[2]: Entering directory `/data/code/01-basic/L-cpp-standard/i-common-method/build' +cd /data/code/01-basic/L-cpp-standard/i-common-method/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /data/code/01-basic/L-cpp-standard/i-common-method /data/code/01-basic/L-cpp-standard/i-common-method /data/code/01-basic/L-cpp-standard/i-common-method/build /data/code/01-basic/L-cpp-standard/i-common-method/build /data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles/hello_cpp11.dir/DependInfo.cmake --color= +Dependee "/data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles/hello_cpp11.dir/DependInfo.cmake" is newer than depender "/data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles/hello_cpp11.dir/depend.internal". +Dependee "/data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles/hello_cpp11.dir/depend.internal". +Scanning dependencies of target hello_cpp11 +make[2]: Leaving directory `/data/code/01-basic/L-cpp-standard/i-common-method/build' +make -f CMakeFiles/hello_cpp11.dir/build.make CMakeFiles/hello_cpp11.dir/build +make[2]: Entering directory `/data/code/01-basic/L-cpp-standard/i-common-method/build' +/usr/bin/cmake -E cmake_progress_report /data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles 1 +[100%] Building CXX object CMakeFiles/hello_cpp11.dir/main.cpp.o +/usr/bin/c++ -std=c++11 -o CMakeFiles/hello_cpp11.dir/main.cpp.o -c /data/code/01-basic/L-cpp-standard/i-common-method/main.cpp +Linking CXX executable hello_cpp11 +/usr/bin/cmake -E cmake_link_script CMakeFiles/hello_cpp11.dir/link.txt --verbose=1 +/usr/bin/c++ -std=c++11 CMakeFiles/hello_cpp11.dir/main.cpp.o -o hello_cpp11 -rdynamic +make[2]: Leaving directory `/data/code/01-basic/L-cpp-standard/i-common-method/build' +/usr/bin/cmake -E cmake_progress_report /data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles 1 +[100%] Built target hello_cpp11 +make[1]: Leaving directory `/data/code/01-basic/L-cpp-standard/i-common-method/build' +/usr/bin/cmake -E cmake_progress_start /data/code/01-basic/L-cpp-standard/i-common-method/build/CMakeFiles 0 +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/main.cpp b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/main.cpp new file mode 100644 index 0000000..12886a0 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/i-common-method/main.cpp @@ -0,0 +1,8 @@ +#include + +int main(int argc, char *argv[]) +{ + auto message = "Hello C++11"; + std::cout << message << std::endl; + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/CMakeLists.txt new file mode 100644 index 0000000..af79ca9 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/CMakeLists.txt @@ -0,0 +1,13 @@ +# Set the minimum version of CMake that can be used +# To find the cmake version run +# $ cmake --version +cmake_minimum_required(VERSION 3.1) + +# Set the project name +project (hello_cpp11) + +# set the C++ standard to C++ 11 +set(CMAKE_CXX_STANDARD 11) + +# Add an executable +add_executable(hello_cpp11 main.cpp) diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/README.adoc b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/README.adoc new file mode 100644 index 0000000..55f00f2 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/README.adoc @@ -0,0 +1,88 @@ += Set C++ Standard +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +This example shows how to set the C++ standard using the `CMAKE_CXX_STANDARD` variable. This is available since CMake v3.1 + +The files in this tutorial are below: + +``` +A-hello-cmake$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[CMakeLists.txt] - Contains the CMake commands you wish to run + * link:main.cpp[main.cpp] - A simple "Hello World" cpp file targeting C++11. + +# Concepts + +## Using CXX_STANDARD property + +Setting the link:https://cmake.org/cmake/help/v3.1/variable/CMAKE_CXX_STANDARD.html[CMAKE_CXX_STANDARD] variable causes the `CXX_STANDARD` property on all targets. This causes CMake to set the appropriate flag at compille time. + + +[NOTE] +==== +The `CMAKE_CXX_STANDARD` variable falls back to the closest appropriate standard without a failure. For example, if you request `-std=gnu++11` you may end up with `-std=gnu++0x`. + +This can result in an unexpected failure at compile time. +==== + +# Building the Examples + +Below is sample output from building this example. + +[source,bash] +---- +$ mkdir build +$ cd build + + +$ cmake .. +-- The C compiler identification is GNU 5.4.0 +-- The CXX compiler identification is GNU 5.4.0 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Detecting C compile features +-- Detecting C compile features - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Detecting CXX compile features +-- Detecting CXX compile features - done +-- Configuring done +-- Generating done +-- Build files have been written to: /data/code/01-basic/L-cpp-standard/ii-cxx-standard/build + +$ make VERBOSE=1 +/usr/bin/cmake -H/data/code/01-basic/L-cpp-standard/ii-cxx-standard -B/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build --check-build-system CMakeFiles/Makefile.cmake 0 +/usr/bin/cmake -E cmake_progress_start /data/code/01-basic/L-cpp-standard/ii-cxx-standard/build/CMakeFiles /data/code/01-basic/L-cpp-standard/ii-cxx-standard/build/CMakeFiles/progress.marks +make -f CMakeFiles/Makefile2 all +make[1]: Entering directory '/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build' +make -f CMakeFiles/hello_cpp11.dir/build.make CMakeFiles/hello_cpp11.dir/depend +make[2]: Entering directory '/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build' +cd /data/code/01-basic/L-cpp-standard/ii-cxx-standard/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /data/code/01-basic/L-cpp-standard/ii-cxx-standard /data/code/01-basic/L-cpp-standard/ii-cxx-standard /data/code/01-basic/L-cpp-standard/ii-cxx-standard/build /data/code/01-basic/L-cpp-standard/ii-cxx-standard/build /data/code/01-basic/L-cpp-standard/ii-cxx-standard/build/CMakeFiles/hello_cpp11.dir/DependInfo.cmake --color= +Dependee "/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build/CMakeFiles/hello_cpp11.dir/DependInfo.cmake" is newer than depender "/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build/CMakeFiles/hello_cpp11.dir/depend.internal". +Dependee "/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build/CMakeFiles/hello_cpp11.dir/depend.internal". +Scanning dependencies of target hello_cpp11 +make[2]: Leaving directory '/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build' +make -f CMakeFiles/hello_cpp11.dir/build.make CMakeFiles/hello_cpp11.dir/build +make[2]: Entering directory '/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build' +[ 50%] Building CXX object CMakeFiles/hello_cpp11.dir/main.cpp.o +/usr/bin/c++ -std=gnu++11 -o CMakeFiles/hello_cpp11.dir/main.cpp.o -c /data/code/01-basic/L-cpp-standard/ii-cxx-standard/main.cpp +[100%] Linking CXX executable hello_cpp11 +/usr/bin/cmake -E cmake_link_script CMakeFiles/hello_cpp11.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/hello_cpp11.dir/main.cpp.o -o hello_cpp11 -rdynamic +make[2]: Leaving directory '/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build' +[100%] Built target hello_cpp11 +make[1]: Leaving directory '/data/code/01-basic/L-cpp-standard/ii-cxx-standard/build' +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/main.cpp b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/main.cpp new file mode 100644 index 0000000..12886a0 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/ii-cxx-standard/main.cpp @@ -0,0 +1,8 @@ +#include + +int main(int argc, char *argv[]) +{ + auto message = "Hello C++11"; + std::cout << message << std::endl; + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/CMakeLists.txt b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/CMakeLists.txt new file mode 100644 index 0000000..f331a44 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/CMakeLists.txt @@ -0,0 +1,16 @@ +# Set the minimum version of CMake that can be used +# To find the cmake version run +# $ cmake --version +cmake_minimum_required(VERSION 3.1) + +# Set the project name +project (hello_cpp11) + +# Add an executable +add_executable(hello_cpp11 main.cpp) + +# set the C++ standard to the appropriate standard for using auto +target_compile_features(hello_cpp11 PUBLIC cxx_auto_type) + +# Print the list of known compile features for this version of CMake +message("List of compile features: ${CMAKE_CXX_COMPILE_FEATURES}") diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/README.adoc b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/README.adoc new file mode 100644 index 0000000..9e551a9 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/README.adoc @@ -0,0 +1,97 @@ += Set C++ Standard +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +This example shows how to set the C++ standard using the `target_compile_features` function. This is available since CMake v3.1 + +The files in this tutorial are below: + +``` +A-hello-cmake$ tree +. +├── CMakeLists.txt +├── main.cpp +``` + + * link:CMakeLists.txt[CMakeLists.txt] - Contains the CMake commands you wish to run + * link:main.cpp[main.cpp] - A simple "Hello World" cpp file targeting C++11. + +# Concepts + +## Using target_compile_features + +Calling the link:https://cmake.org/cmake/help/v3.1/command/target_compile_features.html[target_compile_features] function on a target will look at the passed in feature and determine the correct compiler flag to use for your target. + +[source,cmake] +---- +target_compile_features(hello_cpp11 PUBLIC cxx_auto_type) +---- + +As with other `target_*` functions, you can specify the scope of the feature for the selected target. This populates the link:https://cmake.org/cmake/help/v3.1/prop_tgt/INTERFACE_COMPILE_FEATURES.html#prop_tgt:INTERFACE_COMPILE_FEATURES[INTERFACE_COMPILE_FEATURES] property for the target. + +The list of available features can be found from the link:https://cmake.org/cmake/help/v3.1/variable/CMAKE_CXX_COMPILE_FEATURES.html#variable:CMAKE_CXX_COMPILE_FEATURES[CMAKE_CXX_COMPILE_FEATURES] variable. You can obtain a list of the available features using the following code: + +[source,cmake] +---- +message("List of compile features: ${CMAKE_CXX_COMPILE_FEATURES}") +---- + +# Building the Examples + +Below is sample output from building this example. + +[source,bash] +---- +$ mkdir build +$ cd build + +$ cmake .. +-- The C compiler identification is GNU 5.4.0 +-- The CXX compiler identification is GNU 5.4.0 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Detecting C compile features +-- Detecting C compile features - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Detecting CXX compile features +-- Detecting CXX compile features - done +List of compile features: cxx_template_template_parameters;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates +-- Configuring done +-- Generating done +-- Build files have been written to: /data/code/01-basic/L-cpp-standard/iii-compile-features/build + + +$ make VERBOSE=1 +/usr/bin/cmake -H/data/code/01-basic/L-cpp-standard/iii-compile-features -B/data/code/01-basic/L-cpp-standard/iii-compile-features/build --check-build-system CMakeFiles/Makefile.cmake 0 +/usr/bin/cmake -E cmake_progress_start /data/code/01-basic/L-cpp-standard/iii-compile-features/build/CMakeFiles /data/code/01-basic/L-cpp-standard/iii-compile-features/build/CMakeFiles/progress.marks +make -f CMakeFiles/Makefile2 all +make[1]: Entering directory '/data/code/01-basic/L-cpp-standard/iii-compile-features/build' +make -f CMakeFiles/hello_cpp11.dir/build.make CMakeFiles/hello_cpp11.dir/depend +make[2]: Entering directory '/data/code/01-basic/L-cpp-standard/iii-compile-features/build' +cd /data/code/01-basic/L-cpp-standard/iii-compile-features/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /data/code/01-basic/L-cpp-standard/iii-compile-features /data/code/01-basic/L-cpp-standard/iii-compile-features /data/code/01-basic/L-cpp-standard/iii-compile-features/build /data/code/01-basic/L-cpp-standard/iii-compile-features/build /data/code/01-basic/L-cpp-standard/iii-compile-features/build/CMakeFiles/hello_cpp11.dir/DependInfo.cmake --color= +Dependee "/data/code/01-basic/L-cpp-standard/iii-compile-features/build/CMakeFiles/hello_cpp11.dir/DependInfo.cmake" is newer than depender "/data/code/01-basic/L-cpp-standard/iii-compile-features/build/CMakeFiles/hello_cpp11.dir/depend.internal". +Dependee "/data/code/01-basic/L-cpp-standard/iii-compile-features/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/data/code/01-basic/L-cpp-standard/iii-compile-features/build/CMakeFiles/hello_cpp11.dir/depend.internal". +Scanning dependencies of target hello_cpp11 +make[2]: Leaving directory '/data/code/01-basic/L-cpp-standard/iii-compile-features/build' +make -f CMakeFiles/hello_cpp11.dir/build.make CMakeFiles/hello_cpp11.dir/build +make[2]: Entering directory '/data/code/01-basic/L-cpp-standard/iii-compile-features/build' +[ 50%] Building CXX object CMakeFiles/hello_cpp11.dir/main.cpp.o +/usr/bin/c++ -std=gnu++11 -o CMakeFiles/hello_cpp11.dir/main.cpp.o -c /data/code/01-basic/L-cpp-standard/iii-compile-features/main.cpp +[100%] Linking CXX executable hello_cpp11 +/usr/bin/cmake -E cmake_link_script CMakeFiles/hello_cpp11.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/hello_cpp11.dir/main.cpp.o -o hello_cpp11 -rdynamic +make[2]: Leaving directory '/data/code/01-basic/L-cpp-standard/iii-compile-features/build' +[100%] Built target hello_cpp11 +make[1]: Leaving directory '/data/code/01-basic/L-cpp-standard/iii-compile-features/build' +/usr/bin/cmake -E cmake_progress_start /data/code/01-basic/L-cpp-standard/iii-compile-features/build/CMakeFiles 0 + +---- diff --git a/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/main.cpp b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/main.cpp new file mode 100644 index 0000000..12886a0 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/L-cpp-standard/iii-compile-features/main.cpp @@ -0,0 +1,8 @@ +#include + +int main(int argc, char *argv[]) +{ + auto message = "Hello C++11"; + std::cout << message << std::endl; + return 0; +} diff --git a/entry/3rdParty/cmake-examples/01-basic/README.adoc b/entry/3rdParty/cmake-examples/01-basic/README.adoc new file mode 100644 index 0000000..87fc185 --- /dev/null +++ b/entry/3rdParty/cmake-examples/01-basic/README.adoc @@ -0,0 +1,19 @@ += Basic Examples + +The basic examples in this directory show how the setup a CMake project, +set compile flags, create and link executables and libraries, and install them. + +The examples included are + + - link:A-hello-cmake[hello-cmake]. A hello world example. + - link:B-hello-headers[hello-headers]. A slightly more complicated hello world example, using separate source and include folders. + - link:C-static-library[static-library]. An example using a static library. + - link:D-shared-library[shared-library]. An example using a shared library. + - link:E-installing[installing]. Shows how to create a 'make install' target that will install binaries and libraries. + - link:F-build-type[build-type]. An example showing how to set a default build and optimization flags for your project. + - link:G-compile-flags[compile-flags]. Shows how to set additional compile flags. + - link:H-third-party-library[third-party-library]. Shows an example of how to link third party libraries. + - link:I-compiling-with-clang[compiling-with-clang]. An example of invoking the clang compiler. + - link:J-building-with-ninja[building-with-ninja] - Shows how to generate ninja build files + - link:K-imported-targets[imported-targets] - Shows how to link boost using the new imported targets + - link:L-cpp-standard[cpp-standard] - Shows various methods to set the C++ standard diff --git a/entry/3rdParty/cmake-examples/C-static-library/CMakeLists.txt b/entry/3rdParty/cmake-examples/C-static-library/CMakeLists.txt new file mode 100644 index 0000000..3dc8210 --- /dev/null +++ b/entry/3rdParty/cmake-examples/C-static-library/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.5) + +project(hello_library) + +############################################################ +# Create a library +############################################################ + +#Generate the static library from the library sources +add_library(hello_library STATIC + src/Hello.cpp +) + +target_include_directories(hello_library + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) + + +############################################################ +# Create an executable +############################################################ + +# Add an executable with the above sources +add_executable(hello_binary + src/main.cpp +) + +# link the new hello_library target with the hello_binary target +target_link_libraries( hello_binary + PRIVATE + hello_library +) diff --git a/entry/3rdParty/cmake-examples/C-static-library/README.adoc b/entry/3rdParty/cmake-examples/C-static-library/README.adoc new file mode 100644 index 0000000..5f30a87 --- /dev/null +++ b/entry/3rdParty/cmake-examples/C-static-library/README.adoc @@ -0,0 +1,164 @@ += Static Library +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +Shows a hello world example which first creates and links a static library. This is a +simplified example showing the library and binary in the same folder. Typically +these would be in sub-projects as described in section link:../../02-sub-projects[02-sub-projects] + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── include +│   └── static +│   └── Hello.h +└── src + ├── Hello.cpp + └── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:include/static/Hello.h[] - The header file to include + * link:src/Hello.cpp[] - A source file to compile + * link:src/main.cpp[] - The source file with main + + +# Concepts + +## Adding a Static Library + +The +add_library()+ function is used to create a library from some source files. +This is called as follows: + +[source,cmake] +---- +add_library(hello_library STATIC + src/Hello.cpp +) +---- + +This will be used to create a static library with the name libhello_library.a with +the sources in the +add_library+ call. + +[NOTE] +==== +As mentioned in the previous example, we pass the source files directly to the ++add_library+ call, as recommended for modern CMake. +==== + +## Populating Including Directories + +In this example, we include directories in the library using the +target_include_directories()+ function with the scope set to +PUBLIC+. + +[source,cmake] +---- +target_include_directories(hello_library + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) +---- + +This will cause the included directory used in the following places: + +* When compiling the library +* When compiling any additional target that links the library. + +The meaning of scopes are: + +* +PRIVATE+ - the directory is added to this target's include directories +* +INTERFACE+ - the directory is added to the include directories for any targets that link this library. +* +PUBLIC+ - As above, it is included in this library and also any targets that link this library. + + +[TIP] +==== +For public headers it is often a good idea to have your include folder be "namespaced" +with sub-directories. + +The directory passed to +target_include_directories+ will be the root of your +include directory tree and your C++ files should include the path from there to your header. + +For this example you can see that we do it as follows: +[source,cpp] +---- +#include "static/Hello.h" +---- + +Using this method means that there is less chance of header filename clashes when +you use multiple libraries in your project. +==== + +## Linking a Library + +When creating an executable that will use your library you must tell the compiler +about the library. This can be done using the +target_link_libraries()+ function. + +[source,cmake] +---- +add_executable(hello_binary + src/main.cpp +) + +target_link_libraries( hello_binary + PRIVATE + hello_library +) +---- + +This tells CMake to link the hello_library against the hello_binary executable +during link time. It will also propagate any include directories with +PUBLIC+ or +INTERFACE+ scope + from the linked library target. + +An example of this being called by the compiler is + +``` +/usr/bin/c++ CMakeFiles/hello_binary.dir/src/main.cpp.o -o hello_binary -rdynamic libhello_library.a +``` + + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/C-static-library/build + +$ make +Scanning dependencies of target hello_library +[ 50%] Building CXX object CMakeFiles/hello_library.dir/src/Hello.cpp.o +Linking CXX static library libhello_library.a +[ 50%] Built target hello_library +Scanning dependencies of target hello_binary +[100%] Building CXX object CMakeFiles/hello_binary.dir/src/main.cpp.o +Linking CXX executable hello_binary +[100%] Built target hello_binary + +$ ls +CMakeCache.txt CMakeFiles cmake_install.cmake hello_binary libhello_library.a Makefile + +$ ./hello_binary +Hello Static Library! +---- diff --git a/entry/3rdParty/cmake-examples/C-static-library/include/static/Hello.h b/entry/3rdParty/cmake-examples/C-static-library/include/static/Hello.h new file mode 100644 index 0000000..f838400 --- /dev/null +++ b/entry/3rdParty/cmake-examples/C-static-library/include/static/Hello.h @@ -0,0 +1,10 @@ +#ifndef __HELLO_H__ +#define __HELLO_H__ + +class Hello +{ +public: + void print(); +}; + +#endif diff --git a/entry/3rdParty/cmake-examples/C-static-library/src/Hello.cpp b/entry/3rdParty/cmake-examples/C-static-library/src/Hello.cpp new file mode 100644 index 0000000..3b15c03 --- /dev/null +++ b/entry/3rdParty/cmake-examples/C-static-library/src/Hello.cpp @@ -0,0 +1,8 @@ +#include + +#include "static/Hello.h" + +void Hello::print() +{ + std::cout << "Hello Static Library!" << std::endl; +} diff --git a/entry/3rdParty/cmake-examples/C-static-library/src/main.cpp b/entry/3rdParty/cmake-examples/C-static-library/src/main.cpp new file mode 100644 index 0000000..bec6b3e --- /dev/null +++ b/entry/3rdParty/cmake-examples/C-static-library/src/main.cpp @@ -0,0 +1,8 @@ +#include "static/Hello.h" + +int main(int argc, char *argv[]) +{ + Hello hi; + hi.print(); + return 0; +} diff --git a/entry/3rdParty/cmake-examples/D-shared-library/CMakeLists.txt b/entry/3rdParty/cmake-examples/D-shared-library/CMakeLists.txt new file mode 100644 index 0000000..49bf0d3 --- /dev/null +++ b/entry/3rdParty/cmake-examples/D-shared-library/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.5) + +project(hello_library) + +############################################################ +# Create a library +############################################################ + +#Generate the shared library from the library sources +add_library(hello_library SHARED + src/Hello.cpp +) +add_library(hello::library ALIAS hello_library) + +target_include_directories(hello_library + PUBLIC + ${PROJECT_SOURCE_DIR}/include +) + +############################################################ +# Create an executable +############################################################ + +# Add an executable with the above sources +add_executable(hello_binary + src/main.cpp +) + +# link the new hello_library target with the hello_binary target +target_link_libraries( hello_binary + PRIVATE + hello::library +) diff --git a/entry/3rdParty/cmake-examples/D-shared-library/README.adoc b/entry/3rdParty/cmake-examples/D-shared-library/README.adoc new file mode 100644 index 0000000..adda586 --- /dev/null +++ b/entry/3rdParty/cmake-examples/D-shared-library/README.adoc @@ -0,0 +1,125 @@ += Shared Library +:toc: +:toc-placement!: + +toc::[] + +# Introduction + +Shows a hello world example which first creates and links a shared library. + +This also shows how to create an link:https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#alias-targets[alias target] + +The files in this tutorial are below: + +``` +$ tree +. +├── CMakeLists.txt +├── include +│   └── shared +│   └── Hello.h +└── src + ├── Hello.cpp + └── main.cpp +``` + + * link:CMakeLists.txt[] - Contains the CMake commands you wish to run + * link:include/shared/Hello.h[] - The header file to include + * link:src/Hello.cpp[] - A source file to compile + * link:src/main.cpp[] - The source file with main + + +# Concepts + +## Adding a Shared Library + +As with the previous example on static libraries, the +add_library()+ function +is also used to create a shared library from some source files. +This is called as follows: + +[source,cmake] +---- +add_library(hello_library SHARED + src/Hello.cpp +) +---- + +This will be used to create a shared library with the name libhello_library.so with +the sources passed to the +add_library()+ function. + +## Alias Target + +As the name suggests an link:https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#alias-targets[alias target] is an alternative name for a target that can be used instead of the real target name in read-only contexts. + +[source,cmake] +---- +add_library(hello::library ALIAS hello_library) +---- + +As shown below, this allows you to reference the target using the alias name when linking it against other targets. + +## Linking a Shared Library + +Linking a shared library is the same as linking a static library. When creating your +executable use the the +target_link_library()+ function to point to your library + +[source,cmake] +---- +add_executable(hello_binary + src/main.cpp +) + +target_link_libraries(hello_binary + PRIVATE + hello::library +) +---- + +This tells CMake to link the hello_library against the hello_binary executable using the alias target name. + +An example of this being called by the linker is + +``` +/usr/bin/c++ CMakeFiles/hello_binary.dir/src/main.cpp.o -o hello_binary -rdynamic libhello_library.so -Wl,-rpath,/home/matrim/workspace/cmake-examples/01-basic/D-shared-library/build +``` + +# Building the Example + +[source,bash] +---- +$ mkdir build + +$ cd build + +$ cmake .. +-- The C compiler identification is GNU 4.8.4 +-- The CXX compiler identification is GNU 4.8.4 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Configuring done +-- Generating done +-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/D-shared-library/build + +$ make +Scanning dependencies of target hello_library +[ 50%] Building CXX object CMakeFiles/hello_library.dir/src/Hello.cpp.o +Linking CXX shared library libhello_library.so +[ 50%] Built target hello_library +Scanning dependencies of target hello_binary +[100%] Building CXX object CMakeFiles/hello_binary.dir/src/main.cpp.o +Linking CXX executable hello_binary +[100%] Built target hello_binary + +$ ls +CMakeCache.txt CMakeFiles cmake_install.cmake hello_binary libhello_library.so Makefile + +$ ./hello_binary +Hello Shared Library! +---- diff --git a/entry/3rdParty/cmake-examples/D-shared-library/include/shared/Hello.h b/entry/3rdParty/cmake-examples/D-shared-library/include/shared/Hello.h new file mode 100644 index 0000000..f838400 --- /dev/null +++ b/entry/3rdParty/cmake-examples/D-shared-library/include/shared/Hello.h @@ -0,0 +1,10 @@ +#ifndef __HELLO_H__ +#define __HELLO_H__ + +class Hello +{ +public: + void print(); +}; + +#endif diff --git a/entry/3rdParty/cmake-examples/D-shared-library/src/Hello.cpp b/entry/3rdParty/cmake-examples/D-shared-library/src/Hello.cpp new file mode 100644 index 0000000..865e58f --- /dev/null +++ b/entry/3rdParty/cmake-examples/D-shared-library/src/Hello.cpp @@ -0,0 +1,8 @@ +#include + +#include "shared/Hello.h" + +void Hello::print() +{ + std::cout << "Hello Shared Library!" << std::endl; +} diff --git a/entry/3rdParty/cmake-examples/D-shared-library/src/main.cpp b/entry/3rdParty/cmake-examples/D-shared-library/src/main.cpp new file mode 100644 index 0000000..a57a9e9 --- /dev/null +++ b/entry/3rdParty/cmake-examples/D-shared-library/src/main.cpp @@ -0,0 +1,8 @@ +#include "shared/Hello.h" + +int main(int argc, char *argv[]) +{ + Hello hi; + hi.print(); + return 0; +} diff --git a/entry/oh-package-lock.json5 b/entry/oh-package-lock.json5 new file mode 100644 index 0000000..bc2eb12 --- /dev/null +++ b/entry/oh-package-lock.json5 @@ -0,0 +1,35 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@types/libtetrahedron_napi.so@src/main/cpp/type/libentry": "@types/libtetrahedron_napi.so@src/main/cpp/type/libentry", + "harlibrary@../harlibrary": "harlibrary@../harlibrary", + "libharlibrary.so@../harlibrary/src/main/cpp/types/libharlibrary": "libharlibrary.so@../harlibrary/src/main/cpp/types/libharlibrary" + }, + "packages": { + "@types/libtetrahedron_napi.so@src/main/cpp/type/libentry": { + "name": "@types/libtetrahedron_napi.so", + "version": "1.0.0", + "resolved": "src/main/cpp/type/libentry", + "registryType": "local" + }, + "harlibrary@../harlibrary": { + "name": "harlibrary", + "version": "1.0.0", + "resolved": "../harlibrary", + "registryType": "local", + "dependencies": { + "libharlibrary.so": "file:./src/main/cpp/types/libharlibrary" + } + }, + "libharlibrary.so@../harlibrary/src/main/cpp/types/libharlibrary": { + "name": "libharlibrary.so", + "version": "1.0.0", + "resolved": "../harlibrary/src/main/cpp/types/libharlibrary", + "registryType": "local" + } + } +} \ No newline at end of file diff --git a/entry/oh-package.json5 b/entry/oh-package.json5 index 67f85d4..287c9eb 100644 --- a/entry/oh-package.json5 +++ b/entry/oh-package.json5 @@ -1,18 +1,3 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - { "license": "", "devDependencies": { @@ -23,5 +8,8 @@ "description": "Please describe the basic information.", "main": "1.0.0", "version": "1.0.0", - "dependencies": {} -} + "dynamicDependencies": {}, + "dependencies": { + "harlibrary": "file:../harlibrary" + } +} \ No newline at end of file diff --git a/entry/oh_modules/@types/libtetrahedron_napi.so/oh-package.json5 b/entry/oh_modules/@types/libtetrahedron_napi.so/oh-package.json5 new file mode 100644 index 0000000..7339ead --- /dev/null +++ b/entry/oh_modules/@types/libtetrahedron_napi.so/oh-package.json5 @@ -0,0 +1,6 @@ +{ + "name": "@types/libtetrahedron_napi.so", + "types": "./tetrahedron_napi.d.ts", + "version": "1.0.0", + "description": "Please describe the basic information." +} \ No newline at end of file diff --git a/entry/oh_modules/@types/libtetrahedron_napi.so/tetrahedron_napi.d.ts b/entry/oh_modules/@types/libtetrahedron_napi.so/tetrahedron_napi.d.ts new file mode 100644 index 0000000..179a6b5 --- /dev/null +++ b/entry/oh_modules/@types/libtetrahedron_napi.so/tetrahedron_napi.d.ts @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const updateAngle: (offsetX: number, offsetY: number) => Array; +export const setRotate: (mode: number) => void; \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/.gitignore b/entry/oh_modules/harlibrary/.gitignore new file mode 100644 index 0000000..e2713a2 --- /dev/null +++ b/entry/oh_modules/harlibrary/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/BuildProfile.ets b/entry/oh_modules/harlibrary/BuildProfile.ets new file mode 100644 index 0000000..3a501e5 --- /dev/null +++ b/entry/oh_modules/harlibrary/BuildProfile.ets @@ -0,0 +1,17 @@ +/** + * Use these variables when you tailor your ArkTS code. They must be of the const type. + */ +export const HAR_VERSION = '1.0.0'; +export const BUILD_MODE_NAME = 'debug'; +export const DEBUG = true; +export const TARGET_NAME = 'default'; + +/** + * BuildProfile Class is used only for compatibility purposes. + */ +export default class BuildProfile { + static readonly HAR_VERSION = HAR_VERSION; + static readonly BUILD_MODE_NAME = BUILD_MODE_NAME; + static readonly DEBUG = DEBUG; + static readonly TARGET_NAME = TARGET_NAME; +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/Index.ets b/entry/oh_modules/harlibrary/Index.ets new file mode 100644 index 0000000..10ebb3e --- /dev/null +++ b/entry/oh_modules/harlibrary/Index.ets @@ -0,0 +1 @@ +export { MainPage } from './src/main/ets/components/MainPage' diff --git a/entry/oh_modules/harlibrary/build-profile.json5 b/entry/oh_modules/harlibrary/build-profile.json5 new file mode 100644 index 0000000..8603ec2 --- /dev/null +++ b/entry/oh_modules/harlibrary/build-profile.json5 @@ -0,0 +1,43 @@ +{ + "apiType": "stageMode", + "buildOption": { + "externalNativeOptions": { + "path": "./src/main/cpp/CMakeLists.txt", + "arguments": "", + "cppFlags": "", + "abiFilters": [ "arm64-v8a", "x86_64"] + }, + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + "nativeLib": { + "debugSymbol": { + "strip": true, + "exclude": [] + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest" + } + ] +} diff --git a/entry/oh_modules/harlibrary/consumer-rules.txt b/entry/oh_modules/harlibrary/consumer-rules.txt new file mode 100644 index 0000000..e69de29 diff --git a/entry/oh_modules/harlibrary/hvigorfile.ts b/entry/oh_modules/harlibrary/hvigorfile.ts new file mode 100644 index 0000000..4218707 --- /dev/null +++ b/entry/oh_modules/harlibrary/hvigorfile.ts @@ -0,0 +1,6 @@ +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/entry/oh_modules/harlibrary/obfuscation-rules.txt b/entry/oh_modules/harlibrary/obfuscation-rules.txt new file mode 100644 index 0000000..272efb6 --- /dev/null +++ b/entry/oh_modules/harlibrary/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/oh-package-lock.json5 b/entry/oh_modules/harlibrary/oh-package-lock.json5 new file mode 100644 index 0000000..08cbf90 --- /dev/null +++ b/entry/oh_modules/harlibrary/oh-package-lock.json5 @@ -0,0 +1,18 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "libharlibrary.so@src/main/cpp/types/libharlibrary": "libharlibrary.so@src/main/cpp/types/libharlibrary" + }, + "packages": { + "libharlibrary.so@src/main/cpp/types/libharlibrary": { + "name": "libharlibrary.so", + "version": "1.0.0", + "resolved": "src/main/cpp/types/libharlibrary", + "registryType": "local" + } + } +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/oh-package.json5 b/entry/oh_modules/harlibrary/oh-package.json5 new file mode 100644 index 0000000..837100c --- /dev/null +++ b/entry/oh_modules/harlibrary/oh-package.json5 @@ -0,0 +1,11 @@ +{ + "name": "harlibrary", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "Index.ets", + "author": "", + "license": "Apache-2.0", + "dependencies": { + "libharlibrary.so": "file:./src/main/cpp/types/libharlibrary" + } +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/cpp/CMakeLists.txt b/entry/oh_modules/harlibrary/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000..822c186 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(myNpmLib) + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + +if(DEFINED PACKAGE_FIND_FILE) + include(${PACKAGE_FIND_FILE}) +endif() + +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include) + +add_library(harlibrary SHARED napi_init.cpp) +target_link_libraries(harlibrary PUBLIC libace_napi.z.so) diff --git a/entry/oh_modules/harlibrary/src/main/cpp/napi_init.cpp b/entry/oh_modules/harlibrary/src/main/cpp/napi_init.cpp new file mode 100644 index 0000000..55a35d8 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/cpp/napi_init.cpp @@ -0,0 +1,53 @@ +#include "napi/native_api.h" + +static napi_value Add(napi_env env, napi_callback_info info) +{ + size_t argc = 2; + napi_value args[2] = {nullptr}; + + napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); + + napi_valuetype valuetype0; + napi_typeof(env, args[0], &valuetype0); + + napi_valuetype valuetype1; + napi_typeof(env, args[1], &valuetype1); + + double value0; + napi_get_value_double(env, args[0], &value0); + + double value1; + napi_get_value_double(env, args[1], &value1); + + napi_value sum; + napi_create_double(env, value0 + value1, &sum); + + return sum; + +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr } + }; + napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); + return exports; +} +EXTERN_C_END + +static napi_module demoModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, + .nm_modname = "harlibrary", + .nm_priv = ((void*)0), + .reserved = { 0 }, +}; + +extern "C" __attribute__((constructor)) void RegisterHarlibraryModule(void) +{ + napi_module_register(&demoModule); +} diff --git a/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts b/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts new file mode 100644 index 0000000..e44f361 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts @@ -0,0 +1 @@ +export const add: (a: number, b: number) => number; \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 b/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 new file mode 100644 index 0000000..f57e84d --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 @@ -0,0 +1,6 @@ +{ + "name": "libharlibrary.so", + "types": "./Index.d.ts", + "version": "1.0.0", + "description": "Please describe the basic information." +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/ets/components/MainPage.ets b/entry/oh_modules/harlibrary/src/main/ets/components/MainPage.ets new file mode 100644 index 0000000..ddbd01c --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/ets/components/MainPage.ets @@ -0,0 +1,22 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libharlibrary.so'; + +@Component +export struct MainPage { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/ets/utils/ComponentUtils.ets b/entry/oh_modules/harlibrary/src/main/ets/utils/ComponentUtils.ets new file mode 100644 index 0000000..581eb9f --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/ets/utils/ComponentUtils.ets @@ -0,0 +1,7 @@ +import lang from '@arkts.lang'; + +struct A implements ISendable { + +}; +export function hello() { +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/ets/utils/PropertyUtils.ts b/entry/oh_modules/harlibrary/src/main/ets/utils/PropertyUtils.ts new file mode 100644 index 0000000..b73e65f --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/ets/utils/PropertyUtils.ts @@ -0,0 +1,25 @@ +import batteryInfo from '@ohos.batteryInfo'; +import deviceInfo from '@ohos.deviceInfo'; + +export function SetToGlobal(key: string, obj: unknown): void { + globalThis[key] = obj; +} + +export function GetFromGlobal(key: string) { + return globalThis[key]; +} + +export function InitGlobalContext(data) +{ + globalThis.context = data; + globalThis.context.batteryInfo = batteryInfo; + globalThis.context.deviceInfo = deviceInfo; +} + +export function SetToGlobalContext(key, value) { + globalThis.context[key] = value; +} + +export function GetFromGlobalContext(key) { + return globalThis.context[key]; +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/module.json5 b/entry/oh_modules/harlibrary/src/main/module.json5 new file mode 100644 index 0000000..e4d7b34 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/module.json5 @@ -0,0 +1,12 @@ +{ + "module": { + "name": "harlibrary", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1", + "car" + ] + } +} diff --git a/entry/oh_modules/harlibrary/src/main/resources/base/element/string.json b/entry/oh_modules/harlibrary/src/main/resources/base/element/string.json new file mode 100644 index 0000000..f51a9c8 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/entry/oh_modules/harlibrary/src/main/resources/en_US/element/string.json b/entry/oh_modules/harlibrary/src/main/resources/en_US/element/string.json new file mode 100644 index 0000000..f51a9c8 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/resources/en_US/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/entry/oh_modules/harlibrary/src/main/resources/zh_CN/element/string.json b/entry/oh_modules/harlibrary/src/main/resources/zh_CN/element/string.json new file mode 100644 index 0000000..f51a9c8 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/entry/oh_modules/harlibrary/src/ohosTest/ets/test/Ability.test.ets b/entry/oh_modules/harlibrary/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000..85c78f6 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,35 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/ohosTest/ets/test/List.test.ets b/entry/oh_modules/harlibrary/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000..794c7dc --- /dev/null +++ b/entry/oh_modules/harlibrary/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,5 @@ +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/ohosTest/module.json5 b/entry/oh_modules/harlibrary/src/ohosTest/module.json5 new file mode 100644 index 0000000..57fd445 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/ohosTest/module.json5 @@ -0,0 +1,14 @@ +{ + "module": { + "name": "harlibrary_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet", + "2in1", + "car" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/entry/oh_modules/harlibrary/src/test/List.test.ets b/entry/oh_modules/harlibrary/src/test/List.test.ets new file mode 100644 index 0000000..bb5b5c3 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/test/List.test.ets @@ -0,0 +1,5 @@ +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/test/LocalUnit.test.ets b/entry/oh_modules/harlibrary/src/test/LocalUnit.test.ets new file mode 100644 index 0000000..165fc16 --- /dev/null +++ b/entry/oh_modules/harlibrary/src/test/LocalUnit.test.ets @@ -0,0 +1,33 @@ +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index 34b629d..ce0de6c 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -16,6 +16,7 @@ import { UIAbility,AbilityConstant,Want } from '@kit.AbilityKit' import { window } from '@kit.ArkUI' import { Logger } from '../utils/Logger'; +import { BusinessError } from '@kit.BasicServicesKit'; export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { @@ -30,13 +31,60 @@ export default class EntryAbility extends UIAbility { // Main window is created, set main page for this ability Logger.info('Ability onWindowStageCreate'); + windowStage.loadContent('pages/Index', (err, data) => { if (err.code) { Logger.error('Failed to load the content. Cause: ' + JSON.stringify(err)); return; } Logger.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); + + // get main window of application + let windowClass: window.Window = windowStage.getMainWindowSync(); + let isLayoutFullScreen = true; + windowClass.setWindowLayoutFullScreen(isLayoutFullScreen).then(() => { + console.info('Succeeded in setting the window layout to full-screen mode.'); + }).catch((err: BusinessError) => { + console.error('Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(err)); + }); + + // get avoid area + let type = window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR; // navigator avoid + let avoidArea = windowClass.getWindowAvoidArea(type); + let bottomRectHeight = avoidArea.bottomRect.height; + AppStorage.setOrCreate('bottomRectHeight', bottomRectHeight); + + type = window.AvoidAreaType.TYPE_SYSTEM; // status avoid area + avoidArea = windowClass.getWindowAvoidArea(type); + let topRectHeight = avoidArea.topRect.height; + AppStorage.setOrCreate('topRectHeight', topRectHeight); + + // register events to dynamically get area data + windowClass.on('avoidAreaChange', (data) => { + if (data.type === window.AvoidAreaType.TYPE_SYSTEM) { + let topRectHeight = data.area.topRect.height; + AppStorage.setOrCreate('topRectHeight', topRectHeight); + } else if (data.type == window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR) { + let bottomRectHeight = data.area.bottomRect.height; + AppStorage.setOrCreate('bottomRectHeight', bottomRectHeight); + } + }); + + // hide status + windowClass.setSpecificSystemBarEnabled('status', false).then(() => { + console.info('Succeeded in setting the status bar to be invisible.'); + }).catch((err: BusinessError) => { + console.error(`Failed to set the status bar to be invisible. Code is ${err.code}, message is ${err.message}`); + }); + // hide navigation + windowClass.setSpecificSystemBarEnabled('navigationIndicator', false).then(() => { + console.info('Succeeded in setting the navigation indicator to be invisible.'); + }).catch((err: BusinessError) => { + console.error(`Failed to set the navigation indicator to be invisible. Code is ${err.code}, message is ${err.message}`); + }); }); + + } onWindowStageDestroy() { diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 6e92c82..ac11574 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -14,9 +14,11 @@ */ import { Logger } from '../utils/Logger'; + import tetrahedron_napi from 'libtetrahedron_napi.so'; import { resourceManager } from '@kit.LocalizationKit'; import { RotationType } from '../utils/Constants'; +import harlibrary from 'libharlibrary.so' @Entry @Component @@ -31,33 +33,14 @@ struct Index { Logger.info('aboutToAppear'); this.angleArray[0] = 30; this.angleArray[1] = 45; + Logger.info('Ability before call'); let resourceManager: resourceManager.ResourceManager = getContext(this).resourceManager; + Logger.info('Ability after call'); this.shaftRotation = await resourceManager.getStringValue($r('app.string.shaftRotation').id); } build() { - Column() { - Text($r('app.string.EntryAbility_desc')) - .fontSize($r('app.float.head_font_24')) - .lineHeight($r('app.float.wh_value_33')) - .fontFamily('HarmonyHeiTi-Bold') - .fontWeight(FontWeight.Bold) - .fontColor($r('app.color.font_color_182431')) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .textAlign(TextAlign.Start) - .margin({ top: $r('app.float.wh_value_13'), bottom: $r('app.float.wh_value_15') }) - - Text('X ' + this.shaftRotation + ':' + this.angleArray[0].toString() - + '°\nY ' + this.shaftRotation + ':' + this.angleArray[1].toString() + '°') - .fontSize($r('app.float.head_font_24')) - .lineHeight($r('app.float.wh_value_33')) - .fontFamily('HarmonyHeiTi-Bold') - .fontWeight(FontWeight.Bold) - .fontColor($r('app.color.font_color_182431')) - .textOverflow({ overflow: TextOverflow.Ellipsis }) - .textAlign(TextAlign.Start) - .margin({ top: $r('app.float.wh_value_13'), bottom: $r('app.float.wh_value_15') }) - + Row() { Column() { XComponent({ id: this.xComponentId, @@ -66,9 +49,10 @@ struct Index { }) .onLoad(() => { Logger.info('onLoad'); + Logger.info('har library' + harlibrary.add(3, 4).toString()); }) - .width($r('app.float.wh_value_360')) - .height($r('app.float.wh_value_360')) + .width($r('app.float.wh_value_720')) + .height($r('app.float.wh_value_720')) .key('tetrahedron') .onDestroy(() => { Logger.info('onDestroy'); @@ -76,67 +60,26 @@ struct Index { .id('xComponent') .backgroundColor(Color.White) } - .justifyContent(FlexAlign.SpaceAround) .alignItems(HorizontalAlign.Center) - .height('70%') + .justifyContent(FlexAlign.SpaceBetween) + .height('100%') .width('100%') .backgroundColor(Color.White) - .borderRadius(24) - - Row({ space: 12 }) { - Button(this.enableRotate ? $r('app.string.btn_stop_rotation') : $r('app.string.btn_auto_rotation'), - { type: ButtonType.Capsule, stateEffect: true }) - .fontSize($r('app.float.head_font_24')) - .margin({ - top: $r('app.float.wh_value_13'), - bottom: $r('app.float.wh_value_15'), - left: $r('app.float.wh_value_13'), - right: $r('app.float.wh_value_13') - }) - .onClick(() => { - if (this.enableRotate) { - tetrahedron_napi.setRotate(RotationType.STOP); - this.enableRotate = false; - } else { - tetrahedron_napi.setRotate(RotationType.AUTO); - this.enableRotate = true; - } - }) - .layoutWeight(1) - - Button($r('app.string.btn_damping_rotation'), { type: ButtonType.Capsule, stateEffect: true }) - .fontSize($r('app.float.head_font_24')) - .margin({ - top: $r('app.float.wh_value_13'), - bottom: $r('app.float.wh_value_15'), - left: $r('app.float.wh_value_13'), - right: $r('app.float.wh_value_13') + .gesture( + PanGesture(this.panOption) + .onActionStart((event: GestureEvent) => { + Logger.info('Gesture onActionStart'); }) - .onClick(() => { + .onActionUpdate((event: GestureEvent) => { + tetrahedron_napi.setRotate(RotationType.STOP); this.enableRotate = false; - tetrahedron_napi.setRotate(RotationType.DAMPING); + this.angleArray = tetrahedron_napi.updateAngle(event.offsetX, event.offsetY); + Logger.info('Gesture onActionUpdate : offSet ' + event.offsetX + ',' + event.offsetY); }) - .layoutWeight(1) - } + .onActionEnd(() => { + Logger.info('Gesture onActionEnd'); + }) + ) } - .gesture( - PanGesture(this.panOption) - .onActionStart((event: GestureEvent) => { - Logger.info('Gesture onActionStart'); - }) - .onActionUpdate((event: GestureEvent) => { - tetrahedron_napi.setRotate(RotationType.STOP); - this.enableRotate = false; - this.angleArray = tetrahedron_napi.updateAngle(event.offsetX, event.offsetY); - Logger.info('Gesture onActionUpdate : offSet ' + event.offsetX + ',' + event.offsetY); - }) - .onActionEnd(() => { - Logger.info('Gesture onActionEnd'); - }) - ) - .padding(12) - .backgroundColor($r('sys.color.comp_background_focus')) - .height('100%') - .justifyContent(FlexAlign.SpaceBetween) } } diff --git a/entry/src/main/module.json5 b/entry/src/main/module.json5 index eb02efb..cc3a198 100644 --- a/entry/src/main/module.json5 +++ b/entry/src/main/module.json5 @@ -20,7 +20,8 @@ "description": "$string:module_desc", "mainElement": "EntryAbility", "deviceTypes": [ - "phone" + "phone", + "tablet" ], "deliveryWithInstall": true, "installationFree": false, diff --git a/harlibrary/.gitignore b/harlibrary/.gitignore new file mode 100644 index 0000000..e2713a2 --- /dev/null +++ b/harlibrary/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/harlibrary/BuildProfile.ets b/harlibrary/BuildProfile.ets new file mode 100644 index 0000000..3a501e5 --- /dev/null +++ b/harlibrary/BuildProfile.ets @@ -0,0 +1,17 @@ +/** + * Use these variables when you tailor your ArkTS code. They must be of the const type. + */ +export const HAR_VERSION = '1.0.0'; +export const BUILD_MODE_NAME = 'debug'; +export const DEBUG = true; +export const TARGET_NAME = 'default'; + +/** + * BuildProfile Class is used only for compatibility purposes. + */ +export default class BuildProfile { + static readonly HAR_VERSION = HAR_VERSION; + static readonly BUILD_MODE_NAME = BUILD_MODE_NAME; + static readonly DEBUG = DEBUG; + static readonly TARGET_NAME = TARGET_NAME; +} \ No newline at end of file diff --git a/harlibrary/Index.ets b/harlibrary/Index.ets new file mode 100644 index 0000000..10ebb3e --- /dev/null +++ b/harlibrary/Index.ets @@ -0,0 +1 @@ +export { MainPage } from './src/main/ets/components/MainPage' diff --git a/harlibrary/build-profile.json5 b/harlibrary/build-profile.json5 new file mode 100644 index 0000000..8603ec2 --- /dev/null +++ b/harlibrary/build-profile.json5 @@ -0,0 +1,43 @@ +{ + "apiType": "stageMode", + "buildOption": { + "externalNativeOptions": { + "path": "./src/main/cpp/CMakeLists.txt", + "arguments": "", + "cppFlags": "", + "abiFilters": [ "arm64-v8a", "x86_64"] + }, + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + "nativeLib": { + "debugSymbol": { + "strip": true, + "exclude": [] + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest" + } + ] +} diff --git a/harlibrary/consumer-rules.txt b/harlibrary/consumer-rules.txt new file mode 100644 index 0000000..e69de29 diff --git a/harlibrary/hvigorfile.ts b/harlibrary/hvigorfile.ts new file mode 100644 index 0000000..4218707 --- /dev/null +++ b/harlibrary/hvigorfile.ts @@ -0,0 +1,6 @@ +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/harlibrary/obfuscation-rules.txt b/harlibrary/obfuscation-rules.txt new file mode 100644 index 0000000..272efb6 --- /dev/null +++ b/harlibrary/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/harlibrary/oh-package-lock.json5 b/harlibrary/oh-package-lock.json5 new file mode 100644 index 0000000..08cbf90 --- /dev/null +++ b/harlibrary/oh-package-lock.json5 @@ -0,0 +1,18 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "libharlibrary.so@src/main/cpp/types/libharlibrary": "libharlibrary.so@src/main/cpp/types/libharlibrary" + }, + "packages": { + "libharlibrary.so@src/main/cpp/types/libharlibrary": { + "name": "libharlibrary.so", + "version": "1.0.0", + "resolved": "src/main/cpp/types/libharlibrary", + "registryType": "local" + } + } +} \ No newline at end of file diff --git a/harlibrary/oh-package.json5 b/harlibrary/oh-package.json5 new file mode 100644 index 0000000..837100c --- /dev/null +++ b/harlibrary/oh-package.json5 @@ -0,0 +1,11 @@ +{ + "name": "harlibrary", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "Index.ets", + "author": "", + "license": "Apache-2.0", + "dependencies": { + "libharlibrary.so": "file:./src/main/cpp/types/libharlibrary" + } +} \ No newline at end of file diff --git a/harlibrary/src/main/cpp/CMakeLists.txt b/harlibrary/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000..822c186 --- /dev/null +++ b/harlibrary/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(myNpmLib) + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + +if(DEFINED PACKAGE_FIND_FILE) + include(${PACKAGE_FIND_FILE}) +endif() + +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include) + +add_library(harlibrary SHARED napi_init.cpp) +target_link_libraries(harlibrary PUBLIC libace_napi.z.so) diff --git a/harlibrary/src/main/cpp/napi_init.cpp b/harlibrary/src/main/cpp/napi_init.cpp new file mode 100644 index 0000000..55a35d8 --- /dev/null +++ b/harlibrary/src/main/cpp/napi_init.cpp @@ -0,0 +1,53 @@ +#include "napi/native_api.h" + +static napi_value Add(napi_env env, napi_callback_info info) +{ + size_t argc = 2; + napi_value args[2] = {nullptr}; + + napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); + + napi_valuetype valuetype0; + napi_typeof(env, args[0], &valuetype0); + + napi_valuetype valuetype1; + napi_typeof(env, args[1], &valuetype1); + + double value0; + napi_get_value_double(env, args[0], &value0); + + double value1; + napi_get_value_double(env, args[1], &value1); + + napi_value sum; + napi_create_double(env, value0 + value1, &sum); + + return sum; + +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr } + }; + napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); + return exports; +} +EXTERN_C_END + +static napi_module demoModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, + .nm_modname = "harlibrary", + .nm_priv = ((void*)0), + .reserved = { 0 }, +}; + +extern "C" __attribute__((constructor)) void RegisterHarlibraryModule(void) +{ + napi_module_register(&demoModule); +} diff --git a/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts b/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts new file mode 100644 index 0000000..e44f361 --- /dev/null +++ b/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts @@ -0,0 +1 @@ +export const add: (a: number, b: number) => number; \ No newline at end of file diff --git a/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 b/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 new file mode 100644 index 0000000..f57e84d --- /dev/null +++ b/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 @@ -0,0 +1,6 @@ +{ + "name": "libharlibrary.so", + "types": "./Index.d.ts", + "version": "1.0.0", + "description": "Please describe the basic information." +} \ No newline at end of file diff --git a/harlibrary/src/main/ets/components/MainPage.ets b/harlibrary/src/main/ets/components/MainPage.ets new file mode 100644 index 0000000..ddbd01c --- /dev/null +++ b/harlibrary/src/main/ets/components/MainPage.ets @@ -0,0 +1,22 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libharlibrary.so'; + +@Component +export struct MainPage { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/harlibrary/src/main/ets/utils/ComponentUtils.ets b/harlibrary/src/main/ets/utils/ComponentUtils.ets new file mode 100644 index 0000000..581eb9f --- /dev/null +++ b/harlibrary/src/main/ets/utils/ComponentUtils.ets @@ -0,0 +1,7 @@ +import lang from '@arkts.lang'; + +struct A implements ISendable { + +}; +export function hello() { +} \ No newline at end of file diff --git a/harlibrary/src/main/ets/utils/PropertyUtils.ts b/harlibrary/src/main/ets/utils/PropertyUtils.ts new file mode 100644 index 0000000..b73e65f --- /dev/null +++ b/harlibrary/src/main/ets/utils/PropertyUtils.ts @@ -0,0 +1,25 @@ +import batteryInfo from '@ohos.batteryInfo'; +import deviceInfo from '@ohos.deviceInfo'; + +export function SetToGlobal(key: string, obj: unknown): void { + globalThis[key] = obj; +} + +export function GetFromGlobal(key: string) { + return globalThis[key]; +} + +export function InitGlobalContext(data) +{ + globalThis.context = data; + globalThis.context.batteryInfo = batteryInfo; + globalThis.context.deviceInfo = deviceInfo; +} + +export function SetToGlobalContext(key, value) { + globalThis.context[key] = value; +} + +export function GetFromGlobalContext(key) { + return globalThis.context[key]; +} \ No newline at end of file diff --git a/harlibrary/src/main/module.json5 b/harlibrary/src/main/module.json5 new file mode 100644 index 0000000..e4d7b34 --- /dev/null +++ b/harlibrary/src/main/module.json5 @@ -0,0 +1,12 @@ +{ + "module": { + "name": "harlibrary", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1", + "car" + ] + } +} diff --git a/harlibrary/src/main/resources/base/element/string.json b/harlibrary/src/main/resources/base/element/string.json new file mode 100644 index 0000000..f51a9c8 --- /dev/null +++ b/harlibrary/src/main/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/harlibrary/src/main/resources/en_US/element/string.json b/harlibrary/src/main/resources/en_US/element/string.json new file mode 100644 index 0000000..f51a9c8 --- /dev/null +++ b/harlibrary/src/main/resources/en_US/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/harlibrary/src/main/resources/zh_CN/element/string.json b/harlibrary/src/main/resources/zh_CN/element/string.json new file mode 100644 index 0000000..f51a9c8 --- /dev/null +++ b/harlibrary/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/harlibrary/src/ohosTest/ets/test/Ability.test.ets b/harlibrary/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000..85c78f6 --- /dev/null +++ b/harlibrary/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,35 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/harlibrary/src/ohosTest/ets/test/List.test.ets b/harlibrary/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000..794c7dc --- /dev/null +++ b/harlibrary/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,5 @@ +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/harlibrary/src/ohosTest/module.json5 b/harlibrary/src/ohosTest/module.json5 new file mode 100644 index 0000000..57fd445 --- /dev/null +++ b/harlibrary/src/ohosTest/module.json5 @@ -0,0 +1,14 @@ +{ + "module": { + "name": "harlibrary_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet", + "2in1", + "car" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/harlibrary/src/test/List.test.ets b/harlibrary/src/test/List.test.ets new file mode 100644 index 0000000..bb5b5c3 --- /dev/null +++ b/harlibrary/src/test/List.test.ets @@ -0,0 +1,5 @@ +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/harlibrary/src/test/LocalUnit.test.ets b/harlibrary/src/test/LocalUnit.test.ets new file mode 100644 index 0000000..165fc16 --- /dev/null +++ b/harlibrary/src/test/LocalUnit.test.ets @@ -0,0 +1,33 @@ +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/oh-package-lock.json5 b/oh-package-lock.json5 new file mode 100644 index 0000000..fa3e42b --- /dev/null +++ b/oh-package-lock.json5 @@ -0,0 +1,19 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hypium@1.0.15": "@ohos/hypium@1.0.15" + }, + "packages": { + "@ohos/hypium@1.0.15": { + "name": "@ohos/hypium", + "version": "1.0.15", + "integrity": "sha512-AhkuYX2l/IzrVARV/hKRGsJDQPtZ5bygr6Q1N2M9W15kBllNYL3khQ0dNvJwh/CIGoEPMDVcME9q6MhFGccqkw==", + "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.15.har", + "registryType": "ohpm" + } + } +} \ No newline at end of file -- Gitee From c361ec87f0c7d07f4f5f4edc01425953fb97c170 Mon Sep 17 00:00:00 2001 From: coder Date: Wed, 30 Oct 2024 19:54:11 +0800 Subject: [PATCH 2/3] remove unnecessary files, update ignore data --- .gitignore | 2 +- .../libtetrahedron_napi.so/oh-package.json5 | 6 --- .../tetrahedron_napi.d.ts | 17 ------ entry/oh_modules/harlibrary/.gitignore | 6 --- entry/oh_modules/harlibrary/BuildProfile.ets | 17 ------ entry/oh_modules/harlibrary/Index.ets | 1 - .../oh_modules/harlibrary/build-profile.json5 | 43 --------------- .../oh_modules/harlibrary/consumer-rules.txt | 0 entry/oh_modules/harlibrary/hvigorfile.ts | 6 --- .../harlibrary/obfuscation-rules.txt | 23 -------- .../harlibrary/oh-package-lock.json5 | 18 ------- entry/oh_modules/harlibrary/oh-package.json5 | 11 ---- .../harlibrary/src/main/cpp/CMakeLists.txt | 15 ------ .../harlibrary/src/main/cpp/napi_init.cpp | 53 ------------------- .../main/cpp/types/libharlibrary/Index.d.ts | 1 - .../cpp/types/libharlibrary/oh-package.json5 | 6 --- .../src/main/ets/components/MainPage.ets | 22 -------- .../src/main/ets/utils/ComponentUtils.ets | 7 --- .../src/main/ets/utils/PropertyUtils.ts | 25 --------- .../harlibrary/src/main/module.json5 | 12 ----- .../main/resources/base/element/string.json | 8 --- .../main/resources/en_US/element/string.json | 8 --- .../main/resources/zh_CN/element/string.json | 8 --- .../src/ohosTest/ets/test/Ability.test.ets | 35 ------------ .../src/ohosTest/ets/test/List.test.ets | 5 -- .../harlibrary/src/ohosTest/module.json5 | 14 ----- .../harlibrary/src/test/List.test.ets | 5 -- .../harlibrary/src/test/LocalUnit.test.ets | 33 ------------ harlibrary/src/main/cpp/.gitignore | 1 + 29 files changed, 2 insertions(+), 406 deletions(-) delete mode 100644 entry/oh_modules/@types/libtetrahedron_napi.so/oh-package.json5 delete mode 100644 entry/oh_modules/@types/libtetrahedron_napi.so/tetrahedron_napi.d.ts delete mode 100644 entry/oh_modules/harlibrary/.gitignore delete mode 100644 entry/oh_modules/harlibrary/BuildProfile.ets delete mode 100644 entry/oh_modules/harlibrary/Index.ets delete mode 100644 entry/oh_modules/harlibrary/build-profile.json5 delete mode 100644 entry/oh_modules/harlibrary/consumer-rules.txt delete mode 100644 entry/oh_modules/harlibrary/hvigorfile.ts delete mode 100644 entry/oh_modules/harlibrary/obfuscation-rules.txt delete mode 100644 entry/oh_modules/harlibrary/oh-package-lock.json5 delete mode 100644 entry/oh_modules/harlibrary/oh-package.json5 delete mode 100644 entry/oh_modules/harlibrary/src/main/cpp/CMakeLists.txt delete mode 100644 entry/oh_modules/harlibrary/src/main/cpp/napi_init.cpp delete mode 100644 entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts delete mode 100644 entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 delete mode 100644 entry/oh_modules/harlibrary/src/main/ets/components/MainPage.ets delete mode 100644 entry/oh_modules/harlibrary/src/main/ets/utils/ComponentUtils.ets delete mode 100644 entry/oh_modules/harlibrary/src/main/ets/utils/PropertyUtils.ts delete mode 100644 entry/oh_modules/harlibrary/src/main/module.json5 delete mode 100644 entry/oh_modules/harlibrary/src/main/resources/base/element/string.json delete mode 100644 entry/oh_modules/harlibrary/src/main/resources/en_US/element/string.json delete mode 100644 entry/oh_modules/harlibrary/src/main/resources/zh_CN/element/string.json delete mode 100644 entry/oh_modules/harlibrary/src/ohosTest/ets/test/Ability.test.ets delete mode 100644 entry/oh_modules/harlibrary/src/ohosTest/ets/test/List.test.ets delete mode 100644 entry/oh_modules/harlibrary/src/ohosTest/module.json5 delete mode 100644 entry/oh_modules/harlibrary/src/test/List.test.ets delete mode 100644 entry/oh_modules/harlibrary/src/test/LocalUnit.test.ets create mode 100644 harlibrary/src/main/cpp/.gitignore diff --git a/.gitignore b/.gitignore index d2ff201..9e7ad22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /node_modules -/oh_modules +oh_modules/ /local.properties /.idea **/build diff --git a/entry/oh_modules/@types/libtetrahedron_napi.so/oh-package.json5 b/entry/oh_modules/@types/libtetrahedron_napi.so/oh-package.json5 deleted file mode 100644 index 7339ead..0000000 --- a/entry/oh_modules/@types/libtetrahedron_napi.so/oh-package.json5 +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "@types/libtetrahedron_napi.so", - "types": "./tetrahedron_napi.d.ts", - "version": "1.0.0", - "description": "Please describe the basic information." -} \ No newline at end of file diff --git a/entry/oh_modules/@types/libtetrahedron_napi.so/tetrahedron_napi.d.ts b/entry/oh_modules/@types/libtetrahedron_napi.so/tetrahedron_napi.d.ts deleted file mode 100644 index 179a6b5..0000000 --- a/entry/oh_modules/@types/libtetrahedron_napi.so/tetrahedron_napi.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export const updateAngle: (offsetX: number, offsetY: number) => Array; -export const setRotate: (mode: number) => void; \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/.gitignore b/entry/oh_modules/harlibrary/.gitignore deleted file mode 100644 index e2713a2..0000000 --- a/entry/oh_modules/harlibrary/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/node_modules -/oh_modules -/.preview -/build -/.cxx -/.test \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/BuildProfile.ets b/entry/oh_modules/harlibrary/BuildProfile.ets deleted file mode 100644 index 3a501e5..0000000 --- a/entry/oh_modules/harlibrary/BuildProfile.ets +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Use these variables when you tailor your ArkTS code. They must be of the const type. - */ -export const HAR_VERSION = '1.0.0'; -export const BUILD_MODE_NAME = 'debug'; -export const DEBUG = true; -export const TARGET_NAME = 'default'; - -/** - * BuildProfile Class is used only for compatibility purposes. - */ -export default class BuildProfile { - static readonly HAR_VERSION = HAR_VERSION; - static readonly BUILD_MODE_NAME = BUILD_MODE_NAME; - static readonly DEBUG = DEBUG; - static readonly TARGET_NAME = TARGET_NAME; -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/Index.ets b/entry/oh_modules/harlibrary/Index.ets deleted file mode 100644 index 10ebb3e..0000000 --- a/entry/oh_modules/harlibrary/Index.ets +++ /dev/null @@ -1 +0,0 @@ -export { MainPage } from './src/main/ets/components/MainPage' diff --git a/entry/oh_modules/harlibrary/build-profile.json5 b/entry/oh_modules/harlibrary/build-profile.json5 deleted file mode 100644 index 8603ec2..0000000 --- a/entry/oh_modules/harlibrary/build-profile.json5 +++ /dev/null @@ -1,43 +0,0 @@ -{ - "apiType": "stageMode", - "buildOption": { - "externalNativeOptions": { - "path": "./src/main/cpp/CMakeLists.txt", - "arguments": "", - "cppFlags": "", - "abiFilters": [ "arm64-v8a", "x86_64"] - }, - }, - "buildOptionSet": [ - { - "name": "release", - "arkOptions": { - "obfuscation": { - "ruleOptions": { - "enable": false, - "files": [ - "./obfuscation-rules.txt" - ] - }, - "consumerFiles": [ - "./consumer-rules.txt" - ] - } - }, - "nativeLib": { - "debugSymbol": { - "strip": true, - "exclude": [] - } - } - }, - ], - "targets": [ - { - "name": "default" - }, - { - "name": "ohosTest" - } - ] -} diff --git a/entry/oh_modules/harlibrary/consumer-rules.txt b/entry/oh_modules/harlibrary/consumer-rules.txt deleted file mode 100644 index e69de29..0000000 diff --git a/entry/oh_modules/harlibrary/hvigorfile.ts b/entry/oh_modules/harlibrary/hvigorfile.ts deleted file mode 100644 index 4218707..0000000 --- a/entry/oh_modules/harlibrary/hvigorfile.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { harTasks } from '@ohos/hvigor-ohos-plugin'; - -export default { - system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ - plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ -} diff --git a/entry/oh_modules/harlibrary/obfuscation-rules.txt b/entry/oh_modules/harlibrary/obfuscation-rules.txt deleted file mode 100644 index 272efb6..0000000 --- a/entry/oh_modules/harlibrary/obfuscation-rules.txt +++ /dev/null @@ -1,23 +0,0 @@ -# Define project specific obfuscation rules here. -# You can include the obfuscation configuration files in the current module's build-profile.json5. -# -# For more details, see -# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 - -# Obfuscation options: -# -disable-obfuscation: disable all obfuscations -# -enable-property-obfuscation: obfuscate the property names -# -enable-toplevel-obfuscation: obfuscate the names in the global scope -# -compact: remove unnecessary blank spaces and all line feeds -# -remove-log: remove all console.* statements -# -print-namecache: print the name cache that contains the mapping from the old names to new names -# -apply-namecache: reuse the given cache file - -# Keep options: -# -keep-property-name: specifies property names that you want to keep -# -keep-global-name: specifies names that you want to keep in the global scope - --enable-property-obfuscation --enable-toplevel-obfuscation --enable-filename-obfuscation --enable-export-obfuscation \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/oh-package-lock.json5 b/entry/oh_modules/harlibrary/oh-package-lock.json5 deleted file mode 100644 index 08cbf90..0000000 --- a/entry/oh_modules/harlibrary/oh-package-lock.json5 +++ /dev/null @@ -1,18 +0,0 @@ -{ - "meta": { - "stableOrder": true - }, - "lockfileVersion": 3, - "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", - "specifiers": { - "libharlibrary.so@src/main/cpp/types/libharlibrary": "libharlibrary.so@src/main/cpp/types/libharlibrary" - }, - "packages": { - "libharlibrary.so@src/main/cpp/types/libharlibrary": { - "name": "libharlibrary.so", - "version": "1.0.0", - "resolved": "src/main/cpp/types/libharlibrary", - "registryType": "local" - } - } -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/oh-package.json5 b/entry/oh_modules/harlibrary/oh-package.json5 deleted file mode 100644 index 837100c..0000000 --- a/entry/oh_modules/harlibrary/oh-package.json5 +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "harlibrary", - "version": "1.0.0", - "description": "Please describe the basic information.", - "main": "Index.ets", - "author": "", - "license": "Apache-2.0", - "dependencies": { - "libharlibrary.so": "file:./src/main/cpp/types/libharlibrary" - } -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/cpp/CMakeLists.txt b/entry/oh_modules/harlibrary/src/main/cpp/CMakeLists.txt deleted file mode 100644 index 822c186..0000000 --- a/entry/oh_modules/harlibrary/src/main/cpp/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -# the minimum version of CMake. -cmake_minimum_required(VERSION 3.5.0) -project(myNpmLib) - -set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) - -if(DEFINED PACKAGE_FIND_FILE) - include(${PACKAGE_FIND_FILE}) -endif() - -include_directories(${NATIVERENDER_ROOT_PATH} - ${NATIVERENDER_ROOT_PATH}/include) - -add_library(harlibrary SHARED napi_init.cpp) -target_link_libraries(harlibrary PUBLIC libace_napi.z.so) diff --git a/entry/oh_modules/harlibrary/src/main/cpp/napi_init.cpp b/entry/oh_modules/harlibrary/src/main/cpp/napi_init.cpp deleted file mode 100644 index 55a35d8..0000000 --- a/entry/oh_modules/harlibrary/src/main/cpp/napi_init.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "napi/native_api.h" - -static napi_value Add(napi_env env, napi_callback_info info) -{ - size_t argc = 2; - napi_value args[2] = {nullptr}; - - napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); - - napi_valuetype valuetype0; - napi_typeof(env, args[0], &valuetype0); - - napi_valuetype valuetype1; - napi_typeof(env, args[1], &valuetype1); - - double value0; - napi_get_value_double(env, args[0], &value0); - - double value1; - napi_get_value_double(env, args[1], &value1); - - napi_value sum; - napi_create_double(env, value0 + value1, &sum); - - return sum; - -} - -EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports) -{ - napi_property_descriptor desc[] = { - { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr } - }; - napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); - return exports; -} -EXTERN_C_END - -static napi_module demoModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_register_func = Init, - .nm_modname = "harlibrary", - .nm_priv = ((void*)0), - .reserved = { 0 }, -}; - -extern "C" __attribute__((constructor)) void RegisterHarlibraryModule(void) -{ - napi_module_register(&demoModule); -} diff --git a/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts b/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts deleted file mode 100644 index e44f361..0000000 --- a/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/Index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export const add: (a: number, b: number) => number; \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 b/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 deleted file mode 100644 index f57e84d..0000000 --- a/entry/oh_modules/harlibrary/src/main/cpp/types/libharlibrary/oh-package.json5 +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "libharlibrary.so", - "types": "./Index.d.ts", - "version": "1.0.0", - "description": "Please describe the basic information." -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/ets/components/MainPage.ets b/entry/oh_modules/harlibrary/src/main/ets/components/MainPage.ets deleted file mode 100644 index ddbd01c..0000000 --- a/entry/oh_modules/harlibrary/src/main/ets/components/MainPage.ets +++ /dev/null @@ -1,22 +0,0 @@ -import { hilog } from '@kit.PerformanceAnalysisKit'; -import testNapi from 'libharlibrary.so'; - -@Component -export struct MainPage { - @State message: string = 'Hello World'; - - build() { - Row() { - Column() { - Text(this.message) - .fontSize(50) - .fontWeight(FontWeight.Bold) - .onClick(() => { - hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); - }) - } - .width('100%') - } - .height('100%') - } -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/ets/utils/ComponentUtils.ets b/entry/oh_modules/harlibrary/src/main/ets/utils/ComponentUtils.ets deleted file mode 100644 index 581eb9f..0000000 --- a/entry/oh_modules/harlibrary/src/main/ets/utils/ComponentUtils.ets +++ /dev/null @@ -1,7 +0,0 @@ -import lang from '@arkts.lang'; - -struct A implements ISendable { - -}; -export function hello() { -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/ets/utils/PropertyUtils.ts b/entry/oh_modules/harlibrary/src/main/ets/utils/PropertyUtils.ts deleted file mode 100644 index b73e65f..0000000 --- a/entry/oh_modules/harlibrary/src/main/ets/utils/PropertyUtils.ts +++ /dev/null @@ -1,25 +0,0 @@ -import batteryInfo from '@ohos.batteryInfo'; -import deviceInfo from '@ohos.deviceInfo'; - -export function SetToGlobal(key: string, obj: unknown): void { - globalThis[key] = obj; -} - -export function GetFromGlobal(key: string) { - return globalThis[key]; -} - -export function InitGlobalContext(data) -{ - globalThis.context = data; - globalThis.context.batteryInfo = batteryInfo; - globalThis.context.deviceInfo = deviceInfo; -} - -export function SetToGlobalContext(key, value) { - globalThis.context[key] = value; -} - -export function GetFromGlobalContext(key) { - return globalThis.context[key]; -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/main/module.json5 b/entry/oh_modules/harlibrary/src/main/module.json5 deleted file mode 100644 index e4d7b34..0000000 --- a/entry/oh_modules/harlibrary/src/main/module.json5 +++ /dev/null @@ -1,12 +0,0 @@ -{ - "module": { - "name": "harlibrary", - "type": "har", - "deviceTypes": [ - "default", - "tablet", - "2in1", - "car" - ] - } -} diff --git a/entry/oh_modules/harlibrary/src/main/resources/base/element/string.json b/entry/oh_modules/harlibrary/src/main/resources/base/element/string.json deleted file mode 100644 index f51a9c8..0000000 --- a/entry/oh_modules/harlibrary/src/main/resources/base/element/string.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "string": [ - { - "name": "page_show", - "value": "page from package" - } - ] -} diff --git a/entry/oh_modules/harlibrary/src/main/resources/en_US/element/string.json b/entry/oh_modules/harlibrary/src/main/resources/en_US/element/string.json deleted file mode 100644 index f51a9c8..0000000 --- a/entry/oh_modules/harlibrary/src/main/resources/en_US/element/string.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "string": [ - { - "name": "page_show", - "value": "page from package" - } - ] -} diff --git a/entry/oh_modules/harlibrary/src/main/resources/zh_CN/element/string.json b/entry/oh_modules/harlibrary/src/main/resources/zh_CN/element/string.json deleted file mode 100644 index f51a9c8..0000000 --- a/entry/oh_modules/harlibrary/src/main/resources/zh_CN/element/string.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "string": [ - { - "name": "page_show", - "value": "page from package" - } - ] -} diff --git a/entry/oh_modules/harlibrary/src/ohosTest/ets/test/Ability.test.ets b/entry/oh_modules/harlibrary/src/ohosTest/ets/test/Ability.test.ets deleted file mode 100644 index 85c78f6..0000000 --- a/entry/oh_modules/harlibrary/src/ohosTest/ets/test/Ability.test.ets +++ /dev/null @@ -1,35 +0,0 @@ -import { hilog } from '@kit.PerformanceAnalysisKit'; -import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; - -export default function abilityTest() { - describe('ActsAbilityTest', () => { - // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(() => { - // Presets an action, which is performed only once before all test cases of the test suite start. - // This API supports only one parameter: preset action function. - }) - beforeEach(() => { - // Presets an action, which is performed before each unit test case starts. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: preset action function. - }) - afterEach(() => { - // Presets a clear action, which is performed after each unit test case ends. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: clear action function. - }) - afterAll(() => { - // Presets a clear action, which is performed after all test cases of the test suite end. - // This API supports only one parameter: clear action function. - }) - it('assertContain', 0, () => { - // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); - let a = 'abc'; - let b = 'b'; - // Defines a variety of assertion methods, which are used to declare expected boolean conditions. - expect(a).assertContain(b); - expect(a).assertEqual(a); - }) - }) -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/ohosTest/ets/test/List.test.ets b/entry/oh_modules/harlibrary/src/ohosTest/ets/test/List.test.ets deleted file mode 100644 index 794c7dc..0000000 --- a/entry/oh_modules/harlibrary/src/ohosTest/ets/test/List.test.ets +++ /dev/null @@ -1,5 +0,0 @@ -import abilityTest from './Ability.test'; - -export default function testsuite() { - abilityTest(); -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/ohosTest/module.json5 b/entry/oh_modules/harlibrary/src/ohosTest/module.json5 deleted file mode 100644 index 57fd445..0000000 --- a/entry/oh_modules/harlibrary/src/ohosTest/module.json5 +++ /dev/null @@ -1,14 +0,0 @@ -{ - "module": { - "name": "harlibrary_test", - "type": "feature", - "deviceTypes": [ - "default", - "tablet", - "2in1", - "car" - ], - "deliveryWithInstall": true, - "installationFree": false - } -} diff --git a/entry/oh_modules/harlibrary/src/test/List.test.ets b/entry/oh_modules/harlibrary/src/test/List.test.ets deleted file mode 100644 index bb5b5c3..0000000 --- a/entry/oh_modules/harlibrary/src/test/List.test.ets +++ /dev/null @@ -1,5 +0,0 @@ -import localUnitTest from './LocalUnit.test'; - -export default function testsuite() { - localUnitTest(); -} \ No newline at end of file diff --git a/entry/oh_modules/harlibrary/src/test/LocalUnit.test.ets b/entry/oh_modules/harlibrary/src/test/LocalUnit.test.ets deleted file mode 100644 index 165fc16..0000000 --- a/entry/oh_modules/harlibrary/src/test/LocalUnit.test.ets +++ /dev/null @@ -1,33 +0,0 @@ -import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; - -export default function localUnitTest() { - describe('localUnitTest', () => { - // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(() => { - // Presets an action, which is performed only once before all test cases of the test suite start. - // This API supports only one parameter: preset action function. - }); - beforeEach(() => { - // Presets an action, which is performed before each unit test case starts. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: preset action function. - }); - afterEach(() => { - // Presets a clear action, which is performed after each unit test case ends. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: clear action function. - }); - afterAll(() => { - // Presets a clear action, which is performed after all test cases of the test suite end. - // This API supports only one parameter: clear action function. - }); - it('assertContain', 0, () => { - // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let a = 'abc'; - let b = 'b'; - // Defines a variety of assertion methods, which are used to declare expected boolean conditions. - expect(a).assertContain(b); - expect(a).assertEqual(a); - }); - }); -} \ No newline at end of file diff --git a/harlibrary/src/main/cpp/.gitignore b/harlibrary/src/main/cpp/.gitignore new file mode 100644 index 0000000..add512e --- /dev/null +++ b/harlibrary/src/main/cpp/.gitignore @@ -0,0 +1 @@ +Engine/ -- Gitee From 89fb1991dfd3f19e722e07cd5607ca8b85071f6a Mon Sep 17 00:00:00 2001 From: coder Date: Mon, 4 Nov 2024 09:44:28 +0800 Subject: [PATCH 3/3] update setup --- README.md | 104 +++--------------- entry/build-profile.json5 | 3 +- entry/src/main/cpp/tetrahedron.cpp | 2 +- harlibrary/build-profile.json5 | 3 +- harlibrary/src/main/cpp/CMakeLists.txt | 10 ++ .../src/main/ets/utils/ComponentUtils.ets | 3 - resources/sdk-native-component.js | 1 + 7 files changed, 32 insertions(+), 94 deletions(-) create mode 100644 resources/sdk-native-component.js diff --git a/README.md b/README.md index 4bff7a7..03df745 100644 --- a/README.md +++ b/README.md @@ -1,90 +1,18 @@ -# OpenGL三棱椎 - -### 介绍 - -XComponent控件常用于相机预览流的显示和游戏画面的绘制,在HarmonyOS上,可以配合Native Window创建OpenGL开发环境,并最终将OpenGL绘制的图形显示到XComponent控件。本示例基于"Native C++"模板,调用OpenGL(OpenGL ES)图形库相关API绘制3D图形(三棱锥),并将结果渲染到页面的XComponent控件中进行展示。同时,可以点击自动旋转按钮可以自动旋转,点击阻尼旋转可以减速旋转直至停止旋转,还可以在屏幕上通过触摸滑动手势对三棱锥进行旋转,最终得到不同角度的图形并显示到页面。 - -### 效果预览 - -| 首页 | 滑动屏幕旋转变换 | -|:--------------------------------------:|:----------------------------------------:| -| index | rotate | - - -使用说明 - -应用界面中展示了XComponent相关控件的使用,及采用OpenGL (OpenGL ES)相关标准API绘制3D图形(三棱锥,3D渲染的光源用的是简单的线性光源)。此外,可在屏幕触摸滑动,以使三棱锥进行旋转,其中主要采用了napi接口来更新3D图形的旋转角度。 - -### 工程目录 - +# Setup +* Link GM repo into harlibrary as Engine ``` -├──entry/src/main/cpp/ -│ ├──CMakeLists.txt // cmake编译配置 -│ ├──app_napi.cpp // 调用native接口 -│ ├──include -│ │ ├──app_napi.h -│ │ ├──tetrahedron.h -│ │ ├──frame_handle.h -│ │ └──util -│ │ ├──log.h -│ │ ├──napi_manager.h -│ │ ├──napi_util.h -│ │ └──native_common.h -│ ├──module.cpp // napi模块注册 -│ ├──napi_manager.cpp -│ ├──napi_util.cpp -│ ├──frame_handle.cpp -│ ├──tetrahedron.cpp // OpenGL (ES) 三棱锥实现 -│ └──type -│ └──libentry -│ ├──oh-package.json5 -│ └──tetrahedron_napi.d.ts // 接口导出 -├──entry/src/main/ets -│ ├──entryability -│ │ └──EntryAbility.ets -│ ├──pages -│ │ └──Index.ets // 首页 -│ └──utils -│ └──Logger.ets // 日志工具 -└──entry/src/main/resources // 应用静态资源目录 +src +├───main +│ ├───cpp +│ │ ├───Engine # link directory +│ │ │ ├───.dvc +│ │ │ ├───.gitlab +│ │ │ ├───.vscode +│ │ │ ├───Assets +... ``` - -### 具体实现 - -通过在IDE中创建Native C++工程,在C++代码中定义接口为Init和Update用于3D图形绘制环境的初始化和图形渲染更新,并映射NAPI相关接口UpdateAngle。ArkTS侧主要利用XComponent控件实现Index.ets,C++侧主要采用OpenGL ES相关标准API实现三棱锥的绘制流程相关代码,并可与ArkTS进行交互。 - -应用启动时,NAPI模块也相应进行初始化,此时可通过C++侧的OH_NativeXComponent_GetXComponentId()接口,获取到当前XComponent控件的控件指针,并给到C++侧三棱锥绘制相关的Init和Update函数,实现3D图形显示。同时,为实现三棱锥的触摸屏滑动旋转效果,在C++代码中映射的NAPI接口UpdateAngle给到ArkTS侧调用。ArkTS侧需在导入NAPI模块"libtetrahedron_napi.so"正确的前提下,通过调用src/main/cpp/type/libentry/tetrahedron_napi.d.ts中声明的UpdateAngle接口更新三棱锥旋转角度。 -主要源码参考:[napi_manager.cpp](entry/src/main/cpp/napi_manager.cpp)、[app_napi.cpp](entry/src/main/cpp/app_napi.cpp)和[tetrahedron.cpp](entry/src/main/cpp/tetrahedron.cpp)。 - -Native XComponent相关函数如下: - -| 函数名称 | 描述 | -| ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------- | -| OH_NativeXComponent_GetXComponentId(OH_NativeXComponent *component, char *id, uint64_t *size) | 获取ArkUI XComponent的id | -| OH_NativeXComponent_GetXComponentSize(OH_NativeXComponent *component, const void *window, uint64_t *width, uint64_t *height) | 获取ArkUI XComponent持有的surface的大小 | -| OH_NativeXComponent_GetXComponentOffset(OH_NativeXComponent *component, const void *window, double *x, double *y) | 获取ArkUI XComponent组件相对屏幕左上顶点的偏移量 | -| OH_NativeXComponent_GetTouchEvent(OH_NativeXComponent *component, const void *window, OH_NativeXComponent_TouchEvent *touchEvent) | 获取ArkUI XComponent调度的触摸事件 | -| OH_NativeXComponent_GetTouchPointToolType(OH_NativeXComponent *component, uint32_t pointIndex, OH_NativeXComponent_TouchPointToolType *toolType) | 获取ArkUI XComponent触摸点工具类型 | -| OH_NativeXComponent_GetTouchPointTiltX(OH_NativeXComponent *component, uint32_t pointIndex, float *tiltX) | 获取ArkUI XComponent触摸点倾斜与X轴角度 | -| OH_NativeXComponent_GetTouchPointTiltY(OH_NativeXComponent *component, uint32_t pointIndex, float *tiltY) | 获取ArkUI XComponent触摸点倾斜与Y轴角度 | -| OH_NativeXComponent_GetMouseEvent(OH_NativeXComponent *component, const void *window, OH_NativeXComponent_MouseEvent *mouseEvent) | 获取ArkUI XComponent调度的鼠标事件 | -| OH_NativeXComponent_RegisterCallback(OH_NativeXComponent *component, OH_NativeXComponent_Callback *callback) | 实例注册回调 | -| OH_NativeXComponent_RegisterMouseEventCallback(OH_NativeXComponent *component, OH_NativeXComponent_MouseEvent_Callback *callback) | 实例注册鼠标事件回调 | - -### 相关权限 - -不涉及。 - -### 依赖 - -不涉及。 - -### 约束与限制 - -1.本示例仅支持标准系统上运行,支持设备:华为手机。 - -2.HarmonyOS系统:HarmonyOS NEXT Developer Beta1及以上。 - -3.DevEco Studio版本:DevEco Studio NEXT Developer Beta1及以上。 - -4.HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta1 SDK及以上。 +* install cmake version >= 3.30 and setup CMAKE_PATH + * e.g. `CMAKE_PATH=D:\Program Files\CMake\bin\cmake.exe` +* run Engine/ohos_setup_env.py + * `python ohos_setup_env.py -s` + * make sure sdk-native-component.js is writable (script will report path, fail if not writable) diff --git a/entry/build-profile.json5 b/entry/build-profile.json5 index e9507fe..02bef8d 100644 --- a/entry/build-profile.json5 +++ b/entry/build-profile.json5 @@ -20,7 +20,8 @@ "path": "./src/main/cpp/CMakeLists.txt", "arguments": "", "cppFlags": "", - "abiFilters": ["arm64-v8a", "x86_64"] + //"abiFilters": ["arm64-v8a", "x86_64"] + "abiFilters": ["x86_64"] } }, "targets": [ diff --git a/entry/src/main/cpp/tetrahedron.cpp b/entry/src/main/cpp/tetrahedron.cpp index 5df48b5..0651ef2 100644 --- a/entry/src/main/cpp/tetrahedron.cpp +++ b/entry/src/main/cpp/tetrahedron.cpp @@ -13,7 +13,7 @@ * limitations under the License. */ -#include +#include #include #include #include "log.h" diff --git a/harlibrary/build-profile.json5 b/harlibrary/build-profile.json5 index 8603ec2..2ffa993 100644 --- a/harlibrary/build-profile.json5 +++ b/harlibrary/build-profile.json5 @@ -5,7 +5,8 @@ "path": "./src/main/cpp/CMakeLists.txt", "arguments": "", "cppFlags": "", - "abiFilters": [ "arm64-v8a", "x86_64"] + //"abiFilters": [ "arm64-v8a", "x86_64"] + "abiFilters": [ "x86_64"] }, }, "buildOptionSet": [ diff --git a/harlibrary/src/main/cpp/CMakeLists.txt b/harlibrary/src/main/cpp/CMakeLists.txt index 822c186..77a2794 100644 --- a/harlibrary/src/main/cpp/CMakeLists.txt +++ b/harlibrary/src/main/cpp/CMakeLists.txt @@ -13,3 +13,13 @@ include_directories(${NATIVERENDER_ROOT_PATH} add_library(harlibrary SHARED napi_init.cpp) target_link_libraries(harlibrary PUBLIC libace_napi.z.so) + + +set(PROGRAM_PROJECT ON CACHE BOOL "runtime project on") +set(ENABLE_MEMLEAK_DETECT OFF) +set(ENABLE_OPENMP OFF) +set(ENABLE_JNI OFF) +set(ENABLE_SHADER_HOT_RELOADING OFF) +set(GW_ENABLE_CSHARP OFF) + +add_subdirectory(Engine) \ No newline at end of file diff --git a/harlibrary/src/main/ets/utils/ComponentUtils.ets b/harlibrary/src/main/ets/utils/ComponentUtils.ets index 581eb9f..613ad18 100644 --- a/harlibrary/src/main/ets/utils/ComponentUtils.ets +++ b/harlibrary/src/main/ets/utils/ComponentUtils.ets @@ -1,7 +1,4 @@ import lang from '@arkts.lang'; -struct A implements ISendable { - -}; export function hello() { } \ No newline at end of file diff --git a/resources/sdk-native-component.js b/resources/sdk-native-component.js new file mode 100644 index 0000000..6755487 --- /dev/null +++ b/resources/sdk-native-component.js @@ -0,0 +1 @@ +"use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.SdkNativeComponent=void 0;const hvigor_1=require("@ohos/hvigor"),path_1=__importDefault(require("path")),sdk_component_js_1=require("../superior/sdk-component.js");class SdkNativeComponent extends sdk_component_js_1.SdkComponent{constructor(e){super(e);const t=(0,hvigor_1.isWindows)()?"cmake.exe":"cmake",i=(0,hvigor_1.isWindows)()?"ninja.exe":"ninja",o=(0,hvigor_1.isWindows)()?"llvm-strip.exe":"llvm-strip",s=(0,hvigor_1.isWindows)()?"llvm-readelf.exe":"llvm-readelf";this._ninjaTool=path_1.default.resolve(this.getBaseDir(),"build-tools","cmake","bin",i),this._cmakeTool=process.env.CMAKE_PATH?process.env.CMAKE_PATH:path_1.default.resolve(this.getBaseDir(),"build-tools","cmake","bin",t),this._nativeToolchain=path_1.default.resolve(this.getBaseDir(),"build","cmake","ohos.toolchain.cmake"),this._llvmStrip=path_1.default.resolve(this.getBaseDir(),"llvm","bin",o),this._llvmReadElf=path_1.default.resolve(this.getBaseDir(),"llvm","bin",s)}getCmakeTool(){return this._cmakeTool}getNinjaTool(){return this._ninjaTool}getNativeToolchain(){return this._nativeToolchain}getLlvmStrip(){return this._llvmStrip}getLlvmReadElf(){return this._llvmReadElf}}exports.SdkNativeComponent=SdkNativeComponent; \ No newline at end of file -- Gitee