Compare commits

...

252 Commits

Author SHA1 Message Date
Andrea Cavalli 7ae6ebdb05 Add missing package 2024-03-20 23:53:38 +01:00
Andrea Cavalli 98d20029b8 Update tdlight 2024-03-20 23:43:21 +01:00
Andrea Cavalli 0ee9b469da Update tdlight 2024-03-20 23:27:08 +01:00
Andrea Cavalli 7a89758d11 Update vcpkg, add macos 14 2024-02-21 17:18:15 +01:00
Andrea Cavalli 5a69be308b Update tdlight 2024-02-21 02:46:25 +01:00
Andrea Cavalli 4ebd2a14a4 Revert commit 78cc29ff23 2024-02-20 01:01:18 +01:00
Andrea Cavalli ad7049b177 Update tdlight 2024-02-19 11:53:06 +01:00
Andrea Cavalli 046c3ea451 Update tdlight 2023-11-25 02:22:49 +01:00
Andrea Cavalli 78cc29ff23 Enable macOS arm builds 2023-11-15 10:27:02 +01:00
Andrea Cavalli c25a2993f2 Fix windows build output path 2023-11-12 15:04:31 +01:00
Andrea Cavalli e37957cfcc Update tdlib 2023-11-11 16:24:20 +01:00
Andrea Cavalli ed68a0851b Fix windows build output path 2023-11-11 16:23:23 +01:00
Andrea Cavalli 434fd1cc79 Update tdlib 2023-11-08 23:59:14 +01:00
Andrea Cavalli aa2c6061c2 Update tdlib 2023-11-08 23:18:32 +01:00
Andrea Cavalli 5c4b84519c re-enable windows cache 2023-11-04 00:12:23 +01:00
Andrea Cavalli 65628aac1f copy to disk c 2023-11-04 00:09:06 +01:00
Andrea Cavalli 1c267436c3 Remove windows cache 2023-11-03 22:51:52 +01:00
Andrea Cavalli 231e543608 Update tdlight 2023-11-03 22:46:26 +01:00
Andrea Cavalli 3bf599c768 Disable caching on windows 2023-10-09 02:25:42 +02:00
Andrea Cavalli 63ae6612ad Update tdlight 2023-10-08 17:03:09 +02:00
Andrea Cavalli 57cdb15a79 Update tdlight 2023-10-02 21:33:06 +02:00
Andrea Cavalli c3726a2707 Update tdlib 2023-09-16 00:16:09 +02:00
Andrea Cavalli 78bac3faca Fix macos arm64 build script 2023-09-12 10:30:12 +02:00
Andrea Cavalli 2949c36eb8 Update tdlib 2023-09-09 20:47:43 +02:00
Andrea Cavalli 7594e7af47 Fix github actions 2023-09-09 15:10:32 +02:00
Andrea Cavalli 90c7b32d37 Fix github actions 2023-08-30 10:10:09 +02:00
Andrea Cavalli 5483510842 Fix github actions 2023-08-30 09:43:48 +02:00
Andrea Cavalli 9d920d4ced Update the readme 2023-08-30 09:20:17 +02:00
Andrea Cavalli a6a4abe113 Fix github actions 2023-08-30 09:15:35 +02:00
Andrea Cavalli f29f228656 Fix docker output paths 2023-08-30 02:36:38 +02:00
Andrea Cavalli a627598d5f Fix java home 2023-08-30 00:53:56 +02:00
Andrea Cavalli 7fbd1db01d Rewrite build system 2023-08-29 21:24:05 +02:00
Andrea Cavalli c12b2c8101 Rewrite build system 2023-08-29 20:43:52 +02:00
Andrea Cavalli 35eb351922 Rewrite build system 2023-08-29 18:47:02 +02:00
Andrea Cavalli 93195088f8 Rewrite build system 2023-08-29 18:44:18 +02:00
Andrea Cavalli 5be581700f Rewrite build system 2023-08-29 15:25:50 +02:00
Andrea Cavalli 41d4a91ade Rewrite build system 2023-08-29 14:15:00 +02:00
Andrea Cavalli 58cc508056 Rewrite build system 2023-08-29 13:46:14 +02:00
Andrea Cavalli 537b8988ea Rewrite build system 2023-08-29 13:29:40 +02:00
Andrea Cavalli 61dfe1deaa Rewrite build system 2023-08-29 13:05:40 +02:00
Andrea Cavalli cedb84a5ea Rewrite build system 2023-08-29 13:03:47 +02:00
Andrea Cavalli b9463a02af Rewrite build system 2023-08-29 12:52:08 +02:00
Andrea Cavalli 91491e9893 Rewrite build system 2023-08-29 12:48:04 +02:00
Andrea Cavalli b35377fa1f Rewrite build system 2023-08-29 12:43:58 +02:00
Andrea Cavalli 7d6c17f386 Rewrite build system 2023-08-29 12:36:01 +02:00
Andrea Cavalli 9d8e67cd2f Fix deps 2023-08-26 12:43:40 +02:00
Andrea Cavalli 8809263e3b Debug 2023-08-26 12:21:27 +02:00
Andrea Cavalli 3b20f4f618 Fixes 2023-08-26 12:16:33 +02:00
Andrea Cavalli 80e13860d8 Add tmate 2023-08-26 11:26:49 +02:00
Andrea Cavalli 209ca6a20f Disable ssh 2023-08-26 11:18:39 +02:00
Andrea Cavalli 9e8f14a700 Bugfix 2023-08-26 11:17:50 +02:00
Andrea Cavalli 290d443ac3 Use aptitude 2023-08-26 11:04:47 +02:00
Andrea Cavalli c68097fe1f Add debug step 2023-08-26 10:48:11 +02:00
Andrea Cavalli c83bc5433a Add debug step 2023-08-26 10:41:31 +02:00
Andrea Cavalli 51de6b0602 Remove dependency 2023-08-26 10:30:50 +02:00
Andrea Cavalli 3fd4c9aa89 Remove dependency 2023-08-26 10:25:13 +02:00
Andrea Cavalli 8e31661660 Remove dependency 2023-08-26 10:17:08 +02:00
Andrea Cavalli 1a3dd7e391 Bugfix 2023-08-26 10:10:04 +02:00
Andrea Cavalli e63ebec003 Bugfix 2023-08-26 10:05:41 +02:00
Andrea Cavalli 8092a4662c Bugfix 2023-08-26 09:58:29 +02:00
Andrea Cavalli cb035fe6f7 Bugfix 2023-08-25 23:04:54 +02:00
Andrea Cavalli cf2b478dcb Debug 2023-08-25 23:01:11 +02:00
Andrea Cavalli 3ce19cd092 Bugfix 2023-08-25 22:58:05 +02:00
Andrea Cavalli f58268c859 Bugfix 2023-08-25 22:55:27 +02:00
Andrea Cavalli 0e96585516 Update tdlight, add armhf support 2023-08-25 22:25:19 +02:00
Andrea Cavalli ca9604f774 Update tdlib 2023-08-06 00:10:48 +02:00
Andrea Cavalli b0b9305bcb Update tdlib 2023-06-15 01:15:05 +02:00
Andrea Cavalli 3ac972595a Merge remote-tracking branch 'tdlib/master' 2023-06-12 00:36:16 +02:00
Andrea Cavalli e468d4bdfe
Merge pull request #8 from fshim/realpath_for_arm64
replace greadlink to realpath for macos arm64
2023-06-12 00:35:32 +02:00
Andrea Cavalli 630896e20c
Merge pull request #7 from fshim/fix_path_macos_arm64
fix path in build_macos_arm64.sh
2023-06-11 18:44:46 +02:00
fshim ac42e1338e replace greadlink to realpath for macos arm64 2023-06-11 00:57:00 +03:00
fshim b6a8d03538 fix path in build_macos_arm64.sh 2023-06-11 00:50:35 +03:00
Andrea Cavalli c5ec94394d Fix macOS build 2023-06-05 22:48:04 +02:00
Andrea Cavalli d85b961d28 Fix macOS build 2023-06-05 22:47:21 +02:00
Andrea Cavalli 942b9206b4 Fix macOS build 2023-06-05 22:20:03 +02:00
Andrea Cavalli babbe3bc81 Fix macOS build 2023-06-05 22:11:34 +02:00
Andrea Cavalli 241e88190b Add gcc variant 2023-06-05 16:51:39 +02:00
Andrea Cavalli a6e3e41583 Add gcc variant 2023-06-05 16:50:20 +02:00
Andrea Cavalli 69bff16d11 Add gcc variant 2023-06-05 16:25:14 +02:00
Andrea Cavalli 0be5709d78 Add gcc variant 2023-06-05 15:47:50 +02:00
Andrea Cavalli 06b09272b7 Update tdlib 2023-05-25 11:55:03 +02:00
Andrea Cavalli 470146e1f6 Update tdlib 2023-05-22 15:03:50 +02:00
Andrea Cavalli 3f4b618716 Update tdapi 2023-05-21 11:57:50 +02:00
Andrea Cavalli a54950dc93 Bugfix 2023-05-21 11:42:42 +02:00
Andrea Cavalli d411414c9e Update tdlib 2023-05-21 01:34:57 +02:00
Andrea Cavalli 69e71bccd9 Fix windows build 2023-05-21 01:00:42 +02:00
Andrea Cavalli 6fac95b96d Update tdlib 2023-05-19 01:21:21 +02:00
Andrea Cavalli 55108e5df4 Fix windows build 2023-05-18 19:52:25 +02:00
Andrea Cavalli 6d5522d05e Code cleanup 2023-05-15 00:43:49 +02:00
Andrea Cavalli ee360753e4 fix windows build 2023-05-14 16:54:54 +02:00
Andrea Cavalli b4795a1465 Fix ci 2023-05-14 15:31:52 +02:00
Andrea Cavalli 10da7114ca Try to fix risc-v 2023-05-14 15:24:00 +02:00
Andrea Cavalli ddfc58f84b Try to fix risc-v 2023-05-14 15:17:33 +02:00
Andrea Cavalli ad32b5597d Try to fix risc-v 2023-05-14 15:12:30 +02:00
Andrea Cavalli 23f164faf8 Try to fix risc-v 2023-05-14 15:06:34 +02:00
Andrea Cavalli 8b9b02833b Try to fix risc-v 2023-05-14 15:06:27 +02:00
Andrea Cavalli dcb4af6e05 Try to fix risc-v 2023-05-14 14:57:55 +02:00
Andrea Cavalli 0707cfc538 Try to fix risc-v 2023-05-14 14:52:48 +02:00
Andrea Cavalli efadaad167 Try to fix risc-v 2023-05-14 14:49:49 +02:00
Andrea Cavalli cab5a3d8eb Try to fix risc-v 2023-05-14 14:41:59 +02:00
Andrea Cavalli da24d314ea Fix llvm paths 2023-05-14 13:49:35 +02:00
Andrea Cavalli 380c44ad46 Fix llvm paths 2023-05-14 11:48:53 +02:00
Andrea Cavalli d9c015bc5b Fix parallel argument, dynamically fix llvm symlinks 2023-05-14 11:30:20 +02:00
Andrea Cavalli bdedb36f50 Fix windows 2023-05-14 11:10:07 +02:00
Andrea Cavalli a45542d637 Fix windows 2023-05-14 02:22:36 +02:00
Andrea Cavalli 128ea52b07 prefer clang 14 2023-05-14 02:07:58 +02:00
Andrea Cavalli 2f8185fb92 Force c++14 2023-05-14 02:01:43 +02:00
Andrea Cavalli 63d14d7170 Use gnu readlink 2023-05-14 01:46:01 +02:00
Andrea Cavalli 1bb7e8b05f Use c++14 2023-05-14 01:41:23 +02:00
Andrea Cavalli e61da6af3d Fix windows build 2023-05-14 01:34:16 +02:00
Andrea Cavalli 95ac6c9b8f Fix brew errors 2023-05-14 01:22:11 +02:00
Andrea Cavalli 0cad5f9e8a Update clang 2023-05-14 01:19:06 +02:00
Andrea Cavalli 104884b966 Disable i386 2023-05-14 01:12:42 +02:00
Andrea Cavalli aafa971bf9 Update windows build 2023-05-14 01:02:04 +02:00
Andrea Cavalli 9ebc8af349 Update clang version 2023-05-14 00:54:41 +02:00
Andrea Cavalli 384b7b39a3 Bugfix 2023-05-14 00:35:34 +02:00
Andrea Cavalli 2d53691179 Bugfix 2023-05-14 00:32:52 +02:00
Andrea Cavalli d60bb70391 Bypass a bug 2023-05-14 00:13:05 +02:00
Andrea Cavalli 025e72806d Add windows 2019 2023-05-14 00:05:17 +02:00
Andrea Cavalli 2b2cb07dea update 2023-05-13 15:02:44 +02:00
Andrea Cavalli d95cfd7fed Add windows 2019, macos 12 2023-05-13 14:57:32 +02:00
Andrea Cavalli 40ee7cb3e3 Disable risc-v 2023-05-13 14:49:54 +02:00
Andrea Cavalli 4a9e249b29 Use correct java version 2023-05-13 13:09:41 +02:00
Andrea Cavalli 278312db5b risc-v workaround 2023-05-13 12:12:13 +02:00
Andrea Cavalli 1d68341728 Install custom deps afterwards 2023-05-13 11:15:46 +02:00
Andrea Cavalli 71b12c2025 Remove s390x 2023-05-12 02:29:59 +02:00
Andrea Cavalli 8208938b7e Add jammy updates 2023-05-12 02:18:00 +02:00
Andrea Cavalli d88d6187ac Use clang 15 2023-05-12 02:08:21 +02:00
Andrea Cavalli 16e76e87b7 Fix names 2023-05-12 02:03:59 +02:00
Andrea Cavalli afa501d306 Use correct ubuntu version 2023-05-12 02:01:56 +02:00
Andrea Cavalli 6b2f774337 Fix names 2023-05-12 02:00:02 +02:00
Andrea Cavalli 262ab0c4be Enable ci 2023-05-12 01:51:50 +02:00
Andrea Cavalli 305473c206 Add ppc64le, riscv64, s390x, i386 2023-05-12 01:51:21 +02:00
Andrea Cavalli 9ef688a833 Add armhf and i386 2023-05-12 01:34:32 +02:00
Andrea Cavalli cd6c20969e fix dependencies 2023-05-11 18:04:04 +02:00
Andrea Cavalli b373f2121b Fix ccache 2023-05-11 17:53:49 +02:00
Andrea Cavalli 0470146be9 Use sccache 2023-05-11 17:52:47 +02:00
Andrea Cavalli 80011b08e6 Fix deps 2023-05-11 17:33:15 +02:00
Andrea Cavalli e933cf2223 Fix deps 2023-05-11 17:27:14 +02:00
Andrea Cavalli 6f951bb11a Add armhf and arm64 ssl3 2023-05-11 17:23:48 +02:00
Andrea Cavalli 443a3e7b45 Fix workflow 2023-05-11 01:17:29 +02:00
Andrea Cavalli f9bbd11d24 Code cleanup 2023-05-10 15:26:48 +02:00
Andrea Cavalli 616a56d9d8 Use sccache 2023-05-10 11:07:12 +02:00
Andrea Cavalli c32ba7bb55 Safe filenames 2023-05-10 10:24:01 +02:00
Andrea Cavalli b09d33e3cb Change native directory 2023-05-10 10:13:56 +02:00
Andrea Cavalli 1cdee0ea42 Fix names 2023-05-09 14:54:15 +02:00
Andrea Cavalli c4f4855257 Add space 2023-05-09 12:47:32 +02:00
Andrea Cavalli 9c93305ff6 Fix artifact name 2023-05-09 12:28:08 +02:00
Andrea Cavalli 9f0a1760e2 Update revision number 2023-05-09 12:19:17 +02:00
Andrea Cavalli 77d0770a59 Update ci 2023-05-09 12:15:15 +02:00
Andrea Cavalli 08943e8782 Update ci 2023-05-09 11:59:15 +02:00
Andrea Cavalli 5c2a9b6aea Fix snapshot url 2023-05-09 11:47:22 +02:00
Andrea Cavalli ed16207b37 Fix deployment 2023-05-09 11:46:30 +02:00
Andrea Cavalli 8098add2ae Fix deployment 2023-05-09 11:19:45 +02:00
Andrea Cavalli 7d4fcbb148 Cache 2023-05-09 10:49:08 +02:00
Andrea Cavalli 5f7da0ee06 Cache maven 2023-05-09 10:45:22 +02:00
Andrea Cavalli 70fb534cdc Fix deployment options 2023-05-09 10:43:04 +02:00
Andrea Cavalli 6fd1c60b17 Update repo 2023-05-09 00:59:12 +02:00
Andrea Cavalli 14161a153e update ci 2023-05-09 00:38:43 +02:00
Andrea Cavalli 7568c310c0 Update ci 2023-05-08 21:48:00 +02:00
Andrea Cavalli 775c73c412 Update ci 2023-05-08 21:43:40 +02:00
Andrea Cavalli 23fcce0f6b Enable ci 2023-05-08 21:37:05 +02:00
Andrea Cavalli 60f0d13902 Reorder properties 2023-05-08 21:21:48 +02:00
Andrea Cavalli 51c562e249 Update path 2023-05-08 21:18:15 +02:00
Andrea Cavalli e4eed9e545 fix 2023-05-08 20:56:15 +02:00
Andrea Cavalli 4c114a7716 fix 2023-05-08 20:54:09 +02:00
Andrea Cavalli bc246043dd fixes 2023-05-08 19:37:04 +02:00
Andrea Cavalli 09e938fa5d use cross java home, add compiler-rt and libunwind 2023-05-08 19:31:04 +02:00
Andrea Cavalli 3a3919d10c fix java path 2023-05-08 19:02:40 +02:00
Andrea Cavalli 338a85da4d fix deps 2023-05-08 15:09:34 +02:00
Andrea Cavalli e75aa6316f fix deps 2023-05-08 14:56:10 +02:00
Andrea Cavalli e85b2c74c7 Overwrite dependencies 2023-05-08 14:42:28 +02:00
Andrea Cavalli e97934ab7b Install dependencies as root 2023-05-08 14:36:56 +02:00
Andrea Cavalli 52bf29d34b Enable ci 2023-05-08 14:33:32 +02:00
Andrea Cavalli af36561cb5 fix 2023-05-08 12:41:40 +02:00
Andrea Cavalli 7d616c5f6f fix 2023-05-08 12:36:11 +02:00
Andrea Cavalli 77dcacf308 verbosity 2023-05-08 12:33:34 +02:00
Andrea Cavalli edbf915ce4 fix 2023-05-08 12:23:56 +02:00
Andrea Cavalli 5292721e80 fix 2023-05-08 12:12:12 +02:00
Andrea Cavalli e75ea78a35 fix 2023-05-08 12:06:23 +02:00
Andrea Cavalli 055d6cfb01 fix 2023-05-08 12:02:49 +02:00
Andrea Cavalli 317a524cd6 fix 2023-05-08 12:01:07 +02:00
Andrea Cavalli 3af2119329 update 2023-05-08 11:59:52 +02:00
Andrea Cavalli f98ca55ac5 fix 2023-05-08 11:56:31 +02:00
Andrea Cavalli 13b85d37c2 fix 2023-05-08 11:46:43 +02:00
Andrea Cavalli 547a567934 fix 2023-05-08 11:45:26 +02:00
Andrea Cavalli af088ad4fd fix 2023-05-08 11:43:58 +02:00
Andrea Cavalli f14a7c17a8 fix 2023-05-08 11:42:25 +02:00
Andrea Cavalli 364fc90946 verbose linker 2023-05-08 11:28:39 +02:00
Andrea Cavalli 1675b3618b update 2023-05-08 11:26:18 +02:00
Andrea Cavalli 0dc4fd13f0 update 2023-05-08 11:24:24 +02:00
Andrea Cavalli 0eecc12a43 update 2023-05-08 11:23:47 +02:00
Andrea Cavalli 8ef8b2124c update 2023-05-08 11:17:08 +02:00
Andrea Cavalli baf9d2d778 fix 2023-05-08 11:16:21 +02:00
Andrea Cavalli 7e48ad503d fix 2023-05-08 10:59:39 +02:00
Andrea Cavalli ac11e4cd14 fix 2023-05-08 00:56:40 +02:00
Andrea Cavalli d769542fcb update 2023-05-08 00:52:34 +02:00
Andrea Cavalli 5641d638f7 bugfix 2023-05-08 00:41:50 +02:00
Andrea Cavalli baebc5b1de update 2023-05-08 00:38:18 +02:00
Andrea Cavalli 40816c0dee Disable javadoc 2023-05-07 20:02:00 +02:00
Andrea Cavalli 059f8e6e4a Force utf8 2023-05-07 19:52:50 +02:00
Andrea Cavalli 9c326aa755 update 2023-05-07 19:46:24 +02:00
Andrea Cavalli 6daf99448e fix 2023-05-07 19:22:20 +02:00
Andrea Cavalli e970131801 update 2023-05-07 19:21:09 +02:00
Andrea Cavalli 2e63053f4e fix 2023-05-07 19:18:30 +02:00
Andrea Cavalli b10bad2518 update 2023-05-07 19:17:14 +02:00
Andrea Cavalli bae610df91 fix 2023-05-07 19:15:20 +02:00
Andrea Cavalli 9fc590fdff fix 2023-05-07 19:13:46 +02:00
Andrea Cavalli cd73cf05b9 fix 2023-05-07 19:10:53 +02:00
Andrea Cavalli bb699fed33 update 2023-05-07 18:39:33 +02:00
Andrea Cavalli 0abcd92975 optimization number 2023-05-07 18:29:49 +02:00
Andrea Cavalli 4c7bd7c075 update clang 2023-05-07 18:25:49 +02:00
Andrea Cavalli 32e7232a00 Fix host compiler 2023-05-07 18:22:04 +02:00
Andrea Cavalli 9f19713141 update 2023-05-07 18:14:39 +02:00
Andrea Cavalli 80b695e28f Fix clang 2023-05-07 18:10:57 +02:00
Andrea Cavalli e1c1e568f9 Update clang 2023-05-07 18:03:58 +02:00
Andrea Cavalli 08f811ddb4 Use lld 2023-05-07 17:36:52 +02:00
Andrea Cavalli 3eb6f62aab More env vars 2023-05-07 17:34:39 +02:00
Andrea Cavalli 16ab948f60 Use env vars 2023-05-07 17:32:20 +02:00
Andrea Cavalli a79f4565a9 Move ccache 2023-05-07 17:05:23 +02:00
Andrea Cavalli 2e97c61005 toolchain 2023-05-07 17:02:25 +02:00
Andrea Cavalli de1fcdd602 Absolute paths 2023-05-07 17:00:07 +02:00
Andrea Cavalli 1ee5e2d163 Not a toolchain 2023-05-07 16:56:25 +02:00
Andrea Cavalli e2851d4f82 Specify default compiler 2023-05-07 16:49:33 +02:00
Andrea Cavalli ed2b68ec45 Fix toolchain 2023-05-07 16:39:12 +02:00
Andrea Cavalli 5c0d4a0242 Fix toolchains 2023-05-07 16:30:59 +02:00
Andrea Cavalli 3bb2b20141 Fix api build 2023-05-07 15:35:26 +02:00
Andrea Cavalli a279aa5713 Fix clang 10 path 2023-05-07 15:18:27 +02:00
Andrea Cavalli 2e7798eb5f Fix api deploy 2023-05-07 15:00:00 +02:00
Andrea Cavalli 95961d1a2d bugfix 2023-05-07 14:50:02 +02:00
Andrea Cavalli 4f359fd7e3 (dev) Rewrite tdlib-serializer, reorganize project 2023-05-07 14:47:17 +02:00
Andrea Cavalli d7f777bf15 Test 2023-04-27 20:18:15 +02:00
Andrea Cavalli 0ac5986b18 Add crossbuild variable 2023-04-27 19:17:42 +02:00
Andrea Cavalli 68edb3393c Bugfixes 2023-04-27 18:10:51 +02:00
Andrea Cavalli 8947b3c3c6 Removed submodule implementations/tdlib 2023-04-27 17:04:58 +02:00
Andrea Cavalli 0edcf4b0ed Bugfix 2023-04-27 16:53:44 +02:00
Andrea Cavalli 4c0cb6c62f add ssl3 as classifier 2023-04-27 15:17:06 +02:00
Andrea Cavalli 3e3690b53c add ssl3 as classifier 2023-04-27 02:46:44 +02:00
Andrea Cavalli 3b9bbce2fb Update macos 2023-04-26 17:41:47 +02:00
Andrea Cavalli d75c49e38c Add libtiff 2023-04-26 17:08:10 +02:00
Andrea Cavalli 8f22e3c98a Fix docs deployment 2023-04-26 16:49:16 +02:00
Andrea Cavalli 601eec6337 Update macOS, temporarily use the native build system for ubuntu 22.04 2023-04-26 16:42:09 +02:00
Andrea Cavalli be56497397 Update macOS, temporarily use the native build system for ubuntu 22.04 2023-04-26 16:32:22 +02:00
Andrea Cavalli ec1067075e Update tdlib 2023-04-26 13:00:31 +02:00
Andrea Cavalli f3d98c0cbc Update github actions to Ubuntu 22.04 and OpenSSL3 2023-02-08 17:32:48 +01:00
Andrea Cavalli d0f90ada40 Update github actions to Ubuntu 22.04 and OpenSSL3 2023-02-08 17:24:08 +01:00
Andrea Cavalli 4a1ec6fce4 Update github actions to Ubuntu 22.04 and OpenSSL3 2023-02-08 17:09:33 +01:00
Andrea Cavalli b218ca97da Update github actions to Ubuntu 22.04 and OpenSSL3 2023-02-08 17:04:30 +01:00
Andrea Cavalli 7866e8269c Update github actions to Ubuntu 22.04 and OpenSSL3 2023-02-08 15:18:11 +01:00
Andrea Cavalli 59ec1cc9d0 Update github actions to Ubuntu 22.04 and OpenSSL3 2023-02-08 12:47:41 +01:00
Andrea Cavalli 8a8515638e Update tdlib 2023-01-17 15:37:03 +01:00
Andrea Cavalli af2523f3c0 Update tdlib 2023-01-10 01:34:34 +01:00
95 changed files with 37446 additions and 2313 deletions

