From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.9 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 9D95F1F4B5 for ; Tue, 12 Nov 2019 18:06:05 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id C3E61120968; Wed, 13 Nov 2019 03:05:54 +0900 (JST) Received: from o1678948x4.outbound-mail.sendgrid.net (o1678948x4.outbound-mail.sendgrid.net [167.89.48.4]) by neon.ruby-lang.org (Postfix) with ESMTPS id 8EA9B12095D for ; Wed, 13 Nov 2019 03:05:51 +0900 (JST) Received: by filter0085p3las1.sendgrid.net with SMTP id filter0085p3las1-16713-5DCAF480-41 2019-11-12 18:05:52.465339752 +0000 UTC m=+84015.519397614 Received: from herokuapp.com (unknown [54.162.83.60]) by ismtpd0083p1iad2.sendgrid.net (SG) with ESMTP id gEa37bfHRtupL70PXMeuAw for ; Tue, 12 Nov 2019 18:05:52.397 +0000 (UTC) Date: Tue, 12 Nov 2019 18:05:52 +0000 (UTC) From: jaruga@redhat.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 71447 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 16234 X-Redmine-Issue-Author: jaruga X-Redmine-Sender: jaruga X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: =?us-ascii?Q?yXpFNqRr1dEY0snEQ6vUpjORBmm3WV3CBkaa8tOjsKnK51OEgBC+UmA=2FDM46DW?= =?us-ascii?Q?RAYY4UnAAIojsekMSDuLncKj0YP+i1da0jrsMcC?= =?us-ascii?Q?WOPNF59f1bWoaD7ZR7ftCH1CvF+Pi+N07Uwj4FE?= =?us-ascii?Q?Y4ArPZZaggHfFYOxgWX1HL4Eza7NaqCyrPrdQW4?= =?us-ascii?Q?u1O65joewMD8wAD8Wd2Tu4+1wz25UezhLZQ=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 95818 Subject: [ruby-core:95818] [Ruby master Misc#16234] Enabling ARM 64/32-bit cases by Drone CI X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #16234 has been updated by jaruga (Jun Aruga). I sent a PR to add arm32 case on Travis CI now. https://github.com/ruby/ruby/pull/2673 Let me explain the summary. First, gcc-8-multilib deb package does not exist in the xenial (and bionic) arm64 tool chain repository. Ref: ``` $ wget http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu/dists/xenial/main/binary-arm64/Packages.gz $ gunzip Packages.gz ``` So, I tried to create ARM 32-bit case without using the tool chain on ARM 64-bit. I think it is fine for the initial ARM 32-bit test case. I used this deb package. https://packages.ubuntu.com/xenial/crossbuild-essential-armhf As a note, there is "-m32" flag for aarch64 gcc. http://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html In Travis x86_64 environment, here is the initial setting for architectures. ``` $ dpkg --print-architecture amd64 $ dpkg --print-foreign-architectures i386 ``` In Travis arm64 environment, here is the initial setting for architectures. ``` $ dpkg --print-architecture aarch64 $ dpkg --print-foreign-architectures => empty ``` So, I needed to run `sudo dpkg --add-architecture armhf` manually. Here are the available setarch values in Travis arm64. ``` $ setarch --list uname26 linux32 linux64 aarch64 ``` The value shows armv8l. It looks good. ``` $ $SETARCH uname -a Switching on ADDR_LIMIT_32BIT. Linux travis-job-junaruga-ruby-610971033 5.3.0-19-generic #20~18.04.2-Ubuntu SMP Tue Oct 22 18:10:05 UTC 2019 armv8l armv8l armv8l GNU/Linux ``` long: 4 byte, void*: 4 byte look correct. I am not sure that off_t: 8 byte is correct. Because I saw off_t: 4 byte in arm32v7/ubuntu container environment with QEMU emulation. ``` $ $SETARCH ../configure -C --disable-install-doc --prefix=$RUBY_PREFIX $CONFIG_FLAG ... checking size of long... 4 ... checking size of off_t... 8 checking size of void*... 4 ``` There is one issue on the Travis arm32 environment. I added it as allow_failures. ``` $ travis_wait 50 $SETARCH make -s test-all -o exts TESTOPTS="${TESTOPTS} ${TEST_ALL_OPTS}" RUBYOPT="-w" ... /home/travis/build/junaruga/ruby/build/.ext/common/fiddle/import.rb:299:in `import_function': cannot find the function: strcpy() (Fiddle::DLError) /home/travis/build/junaruga/ruby/build/.ext/common/fiddle/import.rb:172:in `extern' /home/travis/build/junaruga/ruby/test/fiddle/test_import.rb:17:in `' /home/travis/build/junaruga/ruby/test/fiddle/test_import.rb:10:in `' /home/travis/build/junaruga/ruby/test/fiddle/test_import.rb:9:in `' /home/travis/build/junaruga/ruby/lib/rubygems/core_ext/kernel_require.rb:92:in `require' /home/travis/build/junaruga/ruby/lib/rubygems/core_ext/kernel_require.rb:92:in `require' /home/travis/build/junaruga/ruby/tool/lib/test/unit/parallel.rb:121:in `run' /home/travis/build/junaruga/ruby/tool/lib/test/unit/parallel.rb:208:in `
' running file: /home/travis/build/junaruga/ruby/test/fiddle/test_import.rb ... ``` ---------------------------------------- Misc #16234: Enabling ARM 64/32-bit cases by Drone CI https://bugs.ruby-lang.org/issues/16234#change-82645 * Author: jaruga (Jun Aruga) * Status: Closed * Priority: Normal * Assignee: ---------------------------------------- Currently ruby project has 4 CIs on GitHub. 1. Travis CI: linux cases with flags and compilers. 2. GitHub Actions: macros, windows, ubuntu 3. Wercker: Ruby JIT cases 4. Appveyor: windows I like to suggest 5th CI: Drone CI for ARM 64/32-bit cases. Drone CI supports native the ARM 64/32 bit environments. Have you used Drone CI? I tried to use both Drone CI and Shippable CI supporting ARM. My impression for Drone CI is quite good. Great user experience and user interface. Shippable CI was not so good for some reasons. Drone CI have not only linux ARM 64/32 bit environments on DockerRunner mode (= using container for CI like Wercker), but also freebsd, netbsd, openbsd, dragonfly (?) and solaris environments on ExecRunner (= maybe running commands directly without container) mode according to the following documents. * https://exec-runner.docs.drone.io/configuration/platform/ * https://docker-runner.docs.drone.io/configuration/platform/ Is it exciting isn't it? We can check ARM issue at a pull-request timing. Here is the example. The content is almost same with wercker.yml except JIT option. "ruby/3" is failed on the latest master branch, but "ruby/2" arm64 case is succeeded on old master branch. https://cloud.drone.io/junaruga/ruby/3 https://github.com/junaruga/ruby/blob/feature/ci-arm/.drone.yml https://cloud.drone.io/junaruga/ruby/2 Here is the pull-request as an example. https://github.com/ruby/ruby/pull/2520 .drone.yml is the file to manage the CI cases. But when you see most of the YAML parts between ARM 64-bit and 32-bit cases in .drone.yml is same. In case of .traivs.yml, we are using YAML anchor (&) and reference (*) feature effectively. But in case of .drone.yml I am not sure we can still use it beyond the "---" separator. Luckily Drone CI started providing the alternative .drone.star file by Starlark language. https://docs.drone.io/starlark/overview/ https://blog.drone.io/create-pipelines-using-starlark/ Enabling Drone CI is quite simple. Just go to https://drone.io/ , then register and enable target repository. UI is quite good. Pros * We can check ARM 64/32-bit cases, and possibly freebsd and solaris cases too. * It's for free. * Each developer can debug ARM cases on their forked repository. * Customize easily. I see .travis.yml is used effectively. Cons * Have to manage additonal file .drone.yml or .drone.star. But first, I want to ask you. Are you interested in using Drone CI for Ruby project? -- https://bugs.ruby-lang.org/