27
.docker/SymlinkPrefix.javash Executable file
View File

@ -0,0 +1,27 @@
#!/usr/bin/java --source 11
import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes;
public class Main {
/** @param args directory, sourcePrefix, targetPrefix */
public static void main(String[] args) throws IOException {
Path dir = Path.of(args[0]).toAbsolutePath().normalize();
Path sourcePrefix = dir.resolve(Path.of(args[1])).normalize();
Path targetPrefix = dir.resolve(Path.of(args[2])).normalize();
System.out.printf("Replacing symlinks in '%s' from '%s' to '%s'%n", dir, sourcePrefix, targetPrefix);
Files.walkFileTree(dir, new SimpleFileVisitor<>() {
@Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (attrs.isSymbolicLink()) {
var originalTarget = Files.readSymbolicLink(file).normalize();
if (originalTarget.startsWith(sourcePrefix)) {
var symlinkFileDir = file.getParent();
originalTarget = symlinkFileDir.resolve(originalTarget);
Files.delete(file);
var target = symlinkFileDir.relativize(targetPrefix.resolve(sourcePrefix.relativize(originalTarget))).normalize();
Files.createSymbolicLink(file, target);
System.out.printf("Symlink at '%s' pointing at '%s' is now pointing at '%s'%n", file, originalTarget, target);
}
}
return FileVisitResult.CONTINUE;
}
});
}
}

10
.docker/downloadthis.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash -ex
export PREV="$(pwd)"
in=(${2//:/ })
tmpdir="$1/${in[1]:-"default"}/`cat /etc/os-release | md5sum --binary | awk '{ print $1 }'`"
mkdir -p "$tmpdir"
cd "$tmpdir"
apt-get download "$2"
filename="$(find . -type f -name "${in[0]}_*_${in[1]:-"amd64"}.deb" | sort | tail -n1)"
dpkg -x "$filename" "$3"
cd "$PREV"

12
.docker/install-sccache.sh Executable file
View File

@ -0,0 +1,12 @@
#!/bin/bash -ex
if [ ! -f /opt/sccache/sccache ]; then
apt-get --assume-yes update
apt-get --assume-yes install wget
wget https://github.com/mozilla/sccache/releases/download/v0.5.4/sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz
tar xzf sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz
rm sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz
mkdir -p /opt/sccache/
mv sccache-v0.5.4-x86_64-unknown-linux-musl/sccache /opt/sccache/sccache
rm -r sccache-v0.5.4-x86_64-unknown-linux-musl
chmod +x /opt/sccache/sccache
fi

6
.dockerignore Normal file
View File

@ -0,0 +1,6 @@
/**
!/.docker
!/api
!/implementations
!/natives
!/tdlib-serializer

View File

@ -1,4 +1,4 @@
name: Docker multi-arch build
name: multi-arch build
on:
push:
@ -8,133 +8,93 @@ on:
jobs:
build:
name: Build (${{ matrix.implementation }}-${{ matrix.os }}-${{ matrix.arch }})
name: ${{ matrix.type }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/386", implementation: "tdlight"}
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/386", implementation: "tdlib"}
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/amd64", implementation: "tdlight"}
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/amd64", implementation: "tdlib"}
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/armhf", implementation: "tdlight"}
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/armhf", implementation: "tdlib"}
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/arm64", implementation: "tdlight"}
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/arm64", implementation: "tdlib"}
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/s390x", implementation: "tdlight"}
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/s390x", implementation: "tdlib"}
- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/ppc64le", implementation: "tdlight"}
#- {os: ubuntu-20.04, usedocker: "true", useqemu: "false", arch: "linux/ppc64le", implementation: "tdlib"}
- {os: windows-2019, usedocker: "false", useqemu: "false", arch: "amd64", implementation: "tdlight", vcpkgCommitId: "6ca56aeb457f033d344a7106cb3f9f1abf8f4e98", triplet: "x64-windows-static"}
#- {os: windows-2019, usedocker: "false", useqemu: "false", arch: "amd64", implementation: "tdlib", vcpkgCommitId: "6ca56aeb457f033d344a7106cb3f9f1abf8f4e98", triplet: "x64-windows-static"}
- {os: macos-10.15, usedocker: "false", useqemu: "false", arch: "amd64", implementation: "tdlight"}
#- {os: macos-10.15, usedocker: "false", useqemu: "false", arch: "amd64", implementation: "tdlib"}
- { os: ubuntu-22.04, type: "linux_amd64_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "buster-backports", native: "true" }
- { os: ubuntu-22.04, type: "linux_amd64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "true" }
- { os: ubuntu-22.04, type: "linux_amd64_clang_ssl3", compiler: "clang", ssl: "ssl3", debianArch: "amd64", tripleArch: "x86_64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "true" }
#- { os: ubuntu-22.04, type: "linux_i386_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "i386", tripleArch: "i386", tripleGnu: "gnu", debianVersion: "buster-backports", native: "false" }
#- { os: ubuntu-22.04, type: "linux_i386_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "i386", tripleArch: "i386", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" }
- { os: ubuntu-22.04, type: "linux_ppc64el_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "ppc64el", tripleArch: "powerpc64le", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" }
- { os: ubuntu-22.04, type: "linux_riscv64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "riscv64", tripleArch: "riscv64", tripleGnu: "gnu", debianVersion: "sid", native: "false" }
- { os: ubuntu-22.04, type: "linux_armhf_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "armhf", tripleArch: "arm", tripleGnu: "gnueabihf", debianVersion: "buster-backports", native: "false" }
- { os: ubuntu-22.04, type: "linux_armhf_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "armhf", tripleArch: "arm", tripleGnu: "gnueabihf", debianVersion: "bookworm-backports", native: "false" }
- { os: ubuntu-22.04, type: "linux_arm64_gnu_ssl1", compiler: "gnu", ssl: "ssl1", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "buster-backports", native: "false" }
- { os: ubuntu-22.04, type: "linux_arm64_gnu_ssl3", compiler: "gnu", ssl: "ssl3", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" }
- { os: ubuntu-22.04, type: "linux_arm64_clang_ssl3", compiler: "clang", ssl: "ssl3", debianArch: "arm64", tripleArch: "aarch64", tripleGnu: "gnu", debianVersion: "bookworm-backports", native: "false" }
- { os: windows-2019, type: "windows_amd64", vcpkgCommitId: "fba75d09065fcc76a25dcf386b1d00d33f5175af", triplet: "x64-windows-static" }
- { os: macos-12, type: "macos_amd64" }
- { os: macos-14, type: "macos_arm64" }
steps:
- name: Checkout current repo
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
submodules: "recursive"
- name: Get version
if: matrix.usedocker == 'true'
shell: bash
run: |
set -xeo pipefail
# Get latest commit short hash
HASH_VERSION=$(git rev-parse --short HEAD)
# Strip git ref prefix from version
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
# Strip "v" prefix from tag name
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
# Use Docker `latest` tag convention
[ "$VERSION" == "master" ] && VERSION=latest
HASH_VERSION=$(echo "$HASH_VERSION" | awk '{print tolower($0)}')
VERSION=$(echo "$VERSION" | awk '{print tolower($0)}')
ARCH=${{ matrix.arch }}
SAFE_ARCH=${ARCH///} # linux/amd64 -> linuxamd64
TYPE=${{ matrix.type }}
SAFE_TYPE=${TYPE///} # linux_amd64_ -> linux_amd64_
COMPILER=${{ matrix.compiler }}
SSL=${{ matrix.ssl }}
DEBIAN_ARCH=${{ matrix.debianArch }}
TRIPLE_ARCH=${{ matrix.tripleArch }}
TRIPLE_GNU=${{ matrix.tripleGnu }}
NATIVE=${{ matrix.native }}
DEBIAN_VERSION=${{ matrix.debianVersion }}
REVISION=4.0.${{ github.run_number }}
GH_MATRIX_OS=${{ matrix.os }}
GH_MATRIX_TYPE=${{ matrix.type }}
# Store variable for future use
echo "HASH_VERSION=$HASH_VERSION" >> $GITHUB_ENV
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "SAFE_ARCH=$SAFE_ARCH" >> $GITHUB_ENV
echo "TYPE=$TYPE" >> $GITHUB_ENV
echo "SAFE_TYPE=$SAFE_TYPE" >> $GITHUB_ENV
echo "COMPILER=$COMPILER" >> $GITHUB_ENV
echo "SSL=$SSL" >> $GITHUB_ENV
echo "DEBIAN_ARCH=$DEBIAN_ARCH" >> $GITHUB_ENV
echo "TRIPLE_ARCH=$TRIPLE_ARCH" >> $GITHUB_ENV
echo "TRIPLE_GNU=$TRIPLE_GNU" >> $GITHUB_ENV
echo "NATIVE=$NATIVE" >> $GITHUB_ENV
echo "DEBIAN_VERSION=$DEBIAN_VERSION" >> $GITHUB_ENV
echo "REVISION=$REVISION" >> $GITHUB_ENV
echo "GH_MATRIX_OS=$GH_MATRIX_OS" >> $GITHUB_ENV
echo "GH_MATRIX_TYPE=$GH_MATRIX_TYPE" >> $GITHUB_ENV
# Print debug info
echo "hash version: $HASH_VERSION"
echo "version: $VERSION"
echo "safe arch: $SAFE_ARCH"
echo "ssl: $SSL"
echo "debian arch: $DEBIAN_ARCH"
echo "triple arch: $TRIPLE_ARCH"
echo "triple gnu: $TRIPLE_GNU"
echo "Variables:"
# Save env to file
cat $GITHUB_ENV > github.env
- name: Set up QEMU
if: matrix.usedocker == 'true' && matrix.useqemu == 'true'
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
if: matrix.usedocker == 'true'
uses: docker/setup-buildx-action@v2
- name: Cache Docker layers
if: matrix.usedocker == 'true'
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-v3-buildx-cache-${{ env.SAFE_ARCH }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-v3-buildx-cache-${{ env.SAFE_ARCH }}-
- name: Cache Maven
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-v3-maven-${{ env.SAFE_ARCH }}-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-v3-maven-${{ env.SAFE_ARCH }}-
- name: Cache packages cache
uses: actions/cache@v3
with:
path: ~/tdlight-java-natives/tdlight-java-natives/.cache
key: ${{ runner.os }}-v3-packages-${{ env.SAFE_ARCH }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-v3-packages-${{ env.SAFE_ARCH }}-
- name: Cache ccache
uses: actions/cache@v3
with:
path: ~/.ccache
key: ${{ runner.os }}-v2-ccache-${{ env.SAFE_ARCH }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-v2-ccache-${{ env.SAFE_ARCH }}-
- name: Build image
if: matrix.usedocker == 'true'
uses: docker/build-push-action@v3
with:
context: .
file: ./Dockerfile
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,mode=max,dest=/tmp/.buildx-cache
platforms: linux/amd64
push: false
load: true
tags: |
tdlight-java-natives:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }}
build-args: |
REVISION=${{ github.run_number }}
GH_MATRIX_OS=${{ matrix.os }}
GH_MATRIX_ARCH=${{ matrix.arch }}
IMPLEMENTATION_NAME=${{ matrix.implementation }}
- name: Extract jni from docker image
if: matrix.usedocker == 'true'
run: |
mkdir generated
docker cp $(docker create tdlight-java-natives:${{ env.HASH_VERSION }}-${{ env.SAFE_ARCH }}):/usr/src/tdlight-java-natives/generated/. ./generated/.
- name: Setup Java (Snapshot)
if: github.ref == 'refs/heads/develop'
uses: actions/setup-java@v3
@ -144,6 +104,7 @@ jobs:
server-id: mchv-snapshot-distribution
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
cache: 'maven'
- name: Setup Java (Release)
if: github.ref != 'refs/heads/develop'
uses: actions/setup-java@v3
@ -153,59 +114,55 @@ jobs:
server-id: mchv-release-distribution
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Setup variables
shell: bash
run: |
# ====== Variables
export REVISION=${{ github.run_number }}
export GH_MATRIX_OS=${{ matrix.os }}
export GH_MATRIX_ARCH=${{ matrix.arch }}
export IMPLEMENTATION_NAME=${{ matrix.implementation }}
source ./scripts/continuous-integration/github-workflows/setup-variables.sh
cache: 'maven'
echo "Variables:"
echo "REVISION=$REVISION" >> $GITHUB_ENV
echo "BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV
echo "IMPLEMENTATION_NAME=$IMPLEMENTATION_NAME" >> $GITHUB_ENV
echo "TD_SRC_DIR=$TD_SRC_DIR" >> $GITHUB_ENV
echo "TD_BIN_DIR=$TD_BIN_DIR" >> $GITHUB_ENV
echo "TDNATIVES_BIN_DIR=$TDNATIVES_BIN_DIR" >> $GITHUB_ENV
echo "TDNATIVES_CPP_SRC_DIR=$TDNATIVES_CPP_SRC_DIR" >> $GITHUB_ENV
echo "TDNATIVES_DOCS_BIN_DIR=$TDNATIVES_DOCS_BIN_DIR" >> $GITHUB_ENV
echo "TD_BUILD_DIR=$TD_BUILD_DIR" >> $GITHUB_ENV
echo "TDNATIVES_CPP_BUILD_DIR=$TDNATIVES_CPP_BUILD_DIR" >> $GITHUB_ENV
echo "JAVA_SRC_DIR=$JAVA_SRC_DIR" >> $GITHUB_ENV
echo "TDLIB_SERIALIZER_DIR=$TDLIB_SERIALIZER_DIR" >> $GITHUB_ENV
if [[ ! -z "$PATH" && "$OPERATING_SYSTEM_NAME" != "windows" ]]; then
echo "PATH=$PATH" >> $GITHUB_ENV
fi
echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV
echo "JAVA_INCLUDE_PATH=$JAVA_INCLUDE_PATH" >> $GITHUB_ENV
echo "CMAKE_EXTRA_ARGUMENTS=$CMAKE_EXTRA_ARGUMENTS" >> $GITHUB_ENV
echo "VCPKG_DIR=$VCPKG_DIR" >> $GITHUB_ENV
echo "MAVEN_OPTS=$MAVEN_OPTS" >> $GITHUB_ENV
echo "GH_CPU_ARCH=$GH_CPU_ARCH" >> $GITHUB_ENV
echo "CPU_ARCH_JAVA=$CPU_ARCH_JAVA" >> $GITHUB_ENV
echo "CPU_ARCHITECTURE_NAME=$CPU_ARCHITECTURE_NAME" >> $GITHUB_ENV
echo "CPU_CORES_NUM=$CPU_CORES_NUM" >> $GITHUB_ENV
echo "CPU_CORES=$CPU_CORES" >> $GITHUB_ENV
echo "OPERATING_SYSTEM_NAME=$OPERATING_SYSTEM_NAME" >> $GITHUB_ENV
echo "OPERATING_SYSTEM_NAME_SHORT=$OPERATING_SYSTEM_NAME_SHORT" >> $GITHUB_ENV
echo "SRC_TDJNI_LIBNAME=$SRC_TDJNI_LIBNAME" >> $GITHUB_ENV
echo "DEST_TDJNI_LIBNAME=$DEST_TDJNI_LIBNAME" >> $GITHUB_ENV
- name: Install dependencies
if: matrix.usedocker == 'false'
shell: bash
run: |
echo "REVISION: $REVISION"
source ./scripts/continuous-integration/github-workflows/install-dependencies.sh
- name: Setup PHP with Readline extension
uses: shivammathur/setup-php@v2
with:
php-version: '8.0'
extensions: readline
# - name: Install ubuntu 20.04 dependencies
# if: matrix.os == 'ubuntu-20.04'
# shell: bash
# run: |
# export DEBIAN_FRONTEND=noninteractive
# sudo apt-get --assume-yes update
# sudo apt-get --assume-yes install make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-12 lld-12 libc++-12-dev libc++abi-12-dev libgcc-9-dev libunwind-dev libclang-common-12-dev maven
- name: Install ubuntu 20.04 dependencies (cached)
if: matrix.os == 'ubuntu-20.04'
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-12 lld-12 libc++-12-dev libc++abi-12-dev libgcc-9-dev libunwind-dev libclang-common-12-dev maven
version: 1.0
# - name: Install ubuntu 22.04 dependencies
# if: matrix.os == 'ubuntu-22.04'
# shell: bash
# run: |
# export DEBIAN_FRONTEND=noninteractive
# sudo apt-get --assume-yes update
# sudo apt-get --assume-yes install make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-14 lld-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev maven
- name: Install ubuntu 22.04 dependencies (cached)
if: matrix.os == 'ubuntu-22.04'
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: make git zlib1g-dev libssl-dev gperf php-cli cmake default-jdk clang-14 lld-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev maven
version: 1.0
- name: Install custom dependencies
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'windows-')
shell: bash
run: |
set -xeo pipefail
echo "REVISION: $REVISION"
if [[ -f "./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh" ]]; then
if [[ "$GH_MATRIX_OS" == *"windows"* || "$GH_MATRIX_OS" == *"macos"* ]]; then
./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh
else
sudo ./.github/workflows/scripts/install_deps_${SAFE_TYPE}.sh
fi
fi
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- name: Install MSVC
if: matrix.os == 'windows-2019'
uses: ilammy/msvc-dev-cmd@v1
@ -216,7 +173,7 @@ jobs:
if: matrix.os == 'windows-2019'
uses: lukka/get-cmake@latest
- name: Set up Maven
uses: stCarolas/setup-maven@v4.2
uses: stCarolas/setup-maven@v4.5
with:
maven-version: 3.8.2
- name: Setup NASM
@ -240,32 +197,90 @@ jobs:
- name: Install vcpkg deps
if: matrix.os == 'windows-2019'
run: |
$VCPKG_DIR/vcpkg install gperf openssl:x64-windows-static zlib:x64-windows-static
set -xeo pipefail
./vcpkg/vcpkg install gperf openssl:x64-windows-static zlib:x64-windows-static
shell: bash
- name: Build
if: matrix.usedocker == 'false'
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'windows-')
shell: bash
run: |
set -xeo pipefail
echo "REVISION: $REVISION"
source ./scripts/continuous-integration/github-workflows/build-natives.sh
- id: getfilename
source ./.github/workflows/scripts/build_${SAFE_TYPE}.sh
env:
SCCACHE_GHA_ENABLED: "on"
- name: Set up Docker buildx
uses: docker/setup-buildx-action@v2
if: matrix.os == 'ubuntu-22.04'
- name: Build
uses: docker/build-push-action@v4
if: matrix.os == 'ubuntu-22.04'
with:
context: .
push: false
file: tdlight.arch.${{env.SSL}}.${{env.COMPILER}}.dockerfile
tags: tdlight.${{env.DEBIAN_ARCH}}.${{env.SSL}}.${{env.COMPILER}}:latest
build-args: |
SCCACHE_GHA_ENABLED=on
ACTIONS_CACHE_URL=${{env.ACTIONS_CACHE_URL}}
ACTIONS_RUNTIME_TOKEN=${{env.ACTIONS_RUNTIME_TOKEN}}
ARCH_DEBIAN=${{env.DEBIAN_ARCH}}
ARCH_TRIPLE=${{env.TRIPLE_ARCH}}
TRIPLE_GNU=${{env.TRIPLE_GNU}}
NATIVE=${{env.NATIVE}}
DEBIAN_VERSION=${{env.DEBIAN_VERSION}}
cache-from: type=gha
cache-to: type=gha,mode=max
outputs: type=local,dest=./docker-out
- name: Copy built files from docker
if: matrix.os == 'ubuntu-22.04'
shell: bash
run: echo "::set-output name=file::$(cd generated/target; ls tdli*-natives-*.jar)"
- id: getfilepath
shell: bash
run: echo "::set-output name=file::$(ls generated/target/tdli*-natives-*.jar)"
run: |
set -xeo pipefail
echo "REVISION: $REVISION"
rm -rf natives
mv ./docker-out/out/natives natives
mv ./docker-out/out/libtdjni.so "libtdjni.${REVISION}-${TYPE}.so"
mv ./docker-out/out/tdlight-natives.jar "natives/target-${TYPE}/tdlight-natives-${REVISION}-${TYPE}.jar"
- uses: actions/upload-artifact@v3
with:
name: ${{ steps.getfilename.outputs.file }}
path: ${{ steps.getfilepath.outputs.file }}
name: tdlight-natives-${{env.REVISION}}-${{env.TYPE}}.jar
path: natives/target-${{env.TYPE}}/tdlight-natives-${{env.REVISION}}-${{env.TYPE}}.jar
- name: Deploy to Maven (Snapshot)
if: github.ref == 'refs/heads/develop'
shell: bash
run: |
set -xeo pipefail
echo "REVISION: $REVISION"
source ./scripts/continuous-integration/github-workflows/deploy-snapshot.sh
echo "TYPE: $TYPE"
mvn -B -f natives/pom.xml -Drevision="$REVISION" -Dnative.type.classifier="$TYPE" clean package
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \
-DrepositoryId=mchv-snapshot-distribution \
-Dfile=natives/target-$TYPE/tdlight-natives-$REVISION-$TYPE.jar \
-Dpackaging=pom \
-DgroupId=it.tdlight \
-DartifactId=tdlight-natives \
-Dversion=$REVISION \
-Drevision=$REVISION \
-Dclassifier=$TYPE \
-Dnative.type.classifier="$TYPE"
if [[ "$TYPE" == "linux_amd64_gnu_ssl1" ]]; then
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \
-DrepositoryId=mchv-snapshot-distribution \
-Dfile=natives/.ci-friendly-pom.xml \
-Dpackaging=pom \
-DgroupId=it.tdlight \
-DartifactId=tdlight-natives \
-Dversion=$REVISION \
-Drevision=$REVISION \
-Dnative.type.classifier="$TYPE"
fi
echo "Done."
exit 0
env:
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}
@ -273,9 +288,35 @@ jobs:
if: github.ref == 'refs/heads/master'
shell: bash
run: |
set -xeo pipefail
echo "REVISION: $REVISION"
source ./scripts/continuous-integration/github-workflows/deploy-release.sh
echo "TYPE: $TYPE"
mvn -B -f natives/pom.xml -Drevision="$REVISION" -Dnative.type.classifier="$TYPE" clean package
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \
-DrepositoryId=mchv-release-distribution \
-Dfile=natives/target-$TYPE/tdlight-natives-$REVISION-$TYPE.jar \
-Dpackaging=pom \
-DgroupId=it.tdlight \
-DartifactId=tdlight-natives \
-Dversion=$REVISION \
-Drevision=$REVISION \
-Dclassifier=$TYPE \
-Dnative.type.classifier="$TYPE"
if [[ "$TYPE" == "linux_amd64_gnu_ssl1" ]]; then
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \
-DrepositoryId=mchv-release-distribution \
-Dfile=natives/.ci-friendly-pom.xml \
-Dpackaging=pom \
-DgroupId=it.tdlight \
-DartifactId=tdlight-natives \
-Dversion=$REVISION \
-Drevision=$REVISION \
-Dnative.type.classifier="$TYPE"
fi
echo "Done."
exit 0
env:
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}

35
.github/workflows/scripts/build_api.sh vendored Executable file
View File

@ -0,0 +1,35 @@
#!/bin/bash -ex
REVISION="${REVISION:-1.0.0.0-SNAPSHOT}"
#export CC="ccache /usr/bin/clang"
#export CXX="ccache /usr/bin/clang++"
# Create missing dirs
rm -rf implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto
mkdir -p implementations/tdlight/build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni
# Build tdlib tools
cd implementations/tdlight/build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE="" \
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
-DTD_ENABLE_LTO=OFF \
-DTD_ENABLE_JNI=ON \
..
cmake --build . --target prepare_cross_compiling --config Release --parallel "$(nproc)"
cmake --build . --target td_generate_java_api --config Release --parallel "$(nproc)"
cd ../../../
# Generate TdApi.java
TEMP_TDAPI_FILE_PATH="./implementations/tdlight/build/java/it/tdlight/jni/TdApi.java"
./implementations/tdlight/build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./implementations/tdlight/build/java" "it/tdlight/jni"
php ./implementations/tdlight/td/generate/JavadocTlDocumentationGenerator.php "./implementations/tdlight/td/generate/scheme/td_api.tl" "$TEMP_TDAPI_FILE_PATH"
java ./tdlib-serializer/transform.java --source "$TEMP_TDAPI_FILE_PATH" --output "./api/src/main/java-legacy/it/tdlight/jni/TdApi.java" --java17 false --overwrite true --headers ./tdlib-serializer/headers.txt
java ./tdlib-serializer/transform.java --source "$TEMP_TDAPI_FILE_PATH" --output "./api/src/main/java-sealed/it/tdlight/jni/TdApi.java" --java17 true --overwrite true --headers ./tdlib-serializer/headers.txt
# Generate java package
echo "Building legacy package"
mvn -f api/pom.xml package -Dlegacy=true -Drevision="$REVISION"
echo "Building standard package"
mvn -f api/pom.xml package -Drevision="$REVISION"

View File

@ -0,0 +1,84 @@
#!/bin/bash -ex
# MacOS 12
REVISION="${REVISION:-1.0.0.0-SNAPSHOT}"
# Create missing dirs
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
# ccache
CCACHE=$(which sccache || true)
if [[ -x "$CCACHE" ]]; then
echo "found sccache: $CCACHE"
else
echo "sccache not found"
CCACHE=$(which ccache)
fi
# Build tdlib tools
cd implementations/tdlight/td_tools_build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ \
-DCMAKE_C_FLAGS_RELEASE="" \
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
-DTD_ENABLE_LTO=OFF \
-DTD_ENABLE_JNI=ON \
..
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
cd ../../../
# Generate TdApi.java
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
# Optimization flags
export CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
export CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto=thin -O3"
# Build tdlib
cd implementations/tdlight/build
INSTALL_PREFIX="$(greadlink -e ./td_bin/)"
INSTALL_BINDIR="$(greadlink -e ./td_bin/bin)"
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ \
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
-DTD_ENABLE_LTO=ON \
-DTD_ENABLE_JNI=ON \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
..
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../../
cd natives/build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-DTD_GENERATED_BINARIES_DIR="$(greadlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
-DTD_SRC_DIR="$(greadlink -e ../../implementations/tdlight)" \
-DTD_ENABLE_LTO=ON \
-DTDNATIVES_BIN_DIR="$(greadlink -e ../tdjni_bin/)" \
-DTDNATIVES_DOCS_BIN_DIR="$(greadlink -e ../tdjni_docs/)" \
-DTd_DIR:PATH="$(greadlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
-DJAVA_SRC_DIR="$(greadlink -e ../src/main/java)" \
-DTDNATIVES_CPP_SRC_DIR="$(greadlink -e ../src/main/cpp)" \
../src/main/cpp
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ..
mkdir -p src/main/resources/META-INF/tdlightjni/
mv tdjni_bin/libtdjni.dylib src/main/resources/META-INF/tdlightjni/libtdjni.macos_amd64.dylib
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=macos_amd64 package

View File

@ -0,0 +1,84 @@
#!/bin/bash -ex
# MacOS 12
REVISION="${REVISION:-1.0.0.0-SNAPSHOT}"
# Create missing dirs
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
# ccache
CCACHE=$(which sccache || true)
if [[ -x "$CCACHE" ]]; then
echo "found sccache: $CCACHE"
else
echo "sccache not found"
CCACHE=$(which ccache)
fi
# Build tdlib tools
cd implementations/tdlight/td_tools_build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl/ \
-DCMAKE_C_FLAGS_RELEASE="" \
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
-DTD_ENABLE_LTO=OFF \
-DTD_ENABLE_JNI=ON \
..
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
cd ../../../
# Generate TdApi.java
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
# Optimization flags
export CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
export CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto=thin -O3"
# Build tdlib
cd implementations/tdlight/build
INSTALL_PREFIX="$(greadlink -e ./td_bin/)"
INSTALL_BINDIR="$(greadlink -e ./td_bin/bin)"
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl/ \
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
-DTD_ENABLE_LTO=ON \
-DTD_ENABLE_JNI=ON \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
..
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../../
cd natives/build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-DTD_GENERATED_BINARIES_DIR="$(greadlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
-DTD_SRC_DIR="$(greadlink -e ../../implementations/tdlight)" \
-DTD_ENABLE_LTO=ON \
-DTDNATIVES_BIN_DIR="$(greadlink -e ../tdjni_bin/)" \
-DTDNATIVES_DOCS_BIN_DIR="$(greadlink -e ../tdjni_docs/)" \
-DTd_DIR:PATH="$(greadlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
-DJAVA_SRC_DIR="$(greadlink -e ../src/main/java)" \
-DTDNATIVES_CPP_SRC_DIR="$(greadlink -e ../src/main/cpp)" \
../src/main/cpp
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ..
mkdir -p src/main/resources/META-INF/tdlightjni/
mv tdjni_bin/libtdjni.dylib src/main/resources/META-INF/tdlightjni/libtdjni.macos_arm64.dylib
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=macos_arm64 package

View File

@ -0,0 +1,97 @@
#!/bin/bash -ex
# Change working directory
DEPLOY_DIR="$(pwd)"
cp -r . /c/tmp_tdlight
cd /c/tmp_tdlight
# Windows 2019
REVISION="${REVISION:-1.0.0.0-SNAPSHOT}"
# Create missing dirs
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
# ccache
CCACHE=$(which sccache || true)
if [[ -x "$CCACHE" ]]; then
CCACHE="sccache"
echo "found sccache: $CCACHE"
else
echo "sccache not found"
CCACHE="ccache"
fi
# Fix path
export PATH="$PATH:/c/Python3:$PATH:/c/tools/php74:/c/PHP:/c/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64:/c/Program Files/OpenJDK/openjdk-11.0.8_10/bin:/c/Program Files/CMake/bin:/c/ProgramData/chocolatey/bin:/c/Program Files/apache-maven-3.6.3/bin:/c/ProgramData/chocolatey/lib/maven/apache-maven-3.6.3/bin:/c/ProgramData/chocolatey/lib/base64/tools:/c/Program Files/NASM"
export VCPKG_DIR="$(readlink -e ./vcpkg)"
# Build tdlib tools
cd implementations/tdlight/td_tools_build
cmake \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-A x64 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DOPENSSL_USE_STATIC_LIBS=ON \
-DCMAKE_C_FLAGS_RELEASE="" \
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
-DTD_ENABLE_LTO=OFF \
-DTD_ENABLE_JNI=ON \
..
cmake --build . --target prepare_cross_compiling --config Release --parallel "$(nproc)"
cmake --build . --target td_generate_java_api --config Release --parallel "$(nproc)"
cd ../../../
# Generate TdApi.java
./implementations/tdlight/td_tools_build/td/generate/Release/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
# Optimization flags
export CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
export CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
export CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto=thin -O3"
# Build tdlib
cd implementations/tdlight/build
INSTALL_PREFIX="$(readlink -e ./td_bin/)"
INSTALL_BINDIR="$(readlink -e ./td_bin/bin)"
cmake \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-A x64 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DOPENSSL_USE_STATIC_LIBS=ON \
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
-DTD_ENABLE_LTO=ON \
-DTD_ENABLE_JNI=ON \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
..
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../../
cd natives/build
cmake \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DOPENSSL_USE_STATIC_LIBS=True \
-A x64 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DOPENSSL_USE_STATIC_LIBS=ON \
-DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate/Release)" \
-DTD_SRC_DIR="$(readlink -e ../../implementations/tdlight)" \
-DTD_ENABLE_LTO=ON \
-DTDNATIVES_BIN_DIR="$(readlink -e ../tdjni_bin/)" \
-DTDNATIVES_DOCS_BIN_DIR="$(readlink -e ../tdjni_docs/)" \
-DTd_DIR:PATH="$(readlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
-DJAVA_SRC_DIR="$(readlink -e ../src/main/java)" \
-DTDNATIVES_CPP_SRC_DIR="$(readlink -e ../src/main/cpp)" \
../src/main/cpp
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ..
mkdir -p src/main/resources/META-INF/tdlightjni/
mv tdjni_bin/tdjni.dll src/main/resources/META-INF/tdlightjni/tdjni.windows_amd64.dll
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=windows_amd64 package
# Restore original working directory
cp -r "../natives/" "$DEPLOY_DIR/"
cd "$DEPLOY_DIR"

View File

@ -0,0 +1,8 @@
#!/bin/bash -ex
export HOMEBREW_NO_AUTO_UPDATE=1
brew install --force gperf
brew install --force coreutils
brew install --force openjdk
brew install --force freetype
brew install --force gd
brew install --force libtiff

View File

@ -0,0 +1,8 @@
#!/bin/bash -ex
export HOMEBREW_NO_AUTO_UPDATE=1
brew install --force gperf
brew install --force coreutils
brew install --force openjdk
brew install --force freetype
brew install --force gd
brew install --force libtiff

View File

@ -0,0 +1,5 @@
#!/bin/bash -ex
# Windows 2019
choco install base64
choco install gperf
choco install strawberryperl

View File

@ -11,23 +11,22 @@ jobs:
strategy:
matrix:
include:
- {os: ubuntu-20.04, arch: "linux/amd64", implementation: "tdlight"}
#- {os: ubuntu-20.04, arch: "linux/amd64", implementation: "tdlib"}
- {os: ubuntu-22.04, arch: "linux/amd64", implementation: "tdlight"}
runs-on: ${{ matrix.os }}
steps:
- name: Install sudo package
if: runner.os == 'Linux'
run: |
(apt-get update || true) 2>/dev/null
(apt-get install -y sudo || true) 2>/dev/null
sudo apt update
- name: Install ubuntu 22.04 dependencies
if: matrix.os == 'ubuntu-22.04'
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: sudo make git zlib1g-dev libssl-dev gperf php-cli cmake openjdk-17-jdk clang-14 libc++-14-dev libc++abi-14-dev libgcc-11-dev libunwind-14-dev libclang-common-14-dev maven
version: 1.0
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.IG_SSH_KEY }}
name: id_rsa
known_hosts: ${{ secrets.IG_KNOWN_HOSTS }}
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
submodules: "recursive"
- name: Setup Java (Snapshot)
@ -39,6 +38,7 @@ jobs:
server-id: mchv-snapshot-distribution
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
cache: 'maven'
- name: Setup Java (Release)
if: github.ref != 'refs/heads/develop'
uses: actions/setup-java@v3
@ -48,76 +48,67 @@ jobs:
server-id: mchv-release-distribution
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
cache: 'maven'
- name: Set up Maven
uses: stCarolas/setup-maven@v4.5
with:
maven-version: 3.8.2
- name: Setup variables
shell: bash
run: |
set -xeo pipefail
# ====== Variables
export REVISION=${{ github.run_number }}
export REVISION=4.0.${{ github.run_number }}
export GH_MATRIX_OS=${{ matrix.os }}
export GH_MATRIX_ARCH=${{ matrix.arch }}
export IMPLEMENTATION_NAME=${{ matrix.implementation }}
source ./scripts/continuous-integration/github-workflows/setup-variables.sh
echo "REVISION=$REVISION" >> $GITHUB_ENV
echo "BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV
echo "IMPLEMENTATION_NAME=$IMPLEMENTATION_NAME" >> $GITHUB_ENV
echo "TD_SRC_DIR=$TD_SRC_DIR" >> $GITHUB_ENV
echo "TD_BIN_DIR=$TD_BIN_DIR" >> $GITHUB_ENV
echo "TDNATIVES_BIN_DIR=$TDNATIVES_BIN_DIR" >> $GITHUB_ENV
echo "TDNATIVES_CPP_SRC_DIR=$TDNATIVES_CPP_SRC_DIR" >> $GITHUB_ENV
echo "TDNATIVES_DOCS_BIN_DIR=$TDNATIVES_DOCS_BIN_DIR" >> $GITHUB_ENV
echo "TD_BUILD_DIR=$TD_BUILD_DIR" >> $GITHUB_ENV
echo "TDNATIVES_CPP_BUILD_DIR=$TDNATIVES_CPP_BUILD_DIR" >> $GITHUB_ENV
echo "JAVA_SRC_DIR=$JAVA_SRC_DIR" >> $GITHUB_ENV
echo "TDLIB_SERIALIZER_DIR=$TDLIB_SERIALIZER_DIR" >> $GITHUB_ENV
if [[ ! -z "$PATH" ]]; then
echo "PATH=$PATH" >> $GITHUB_ENV
fi
echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV
echo "JAVA_INCLUDE_PATH=$JAVA_INCLUDE_PATH" >> $GITHUB_ENV
echo "CMAKE_EXTRA_ARGUMENTS=$CMAKE_EXTRA_ARGUMENTS" >> $GITHUB_ENV
echo "VCPKG_DIR=$VCPKG_DIR" >> $GITHUB_ENV
echo "MAVEN_OPTS=$MAVEN_OPTS" >> $GITHUB_ENV
echo "GH_CPU_ARCH=$GH_CPU_ARCH" >> $GITHUB_ENV
echo "CPU_ARCH_JAVA=$CPU_ARCH_JAVA" >> $GITHUB_ENV
echo "CPU_ARCHITECTURE_NAME=$CPU_ARCHITECTURE_NAME" >> $GITHUB_ENV
echo "CPU_CORES_NUM=$CPU_CORES_NUM" >> $GITHUB_ENV
echo "CPU_CORES=$CPU_CORES" >> $GITHUB_ENV
echo "OPERATING_SYSTEM_NAME=$OPERATING_SYSTEM_NAME" >> $GITHUB_ENV
echo "OPERATING_SYSTEM_NAME_SHORT=$OPERATING_SYSTEM_NAME_SHORT" >> $GITHUB_ENV
echo "SRC_TDJNI_LIBNAME=$SRC_TDJNI_LIBNAME" >> $GITHUB_ENV
echo "DEST_TDJNI_LIBNAME=$DEST_TDJNI_LIBNAME" >> $GITHUB_ENV
- name: Install dependencies
shell: bash
run: |
echo "REVISION: $REVISION"
./scripts/continuous-integration/github-workflows/install-dependencies.sh
cat $GITHUB_ENV > github.env
- name: Build
shell: bash
run: |
set -xeo pipefail
echo "REVISION: $REVISION"
./scripts/continuous-integration/github-workflows/build-tdapi.sh
- id: getfilename
shell: bash
run: echo "::set-output name=file::$(cd generated-sealed/target; ls tdli*-api-*-SNAPSHOT.jar)"
- id: getfilepath
shell: bash
run: echo "::set-output name=file::$(ls generated-sealed/target/tdli*-api-*-SNAPSHOT.jar)"
- uses: actions/upload-artifact@v2
./.github/workflows/scripts/build_api.sh
- uses: actions/upload-artifact@v3
with:
name: ${{ steps.getfilename.outputs.file }}
path: ${{ steps.getfilepath.outputs.file }}
name: tdlight-api-${{env.REVISION}}.jar
path: api/target/tdlight-api-${{env.REVISION}}.jar
- uses: actions/upload-artifact@v3
with:
name: tdlight-api-${{env.REVISION}}-legacy.jar
path: api/target-legacy/tdlight-api-${{env.REVISION}}-legacy.jar
- name: Deploy to Maven (Snapshot)
if: github.ref != 'refs/heads/master'
shell: bash
run: |
set -xeo pipefail
echo "REVISION: $REVISION"
API_TYPE=legacy ./scripts/continuous-integration/github-workflows/deploy-snapshot.sh
API_TYPE=sealed ./scripts/continuous-integration/github-workflows/deploy-snapshot.sh
echo "Building standard package"
mvn -B -f api/pom.xml clean package deploy -Drevision="$REVISION"
echo "Deploying legacy package"
mvn -B -f api/pom.xml clean package -Dlegacy=true -Drevision="$REVISION"
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv-snapshot \
-DrepositoryId=mchv-snapshot-distribution \
-Dfile=api/target-legacy/tdlight-api-$REVISION-legacy.jar \
-Dpackaging=pom \
-DgroupId=it.tdlight \
-DartifactId=tdlight-api \
-Dversion=$REVISION \
-Drevision=$REVISION \
-Dclassifier=legacy \
-Dlegacy=true
echo "Done."
env:
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}
@ -125,13 +116,44 @@ jobs:
if: github.ref == 'refs/heads/master'
shell: bash
run: |
set -xeo pipefail
echo "REVISION: $REVISION"
API_TYPE=legacy ./scripts/continuous-integration/github-workflows/deploy-release.sh
API_TYPE=sealed ./scripts/continuous-integration/github-workflows/deploy-release.sh
API_TYPE=legacy ./scripts/continuous-integration/github-workflows/deploy-javadoc.sh
API_TYPE=sealed ./scripts/continuous-integration/github-workflows/deploy-javadoc.sh
echo "Deploying standard package"
mvn -B -f api/pom.xml clean package deploy -Drevision="$REVISION"
echo "Deploying legacy package"
mvn -B -f api/pom.xml clean package -Dlegacy=true -Drevision="$REVISION"
mvn -B org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file -Durl=https://mvn.mchv.eu/repository/mchv \
-DrepositoryId=mchv-release-distribution \
-Dfile=api/target-legacy/tdlight-api-$REVISION-legacy.jar \
-Dpackaging=pom \
-DgroupId=it.tdlight \
-DartifactId=tdlight-api \
-Dversion=$REVISION \
-Drevision=$REVISION \
-Dclassifier=legacy \
-Dlegacy=true
echo "Deploying docs"
cd "./api/target/apidocs"
find . -name '*.html' -exec sed -i -r 's/<\/title>/<\/title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><style>\n\t#memberSummary_tabpanel{overflow-x: auto;}\n\tli.blockList{overflow-x: auto;}\n\ttd.colLast div{max-width:30vw;}\n\t#search{width: 400px;max-width: 65vw;}\n\t.title,.subTitle,pre,.inheritance,h1,h2,h3,h4,h5,.memberSummary,.memberSignature,.typeSummary,.blockList,.contentContainer{white-space:normal;word-break:break-word;}\n\tul{padding-left:10px}\n<\/style>/' {} \;
git config --global init.defaultBranch master
git init
git checkout -b "tdlight"
git remote add origin "https://${DOCS_DEPLOY_USERNAME}:${DOCS_DEPLOY_PASSWORD}@git.ignuranza.net/tdlight-team/tdlight-docs"
git config user.email "andrea@warp.ovh"
git config user.name "Andrea Cavalli"
git fetch --all
git reset --soft "origin/tdlight" || true
git add -A
git commit -m "Update javadocs"
git push --set-upstream origin "tdlight"
echo "Done."
env:
MAVEN_USERNAME: ${{ secrets.MCHV_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MCHV_TOKEN }}
DOCS_DEPLOY_USERNAME: ${{ secrets.DOCS_DEPLOY_USERNAME }}
DOCS_DEPLOY_PASSWORD: ${{ secrets.DOCS_DEPLOY_PASSWORD }}

15
.gitignore vendored
View File

@ -64,3 +64,18 @@ win-deps.sh
/.cache/
.idea/
/natives/build/
/natives/src/main/td/
/natives/tdjni_bin/
/natives/tdjni_docs/
/natives/src/main/td_bin/
/natives/src/main/tdjni_docs/
/api/src/main/td/
/api/jni_bin/
/api/target-legacy/
/api/target-sealed/
/api/.ci-friendly-pom.xml
natives/.ci-friendly-pom.xml
*.so

11
.gitmodules vendored
View File

@ -1,9 +1,6 @@
[submodule "implementations/tdlib"]
path = implementations/tdlib
url = https://github.com/tdlib/td.git
[submodule "tdlib-serializer"]
path = tdlib-serializer
url = https://git.ignuranza.net/tdlight-team/tdlib-serializer
[submodule "implementations/tdlight"]
path = implementations/tdlight
url = https://git.ignuranza.net/tdlight-team/tdlight.git
[submodule "scripts/core/tdlib-serializer"]
path = scripts/core/tdlib-serializer
url = https://git.ignuranza.net/windoz/tdlib-serializer.git
url = https://git.ignuranza.net/tdlight-team/tdlight

View File

@ -1,37 +0,0 @@
FROM debian:oldstable
ARG REVISION
ARG GH_MATRIX_OS
ARG GH_MATRIX_ARCH
ARG IMPLEMENTATION_NAME
ARG CPU_CORES_NUM
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=Europe/Kiev
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt upgrade -y
RUN apt install -y sudo build-essential openjdk-11-jdk locales wget cmake gperf ccache maven \
libssl-dev libssl1.1 zlib1g-dev zlib1g
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=en_US.UTF-8
ENV LANG "en_US.UTF-8"
ENV JAVA_TOOL_OPTIONS "-Dfile.encoding=UTF8"
ADD implementations /usr/src/tdlight-java-natives/implementations
ADD scripts /usr/src/tdlight-java-natives/scripts
ADD src /usr/src/tdlight-java-natives/src
WORKDIR /usr/src/tdlight-java-natives/
RUN /bin/bash /usr/src/tdlight-java-natives/scripts/continuous-integration/docker/build-natives.sh
#WORKDIR /usr/src/tdlight-java-natives/generated/
#RUN echo "aaaa" > test.txt
ENTRYPOINT [ "/bin/bash" ]

View File

@ -4,11 +4,9 @@ This repository generates JNI packages for each architecture and OS used by [TDL
## Building
Go to `scripts/utils` and run
**todo**
- `./compile-natives-package.sh` for natives
- `./compile-tdapi-package.sh` for tdapi
look at the dockerfile it's a decent example
## Download

283
api/pom.xml Normal file
View File

@ -0,0 +1,283 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>it.tdlight</groupId>
<artifactId>tdlight-api</artifactId>
<version>${revision}</version>
<name>TDLight API</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>4.0.0-SNAPSHOT</revision>
<safeVersionName>v4_0_0</safeVersionName>
<buildDirectory>${project.basedir}/target</buildDirectory>
</properties>
<profiles>
<profile>
<id>legacy</id>
<activation>
<property>
<name>legacy</name>
<value>true</value>
</property>
</activation>
<properties>
<buildDirectory>${project.basedir}/target-legacy</buildDirectory>
</properties>
<build>
<plugins>
<!-- ensure the project is compiling with JDK 9+ -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-jdk9</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[1.9,)</version>
<message>JDK 9+ is required for compilation</message>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.basedir}/src/main/java-legacy</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!-- compile sources -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<!-- disable default phase due to fixed id and position in lifecycle -->
<execution>
<id>default-compile</id>
<phase>none</phase>
<!-- specify source/target for IDE integration -->
<configuration>
<release>9</release>
</configuration>
</execution>
<!-- compile sources with Java 9 to generate and validate module-info.java -->
<execution>
<id>java-9-module-compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<release>9</release>
</configuration>
</execution>
<!-- recompile sources as Java 8 to overwrite Java 9 class files, except module-info.java -->
<execution>
<id>java-8-compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<!-- specify JDK 9+ release flag to ensure no classes/methods later than Java 8 are used accidentally -->
<release>8</release>
<!-- exclude module-info.java from the compilation, as it is unsupported by Java 8 -->
<excludes>
<exclude>module-info.java</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</archive>
<classifier>legacy</classifier>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<allowIncompleteProjects>true</allowIncompleteProjects>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<allowIncompleteProjects>true</allowIncompleteProjects>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>sealed</id>
<activation>
<property>
<name>legacy</name>
<value>!true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.basedir}/src/main/java-sealed</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!-- compile sources -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
<release>17</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.1</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>main-javadoc</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<release>17</release>
<quiet>true</quiet>
<notimestamp>true</notimestamp>
<encoding>UTF-8</encoding>
<charset>UTF-8</charset>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<distributionManagement>
<repository>
<id>mchv-release-distribution</id>
<name>MCHV Release Apache Maven Packages Distribution</name>
<url>https://mvn.mchv.eu/repository/mchv</url>
</repository>
<snapshotRepository>
<id>mchv-snapshot-distribution</id>
<name>MCHV Snapshot Apache Maven Packages Distribution</name>
<url>https://mvn.mchv.eu/repository/mchv-snapshot</url>
</snapshotRepository>
</distributionManagement>
<scm>
<url>https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</url>
<connection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</connection>
<developerConnection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</developerConnection>
<tag>HEAD</tag>
</scm>
<build>
<directory>${buildDirectory}</directory>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<groupId>com.outbrain.swinfra</groupId>
<artifactId>ci-friendly-flatten-maven-plugin</artifactId>
<version>1.0.14</version>
<executions>
<execution>
<goals>
<goal>clean</goal>
<goal>flatten</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,6 @@
/**
* This module contains the TDLib interface type-classes and function-classes.
*/
module tdlight.api {
exports it.tdlight.jni;
}

@ -1 +0,0 @@
Subproject commit cf1984844be7ec0c06762d8d617cbb20352ec9a2

@ -1 +1 @@
Subproject commit 54d2cc3e0e27339174fc3c6f88babdd3d0ad02b6
Subproject commit bc9d35d992e6a7c4f9730cc040dedcc1f0d2fb30

95
natives/pom.xml Normal file
View File

@ -0,0 +1,95 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>it.tdlight</groupId>
<artifactId>tdlight-natives</artifactId>
<!-- Don't change the version! (or change it also in <shadedPattern>) -->
<version>${revision}</version>
<name>tdlight natives</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>4.0.0-SNAPSHOT</revision>
<native.type.classifier>_invalid_</native.type.classifier>
<buildDirectory>${project.basedir}/target-${native.type.classifier}</buildDirectory>
</properties>
<distributionManagement>
<repository>
<id>mchv-release-distribution</id>
<name>MCHV Release Apache Maven Packages Distribution</name>
<url>https://mvn.mchv.eu/repository/mchv</url>
</repository>
<snapshotRepository>
<id>mchv-snapshot-distribution</id>
<name>MCHV Snapshot Apache Maven Packages Distribution</name>
<url>https://mvn.mchv.eu/repository/mchv-snapshot</url>
</snapshotRepository>
</distributionManagement>
<scm>
<url>https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</url>
<connection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</connection>
<developerConnection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</developerConnection>
<tag>HEAD</tag>
</scm>
<build>
<directory>${buildDirectory}</directory>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<groupId>com.outbrain.swinfra</groupId>
<artifactId>ci-friendly-flatten-maven-plugin</artifactId>
<version>1.0.14</version>
<executions>
<execution>
<goals>
<goal>clean</goal>
<goal>flatten</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<classifier>${native.type.classifier}</classifier>
<excludes>
<exclude>it/tdlight/jni/*</exclude>
<exclude>it/tdlight/tdnative/*</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<allowIncompleteProjects>true</allowIncompleteProjects>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<allowIncompleteProjects>true</allowIncompleteProjects>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -12,7 +12,8 @@ endif()
find_package(Td REQUIRED)
if (NOT JNI_FOUND)
find_package(JNI REQUIRED)
SET(JNI_FIND_REQUIRED_AWT FALSE CACHE BOOL "" FORCE)
find_package(JNI REQUIRED COMPONENTS JVM)
endif()
message(STATUS "Found JNI: ${JNI_INCLUDE_DIRS} ${JNI_LIBRARIES}")
@ -31,7 +32,7 @@ message(STATUS "PHP Executable: ${PHP_EXECUTABLE}")
set(TD_API_JAVA_PACKAGE "it/tdlight/tdnative")
set(TD_API_SPEC_JAVA_PACKAGE "it/tdlight/jni")
set(TD_API_JAVA_PATH ${JAVA_SRC_DIR})
set(TD_API_TLO_PATH ${TD_SRC_DIR}/td/generate/scheme/td_api.tlo)
set(TD_API_TLO_PATH ${TD_SRC_DIR}/td/generate/auto/tlo/td_api.tlo)
set(TD_API_TL_PATH ${TD_SRC_DIR}/td/generate/scheme/td_api.tl)
set(JAVADOC_TL_DOCUMENTATION_GENERATOR_PATH ${TD_SRC_DIR}/td/generate/JavadocTlDocumentationGenerator.php)
set(GENERATE_JAVA_API_CMD ${TD_GENERATED_BINARIES_DIR}/td_generate_java_api TdApi ${TD_API_TLO_PATH} ${TD_API_JAVA_PATH} ${TD_API_SPEC_JAVA_PACKAGE})
@ -48,13 +49,13 @@ add_custom_target(td_generate_java_api
get_filename_component(JAVA_OUTPUT_DIRECTORY ${TDNATIVES_BIN_DIR}/java-classes REALPATH BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
file(MAKE_DIRECTORY ${JAVA_OUTPUT_DIRECTORY})
add_custom_target(build_java
COMMAND ${Java_JAVAC_EXECUTABLE} -d ${JAVA_OUTPUT_DIRECTORY} @${TDNATIVES_CPP_SRC_DIR}/sources.txt
COMMAND ${Java_JAVAC_EXECUTABLE} -encoding UTF-8 -d ${JAVA_OUTPUT_DIRECTORY} @${TDNATIVES_CPP_SRC_DIR}/sources.txt
COMMENT "Building Java code"
DEPENDS td_generate_java_api
)
add_custom_target(generate_javadoc
COMMAND ${Java_JAVADOC_EXECUTABLE} -d ${TDNATIVES_DOCS_BIN_DIR} it.tdlight.jni
COMMAND ${Java_JAVADOC_EXECUTABLE} -encoding UTF-8 -charset UTF-8 -d ${TDNATIVES_DOCS_BIN_DIR} it.tdlight.jni
WORKING_DIRECTORY ${TD_API_JAVA_PATH}
COMMENT "Generating Javadoc documentation"
DEPENDS td_generate_java_api
@ -103,7 +104,8 @@ if (NOT HAVE_STD14)
message(FATAL_ERROR "No C++14 support in the compiler. Please upgrade the compiler.")
endif()
add_dependencies(tdjni td_generate_java_api build_java generate_javadoc)
#add_dependencies(tdjni td_generate_java_api build_java generate_javadoc)
add_dependencies(tdjni td_generate_java_api build_java)
install(TARGETS tdjni
LIBRARY DESTINATION ${TDNATIVES_BIN_DIR}

View File

@ -0,0 +1,2 @@
../src/main/java/it/tdlight/jni/TdApi.java
../src/main/java/it/tdlight/tdnative/NativeClient.java

View File

@ -1,5 +1,5 @@
//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -168,8 +168,7 @@ static jint register_native(JavaVM *vm) {
#undef TD_OBJECT
td::jni::init_vars(env, API_PACKAGE_NAME);
td::td_api::Object::init_jni_vars(env, API_PACKAGE_NAME);
td::td_api::Function::init_jni_vars(env, API_PACKAGE_NAME);
td::td_api::get_package_name_ref() = API_PACKAGE_NAME;
return JAVA_VERSION;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,109 +0,0 @@
#!/bin/bash -e
export JAVA_HOME
JAVA_HOME="$(find "/usr/lib/jvm/" -maxdepth 1 -type d -iname "java*jdk*" | head -n 1)/"
export JAVA_INCLUDE_PATH="$JAVA_HOME/include"
source ./scripts/continuous-integration/github-workflows/setup-variables.sh
export CROSS_BUILD_DEPS_DIR="$PWD/cross-build-deps"
# Check variables correctness
if [ -z "${CPU_ARCH_DPKG}" ]; then
echo "Missing parameter: CPU_ARCH_DPKG"
exit 1
fi
if [ -n "${CROSS_BUILD_DEPS_DIR}" ]; then
CROSS_OPENJDK_PATH=""
fix_jdk_path() {
# Setup OpenJDK path
CROSS_OPENJDK_PATH=$(find "$CROSS_BUILD_DEPS_DIR/usr/lib/jvm/" -maxdepth 1 -type d -iname "java*jdk*" | head -n 1)
}
check_jdk_existance() {
if [[ ! -d "$CROSS_OPENJDK_PATH" ]]; then
echo "Can't find cross OpenJDK at location $CROSS_OPENJDK_PATH"
exit 1
fi
}
PWD_BEFORE_CROSS_DEPS=$(pwd)
if [[ ! -f "$CROSS_BUILD_DEPS_DIR/ok-012" ]]; then
echo "Setting up cross build deps dir"
rm -rf "$CROSS_BUILD_DEPS_DIR" || true
mkdir -p "$CROSS_BUILD_DEPS_DIR"
cd "$CROSS_BUILD_DEPS_DIR"
dpkg --add-architecture "${CPU_ARCH_DPKG}"
apt-get update
# LibZ-Dev
apt-get download "zlib1g-dev:${CPU_ARCH_DPKG}"
ZLIB1G_DEV_DEB=$(find . -name "zlib1g-dev_*.deb")
dpkg -x "$ZLIB1G_DEV_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$ZLIB1G_DEV_DEB"
# LibZ
apt-get download "zlib1g:${CPU_ARCH_DPKG}"
ZLIB1G_DEB=$(find . -name "zlib1g_*.deb")
dpkg -x "$ZLIB1G_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$ZLIB1G_DEB"
# LibSSL-Dev
apt-get download "libssl-dev:${CPU_ARCH_DPKG}"
LIBSSL_DEV_DEB=$(find . -name "libssl-dev_*.deb")
dpkg -x "$LIBSSL_DEV_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$LIBSSL_DEV_DEB"
# LibSSL
apt-get download "libssl1.1:${CPU_ARCH_DPKG}"
LIBSSL_DEB=$(find . -name "libssl1.1_*.deb")
dpkg -x "$LIBSSL_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$LIBSSL_DEB"
# Java Common
apt-get download "java-common"
JC_DEB=$(find . -name "java-common_*.deb")
dpkg -x "$JC_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$JC_DEB"
# OpenJDK-JRE-Headless
apt-get download "openjdk-11-jre-headless:${CPU_ARCH_DPKG}"
OJDKRH_DEB=$(find . -name "openjdk-11-jre-headless_*.deb")
dpkg -x "$OJDKRH_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$OJDKRH_DEB"
# OpenJDK-JRE
apt-get download "openjdk-11-jre:${CPU_ARCH_DPKG}"
OJDKR_DEB=$(find . -name "openjdk-11-jre_*.deb")
dpkg -x "$OJDKR_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$OJDKR_DEB"
# OpenJDK-JDK
apt-get download "openjdk-11-jdk-headless:${CPU_ARCH_DPKG}"
OJDKJ_DEB=$(find . -name "openjdk-11-jdk-headless_*.deb")
dpkg -x "$OJDKJ_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$OJDKJ_DEB"
# OpenJDK-GUI
apt-get download "openjdk-11-jdk:${CPU_ARCH_DPKG}"
OJDKG_DEB=$(find . -name "openjdk-11-jdk_*.deb")
dpkg -x "$OJDKG_DEB" "$CROSS_BUILD_DEPS_DIR"
rm "$OJDKG_DEB"
# Fix symlinks
find "$CROSS_BUILD_DEPS_DIR" -lname "/*" \
-exec sh -c "ln -sf \"\`echo \"$CROSS_BUILD_DEPS_DIR\$(readlink \$0)\"\`\" \"\$0\"" {} \;
echo "Cross build deps dir setup finished, testing..."
# Check if openjdk is found
fix_jdk_path
check_jdk_existance
touch "$CROSS_BUILD_DEPS_DIR/ok-012"
fi
echo "Cross build deps dir setup done"
fix_jdk_path
check_jdk_existance
cd "${PWD_BEFORE_CROSS_DEPS}"
apt install -y "crossbuild-essential-${CPU_ARCH_DPKG}"
fi
cd scripts/core
source ./setup-variables.sh
./install-dependencies.sh
./generate_maven_project.sh
./generate_td_tools.sh
./configure_td.sh
./compile_td.sh
./compile_tdjni.sh
./build_generated_maven_project.sh

View File

@ -1,12 +0,0 @@
#!/bin/bash -e
set -e
cd ./scripts/core/
./generate_maven_project.sh
./generate_td_tools.sh
./configure_td.sh
./compile_td.sh
./compile_tdjni.sh
./build_generated_maven_project.sh
echo "Done."
exit 0

View File

@ -1,16 +0,0 @@
#!/bin/bash -e
set -e
cd ./scripts/core/
./generate_td_tools.sh
./configure_td.sh
API_TYPE=legacy ./generate_tdapi_maven_project.sh
API_TYPE=legacy ./generate_tdapi_java_file.sh
API_TYPE=legacy ./build_generated_tdapi_maven_project.sh
API_TYPE=sealed ./generate_tdapi_maven_project.sh
API_TYPE=sealed ./generate_tdapi_java_file.sh
API_TYPE=sealed ./build_generated_tdapi_maven_project.sh
echo "Done."
exit 0

View File

@ -1,28 +0,0 @@
#!/bin/bash -e
set -e
# Check variables correctness
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
if [ -z "${API_TYPE}" ]; then
echo "Missing parameter: API_TYPE"
exit 1
fi
cd "./generated-${API_TYPE}/target/apidocs"
find . -name '*.html' -exec sed -i -r 's/<\/title>/<\/title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><style>\n\t#memberSummary_tabpanel{overflow-x: auto;}\n\tli.blockList{overflow-x: auto;}\n\ttd.colLast div{max-width:30vw;}\n\t#search{width: 400px;max-width: 65vw;}\n\t.title,.subTitle,pre,.inheritance,h1,h2,h3,h4,h5,.memberSummary,.memberSignature,.typeSummary,.blockList,.contentContainer{white-space:normal;word-break:break-word;}\n\tul{padding-left:10px}\n<\/style>/' {} \;
git init
git checkout -b "${IMPLEMENTATION_NAME}-${API_TYPE}"
git remote add origin "https://${DOCS_DEPLOY_USERNAME}:${DOCS_DEPLOY_PASSWORD}@git.ignuranza.net/tdlight-team/tdlight-docs"
git config user.email "andrea@warp.ovh"
git config user.name "Andrea Cavalli"
git fetch --all
git reset --soft "origin/${IMPLEMENTATION_NAME}-${API_TYPE}" || true
git add -A
git commit -m "Update javadocs"
git push --set-upstream origin "${IMPLEMENTATION_NAME}-${API_TYPE}"
echo "Done."
exit 0

View File

@ -1,7 +0,0 @@
#!/bin/bash -e
set -e
cd ./scripts/core/
./deploy_release.sh
echo "Done."
exit 0

View File

@ -1,7 +0,0 @@
#!/bin/bash -e
set -e
cd ./scripts/core/
./deploy_snapshot.sh
echo "Done."
exit 0

View File

@ -1,30 +0,0 @@
#!/bin/bash -e
set -e
if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
echo "==Linux===="
sudo apt-get update
sudo apt-get install -y make gperf \
ccache python3 python3-pip php-cli \
build-essential gcc-multilib g++-multilib
elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then
echo "==OSX======"
export PYTHON=36
brew install swig;
brew install gperf openssl coreutils
elif [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
echo "==Windows=="
#choco install visualstudio2019buildtools --version=16.10.4.0 --allow-downgrade --package-parameters "--passive"
#choco install visualstudio2019-workload-vctools
choco install base64
choco install gperf
choco install strawberryperl
else
echo "Unrecognized os: $OPERATING_SYSTEM_NAME"
exit 1
fi
cd ./scripts/core/
./install-dependencies.sh
cd ../../

View File

@ -1,115 +0,0 @@
#!/bin/bash -e
set -e
export MAVEN_OPTS=""
echo "MATRIX_OS: $GH_MATRIX_OS"
echo "MATRIX_ARCH: $GH_MATRIX_ARCH"
if [ "$GH_MATRIX_OS" == "macos-10.15" ]; then
export PCRE="E"
else
export PCRE="r"
fi
GH_CPU_ARCH=$(echo "$GH_MATRIX_ARCH" | sed -$PCRE 's/^(linux\/|windows\/|macos\/)?(386|amd64|arm64|ppc64le|armhf|s390x)$/\2/g')
export GH_CPU_ARCH
GH_OS_NAME=$(echo "$GH_MATRIX_OS" | sed -$PCRE 's/^(linux|ubuntu|windows|macos).*$/\1/g')
if [[ $GH_OS_NAME == "ubuntu" ]]; then
GH_OS_NAME="linux"
fi
export GH_OS_NAME
if [[ "$GH_CPU_ARCH" == "arm64" ]]; then
export CPU_ARCHITECTURE_NAME="aarch64"
elif [[ "$GH_CPU_ARCH" == "armhf" ]]; then
export CPU_ARCHITECTURE_NAME="armhf"
elif [[ "$GH_CPU_ARCH" == "s390x" ]]; then
export CPU_ARCHITECTURE_NAME="s390x"
elif [[ "$GH_CPU_ARCH" == "386" ]]; then
export CPU_ARCHITECTURE_NAME="386"
elif [[ "$GH_CPU_ARCH" == "amd64" ]]; then
export CPU_ARCHITECTURE_NAME="amd64"
elif [[ "$GH_CPU_ARCH" == "ppc64le" ]]; then
export CPU_ARCHITECTURE_NAME="ppc64le"
else
echo "Unrecognized cpu arch: $GH_CPU_ARCH"
exit 1
fi
if [ -z "${CPU_CORES_NUM}" ]; then
export CPU_CORES_NUM="4"
fi
if [[ "$GH_OS_NAME" == "windows" ]]; then
export OPERATING_SYSTEM_NAME="windows"
export OPERATING_SYSTEM_NAME_SHORT="win"
elif [[ "$GH_OS_NAME" == "macos" ]]; then
export OPERATING_SYSTEM_NAME="osx"
export OPERATING_SYSTEM_NAME_SHORT="osx"
elif [[ "$GH_OS_NAME" == "linux" ]]; then
export OPERATING_SYSTEM_NAME="linux"
export OPERATING_SYSTEM_NAME_SHORT="linux"
else
echo "Unrecognized os name: $GH_OS_NAME"
exit 1
fi
echo "====== Setup variables ======"
if [[ "$OPERATING_SYSTEM_NAME" != "osx" ]]; then
echo "Current root directory:"
realpath .
fi
echo "============================="
# ====== OS Variables
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
export CMAKE_BUILD_TYPE=MinSizeRel
export BUILD_TYPE=MinSizeRel
VCPKG_DIR="$(realpath .)/vcpkg"
export VCPKG_DIR
export CMAKE_EXTRA_ARGUMENTS="-A x64 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_DIR/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static -DOPENSSL_USE_STATIC_LIBS=ON"
export PATH="$PATH:/c/Python3:$PATH:/c/tools/php74:/c/PHP:/c/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64:/c/Program Files/OpenJDK/openjdk-11.0.8_10/bin:/c/Program Files/CMake/bin:/c/ProgramData/chocolatey/bin:/c/Program Files/apache-maven-3.6.3/bin:/c/ProgramData/chocolatey/lib/maven/apache-maven-3.6.3/bin:/c/ProgramData/chocolatey/lib/base64/tools:/c/Program Files/NASM"
export CPU_CORES=" -- -m"
elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then
export BUILD_TYPE=MinSizeRel
export CMAKE_EXTRA_ARGUMENTS="-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/"
export CPU_CORES=" -- -j${CPU_CORES_NUM}"
elif [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
export BUILD_TYPE=MinSizeRel
export CPU_CORES=" -- -j${CPU_CORES_NUM}"
fi
cd ./scripts/core/
source ./setup-variables.sh
cd ../../
# ====== Print variables
echo "REVISION=${REVISION}"
echo "BUILD_TYPE=${BUILD_TYPE}"
echo "TD_SRC_DIR=${TD_SRC_DIR}"
echo "TD_BIN_DIR=${TD_BIN_DIR}"
echo "TDNATIVES_BIN_DIR=${TDNATIVES_BIN_DIR}"
echo "TDNATIVES_CPP_SRC_DIR=${TDNATIVES_CPP_SRC_DIR}"
echo "TDNATIVES_DOCS_BIN_DIR=${TDNATIVES_DOCS_BIN_DIR}"
echo "TD_BUILD_DIR=${TD_BUILD_DIR}"
echo "TDNATIVES_CPP_BUILD_DIR=${TDNATIVES_CPP_BUILD_DIR}"
echo "JAVA_SRC_DIR=${JAVA_SRC_DIR}"
echo "TDLIB_SERIALIZER_DIR=${TDLIB_SERIALIZER_DIR}"
echo "PATH=${PATH}"
echo "JAVA_HOME=${JAVA_HOME}"
echo "JAVA_INCLUDE_PATH=${JAVA_INCLUDE_PATH}"
echo "CMAKE_EXTRA_ARGUMENTS=${CMAKE_EXTRA_ARGUMENTS}"
echo "VCPKG_DIR=${VCPKG_DIR}"
echo "MAVEN_OPTS=${MAVEN_OPTS}"
echo "GH_CPU_ARCH=${GH_CPU_ARCH}"
echo "CPU_ARCHITECTURE_NAME=${CPU_ARCHITECTURE_NAME}"
echo "CPU_CORES_NUM=${CPU_CORES_NUM}"
echo "CPU_CORES=${CPU_CORES}"
echo "GH_OS_NAME=${GH_OS_NAME}"
echo "GH_MATRIX_ARCH=${GH_MATRIX_ARCH}"
echo "OPERATING_SYSTEM_NAME=${OPERATING_SYSTEM_NAME}"
echo "OPERATING_SYSTEM_NAME_SHORT=${OPERATING_SYSTEM_NAME_SHORT}"
echo "SRC_TDJNI_LIBNAME=${SRC_TDJNI_LIBNAME}"
echo "DEST_TDJNI_LIBNAME=${DEST_TDJNI_LIBNAME}"

View File

@ -1,8 +0,0 @@
#!/bin/bash -e
cd ../../generated
[ -f ./src/main/java/it/tdlight/jni/TdApi.java ] && rm ./src/main/java/it/tdlight/jni/TdApi.java
mvn -B clean install
echo "Done."
exit 0

View File

@ -1,21 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# API_TYPE = <legacy | sealed>
# Check variables correctness
if [ -z "${API_TYPE}" ]; then
echo "Missing parameter: API_TYPE"
exit 1
fi
# Print details
echo "Building TdApi package..."
echo "Current directory: $(pwd)"
echo "API type: ${API_TYPE}"
cd ../../generated-"$API_TYPE"
mvn -B "-D${API_TYPE}" clean install
echo "Done."
exit 0

View File

@ -1,8 +0,0 @@
#!/bin/bash -e
cd ../../
rm -r generated
echo "Done."
exit 0

View File

@ -1,63 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# BUILD_TYPE = <Debug | Release | RelWithDebInfo | MinSizeRel>
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
# OTHER REQUIRED ENVIRONMENT VARIABLES:
# CMAKE_EXTRA_ARGUMENTS = <args>
# Check variables correctness
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME"
exit 1
fi
if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then
echo "Missing parameter: CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
if [ -z "${BUILD_TYPE}" ]; then
echo "Missing parameter: BUILD_TYPE"
exit 1
fi
if [ -z "${CPU_CORES}" ]; then
echo "Missing parameter: CPU_CORES"
exit 1
fi
source ./setup-variables.sh
cd ../../
# Print details
echo "Compiling td..."
echo "Current directory: $(pwd)"
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
echo "Td implementation: ${IMPLEMENTATION_NAME}"
echo "Build type: ${BUILD_TYPE}"
echo "CPU cores count: ${CPU_CORES}"
echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'"
# Delete old data
echo "Deleting old data..."
[ -d ./generated/td_bin/ ] && rm -r ./generated/td_bin/
# Create missing folders
echo "Creating missing folders..."
[ -d ./generated/td_bin/ ] || mkdir ./generated/td_bin/
# Build
echo "Compiling ${IMPLEMENTATION_NAME} td..."
cd ./generated/td_build/
cmake --build . --target install --config "${BUILD_TYPE}" ${CPU_CORES}
echo "Done."
exit 0

View File

@ -1,132 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# OPERATING_SYSTEM_NAME_SHORT = <win | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# BUILD_TYPE = <Debug | Release | RelWithDebInfo | MinSizeRel>
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
# OTHER REQUIRED ENVIRONMENT VARIABLES:
# CMAKE_EXTRA_ARGUMENTS = <args>
# OPTIONAL ENVIRONMENT VARIABLES:
# CROSS_BUILD_DEPS_DIR = <args>
# Check variables correctness
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME"
exit 1
fi
if [ -z "${OPERATING_SYSTEM_NAME_SHORT}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME_SHORT"
exit 1
fi
if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then
echo "Missing parameter: CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
if [ -z "${BUILD_TYPE}" ]; then
echo "Missing parameter: BUILD_TYPE"
exit 1
fi
if [ -z "${CPU_CORES}" ]; then
echo "Missing parameter: CPU_CORES"
exit 1
fi
source ./setup-variables.sh
cd ../../
JAVA_API_PACKAGE_PATH="it/tdlight/jni"
JAVA_LIB_PACKAGE_PATH="it/tdlight/tdnative"
# Print details
echo "Compiling tdjni..."
echo "Current directory: $(pwd)"
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
echo "Td implementation: ${IMPLEMENTATION_NAME}"
echo "Build type: ${BUILD_TYPE}"
echo "CPU cores count: ${CPU_CORES}"
echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'"
echo "JAVA_API_PACKAGE_PATH: '${JAVA_API_PACKAGE_PATH}'"
echo "JAVA_LIB_PACKAGE_PATH: '${JAVA_LIB_PACKAGE_PATH}'"
# Delete old data
echo "Deleting old data..."
[ -d ./generated/tdjni_build/ ] && rm -r ./generated/tdjni_build/
[ -d ./generated/tdjni_bin/ ] && rm -r ./generated/tdjni_bin/
[ -d ./generated/tdjni_docs/ ] && rm -r ./generated/tdjni_docs/
[ -d ./generated/src/main/jni-cpp-src/ ] && rm -r ./generated/src/main/jni-cpp-src/
[ -d ./generated/src/main/jni-java-src/ ] && rm -r ./generated/src/main/jni-java-src/
# Create missing folders
echo "Creating missing folders..."
[ -d ./generated/tdjni_build/ ] || mkdir ./generated/tdjni_build/
[ -d ./generated/tdjni_bin/ ] || mkdir ./generated/tdjni_bin/
[ -d ./generated/tdjni_docs/ ] || mkdir ./generated/tdjni_docs/
# Copy source files
echo "Copying source files..."
cp -r ./src/main/jni-cpp-src/common/. ./generated/src/main/jni-cpp-src
cp -r ./src/main/jni-cpp-src/${IMPLEMENTATION_NAME}/. ./generated/src/main/jni-cpp-src
cp -r ./src/main/jni-java-src ./generated/src/main/jni-java-src
# Create missing jni-src folders
echo "Creating missing jni-src folders..."
[ -d ./generated/src/main/jni-java-src/${JAVA_API_PACKAGE_PATH} ] || mkdir -p ./generated/src/main/jni-java-src/${JAVA_API_PACKAGE_PATH}
# Copy executables
echo "Copying executables..."
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
TD_GENERATED_BINARIES_DIR=$(realpath -m ./generated/td_tools/td/generate/Release)
else
TD_GENERATED_BINARIES_DIR=$(realpath -m ./generated/td_tools/td/generate)
fi
export TD_GENERATED_BINARIES_DIR
# Configure cmake
echo "Configuring CMake..."
cd ./generated/tdjni_build/
CMAKE_EXTRA_ARGUMENTS_TDJNI=""
if [[ -n "$CROSS_BUILD_DEPS_DIR" ]]; then
# shellcheck disable=SC2089
CMAKE_EXTRA_ARGUMENTS_TDJNI="${CMAKE_EXTRA_ARGUMENTS_TDJNI} -DCMAKE_TOOLCHAIN_FILE=${CROSS_BUILD_DEPS_DIR}/toolchain.cmake"
fi
# shellcheck disable=SC2086
cmake \
"-DCMAKE_BUILD_TYPE=${BUILD_TYPE}" \
-DTD_GENERATED_BINARIES_DIR=${TD_GENERATED_BINARIES_DIR} \
"-DTD_SRC_DIR=$(realpath -m ../implementation/)" \
"-DTDNATIVES_BIN_DIR=$(realpath -m ../tdjni_bin/)" \
"-DTDNATIVES_DOCS_BIN_DIR=$(realpath -m ../tdjni_docs/)" \
"-DTd_DIR=$(realpath -m ../td_bin/lib/cmake/Td/)" \
"-DJAVA_SRC_DIR=$(realpath -m ../src/main/jni-java-src/)" \
"-DTDNATIVES_CPP_SRC_DIR:PATH=$(realpath -m ../src/main/jni-cpp-src/)" \
${CMAKE_EXTRA_ARGUMENTS_TDJNI} \
${CMAKE_EXTRA_ARGUMENTS} \
"$(realpath -m ../src/main/jni-cpp-src/)"
# Build
echo "Compiling ${IMPLEMENTATION_NAME} jni..."
cmake --build . --target install --config "${BUILD_TYPE}" ${CPU_CORES}
cd ..
# Copy to resources
echo "Copying to resources..."
[ -d ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/ ] || mkdir -p ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
cp ./tdjni_bin/tdjni.dll ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/tdjni.dll
elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then
cp ./tdjni_bin/libtdjni.dylib ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/tdjni.dylib
elif [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
cp ./tdjni_bin/libtdjni.so ./src/main/resources/libs/${OPERATING_SYSTEM_NAME_SHORT}/${CPU_ARCHITECTURE_NAME}/tdjni.so
fi
echo "Done."
exit 0

View File

@ -1,87 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# BUILD_TYPE = <Debug | Release | RelWithDebInfo | MinSizeRel>
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
# OTHER REQUIRED ENVIRONMENT VARIABLES:
# CMAKE_EXTRA_ARGUMENTS = <args>
# Check variables correctness
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME"
exit 1
fi
if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then
echo "Missing parameter: CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
if [ -z "${BUILD_TYPE}" ]; then
echo "Missing parameter: BUILD_TYPE"
exit 1
fi
if [ -z "${CPU_CORES}" ]; then
echo "Missing parameter: CPU_CORES"
exit 1
fi
source ./setup-variables.sh
cd ../../
# Print details
echo "Configuring td..."
echo "Current directory: $(pwd)"
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
echo "Td implementation: ${IMPLEMENTATION_NAME}"
echo "Build type: ${BUILD_TYPE}"
echo "CPU cores count: ${CPU_CORES}"
echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'"
# Delete old data
echo "Deleting old data..."
[ -d ./generated/td_build/ ] && rm -r ./generated/td_build/
# Create missing folders
echo "Creating missing folders..."
[ -d ./generated/td_build/ ] || mkdir ./generated/td_build/
# Configure cmake
echo "Configuring CMake..."
cd ./generated/td_build/
if [[ "$IMPLEMENTATION_NAME" = "tdlight" ]]; then
CMAKE_EXTRA_ARGUMENTS_TD="-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON"
else
CMAKE_EXTRA_ARGUMENTS_TD=""
fi
if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
CMAKE_EXTRA_ARGUMENTS_TD="${CMAKE_EXTRA_ARGUMENTS_TD} -DTD_ENABLE_LTO=ON"
fi
if [[ -n "$CROSS_BUILD_DEPS_DIR" ]]; then
# shellcheck disable=SC2089
CMAKE_EXTRA_ARGUMENTS_TD="${CMAKE_EXTRA_ARGUMENTS_TD} -DCMAKE_TOOLCHAIN_FILE=${CROSS_BUILD_DEPS_DIR}/toolchain.cmake"
fi
export CMAKE_EXTRA_ARGUMENTS_TD
INSTALL_PREFIX="$(realpath -m ../td_bin/)"
INSTALL_BINDIR="$(realpath -m ../td_bin/bin)"
echo "Install prefix: $INSTALL_PREFIX"
echo "Install bindir: $INSTALL_BINDIR"
# shellcheck disable=SC2086
cmake "-DCMAKE_BUILD_TYPE=${BUILD_TYPE}" \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
-DTD_ENABLE_JNI=ON \
${CMAKE_EXTRA_ARGUMENTS_TD} \
${CMAKE_EXTRA_ARGUMENTS} \
../implementation
echo "Done."
exit 0

View File

@ -1,28 +0,0 @@
#!/bin/bash -e
# OTHER REQUIRED ENVIRONMENT VARIABLES:
# REVISION = <revision>
# OTHER ENVIRONMENT VARIABLES:
# API_TYPE = <legacy|sealed>
# Check variables correctness
if [ -z "${REVISION}" ]; then
echo "Missing parameter: REVISION"
exit 1
fi
source ./setup-variables.sh
FALLBACK_API_TYPE="sealed"
SAFE_VERSION_NAME="v4_0_${REVISION}"
REVISION_SUFFIX=""
REVISION_MVN="4.0.${REVISION}${REVISION_SUFFIX}"
if [ -z "${API_TYPE}" ]; then
cd ../../generated
else
cd "../../generated-${API_TYPE}"
fi
mvn -B -Drevision="${REVISION_MVN}" -DsafeVersionName="${SAFE_VERSION_NAME}" "-D${API_TYPE:-${FALLBACK_API_TYPE}}" clean deploy
echo "Done."
exit 0

View File

@ -1,19 +0,0 @@
#!/bin/bash -e
# OTHER ENVIRONMENT VARIABLES:
# API_TYPE = <legacy|sealed>
if [ -z "${API_TYPE}" ]; then
cd ../../generated
else
cd "../../generated-${API_TYPE}"
fi
FALLBACK_API_TYPE="sealed"
SAFE_VERSION_NAME="v4_0_0"
REVISION_SUFFIX="-SNAPSHOT"
REVISION_MVN="4.0.0${REVISION_SUFFIX}"
mvn -B -Drevision="${REVISION_MVN}" -DsafeVersionName="${SAFE_VERSION_NAME}" "-D${API_TYPE:-${FALLBACK_API_TYPE}}" deploy
echo "Done."
exit 0

View File

@ -1,54 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# Check variables correctness
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME"
exit 1
fi
if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then
echo "Missing parameter: CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
source ./setup-variables.sh
cd ../../
# Print details
echo "Generating maven project..."
echo "Current directory: $(pwd)"
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
echo "Td implementation: ${IMPLEMENTATION_NAME}"
# Delete old data
echo "Deleting old data..."
[ -d ./generated/ ] && rm -r ./generated/
# Create missing folders
echo "Creating missing folders..."
[ -d ./generated/ ] || mkdir ./generated/
[ -d ./src/main/java/ ] || mkdir -p ./src/main/java/
[ -d ./src/main/resources/ ] || mkdir -p ./src/main/resources/
[ -d ./generated/src/main/ ] || mkdir -p ./generated/src/main/
[ -d ./generated/src/main/ ] || mkdir -p ./generated/src/main/
# Generate pom.xml
echo "Generating pom.xml..."
sed -f "src/main/replacements/replace-${OPERATING_SYSTEM_NAME}-${CPU_ARCHITECTURE_NAME}-${IMPLEMENTATION_NAME}-sealed.sed" src/main/jni-project-src/pom.template.xml > generated/pom.xml
# Copy source files
echo "Copying source files..."
cp -r ./src/main/java ./generated/src/main/java
cp -r ./src/main/resources ./generated/src/main/resources
echo "Done."
exit 0

View File

@ -1,106 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
# OTHER REQUIRED ENVIRONMENT VARIABLES:
# CMAKE_EXTRA_ARGUMENTS = <args>
# Check variables correctness
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME"
exit 1
fi
if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then
echo "Missing parameter: CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
if [ -z "${CPU_CORES}" ]; then
echo "Missing parameter: CPU_CORES"
exit 1
fi
source ./setup-variables.sh
cd ../../
# Print details
echo "Generating td tools..."
echo "Current directory: $(pwd)"
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
echo "Td implementation: ${IMPLEMENTATION_NAME}"
echo "CPU cores count: ${CPU_CORES}"
echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'"
# Delete old data
echo "Deleting old data..."
[ -d ./generated/implementation/ ] && rm -r ./generated/implementation/
[ -d ./generated/td_tools/ ] && rm -r ./generated/td_tools/
# Create missing folders
echo "Creating missing folders..."
[ -d "./generated" ] || mkdir "./generated"
# Copy implementation files
echo "Copying implementation files..."
cp -r implementations/${IMPLEMENTATION_NAME} ./generated/implementation
# Patch implementation files (sed replacements)
echo "Patching implementation files using sed replacements..."
#Fix bug: https://github.com/tdlib/td/issues/1238
if [[ "$IMPLEMENTATION_NAME" = "tdlib" ]]; then
if [[ "$OPERATING_SYSTEM_NAME" = "osx" ]]; then
sed -f "src/main/replacements/fix-tdlib-tdutils-windows-cmake.sed" -i "" ./generated/implementation/tdutils/CMakeLists.txt
else
sed -f "src/main/replacements/fix-tdlib-tdutils-windows-cmake.sed" -i"" ./generated/implementation/tdutils/CMakeLists.txt
fi
fi
# Patch implementation files (git patches)
echo "Patching implementation files using git patches..."
if [[ "$IMPLEMENTATION_NAME" = "tdlib" ]]; then
if [[ -d "src/main/patches/tdlib" && "$(ls -A src/main/patches/tdlib)" ]]; then
git apply --directory="generated/implementation" src/main/patches/tdlib/*.patch
fi
fi
if [[ "$IMPLEMENTATION_NAME" = "tdlight" ]]; then
if [[ -d "src/main/patches/tdlight" && "$(ls -A src/main/patches/tdlight)" ]]; then
git apply --directory="generated/implementation" src/main/patches/tdlight/*.patch
fi
fi
# Configure cmake
echo "Configuring CMake..."
mkdir ./generated/td_tools/
cd ./generated/td_tools/
cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON ${CMAKE_EXTRA_ARGUMENTS} ../implementation/
# Run cmake to generate common tools
echo "Generating cross compilation tools..."
cmake --build . --target prepare_cross_compiling --config Release ${CPU_CORES}
# Run cmake to generate java tools
echo "Generating java tools..."
cmake --build . --target td_generate_java_api --config Release ${CPU_CORES}
# Copy tlo files
echo "Copying *.tlo files..."
cp -r ../implementation/td/generate/auto/tlo/. ../implementation/td/generate/scheme/.
echo "Generated executable '$(realpath -m ./td/generate/generate_common)'"
echo "Generated executable '$(realpath -m ./td/generate/td_generate_java_api)'"
echo "Generated executable '$(realpath -m ./td/generate/td_generate_json)'"
echo "Generated executable '$(realpath -m ../implementation/td/generate/JavadocTlDocumentationGenerator.php)'"
echo "Generated executable '$(realpath -m ../implementation/td/generate/TlDocumentationGenerator.php)'"
echo "Generated executable '$(realpath -m ../implementation/td/generate/scheme/td_api.tl)'"
echo "Generated executable '$(realpath -m ../implementation/td/generate/scheme/td_api.tlo)'"
echo "Done."
exit 0

View File

@ -1,120 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# API_TYPE = <legacy | sealed>
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
# OTHER REQUIRED ENVIRONMENT VARIABLES:
# CMAKE_EXTRA_ARGUMENTS = <args>
# Check variables correctness
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME"
exit 1
fi
if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then
echo "Missing parameter: CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
if [ -z "${API_TYPE}" ]; then
echo "Missing parameter: API_TYPE"
exit 1
fi
if [ -z "${CPU_CORES}" ]; then
echo "Missing parameter: CPU_CORES"
exit 1
fi
source ./setup-variables.sh
if [[ "$API_TYPE" == "sealed" ]]; then
MIN_JDK_VERSION="17"
SEALED="true"
else
MIN_JDK_VERSION="8"
SEALED="false"
fi
cd ../../
JAVA_API_PACKAGE_PATH="it/tdlight/jni"
JAVA_LIB_PACKAGE_PATH="it/tdlight/tdnative"
# Print details
echo "Generating TdApi.java..."
echo "Current directory: $(pwd)"
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
echo "Td implementation: ${IMPLEMENTATION_NAME}"
echo "API type: ${API_TYPE}"
echo "Min jdk version: ${MIN_JDK_VERSION}"
echo "Sealed: ${SEALED}"
echo "CPU cores count: ${CPU_CORES}"
echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'"
echo "JAVA_API_PACKAGE_PATH: '${JAVA_API_PACKAGE_PATH}'"
echo "JAVA_LIB_PACKAGE_PATH: '${JAVA_LIB_PACKAGE_PATH}'"
# Setup constants
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
export PYTHON_EXECUTABLE="python"
else
export PYTHON_EXECUTABLE="python3"
fi
# Delete old data
echo "Deleting old data..."
[ -d ./generated-"$API_TYPE"/tdjni_build/ ] && rm -r ./generated-"$API_TYPE"/tdjni_build/
[ -d ./generated-"$API_TYPE"/tdjni_bin/ ] && rm -r ./generated-"$API_TYPE"/tdjni_bin/
[ -d ./generated-"$API_TYPE"/tdjni_docs/ ] && rm -r ./generated-"$API_TYPE"/tdjni_docs/
[ -f ./generated-"$API_TYPE"/src/main/java17/${JAVA_API_PACKAGE_PATH}/TdApi.java ] && rm ./generated-"$API_TYPE"/src/main/java17/${JAVA_API_PACKAGE_PATH}/TdApi.java
[ -f ./generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java ] && rm ./generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java
# Create missing folders
echo "Creating missing folders..."
[ -d "./generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/" ] || mkdir -p "./generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/"
[ -d "./generated-$API_TYPE/src/main/java/${JAVA_LIB_PACKAGE_PATH}/" ] || mkdir -p "./generated-$API_TYPE/src/main/java/${JAVA_LIB_PACKAGE_PATH}/"
[ -d ./generated-"$API_TYPE"/tdjni_build/ ] || mkdir ./generated-"$API_TYPE"/tdjni_build/
[ -d ./generated-"$API_TYPE"/tdjni_bin/ ] || mkdir ./generated-"$API_TYPE"/tdjni_bin/
[ -d ./generated-"$API_TYPE"/tdjni_docs/ ] || mkdir ./generated-"$API_TYPE"/tdjni_docs/
# Copy executables
echo "Copying executables..."
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
TD_GENERATED_BINARIES_DIR="$(realpath -m ./generated/td_tools/td/generate/Release)"
else
TD_GENERATED_BINARIES_DIR="$(realpath -m ./generated/td_tools/td/generate)"
fi
export TD_GENERATED_BINARIES_DIR
# Configure cmake
echo "Configuring CMake..."
cd ./generated/
echo "Telegram source path: '$(realpath -m ./implementation/)'"
# Run cmake to generate TdApi.java
echo "Generating TdApi.java..."
./td_tools/td/generate/td_generate_java_api TdApi "./implementation/td/generate/scheme/td_api.tlo" "../generated-$API_TYPE/src/main/java" "$JAVA_API_PACKAGE_PATH"
php ./implementation/td/generate/JavadocTlDocumentationGenerator.php "./implementation/td/generate/scheme/td_api.tl" "../generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java"
mv "../generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java" "../generated-$API_TYPE/src/main/java/${JAVA_API_PACKAGE_PATH}/php_TdApi.java"
echo "Patching TdApi.java for Java ${MIN_JDK_VERSION}..."
${PYTHON_EXECUTABLE} ../scripts/core/tdlib-serializer "$(realpath -m ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/php_TdApi.java)" "$(realpath -m ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/unexpanded_TdApi.java)" "$(realpath -m ../scripts/core/tdlib-serializer/headers.txt)" "$SEALED"
if [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then
unexpand --tabs=2 ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/unexpanded_TdApi.java > ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java
else
unexpand -t 2 ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/unexpanded_TdApi.java > ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java
fi
rm ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/unexpanded_TdApi.java
echo "Generated '$(realpath -m ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/TdApi.java)'"
rm ../generated-"$API_TYPE"/src/main/java/${JAVA_API_PACKAGE_PATH}/php_TdApi.java
echo "Done."
exit 0

View File

@ -1,57 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# API_TYPE = <legacy | sealed>
# Check variables correctness
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME"
exit 1
fi
if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then
echo "Missing parameter: CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
if [ -z "${API_TYPE}" ]; then
echo "Missing parameter: API_TYPE"
exit 1
fi
source ./setup-variables.sh
cd ../../
# Print details
echo "Generating maven project..."
echo "Current directory: $(pwd)"
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
echo "Td implementation: ${IMPLEMENTATION_NAME}"
echo "API type: ${API_TYPE}"
# Delete old data
echo "Deleting old data..."
[ -d "./generated-${API_TYPE}" ] && rm -r "./generated-${API_TYPE}"
# Create missing folders
echo "Creating missing folders..."
[ -d "./generated-${API_TYPE}" ] || mkdir "./generated-${API_TYPE}"
[ -d "./generated-${API_TYPE}/src/main" ] || mkdir -p "./generated-${API_TYPE}/src/main"
# Generate pom.xml
echo "Generating pom.xml..."
sed -f "src/main/replacements/replace-${OPERATING_SYSTEM_NAME}-${CPU_ARCHITECTURE_NAME}-${IMPLEMENTATION_NAME}-${API_TYPE}.sed" src/main/tdapi-project-src/pom.template.xml > "./generated-${API_TYPE}/pom.xml"
# Copy source files
echo "Copying source files..."
[ -d ./src/main/tdapi-java ] && cp -r ./src/main/tdapi-java "./generated-${API_TYPE}/src/main/java"
[ -d ./src/main/tdapi-resources ] && cp -r ./src/main/tdapi-resources "./generated-${API_TYPE}/src/main/resources"
echo "Done."
exit 0

View File

@ -1,119 +0,0 @@
#!/bin/bash -e
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | s390x | armhf | ppc64le>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# BUILD_TYPE = <Debug | Release | RelWithDebInfo | MinSizeRel>
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
# OTHER REQUIRED ENVIRONMENT VARIABLES:
# CMAKE_EXTRA_ARGUMENTS = <args>
# OPTIONAL ENVIRONMENT VARIABLES:
# CROSS_BUILD_DEPS_DIR = <args>
# Check variables correctness
if [ -z "${OPERATING_SYSTEM_NAME}" ]; then
echo "Missing parameter: OPERATING_SYSTEM_NAME"
exit 1
fi
if [ -z "${CPU_ARCHITECTURE_NAME}" ]; then
echo "Missing parameter: CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${IMPLEMENTATION_NAME}" ]; then
echo "Missing parameter: IMPLEMENTATION_NAME"
exit 1
fi
if [ -z "${BUILD_TYPE}" ]; then
echo "Missing parameter: BUILD_TYPE"
exit 1
fi
if [ -z "${CPU_CORES}" ]; then
echo "Missing parameter: CPU_CORES"
exit 1
fi
source ./setup-variables.sh
cd ../../
ROOT_DIR="$(pwd)"
# Print details
echo "Installing dependencies..."
echo "Current directory: $ROOT_DIR"
echo "Operating system: ${OPERATING_SYSTEM_NAME}"
echo "Architecture: ${CPU_ARCHITECTURE_NAME}"
echo "Td implementation: ${IMPLEMENTATION_NAME}"
echo "Build type: ${BUILD_TYPE}"
echo "CPU cores count: ${CPU_CORES}"
echo "CMake extra arguments: '${CMAKE_EXTRA_ARGUMENTS}'"
echo "Cross build deps dir: '${CROSS_BUILD_DEPS_DIR}'"
if [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
if [ -n "${CROSS_BUILD_DEPS_DIR}" ]; then
CROSS_OPENJDK_PATH=""
fix_jdk_path() {
# Setup OpenJDK path
CROSS_OPENJDK_PATH=$(find "$CROSS_BUILD_DEPS_DIR/usr/lib/jvm/" -maxdepth 1 -type d -iname "java*jdk*" | head -n 1)
echo "Fixed cross openjdk path: '${CROSS_OPENJDK_PATH}'"
}
check_jdk_existance() {
if [[ ! -d "$CROSS_OPENJDK_PATH" ]]; then
echo "Can't find cross OpenJDK at location $CROSS_OPENJDK_PATH"
exit 1
fi
}
fix_jdk_path
check_jdk_existance
# Create toolchain
echo "Creating toolchain file..."
cd "$ROOT_DIR"
{
echo "set(CMAKE_SYSTEM_PROCESSOR ${CPU_ARCH_LINUX})";
echo "set(CMAKE_C_COMPILER ${CROSS_CC})";
echo "set(CMAKE_C_COMPILER_TARGET ${CLANG_TRIPLE})";
echo "set(CMAKE_CXX_COMPILER ${CROSS_CXX})";
echo "set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TRIPLE})";
echo "set(CMAKE_ASM_COMPILER ${CROSS_CXX})";
echo "set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TRIPLE})";
echo "set(CMAKE_LIBRARY_PATH \"$CROSS_BUILD_DEPS_DIR/\")";
echo "include_directories(\"${CROSS_BUILD_DEPS_DIR}/usr/include/${CPU_ARCH_LINUX}-linux-${CPU_COMPILATION_TOOL}/\")";
echo "SET(CMAKE_FIND_ROOT_PATH \"$CROSS_BUILD_DEPS_DIR\" \"$JAVA_HOME\" \"/\" \"$JAVA_HOME/include\")";
echo "include_directories(\"${CROSS_OPENJDK_PATH}/include\")";
echo "include_directories(\"${CROSS_OPENJDK_PATH}/include/linux\")";
echo "SET(JAVA_HOME \"$JAVA_HOME/\")";
echo "SET(JAVA_INCLUDE_PATH \"$JAVA_HOME/include\")";
echo "SET(JAVA_AWT_INCLUDE_PATH \"$JAVA_HOME/include\")";
echo "SET(JAVA_INCLUDE_PATH2 \"$JAVA_HOME/include/linux\")";
echo "SET(JAVA_JVM_LIBRARY \"$CROSS_OPENJDK_PATH/lib/${JAVA_INSTALLATION_TYPE}/libjvm.so\")";
echo "SET(JAVA_AWT_LIBRARY \"$CROSS_OPENJDK_PATH/lib/libawt.so\")";
cat <<EOF
SET(CMAKE_SYSTEM_NAME Linux)
# Use our definitions for compiler tools
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Search for libraries and headers in the target directories only
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
EOF
if [[ ${CPU_ARCHITECTURE_NAME} == "aarch64" || ${CPU_ARCHITECTURE_NAME} == "armhf" ]]; then
cat <<EOF
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
EOF
fi
} > "$CROSS_BUILD_DEPS_DIR/toolchain.cmake"
fi
fi;
echo "Done."
exit 0

View File

@ -1,125 +0,0 @@
#!/bin/bash -e
if [[ "$CORE_VARIABLES_SET" != "YES" ]]; then
echo "====== Setup variables ======"
if [[ "$OPERATING_SYSTEM_NAME" != "osx" ]]; then
echo "Current root directory:"
realpath "."
fi
echo "============================="
# ====== CPU Architecture Variables
if [[ "$CPU_ARCHITECTURE_NAME" == "aarch64" ]]; then
export CPU_ARCH_JAVA="arm64"
export CPU_ARCH_JAVA_INTERNAL="aarch64"
export JAVA_INSTALLATION_TYPE="server"
export CPU_ARCH_DPKG="arm64"
export CPU_ARCH_CMAKE="aarch64"
export CPU_ARCH_LINUX="aarch64"
export CLANG_TRIPLE="aarch64-linux-gnu"
export CPU_COMPILATION_TOOL="gnu"
elif [[ "$CPU_ARCHITECTURE_NAME" == "armhf" ]]; then
export CPU_ARCH_JAVA="armhf"
export CPU_ARCH_JAVA_INTERNAL="arm"
export JAVA_INSTALLATION_TYPE="server"
export CPU_ARCH_DPKG="armhf"
export CPU_ARCH_CMAKE="arm"
export CPU_ARCH_LINUX="arm"
export CLANG_TRIPLE="arm-linux-gnueabihf"
export CPU_COMPILATION_TOOL="gnueabihf"
elif [[ "$CPU_ARCHITECTURE_NAME" == "s390x" ]]; then
export CPU_ARCH_JAVA="s390x"
export CPU_ARCH_JAVA_INTERNAL="s390x"
export JAVA_INSTALLATION_TYPE="server"
export CPU_ARCH_DPKG="s390x"
export CPU_ARCH_CMAKE="s390x"
export CPU_ARCH_LINUX="s390x"
export CLANG_TRIPLE="s390x-linux-gnu"
export CPU_COMPILATION_TOOL="gnu"
elif [[ "$CPU_ARCHITECTURE_NAME" == "386" ]]; then
export CPU_ARCH_JAVA="386"
export CPU_ARCH_JAVA_INTERNAL="i386"
export JAVA_INSTALLATION_TYPE="server"
export CPU_ARCH_DPKG="i386"
export CPU_ARCH_CMAKE="i686"
export CPU_ARCH_LINUX="i386"
export CLANG_TRIPLE="i386-linux-gnu"
export CPU_COMPILATION_TOOL="gnu"
elif [[ "$CPU_ARCHITECTURE_NAME" == "amd64" ]]; then
export CPU_ARCH_JAVA="amd64"
export CPU_ARCH_JAVA_INTERNAL="amd64"
export JAVA_INSTALLATION_TYPE="server"
export CPU_ARCH_DPKG="amd64"
export CPU_ARCH_CMAKE="x86_64"
export CPU_ARCH_LINUX="x86_64"
export CLANG_TRIPLE="x86_64-linux-gnu"
export CPU_COMPILATION_TOOL="gnu"
elif [[ "$CPU_ARCHITECTURE_NAME" == "ppc64le" ]]; then
export CPU_ARCH_JAVA="ppc64le"
export CPU_ARCH_JAVA_INTERNAL="ppc64le"
export JAVA_INSTALLATION_TYPE="server"
export CPU_ARCH_DPKG="ppc64el"
export CPU_ARCH_CMAKE="powerpc64le"
export CPU_ARCH_LINUX="powerpc64le"
export CLANG_TRIPLE="powerpc64-linux-gnu"
export CPU_COMPILATION_TOOL="gnu"
else
echo "Unrecognized cpu arch: $CPU_ARCHITECTURE_NAME"
exit 1
fi
if [ -z "${CPU_CORES_NUM}" ]; then
export CPU_CORES_NUM="4"
fi
if [[ "$OPERATING_SYSTEM_NAME" == "windows" ]]; then
export CMAKE_EXTRA_ARGUMENTS_TDJNI="${CMAKE_EXTRA_ARGUMENTS_TDJNI} -DOPENSSL_USE_STATIC_LIBS=True"
elif [[ "$OPERATING_SYSTEM_NAME" == "osx" ]]; then
export CMAKE_EXTRA_ARGUMENTS_TDJNI="${CMAKE_EXTRA_ARGUMENTS_TDJNI} -DOPENSSL_USE_STATIC_LIBS=True"
elif [[ "$OPERATING_SYSTEM_NAME" == "linux" ]]; then
export CMAKE_EXTRA_ARGUMENTS_TDJNI="${CMAKE_EXTRA_ARGUMENTS_TDJNI} -DTD_ENABLE_LTO=ON"
if [[ "$CPU_ARCHITECTURE_NAME" == "386" ]] || [[ "$CPU_ARCHITECTURE_NAME" == "armhf" ]]; then
export CMAKE_EXE_LINKER_FLAGS="$CMAKE_EXE_LINKER_FLAGS -latomic"
export LDFLAGS="$LDFLAGS -latomic"
export CXXFLAGS="$CXXFLAGS -latomic"
fi
export CXXFLAGS="$CXXFLAGS -static-libgcc -static-libstdc++"
export CC="gcc"
export CXX="g++"
export CROSS_CXXFLAGS="$CXXFLAGS -static-libgcc -static-libstdc++"
if [[ "${CPU_ARCH_CMAKE}" == "x86_64" && "${CPU_COMPILATION_TOOL}" == "gnu" ]]; then
export CROSS_CC="gcc"
export CROSS_CXX="g++"
else
export CROSS_CC="${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-gcc"
export CROSS_CXX="${CPU_ARCH_CMAKE}-linux-${CPU_COMPILATION_TOOL}-g++"
fi
fi
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
# ====== Print variables
echo "========= Variables ========="
echo "Variables"
echo "JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS}"
echo "CPU_ARCH_JAVA=${CPU_ARCH_JAVA}"
echo "CPU_ARCH_JAVA_INTERNAL=${CPU_ARCH_JAVA_INTERNAL}"
echo "JAVA_INSTALLATION_TYPE=${JAVA_INSTALLATION_TYPE}"
echo "CPU_ARCH_DPKG=${CPU_ARCH_DPKG}"
echo "CPU_ARCH_CMAKE=${CPU_ARCH_CMAKE}"
echo "CPU_ARCH_LINUX=${CPU_ARCH_LINUX}"
echo "CLANG_TRIPLE=${CLANG_TRIPLE}"
echo "CPU_COMPILATION_TOOL=${CPU_COMPILATION_TOOL}"
echo "CC=${CC}"
echo "CXX=${CXX}"
echo "CFLAGS=${CFLAGS}"
echo "CXXFLAGS=${CXXFLAGS}"
echo "CMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}"
echo "CMAKE_EXTRA_ARGUMENTS=${CMAKE_EXTRA_ARGUMENTS}"
echo "CROSS_BUILD_DEPS_DIR=${CROSS_BUILD_DEPS_DIR}"
echo "============================="
export CORE_VARIABLES_SET="YES"
fi

@ -1 +0,0 @@
Subproject commit 52c91733b5743a18303b6346f7d37530e03f4111

View File

@ -1,28 +0,0 @@
#!/bin/bash -e
# This script compiles tdlight/tdlib jni binaries for your platform.
# Fill the variables with your system details.
#
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | armhf | ppc64le>
# OPERATING_SYSTEM_NAME_SHORT = <win | linux | osx>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
# CMAKE_EXTRA_ARGUMENTS = <args>
# REVISION = <revision>
# OPTIONAL ENVIRONMENT VARIABLES:
# CROSS_BUILD_DEPS_DIR = <args>
cd ../core
source ./setup-variables.sh
./install-dependencies.sh
./generate_maven_project.sh
./generate_td_tools.sh
./configure_td.sh
./compile_td.sh
./compile_tdjni.sh
./build_generated_maven_project.sh
echo "Done."
exit 0

View File

@ -1,33 +0,0 @@
#!/bin/bash -e
# This script compiles tdlight/tdlib api for your platform.
# Fill the variables with your system details.
#
# MAIN REQUIRED ENVIRONMENT VARIABLES:
# OPERATING_SYSTEM_NAME = <windows | linux | osx>
# CPU_ARCHITECTURE_NAME = <amd64 | aarch64 | 386 | armhf | ppc64le>
# OPERATING_SYSTEM_NAME_SHORT = <win | linux | osx>
# IMPLEMENTATION_NAME = <tdlib | tdlight>
# CPU_CORES = "-- -j<cores>" or "-m" on Windows
# CMAKE_EXTRA_ARGUMENTS = <args>
# REVISION = <revision>
# OPTIONAL ENVIRONMENT VARIABLES:
# CROSS_BUILD_DEPS_DIR = <args>
cd ../core
source ./setup-variables.sh
./install-dependencies.sh
./generate_td_tools.sh
./configure_td.sh
API_TYPE=legacy ./generate_tdapi_maven_project.sh
API_TYPE=legacy ./generate_tdapi_java_file.sh
API_TYPE=legacy ./build_generated_tdapi_maven_project.sh
API_TYPE=sealed ./generate_tdapi_maven_project.sh
API_TYPE=sealed ./generate_tdapi_java_file.sh
API_TYPE=sealed ./build_generated_tdapi_maven_project.sh
echo "Done."
exit 0

View File

@ -1,40 +0,0 @@
package it.tdlight.jni.implementation_name.operating_system_name.cpu_architecture_name.version;
import java.lang.ClassLoader;
import java.io.InputStream;
import java.io.File;
public class LoadLibrary {
public static InputStream getLibraryAsStream() {
return LoadLibrary.class.getResourceAsStream("/libs/" + getOsName() + "/" + getArchName() + "/"
+ getFileName() + getExtension());
}
private static String getOsName() {
return LoadLibrary.class.getPackage().getName().split("\\.")[4];
}
private static String getArchName() {
return LoadLibrary.class.getPackage().getName().split("\\.")[5];
}
private static String getVersionName() {
return LoadLibrary.class.getPackage().getName().split("\\.")[6];
}
private static String getFileName() {
return "tdjni";
}
private static String getExtension() {
switch (getOsName()) {
case "win":
return ".dll";
case "osx":
return ".dylib";
case "linux":
default:
return ".so";
}
}
}

View File

@ -1,2 +0,0 @@
../src/main/jni-java-src/it/tdlight/jni/TdApi.java
../src/main/jni-java-src/it/tdlight/tdnative/NativeClient.java

View File

@ -1,182 +0,0 @@
//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include <td/telegram/Client.h>
#include <td/telegram/td_api.h>
#include <td/tl/tl_jni_object.h>
#include <cstdint>
#include <cstdlib>
#include <string>
#include <utility>
namespace td_jni {
static td::td_api::object_ptr<td::td_api::Function> fetch_function(JNIEnv *env, jobject function) {
td::jni::reset_parse_error();
auto result = td::td_api::Function::fetch(env, function);
if (td::jni::have_parse_error()) {
std::abort();
}
return result;
}
static td::ClientManager *get_manager() {
return td::ClientManager::get_manager_singleton();
}
static jint Client_createNativeClient(JNIEnv *env, jclass clazz) {
return static_cast<jint>(get_manager()->create_client_id());
}
static void Client_nativeClientSend(JNIEnv *env, jclass clazz, jint client_id, jlong id, jobject function) {
get_manager()->send(static_cast<std::int32_t>(client_id), static_cast<std::uint64_t>(id),
fetch_function(env, function));
}
static jint Client_nativeClientReceive(JNIEnv *env, jclass clazz, jintArray client_ids, jlongArray ids,
jobjectArray events, jdouble timeout) {
jsize events_size = env->GetArrayLength(ids); // client_ids, ids and events must be of equal size
if (events_size == 0) {
return 0;
}
jsize result_size = 0;
auto *manager = get_manager();
auto response = manager->receive(timeout);
while (response.object) {
auto client_id = static_cast<jint>(response.client_id);
env->SetIntArrayRegion(client_ids, result_size, 1, &client_id);
auto request_id = static_cast<jlong>(response.request_id);
env->SetLongArrayRegion(ids, result_size, 1, &request_id);
jobject object;
response.object->store(env, object);
env->SetObjectArrayElement(events, result_size, object);
env->DeleteLocalRef(object);
result_size++;
if (result_size == events_size) {
break;
}
response = manager->receive(0);
}
return result_size;
}
static jobject Client_nativeClientExecute(JNIEnv *env, jclass clazz, jobject function) {
jobject result;
td::ClientManager::execute(fetch_function(env, function))->store(env, result);
return result;
}
static jstring Object_toString(JNIEnv *env, jobject object) {
return td::jni::to_jstring(env, to_string(td::td_api::Object::fetch(env, object)));
}
static jstring Function_toString(JNIEnv *env, jobject object) {
return td::jni::to_jstring(env, to_string(td::td_api::Function::fetch(env, object)));
}
static constexpr jint JAVA_VERSION = JNI_VERSION_1_6;
static JavaVM *java_vm;
static jobject log_message_handler;
static void on_log_message(int verbosity_level, const char *log_message) {
auto env = td::jni::get_jni_env(java_vm, JAVA_VERSION);
if (env == nullptr) {
return;
}
jobject handler = env->NewLocalRef(log_message_handler);
if (!handler) {
return;
}
jclass handler_class = env->GetObjectClass(handler);
if (handler_class) {
jmethodID on_log_message_method = env->GetMethodID(handler_class, "onLogMessage", "(ILjava/lang/String;)V");
if (on_log_message_method) {
jstring log_message_str = td::jni::to_jstring(env.get(), log_message);
if (log_message_str) {
env->CallVoidMethod(handler, on_log_message_method, static_cast<jint>(verbosity_level), log_message_str);
env->DeleteLocalRef((jobject)log_message_str);
}
}
env->DeleteLocalRef((jobject)handler_class);
}
env->DeleteLocalRef(handler);
}
static void Client_nativeClientSetLogMessageHandler(JNIEnv *env, jclass clazz, jint max_verbosity_level,
jobject new_log_message_handler) {
if (log_message_handler) {
td::ClientManager::set_log_message_callback(0, nullptr);
jobject old_log_message_handler = log_message_handler;
log_message_handler = jobject();
env->DeleteGlobalRef(old_log_message_handler);
}
if (new_log_message_handler) {
log_message_handler = env->NewGlobalRef(new_log_message_handler);
if (!log_message_handler) {
// out of memory
return;
}
td::ClientManager::set_log_message_callback(static_cast<int>(max_verbosity_level), on_log_message);
}
}
static jint register_native(JavaVM *vm) {
JNIEnv *env;
if (vm->GetEnv(reinterpret_cast<void **>(&env), JAVA_VERSION) != JNI_OK) {
return -1;
}
java_vm = vm;
auto register_method = [env](jclass clazz, std::string name, std::string signature, auto function_ptr) {
td::jni::register_native_method(env, clazz, std::move(name), std::move(signature),
reinterpret_cast<void *>(function_ptr));
};
auto client_class = td::jni::get_jclass(env, PACKAGE_NAME "/NativeClient");
auto object_class = td::jni::get_jclass(env, API_PACKAGE_NAME "/TdApi$Object");
auto function_class = td::jni::get_jclass(env, API_PACKAGE_NAME "/TdApi$Function");
#define TD_OBJECT "L" API_PACKAGE_NAME "/TdApi$Object;"
#define TD_FUNCTION "L" API_PACKAGE_NAME "/TdApi$Function;"
register_method(client_class, "createNativeClient", "()I", Client_createNativeClient);
register_method(client_class, "nativeClientSend", "(IJ" TD_FUNCTION ")V", Client_nativeClientSend);
register_method(client_class, "nativeClientReceive", "([I[J[" TD_OBJECT "D)I", Client_nativeClientReceive);
register_method(client_class, "nativeClientExecute", "(" TD_FUNCTION ")" TD_OBJECT, Client_nativeClientExecute);
register_method(client_class, "nativeClientSetLogMessageHandler", "(IL" PACKAGE_NAME "/NativeClient$LogMessageHandler;)V",
Client_nativeClientSetLogMessageHandler);
register_method(object_class, "toString", "()Ljava/lang/String;", Object_toString);
register_method(function_class, "toString", "()Ljava/lang/String;", Function_toString);
#undef TD_FUNCTION
#undef TD_OBJECT
td::jni::init_vars(env, API_PACKAGE_NAME);
td::td_api::Object::init_jni_vars(env, API_PACKAGE_NAME);
td::td_api::Function::init_jni_vars(env, API_PACKAGE_NAME);
return JAVA_VERSION;
}
} // namespace td_jni
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
static jint jni_version = td_jni::register_native(vm); // call_once
return jni_version;
}

View File

@ -1,111 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>it.tdlight</groupId>
<artifactId>${IMPLEMENTATION_NAME}-natives-${OPERATING_SYSTEM_NAME}-${CPU_ARCHITECTURE_NAME}</artifactId>
<!-- Don't change the version! (or change it also in <shadedPattern>) -->
<version>${revision}</version>
<name>${IMPLEMENTATION_NAME} natives for ${OPERATING_SYSTEM_NAME} (${CPU_ARCHITECTURE_NAME})</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>4.0.0-SNAPSHOT</revision>
<safeVersionName>v4_0_0</safeVersionName>
</properties>
<distributionManagement>
<repository>
<id>mchv-release-distribution</id>
<name>MCHV Release Apache Maven Packages Distribution</name>
<url>https://mvn.mchv.eu/repository/mchv</url>
</repository>
<snapshotRepository>
<id>mchv-snapshot-distribution</id>
<name>MCHV Snapshot Apache Maven Packages Distribution</name>
<url>https://mvn.mchv.eu/repository/mchv-snapshot</url>
</snapshotRepository>
</distributionManagement>
<scm>
<url>https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</url>
<connection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</connection>
<developerConnection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</developerConnection>
<tag>HEAD</tag>
</scm>
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<groupId>com.outbrain.swinfra</groupId>
<artifactId>ci-friendly-flatten-maven-plugin</artifactId>
<version>1.0.14</version>
<executions>
<execution>
<goals>
<goal>clean</goal>
<goal>flatten</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>it.tdlight.jni.implementation_name.operating_system_name.cpu_architecture_name.version</pattern>
<shadedPattern>it.tdlight.jni.${IMPLEMENTATION_NAME}.${OPERATING_SYSTEM_NAME_SHORT}.${CPU_ARCHITECTURE_NAME}.${safeVersionName}</shadedPattern>
</relocation>
<relocation>
<pattern>it.tdlight.jni.implementation_name.operating_system_name.cpu_architecture_name</pattern>
<shadedPattern>it.tdlight.jni.${IMPLEMENTATION_NAME}.${OPERATING_SYSTEM_NAME_SHORT}.${CPU_ARCHITECTURE_NAME}</shadedPattern>
</relocation>
<relocation>
<pattern>it.tdlight.jni.implementation_name.operating_system_name</pattern>
<shadedPattern>it.tdlight.jni.${IMPLEMENTATION_NAME}.${OPERATING_SYSTEM_NAME_SHORT}</shadedPattern>
</relocation>
<relocation>
<pattern>it.tdlight.jni.implementation_name</pattern>
<shadedPattern>it.tdlight.jni.${IMPLEMENTATION_NAME}</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1 +0,0 @@
s/tdutils PRIVATE shell32/tdutils PRIVATE shell32 crypt32/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/x86/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/x86/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/x86/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/x86/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/aarch64/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/aarch64/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/aarch64/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/aarch64/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/armhf/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/armhf/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/armhf/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/armhf/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/ppc64le/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/ppc64le/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/ppc64le/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/ppc64le/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/s390x/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/s390x/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/s390x/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/linux/
s/${OPERATING_SYSTEM_NAME_SHORT}/linux/
s/${CPU_ARCHITECTURE_NAME}/s390x/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/osx/
s/${OPERATING_SYSTEM_NAME_SHORT}/osx/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/osx/
s/${OPERATING_SYSTEM_NAME_SHORT}/osx/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/osx/
s/${OPERATING_SYSTEM_NAME_SHORT}/osx/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/osx/
s/${OPERATING_SYSTEM_NAME_SHORT}/osx/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/windows/
s/${OPERATING_SYSTEM_NAME_SHORT}/win/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/windows/
s/${OPERATING_SYSTEM_NAME_SHORT}/win/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlib/
s/${API_TYPE}/sealed/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/windows/
s/${OPERATING_SYSTEM_NAME_SHORT}/win/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/legacy/

View File

@ -1,5 +0,0 @@
s/${OPERATING_SYSTEM_NAME}/windows/
s/${OPERATING_SYSTEM_NAME_SHORT}/win/
s/${CPU_ARCHITECTURE_NAME}/amd64/
s/${IMPLEMENTATION_NAME}/tdlight/
s/${API_TYPE}/sealed/

View File

@ -1,3 +0,0 @@
module tdlight.api {
exports it.tdlight.jni;
}

View File

@ -1,213 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>it.tdlight</groupId>
<artifactId>${IMPLEMENTATION_NAME}-api-${API_TYPE}</artifactId>
<version>${revision}</version>
<name>${IMPLEMENTATION_NAME} API</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>4.0.0-SNAPSHOT</revision>
<safeVersionName>v4_0_0</safeVersionName>
</properties>
<profiles>
<profile>
<id>legacy</id>
<activation>
<property>
<name>!sealed</name>
</property>
</activation>
<build>
<plugins>
<!-- ensure the project is compiling with JDK 9+ -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-jdk9</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[1.9,)</version>
<message>JDK 9+ is required for compilation</message>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<!-- compile sources -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<!-- disable default phase due to fixed id and position in lifecycle -->
<execution>
<id>default-compile</id>
<phase>none</phase>
<!-- specify source/target for IDE integration -->
<configuration>
<release>9</release>
</configuration>
</execution>
<!-- compile sources with Java 9 to generate and validate module-info.java -->
<execution>
<id>java-9-module-compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<release>9</release>
</configuration>
</execution>
<!-- recompile sources as Java 8 to overwrite Java 9 class files, except module-info.java -->
<execution>
<id>java-8-compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<!-- specify JDK 9+ release flag to ensure no classes/methods later than Java 8 are used accidentally -->
<release>8</release>
<!-- exclude module-info.java from the compilation, as it is unsupported by Java 8 -->
<excludes>
<exclude>module-info.java</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>sealed</id>
<activation>
<property>
<name>sealed</name>
</property>
</activation>
<build>
<plugins>
<!-- compile sources -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<distributionManagement>
<repository>
<id>mchv-release-distribution</id>
<name>MCHV Release Apache Maven Packages Distribution</name>
<url>https://mvn.mchv.eu/repository/mchv</url>
</repository>
<snapshotRepository>
<id>mchv-snapshot-distribution</id>
<name>MCHV Snapshot Apache Maven Packages Distribution</name>
<url>https://mvn.mchv.eu/repository/mchv-snapshot</url>
</snapshotRepository>
</distributionManagement>
<scm>
<url>https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</url>
<connection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</connection>
<developerConnection>scm:git:https://git.ignuranza.net/tdlight-team/tdlight-java-natives.git</developerConnection>
<tag>HEAD</tag>
</scm>
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>main-javadoc</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<release>17</release>
<quiet>true</quiet>
<notimestamp>true</notimestamp>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>com.outbrain.swinfra</groupId>
<artifactId>ci-friendly-flatten-maven-plugin</artifactId>
<version>1.0.14</version>
<executions>
<execution>
<goals>
<goal>clean</goal>
<goal>flatten</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

1
tdlib-serializer Submodule

@ -0,0 +1 @@
Subproject commit b32514771e84e4df39b33fe07f4bb93a7b32541d

View File

@ -0,0 +1,271 @@
FROM debian:buster-backports AS ssl1_debian
WORKDIR /build
SHELL ["/bin/bash", "-exc"]
ARG REVISION="1.0.0.0-SNAPSHOT"
# amd64, i386, ppc64el, riscv64, armhf, arm64
ARG ARCH_DEBIAN
# x86_64, i386, powerpc64le, riscv64, arm, aarch64
ARG ARCH_TRIPLE
# gnu, gnueabihf (armhf)
ARG TRIPLE_GNU
ARG NATIVE="false"
ARG SCCACHE_GHA_ENABLED=off
ARG ACTIONS_CACHE_URL
ARG ACTIONS_RUNTIME_TOKEN
# Check for mandatory build arguments
RUN : "${ARCH_DEBIAN:?Build argument needs to be set and non-empty.}"
RUN : "${ARCH_TRIPLE:?Build argument needs to be set and non-empty.}"
RUN : "${TRIPLE_GNU:?Build argument needs to be set and non-empty.}"
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
ENV DEBIAN_FRONTEND=noninteractive
COPY .docker ./.docker
# Install sccache to greatly speedup builds in the CI
RUN --mount=type=cache,target=/opt/sccache,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked --mount=type=cache,target=/var/cache/sccache2,sharing=locked .docker/install-sccache.sh
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked <<"EOF"
dpkg --add-architecture ${ARCH_DEBIAN}
apt-get --assume-yes update
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends openjdk-11-jdk-headless
if [[ "$NATIVE" != "true" ]]; then
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp libssl-dev:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp libssl1.1:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp zlib1g-dev:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp zlib1g:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp openjdk-11-jre-headless:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp openjdk-11-jdk-headless:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/SymlinkPrefix.javash "/root/cross-build-pkgs/" "/" "./"
fi
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends \
g++ gcc libstdc++-8-dev zlib1g-dev linux-libc-dev libssl-dev gperf \
tree git maven php-cli php-readline make cmake
if [[ "$NATIVE" != "true" ]]; then
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends \
g++-8-${ARCH_TRIPLE/_/-}-linux-${TRIPLE_GNU} gcc-8-${ARCH_TRIPLE/_/-}-linux-${TRIPLE_GNU} \
libatomic1-${ARCH_DEBIAN}-cross libc6-dev-${ARCH_DEBIAN}-cross libgcc-8-dev-${ARCH_DEBIAN}-cross libstdc++-8-dev-${ARCH_DEBIAN}-cross
fi
EOF
FROM ssl1_debian AS build
SHELL ["/bin/bash", "-exc"]
ARG REVISION="1.0.0.0-SNAPSHOT"
ARG ARCH_DEBIAN
ARG ARCH_TRIPLE
ARG TRIPLE_GNU
ARG NATIVE=false
ARG SCCACHE_GHA_ENABLED=off
ARG ACTIONS_CACHE_URL
ARG ACTIONS_RUNTIME_TOKEN
ENV SCCACHE_DIR=/var/cache/sccache2
# Use c++11
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}"
ENV CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
ENV CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto -O3"
ENV CCACHE=/opt/sccache/sccache
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
COPY --link . ./
COPY <<EOF ./toolchain_native.cmake
set(CMAKE_CROSSCOMPILING FALSE)
SET(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
set(CMAKE_C_COMPILER /usr/bin/gcc-8)
set(CMAKE_CXX_COMPILER /usr/bin/g++-8)
set(CMAKE_AR "/usr/bin/gcc-ar-8" CACHE FILEPATH "" FORCE)
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /usr/include)
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /lib/\${TARGET_TRIPLE})
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE})
# Set various compiler flags
set(CMAKE_EXE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_CXX_FLAGS_INIT "-flto -fno-fat-lto-objects")
if(EXISTS "/usr/lib/jvm/java-11-openjdk-amd64")
SET(JAVA_HOME "/usr/lib/jvm/java-11-openjdk-amd64")
else()
SET(JAVA_HOME "/usr/lib/jvm/default-java")
endif()
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
SET(JAVA_CROSS_HOME "/usr/lib/jvm/java-11-openjdk-$ARCH_DEBIAN")
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
cd implementations/tdlight/td_tools_build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_C_FLAGS_RELEASE="" \
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
-DTD_ENABLE_LTO=OFF \
-DTD_ENABLE_JNI=ON \
-DJAVA_AWT_LIBRARY=/dev/null \
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
-DCMAKE_TOOLCHAIN_FILE="../../../toolchain_native.cmake" \
..
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
cd ../../../
EOF
RUN --mount=type=cache,target=/root/.m2 <<"EOF"
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
EOF
COPY <<EOF ./toolchain.cmake
set(CMAKE_CROSSCOMPILING TRUE)
SET(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
set(CMAKE_C_COMPILER /usr/bin/\${TARGET_TRIPLE}-gcc-8)
set(CMAKE_CXX_COMPILER /usr/bin/\${TARGET_TRIPLE}-g++-8)
set(CMAKE_AR "/usr/bin/\${TARGET_TRIPLE}-gcc-ar-8" CACHE FILEPATH "" FORCE)
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include)
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/lib/\${TARGET_TRIPLE})
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/bin/\${TARGET_TRIPLE})
# Set various compiler flags
set(CMAKE_EXE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_CXX_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_SYSROOT /root/cross-build-pkgs)
# This must be set or compiler checks fail when linking
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
if(EXISTS "/usr/lib/jvm/java-11-openjdk-amd64")
SET(JAVA_HOME "/usr/lib/jvm/java-11-openjdk-amd64")
else()
SET(JAVA_HOME "/usr/lib/jvm/default-java")
endif()
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
SET(JAVA_CROSS_HOME "/root/cross-build-pkgs/usr/lib/jvm/java-11-openjdk-$ARCH_DEBIAN")
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
if("$ARCH_DEBIAN" STREQUAL "armhf" OR "$ARCH_DEBIAN" STREQUAL "arm64")
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
endif()
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
cd implementations/tdlight/build
export INSTALL_PREFIX="$(readlink -e ./td_bin/)"
export INSTALL_BINDIR="$(readlink -e ./td_bin/bin)"
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
-DTD_ENABLE_LTO=ON \
-DTD_ENABLE_JNI=ON \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
-DJAVA_AWT_LIBRARY=/dev/null \
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
-DCMAKE_TOOLCHAIN_FILE="../../../$TOOLCHAIN_ARGS" \
..
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../../
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
cd natives/build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
-DTD_SRC_DIR="$(readlink -e ../../implementations/tdlight)" \
-DTDNATIVES_BIN_DIR="$(readlink -e ../tdjni_bin/)" \
-DTDNATIVES_DOCS_BIN_DIR="$(readlink -e ../tdjni_docs/)" \
-DTd_DIR:PATH="$(readlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
-DJAVA_SRC_DIR="$(readlink -e ../src/main/java)" \
-DTDNATIVES_CPP_SRC_DIR="$(readlink -e ../src/main/cpp)" \
-DJAVA_AWT_LIBRARY=/dev/null \
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
-DCMAKE_TOOLCHAIN_FILE="../../$TOOLCHAIN_ARGS" \
../src/main/cpp
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
cd natives
mkdir -p src/main/resources/META-INF/tdlightjni/
mv tdjni_bin/libtdjni.so src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_gnu_ssl1.so
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=linux_${ARCH_DEBIAN}_gnu_ssl1 package
cd ..
EOF
FROM debian:buster-backports AS maven
SHELL ["/bin/bash", "-exc"]
WORKDIR /source
COPY --from=build /build/natives /source/natives
ENTRYPOINT ["/bin/true"]
FROM debian:buster-backports
ARG REVISION="1.0.0.0-SNAPSHOT"
ARG ARCH_DEBIAN
ARG ARCH_TRIPLE
ARG TRIPLE_GNU
ARG NATIVE=off
WORKDIR /out
COPY --from=build /build/natives natives
COPY --from=build /build/natives/src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_gnu_ssl1.so libtdjni.so
COPY --from=build /build/natives/target-linux_${ARCH_DEBIAN}_gnu_ssl1/tdlight-natives-${REVISION}-linux_${ARCH_DEBIAN}_gnu_ssl1.jar tdlight-natives.jar
USER 65534:65534
ENTRYPOINT ["/bin/true"]

View File

@ -0,0 +1,250 @@
FROM debian:bookworm-backports AS ssl3_debian
WORKDIR /build
SHELL ["/bin/bash", "-exc"]
ARG REVISION="1.0.0.0-SNAPSHOT"
# amd64, i386, ppc64el, riscv64, armhf, arm64
ARG ARCH_DEBIAN
# x86_64, i386, powerpc64le, riscv64, arm, aarch64
ARG ARCH_TRIPLE
# gnu, gnueabihf (armhf)
ARG TRIPLE_GNU
ARG SCCACHE_GHA_ENABLED=off
ARG ACTIONS_CACHE_URL
ARG ACTIONS_RUNTIME_TOKEN
# Check for mandatory build arguments
RUN : "${ARCH_DEBIAN:?Build argument needs to be set and non-empty.}"
RUN : "${ARCH_TRIPLE:?Build argument needs to be set and non-empty.}"
RUN : "${TRIPLE_GNU:?Build argument needs to be set and non-empty.}"
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
ENV DEBIAN_FRONTEND=noninteractive
COPY .docker ./.docker
# Install sccache to greatly speedup builds in the CI
RUN --mount=type=cache,target=/opt/sccache,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked --mount=type=cache,target=/var/cache/sccache2,sharing=locked .docker/install-sccache.sh
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked <<"EOF"
dpkg --add-architecture ${ARCH_DEBIAN}
apt-get --assume-yes update
export LLVMLIBS_NATIVE="libc++-14-dev libc++abi-14-dev libunwind-14-dev libunwind-14 libclang-rt-14-dev"
export LLVMLIBS_TARGET="libc++-14-dev:${ARCH_DEBIAN} libc++abi-14-dev:${ARCH_DEBIAN} libunwind-14-dev:${ARCH_DEBIAN} libunwind-14:${ARCH_DEBIAN} libclang-rt-14-dev:${ARCH_DEBIAN}"
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends $LLVMLIBS_TARGET
find /usr/lib/ -path "*-linux-*" -lname "*llvm*" -print0 | xargs -0 -I{} sh -c 'cp --remove-destination $(realpath "{}") "{}"'
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends git \
zlib1g-dev libssl-dev gperf g++ \
php-cli make cmake llvm-14 clang-14 lld-14 \
libgcc-11-dev libclang-common-14-dev \
git maven php-readline ca-certificates-java \
openjdk-17-jdk-headless libssl-dev:${ARCH_DEBIAN} zlib1g-dev:${ARCH_DEBIAN} \
libgcc-11-dev:${ARCH_DEBIAN} libc6-dev:${ARCH_DEBIAN} $LLVMLIBS_NATIVE
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends openjdk-17-jdk-headless:${ARCH_DEBIAN}
EOF
FROM ssl3_debian AS build
SHELL ["/bin/bash", "-exc"]
ARG REVISION="1.0.0.0-SNAPSHOT"
ARG ARCH_DEBIAN
ARG ARCH_TRIPLE
ARG TRIPLE_GNU
ARG SCCACHE_GHA_ENABLED=off
ARG ACTIONS_CACHE_URL
ARG ACTIONS_RUNTIME_TOKEN
ENV TOOLCHAIN_FILE="toolchain.cmake"
ENV SCCACHE_DIR=/var/cache/sccache2
# machine-specific flags
ENV HOST_CMAKE_C_COMPILER="/usr/bin/clang-14"
ENV HOST_CMAKE_CXX_COMPILER="/usr/bin/clang++-14"
ENV HOST_CMAKE_C_FLAGS="-fuse-ld=lld"
ENV HOST_CMAKE_CXX_FLAGS="${HOST_CMAKE_C_FLAGS} -stdlib=libc++"
ENV HOST_CMAKE_EXE_LINKER_FLAGS="-lc++ -lc++abi -fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind"
# Use c++11
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -std=c++14"
ENV CC="/usr/bin/gcc-8"
ENV CXX="/usr/bin/g++-8"
ENV CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
ENV CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto=thin -O3"
ENV CCACHE=/opt/sccache/sccache
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
COPY --link . ./
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
cd implementations/tdlight/td_tools_build
CXXFLAGS="-stdlib=libc++" CC="$HOST_CMAKE_C_COMPILER" CXX="$HOST_CMAKE_CXX_COMPILER" cmake \
-DCMAKE_C_COMPILER="${HOST_CMAKE_C_COMPILER}" \
-DCMAKE_CXX_COMPILER="${HOST_CMAKE_CXX_COMPILER}" \
-DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} ${HOST_CMAKE_C_FLAGS}" \
-DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} ${HOST_CMAKE_CXX_FLAGS}" \
-DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS} ${HOST_CMAKE_EXE_LINKER_FLAGS}" \
\
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_C_FLAGS_RELEASE="" \
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
-DTD_ENABLE_LTO=OFF \
-DTD_ENABLE_JNI=ON ..
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
cd ../../../
EOF
RUN --mount=type=cache,target=/root/.m2 <<"EOF"
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
EOF
COPY <<EOF ./toolchain.cmake
set(CMAKE_CROSSCOMPILING TRUE)
SET(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
if(EXISTS "/usr/bin/clang-14")
set(CMAKE_C_COMPILER /usr/bin/clang-14)
set(CMAKE_CXX_COMPILER /usr/bin/clang++-14)
set(CMAKE_ASM_COMPILER /usr/bin/clang-14)
set(CMAKE_AR "/usr/bin/llvm-ar-14" CACHE FILEPATH "" FORCE)
elseif(EXISTS "/usr/bin/clang-12")
set(CMAKE_C_COMPILER /usr/bin/clang-12)
set(CMAKE_CXX_COMPILER /usr/bin/clang++-12)
set(CMAKE_ASM_COMPILER /usr/bin/clang-12)
set(CMAKE_AR "/usr/bin/llvm-ar-12" CACHE FILEPATH "" FORCE)
elseif(EXISTS "/usr/bin/clang-9")
set(CMAKE_C_COMPILER /usr/bin/clang-9)
set(CMAKE_CXX_COMPILER /usr/bin/clang++-9)
set(CMAKE_ASM_COMPILER /usr/bin/clang-9)
set(CMAKE_AR "/usr/bin/llvm-ar-9" CACHE FILEPATH "" FORCE)
else()
set(CMAKE_C_COMPILER /usr/bin/clang)
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
set(CMAKE_ASM_COMPILER /usr/bin/clang)
set(CMAKE_AR "/usr/bin/llvm-ar" CACHE FILEPATH "" FORCE)
endif()
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include)
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/lib/\${TARGET_TRIPLE})
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/bin/\${TARGET_TRIPLE})
# Set various compiler flags
set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind")
set(CMAKE_CXX_FLAGS_INIT "-stdlib=libc++ -std=c++14")
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
# Use our definitions for compiler tools
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# This must be set or compiler checks fail when linking
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
if(EXISTS "/usr/lib/jvm/java-17-openjdk-amd64")
SET(JAVA_HOME "/usr/lib/jvm/java-17-openjdk-amd64")
else()
SET(JAVA_HOME "/usr/lib/jvm/default-java")
endif()
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
SET(JAVA_CROSS_HOME "/usr/lib/jvm/java-17-openjdk-$ARCH_DEBIAN")
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
if("$ARCH_DEBIAN" STREQUAL "armhf" OR "$ARCH_DEBIAN" STREQUAL "arm64")
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
endif()
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
cd implementations/tdlight/build
export INSTALL_PREFIX="$(readlink -e ./td_bin/)"
export INSTALL_BINDIR="$(readlink -e ./td_bin/bin)"
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
-DTD_ENABLE_LTO=ON \
-DTD_ENABLE_JNI=ON \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
-DCMAKE_TOOLCHAIN_FILE="../../../${TOOLCHAIN_FILE}" ..
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../../
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
cd natives/build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
-DTD_SRC_DIR="$(readlink -e ../../implementations/tdlight)" \
-DTDNATIVES_BIN_DIR="$(readlink -e ../tdjni_bin/)" \
-DTDNATIVES_DOCS_BIN_DIR="$(readlink -e ../tdjni_docs/)" \
-DTd_DIR:PATH="$(readlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
-DJAVA_SRC_DIR="$(readlink -e ../src/main/java)" \
-DTDNATIVES_CPP_SRC_DIR="$(readlink -e ../src/main/cpp)" \
-DCMAKE_TOOLCHAIN_FILE="../../${TOOLCHAIN_FILE}" \
../src/main/cpp
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
cd natives
mkdir -p src/main/resources/META-INF/tdlightjni/
mv tdjni_bin/libtdjni.so src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_clang_ssl3.so
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=linux_${ARCH_DEBIAN}_clang_ssl3 package
cd ..
EOF
FROM debian:bookworm-backports AS maven
SHELL ["/bin/bash", "-exc"]
WORKDIR /source
COPY --from=build /build/natives /source/natives
ENTRYPOINT ["/bin/true"]
FROM debian:bookworm-backports
ARG REVISION="1.0.0.0-SNAPSHOT"
ARG ARCH_DEBIAN
ARG ARCH_TRIPLE
ARG TRIPLE_GNU
WORKDIR /out
COPY --from=build /build/natives natives
COPY --from=build /build/natives/src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_clang_ssl3.so libtdjni.so
COPY --from=build /build/natives/target-linux_${ARCH_DEBIAN}_clang_ssl3/tdlight-natives-${REVISION}-linux_${ARCH_DEBIAN}_clang_ssl3.jar tdlight-natives.jar
USER 65534:65534
ENTRYPOINT ["/bin/true"]

View File

@ -0,0 +1,275 @@
# use "sid" for riscv64
ARG DEBIAN_VERSION=bookworm-backports
FROM debian:${DEBIAN_VERSION} AS ssl3_debian
WORKDIR /build
SHELL ["/bin/bash", "-exc"]
ARG REVISION="1.0.0.0-SNAPSHOT"
# amd64, i386, ppc64el, riscv64, armhf, arm64
ARG ARCH_DEBIAN
# x86_64, i386, powerpc64le, riscv64, arm, aarch64
ARG ARCH_TRIPLE
# gnu, gnueabihf (armhf)
ARG TRIPLE_GNU
ARG NATIVE="false"
ARG SCCACHE_GHA_ENABLED=off
ARG ACTIONS_CACHE_URL
ARG ACTIONS_RUNTIME_TOKEN
# Check for mandatory build arguments
RUN : "${ARCH_DEBIAN:?Build argument needs to be set and non-empty.}"
RUN : "${ARCH_TRIPLE:?Build argument needs to be set and non-empty.}"
RUN : "${TRIPLE_GNU:?Build argument needs to be set and non-empty.}"
RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
ENV DEBIAN_FRONTEND=noninteractive
COPY .docker ./.docker
# Install sccache to greatly speedup builds in the CI
RUN --mount=type=cache,target=/opt/sccache,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked --mount=type=cache,target=/var/cache/sccache2,sharing=locked .docker/install-sccache.sh
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked <<"EOF"
dpkg --add-architecture ${ARCH_DEBIAN}
apt-get --assume-yes update
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends openjdk-17-jdk-headless
if [[ "$NATIVE" != "true" ]]; then
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp libssl-dev:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp libssl3:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp zlib1g-dev:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp zlib1g:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp openjdk-17-jre-headless:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/downloadthis.sh /var/cache/apt/downloaded_tmp openjdk-17-jdk-headless:${ARCH_DEBIAN} /root/cross-build-pkgs/
./.docker/SymlinkPrefix.javash "/root/cross-build-pkgs/" "/" "./"
fi
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends \
g++-12 gcc libstdc++-12-dev zlib1g-dev linux-libc-dev libssl-dev gperf \
tree git maven php-cli php-readline make cmake
if [[ "$NATIVE" != "true" ]]; then
apt-get --assume-yes -o Dpkg::Options::="--force-overwrite" install --no-install-recommends \
g++-12-${ARCH_TRIPLE/_/-}-linux-${TRIPLE_GNU} gcc-12-${ARCH_TRIPLE/_/-}-linux-${TRIPLE_GNU} \
libatomic1-${ARCH_DEBIAN}-cross linux-libc-dev-${ARCH_DEBIAN}-cross libc6-dev-${ARCH_DEBIAN}-cross libgcc-12-dev-${ARCH_DEBIAN}-cross libstdc++-12-dev-${ARCH_DEBIAN}-cross
fi
EOF
FROM ssl3_debian AS build
SHELL ["/bin/bash", "-exc"]
ARG REVISION="1.0.0.0-SNAPSHOT"
ARG ARCH_DEBIAN
ARG ARCH_TRIPLE
ARG TRIPLE_GNU
ARG NATIVE=false
ARG SCCACHE_GHA_ENABLED=off
ARG ACTIONS_CACHE_URL
ARG ACTIONS_RUNTIME_TOKEN
ENV SCCACHE_DIR=/var/cache/sccache2
# Use c++11
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}"
ENV CC="/usr/bin/gcc-12"
ENV CXX="/usr/bin/g++-12"
ENV CMAKE_C_FLAGS="${CMAKE_C_FLAGS}"
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti"
ENV CMAKE_SHARED_LINKER_FLAGS="${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL"
ENV CMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -flto -O3"
ENV CCACHE=/opt/sccache/sccache
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
COPY --link . ./
COPY <<EOF ./toolchain_native.cmake
set(CMAKE_CROSSCOMPILING FALSE)
SET(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
set(CMAKE_C_COMPILER /usr/bin/gcc-12)
set(CMAKE_CXX_COMPILER /usr/bin/g++-12)
set(CMAKE_AR "/usr/bin/gcc-ar-12" CACHE FILEPATH "" FORCE)
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /usr/include)
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /lib/\${TARGET_TRIPLE})
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE})
# Set various compiler flags
set(CMAKE_EXE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_CXX_FLAGS_INIT "-flto -fno-fat-lto-objects")
if(EXISTS "/usr/lib/jvm/java-17-openjdk-amd64")
SET(JAVA_HOME "/usr/lib/jvm/java-17-openjdk-amd64")
else()
SET(JAVA_HOME "/usr/lib/jvm/default-java")
endif()
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
SET(JAVA_CROSS_HOME "/usr/lib/jvm/java-17-openjdk-$ARCH_DEBIAN")
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
rm -rf implementations/tdlight/td_tools_build implementations/tdlight/build api/target-legacy api/target api/.ci-friendly-pom.xml implementations/tdlight/td/generate/auto natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
mkdir -p implementations/tdlight/build implementations/tdlight/build/td_bin/bin implementations/tdlight/td_tools_build/java/it/tdlight/jni api/src/main/java-legacy/it/tdlight/jni api/src/main/java-sealed/it/tdlight/jni natives/src/main/java/it/tdlight/jni natives/build natives/tdjni_bin natives/tdjni_docs
cd implementations/tdlight/td_tools_build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_C_FLAGS_RELEASE="" \
-DCMAKE_CXX_FLAGS_RELEASE="-O0 -DNDEBUG" \
-DTD_ENABLE_LTO=OFF \
-DTD_ENABLE_JNI=ON \
-DJAVA_AWT_LIBRARY=/dev/null \
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
-DCMAKE_TOOLCHAIN_FILE="../../../toolchain_native.cmake" \
..
cmake --build . --target prepare_cross_compiling --parallel "$(nproc)"
cmake --build . --target td_generate_java_api --parallel "$(nproc)"
cd ../../../
EOF
RUN --mount=type=cache,target=/root/.m2 <<"EOF"
./implementations/tdlight/td_tools_build/td/generate/td_generate_java_api TdApi "./implementations/tdlight/td/generate/auto/tlo/td_api.tlo" "./natives/src/main/java" "it/tdlight/jni"
EOF
COPY <<EOF ./toolchain.cmake
set(CMAKE_CROSSCOMPILING TRUE)
SET(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR $ARCH_TRIPLE)
set(TARGET_TRIPLE $ARCH_TRIPLE-linux-$TRIPLE_GNU)
set(CMAKE_C_COMPILER /usr/bin/\${TARGET_TRIPLE}-gcc-12)
set(CMAKE_CXX_COMPILER /usr/bin/\${TARGET_TRIPLE}-g++-12)
set(CMAKE_AR "/usr/bin/\${TARGET_TRIPLE}-gcc-ar-12" CACHE FILEPATH "" FORCE)
set(CMAKE_C_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_CXX_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_ASM_COMPILER_TARGET \${TARGET_TRIPLE})
set(CMAKE_INCLUDE_PATH /usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/include)
set(CMAKE_LIBRARY_PATH /usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/lib/\${TARGET_TRIPLE} /root/cross-build-pkgs/lib/\${TARGET_TRIPLE})
set(CMAKE_PROGRAM_PATH /usr/bin/\${TARGET_TRIPLE} /root/cross-build-pkgs/usr/bin/\${TARGET_TRIPLE})
# Set various compiler flags
set(CMAKE_EXE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_CXX_FLAGS_INIT "-flto -fno-fat-lto-objects")
set(CMAKE_SYSROOT /root/cross-build-pkgs)
# This must be set or compiler checks fail when linking
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
if(EXISTS "/usr/lib/jvm/java-17-openjdk-amd64")
SET(JAVA_HOME "/usr/lib/jvm/java-17-openjdk-amd64")
else()
SET(JAVA_HOME "/usr/lib/jvm/default-java")
endif()
SET(JAVA_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_AWT_INCLUDE_PATH "\${JAVA_HOME}/include")
SET(JAVA_INCLUDE_PATH2 "\${JAVA_HOME}/include/linux")
SET(JAVA_CROSS_HOME "/root/cross-build-pkgs/usr/lib/jvm/java-17-openjdk-$ARCH_DEBIAN")
SET(JAVA_JVM_LIBRARY "\${JAVA_CROSS_HOME}/lib/server/libjvm.so")
SET(JAVA_AWT_LIBRARY "\${JAVA_CROSS_HOME}/lib/libawt.so")
if("$ARCH_DEBIAN" STREQUAL "armhf" OR "$ARCH_DEBIAN" STREQUAL "arm64")
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
endif()
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
cd implementations/tdlight/build
export INSTALL_PREFIX="$(readlink -e ./td_bin/)"
export INSTALL_BINDIR="$(readlink -e ./td_bin/bin)"
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DTD_SKIP_BENCHMARK=ON -DTD_SKIP_TEST=ON -DTD_SKIP_TG_CLI=ON \
-DTD_ENABLE_LTO=ON \
-DTD_ENABLE_JNI=ON \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX" \
-DCMAKE_INSTALL_BINDIR:PATH="$INSTALL_BINDIR" \
-DJAVA_AWT_LIBRARY=/dev/null \
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
-DCMAKE_TOOLCHAIN_FILE="../../../$TOOLCHAIN_ARGS" \
..
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../../
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
export TOOLCHAIN_ARGS; if [[ "$NATIVE" == "true" ]]; then TOOLCHAIN_ARGS="toolchain_native.cmake"; else TOOLCHAIN_ARGS="toolchain.cmake"; fi
cd natives/build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER="$CCACHE" \
-DCMAKE_CXX_COMPILER_LAUNCHER="$CCACHE" \
-DTD_GENERATED_BINARIES_DIR="$(readlink -e ../../implementations/tdlight/td_tools_build/td/generate)" \
-DTD_SRC_DIR="$(readlink -e ../../implementations/tdlight)" \
-DTDNATIVES_BIN_DIR="$(readlink -e ../tdjni_bin/)" \
-DTDNATIVES_DOCS_BIN_DIR="$(readlink -e ../tdjni_docs/)" \
-DTd_DIR:PATH="$(readlink -e ../../implementations/tdlight/build/td_bin/lib/cmake/Td)" \
-DJAVA_SRC_DIR="$(readlink -e ../src/main/java)" \
-DTDNATIVES_CPP_SRC_DIR="$(readlink -e ../src/main/cpp)" \
-DJAVA_AWT_LIBRARY=/dev/null \
-DJAVA_AWT_INCLUDE_PATH=/dev/null \
-DCMAKE_TOOLCHAIN_FILE="../../$TOOLCHAIN_ARGS" \
../src/main/cpp
cmake --build . --target install --config Release --parallel "$(nproc)"
cd ../../
EOF
RUN --mount=type=cache,target=/opt/sccache,sharing=locked \
--mount=type=cache,target=/var/cache/sccache2,sharing=locked \
--mount=type=cache,target=/root/.m2 <<"EOF"
cd natives
mkdir -p src/main/resources/META-INF/tdlightjni/
mv tdjni_bin/libtdjni.so src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_gnu_ssl3.so
mvn -B -f pom.xml -Drevision="$REVISION" -Dnative.type.classifier=linux_${ARCH_DEBIAN}_gnu_ssl3 package
cd ..
EOF
FROM debian:buster-backports AS maven
SHELL ["/bin/bash", "-exc"]
WORKDIR /source
COPY --from=build /build/natives /source/natives
ENTRYPOINT ["/bin/true"]
FROM debian:bookworm-backports
ARG REVISION="1.0.0.0-SNAPSHOT"
ARG ARCH_DEBIAN
ARG ARCH_TRIPLE
ARG TRIPLE_GNU
ARG NATIVE=off
WORKDIR /out
COPY --from=build /build/natives natives
COPY --from=build /build/natives/src/main/resources/META-INF/tdlightjni/libtdjni.linux_${ARCH_DEBIAN}_gnu_ssl3.so libtdjni.so
COPY --from=build /build/natives/target-linux_${ARCH_DEBIAN}_gnu_ssl3/tdlight-natives-${REVISION}-linux_${ARCH_DEBIAN}_gnu_ssl3.jar tdlight-natives.jar
USER 65534:65534
ENTRYPOINT ["/bin/true"]