From 5cac2e8a21db7c4872a7ca71ca4d85bc21ffb103 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sun, 17 Jun 2018 01:42:53 +0200 Subject: [PATCH 1/5] Support non-String values in RbConfig * TruffleRuby 1.0.0-rc2 contains an Array as a RbConfig::CONFIG value. --- scripts/functions/support | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/functions/support b/scripts/functions/support index a48d368664..8140cbdcea 100644 --- a/scripts/functions/support +++ b/scripts/functions/support @@ -563,7 +563,7 @@ __rvm_ruby_config_save_generic() "$ruby_path" -rrbconfig -e '\ File.open("'"$config_path"'","w") { |file| RbConfig::CONFIG.sort.each{|key,value| - file.write("#{key.gsub(/\.|-/,"_")}=\"#{value.gsub("$","\\$")}\"\n") + file.write("#{key.gsub(/\.|-/,"_")}=\"#{value.to_s.gsub("$","\\$")}\"\n") } } ' >/dev/null 2>&1 From eef5d4b5773ade46c71d5cc480470577032c0e69 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sun, 17 Jun 2018 01:41:22 +0200 Subject: [PATCH 2/5] Add TruffleRuby to rvm * Uses JRuby as model for the install steps. --- README.md | 1 + bin/rvm-prompt | 1 + config/db | 5 +++ config/known | 3 ++ config/known_strings | 1 + config/md5 | 2 ++ config/sha512 | 2 ++ man/man1/rvm.1 | 5 +++ man/man1/rvm.1.gz | Bin 3041 -> 3065 bytes scripts/cli | 2 +- scripts/functions/manage/base_fetch | 2 +- scripts/functions/manage/base_install | 6 ++-- scripts/functions/manage/truffleruby | 42 ++++++++++++++++++++++++ scripts/functions/selector_interpreters | 23 +++++++++++++ scripts/functions/selector_parse | 2 +- 15 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 scripts/functions/manage/truffleruby diff --git a/README.md b/README.md index 5fc8ce1b34..d6eccd61d1 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ We currently supported following ruby interpreters: * `opal` - ruby to JavaScript compiler * `rbx` - Rubinius - a next generation virtual machine VM for ruby * `topaz` - high performance ruby, written in RPython +* `truffleruby` - high performance ruby using GraalVM Historical interpreters which you can still install with RVM, but are not anymore developed and supported by their authors: diff --git a/bin/rvm-prompt b/bin/rvm-prompt index a339f0c53e..98552842d0 100755 --- a/bin/rvm-prompt +++ b/bin/rvm-prompt @@ -115,6 +115,7 @@ then (ironruby) unicode="♭" ;; (system) unicode="★" ;; (topaz) unicode="🐍" ;; # TODO: what is this? can we use something more fonts support? + (truffleruby) unicode="🚀" ;; (opal) unicode="⬢" ;; (ruby) case ${version:-""} in diff --git a/config/db b/config/db index c905d9779b..da77da6871 100644 --- a/config/db +++ b/config/db @@ -122,6 +122,11 @@ jruby_url=https://s3.amazonaws.com/jruby.org/downloads jruby_version=9.2.0.0 maven_version=3.5.0 # +# TruffleRuby +# +truffleruby_url=https://github.com/oracle/truffleruby/releases/download +truffleruby_version=1.0.0-rc2 +# # MacRuby # macruby_0.10_url=http://macruby.macosforge.org/files diff --git a/config/known b/config/known index edef1d1d12..403739c10e 100644 --- a/config/known +++ b/config/known @@ -30,6 +30,9 @@ rbx-2[.5.8] rbx-3[.100] rbx-head +# TruffleRuby +truffleruby[-1.0.0-rc2] + # Opal opal diff --git a/config/known_strings b/config/known_strings index 6a36fa9c4a..d2b9d53c8a 100644 --- a/config/known_strings +++ b/config/known_strings @@ -353,3 +353,4 @@ ruby-2.5.0 ruby-2.5.1 ruby-2.6.0-preview1 ruby-2.6.0-preview2 +truffleruby-1.0.0-rc2 diff --git a/config/md5 b/config/md5 index 7816bf21c2..ff82edef2b 100644 --- a/config/md5 +++ b/config/md5 @@ -1083,6 +1083,8 @@ rubygems-2.7.3.tgz=fb3a1927a1842b75677a24f48dd63ddc rubygems-2.7.4.tgz=e9bbf5a4cc9a74293884b91f49603ea0 rubygems-2.7.5.tgz=516a4f219976003feb4b4f797cbc66b0 rubygems-2.7.6.tgz=366cea352c2b1243db726013c3d76fc4 +truffleruby-1.0.0-rc2-linux-amd64.tar.gz=3e9afdf72f153e2f66259fc2b6fca594 +truffleruby-1.0.0-rc2-macos-amd64.tar.gz=c30459287aec83548cfcb17340fa73d5 yaml-0.1.4.tar.gz=36c852831d02cf90508c29852361d01b zlib-1.2.3.tar.gz=debc62758716a169df9f62e6ab2bc634 zlib-1.2.5.tar.gz=c735eab2d659a96e5a594c9e8541ad63 diff --git a/config/sha512 b/config/sha512 index cd8c171e6b..22e0310938 100644 --- a/config/sha512 +++ b/config/sha512 @@ -785,3 +785,5 @@ rubygems-2.7.3.tgz=2782331b31947a23f85b285a3d5e7b66e34fe5847bc84dca4f1e6bfe33ce1 rubygems-2.7.4.tgz=90f72a46709ef847666a6a23eecf24521abd5c294b2da8a246bb4c7f85daf4af39a0634fc8093c7bb7ded2ac137ea27fac5ed94af3b70c49e78594285c7a40ce rubygems-2.7.5.tgz=86957f1c438070135df527a15102e40487fcee93a55251463095e4c8794a8616d16ed9bdead0e0ef83c44806bd5016ecd9e178bef608b66af2e68e2c9c49e941 rubygems-2.7.6.tgz=bc168afc40c974dbc7c37eb5678432ba2ed7469c3f007a159699467ff2cff5205c508237193ee8becaa6eb555b043969cc5f92b2aaa6bf7c958dd7c187e258a7 +truffleruby-1.0.0-rc2-linux-amd64.tar.gz=5dfb040b746e462c297ebcdf84e0f07cd74b86852055dcf0a7cf1814112099bc674bcccd94b03726aee76b253c9345a45d046cbfea230647644f0fd6b1c1ec96 +truffleruby-1.0.0-rc2-macos-amd64.tar.gz=17983c442c54d19196be3626e25c64f5474139c0b973624832ba8730efb047bc747c02e59c82f38397bf012c63ab83f79a9c1b64311cab796f08fe96d7d12a1a diff --git a/man/man1/rvm.1 b/man/man1/rvm.1 index 0e7c716566..1ff3e7d892 100644 --- a/man/man1/rvm.1 +++ b/man/man1/rvm.1 @@ -343,6 +343,11 @@ JRuby, Ruby interpreter on the Java Virtual Machine\&. Rubinius .RE .PP +\fBtruffleruby\fR +.RS 4 +TruffleRuby, a high performance implementation of Ruby built on GraalVM\&. +.RE +.PP \fBree\fR .RS 4 Ruby Enterprise Edition, MRI Ruby with several custom patches for performance, stability, and memory\&. diff --git a/man/man1/rvm.1.gz b/man/man1/rvm.1.gz index 7245865f74f11c77487ec001ba90afc88786657c..46f3962c74973d466518efa0ab7d5d01deb666b0 100644 GIT binary patch literal 3065 zcmVdjPUrA!(zQ-1zfy`JmR1gd#$`PsjIE3;)Omv}wSmPu?^G<-0;dm|2K_tQgh zc!s~tmU!5KX^r@O4;lI7|NX-#UkR%U5voX*Ng*O_Qdtynw)_*f2xBW33GBJeS1OZ5 zth0k*w(7k5RN5kr;(*_ZBN@_wDAW`F(IQb%fy0|+oC%#J+v9_w3`O#%s$qIDxfYi< z*LUOVJ2AhznBC3AoAGQczWTGanZxAQ7t`_K0U|&=oQS)X60>r#75BNX$y?r~L z;!qcU^uyrU(T6XG!y&qWj zncOJ+%b=D*T1R53QVV&VpsWvwcza8VdN_GFSt%LfBnQLUT>RyLcPjG`@jdYWTjC)C zT*if<*<$Uiz@W2n8;nHb{eB0~Popq`oQVnw74qmVppUm5Jl23)H*n{ab!758!p+o1 zfY_46?h!Opi*nhZ-s$BMn&nZE>QEti7z9V%(mxArF;*6NS?ob8j0{u{jYn%Vwulnr z`|<4k-J8kv6{{6K5^Au>9#CxG2K}BM8y7Ju)oZ9yCt)=xzVu8e77B~&$$PME39mHU z2K}9d0czcbn#9cwT#612?fM1ePX&U}do@{dpBp4(BsXu1Xeh)FEo#tI*!bz0hMfZyE6&-vqfRiORt*oPUTJ(@EmpvvT1U9y)&4leUNiE%d2EF6o*2;1cXaW9h+ zGwn*3*pFu8EW|NuiYvLWIw5OU=8_(tfM9mohN${6gS+}yBlkblNccB7(G^7B4!n?* zFTf-^GdFCYOkGNXch@jG?lh6TB#6cL^~&0Ml1Trv*!{DNeA z95ajCgq9l}D9A#i8T~lo$_ZMeJyDc^(QB=U(;lrEr5;YIbJnOg{v32n9M~~k!h}f+ zj)Gt8fh%@Lp2?lSy{vpHaACW@VnsyhcJVvoXBNsAQgMMQGZII@jLO6({9uJnm0YixxJ%8U?lH6N z=u9ppomVKZ3m_@!!=Mtnv{VY)azT8DAb|J?jG<7=A@3Jz=IN6vy^Fu|@Y(R2;n#z+ z;kRhtF~y*8Xy&vfL*LMd_Bysmvs(*|yM~qk<$_DTtleVNAqqMunTOF0P?6#)ajxAc ze%?7fk#jB;x5s1(RuOlv%vW?!pi`X7f`|QCoe9^d0(dl3K|+D#gR^~#IL#9zy5=ND z2)ev{ERXBjuX3+;dB(w#pa4v^B<fmM zI(pwki^P$67B{JcU-M(nlBBim%688Y*%hKF(QsU52~kJp(M+wr6^IH7gSBr ziK5tG1y_4j54jrxuzxGE&<rYl|37$!W>K z?K29~A?59rTyu7>6lbX$=;?~Wug{M3#tT9(+u_)b*LL|%;kZjh-AimxL`bJ1*YBqn)3_qj&!;9)d9j6*Y)cHz0zIGcySZ zB@U=(tatjAwi?i@&%Siy@@1cWIz;H6?Rh_F{hQIwYE+NC!h(IQ>QT7-@jOMAZyIY# zvR_<{r$4{BnT~yy?P$^jzl+`~+FHQAm)XkfQT13iQm*&&sJF@x0aBn>4I`Q+x=P@Q ze4k#mC0#%5!cqyh!?*s}%@wa(2_GD|TPYcEXV+XXK1Y=V-qCz6gGaekeI}+GQR+;P zjHnysS>ji^Mxt6`5F-z*2meaq#Xw`4waMqb`}&n#a~t(b2_@ka{HWMLf#HHNB;Ms!4wcST zn`1W@LM+^o;>Hdh_i(}-3uE`&-QBM=6;kJ;%#pvHYQx7->(k9j+KiGuRsN`gkY$d4 ziwpg-Q4_(l@%-l9>~ics1x`@{h>cnZ8yAX4U^V&<$2G0{Z1Y%sMZCPZeLuOraw{)& zzBO?7LL3Fh;??Qtx8g^+#mX@$W3HBEobklDQsV98a(q1>yUK_!iB%zE_u1(`ny_Bv H*dG7@vReVU literal 3041 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 /dev/null || + { + rvm_error "TruffleRuby requires LLVM to be installed to run native extensions. +For more details and for setup instructions for your system, please see: +https://github.com/oracle/truffleruby/blob/master/doc/user/installing-llvm.md" + return 1 + } +} + +truffleruby_install() +{ + truffleruby_install_check_llvm || return $? + + __rvm_cd "${rvm_src_path}" + + __rvm_fetch_ruby || return $? + + __rvm_cd "${rvm_src_path}/${rvm_ruby_string}" + + __rvm_apply_patches + + __rvm_rm_rf "${rvm_ruby_home}" && \command \mkdir -p "$(dirname "${rvm_ruby_home}")" && + __rvm_log_command "install" "${rvm_ruby_string} - #installing to ${rvm_ruby_home}" \ + __rvm_cp -Rf "${rvm_src_path}/${rvm_ruby_string}" "${rvm_ruby_home}" || return $? + + __rvm_cd "${rvm_ruby_home}" + + # Run the TruffleRuby post-install hook + ./lib/truffle/post_install_hook.sh + + # Avoid updating RubyGems for now as it seems fragile + rvm_rubygems_version="ignore" + __rvm_initial_gemsets_create "$rvm_ruby_home/bin/ruby" + + __rvm_post_install + + __rvm_fetch_ruby_cleanup +} diff --git a/scripts/functions/selector_interpreters b/scripts/functions/selector_interpreters index 618c98f797..2644276f89 100644 --- a/scripts/functions/selector_interpreters +++ b/scripts/functions/selector_interpreters @@ -233,6 +233,29 @@ __rvm_select_interpreter_jruby() true # for OSX } +__rvm_select_interpreter_truffleruby() +{ + rvm_ruby_version="${rvm_ruby_version:-$(__rvm_db "truffleruby_version")}" + + case "${_system_type}" in + "Linux") platform="linux" ;; + "Darwin") platform="macos" ;; + *) rvm_error "TruffleRuby does not support ${_system_type} currently." ;; + esac + + case "${_system_arch}" in + "x86_64") arch=amd64 ;; + *) rvm_error "TruffleRuby does not support ${_system_arch} currently." ;; + esac + + truffleruby_version="${rvm_ruby_version}${rvm_ruby_patch_level:+-}${rvm_ruby_patch_level:-}" + rvm_ruby_package_name="truffleruby-${truffleruby_version}" + rvm_ruby_package_file="${rvm_ruby_package_name}-${platform}-${arch}" + rvm_ruby_url="${rvm_ruby_repo_url:-$(__rvm_db "truffleruby_url")/vm-${truffleruby_version}/${rvm_ruby_package_file}.tar.gz}" + + true # for OSX +} + __rvm_select_interpreter_maglev() { rvm_ruby_patch_level="" diff --git a/scripts/functions/selector_parse b/scripts/functions/selector_parse index 4c1b042a1e..fdb1346368 100644 --- a/scripts/functions/selector_parse +++ b/scripts/functions/selector_parse @@ -210,7 +210,7 @@ __rvm_ruby_string_parse_() rvm_ruby_interpreter="rbx" ;; - (opal|ruby|rbx|jruby|macruby|ree|maglev|ironruby|mruby|topaz) + (opal|ruby|rbx|jruby|macruby|ree|maglev|ironruby|mruby|topaz|truffleruby) rvm_ruby_interpreter="$string" ;; From 7d71c247c7e043f88153a0d0e6a5121ef72c8fd1 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sun, 17 Jun 2018 15:59:12 +0200 Subject: [PATCH 3/5] Add package requirements for TruffleRuby * Best effort, I have no way to check if it actually works on so many platforms. --- scripts/functions/requirements/arch | 4 ++++ scripts/functions/requirements/centos | 5 +++++ scripts/functions/requirements/debian | 6 ++++++ scripts/functions/requirements/dragonfly | 4 ++++ scripts/functions/requirements/fedora_dnf | 5 +++++ scripts/functions/requirements/gentoo | 4 ++++ scripts/functions/requirements/opensuse | 4 ++++ scripts/functions/requirements/osx_brew | 4 ++++ scripts/functions/requirements/osx_fink | 5 +++++ scripts/functions/requirements/osx_port | 4 ++++ scripts/functions/requirements/pclinuxos | 4 ++++ 11 files changed, 49 insertions(+) diff --git a/scripts/functions/requirements/arch b/scripts/functions/requirements/arch index 8799242b78..0d506665fa 100644 --- a/scripts/functions/requirements/arch +++ b/scripts/functions/requirements/arch @@ -102,6 +102,10 @@ requirements_arch_define() undesired_check clang llvm llvm-libs requirements_check clang35 llvm35 llvm35-libs patch curl zlib readline autoconf automake diffutils make libtool bison ;; + (truffleruby*) + requirements_check zlib clang llvm make + requirements_arch_define_openssl "$1" + ;; (ruby-2.3*|ruby-2.2*|ruby-2.1*|ruby-2.0*|ruby-1.9*) requirements_check gcc patch curl zlib readline autoconf automake diffutils make libtool bison sqlite git requirements_arch_define_openssl "$1" diff --git a/scripts/functions/requirements/centos b/scripts/functions/requirements/centos index 5727947763..ac2eff69f2 100644 --- a/scripts/functions/requirements/centos +++ b/scripts/functions/requirements/centos @@ -206,6 +206,11 @@ requirements_centos_define() make ncurses-devel openssl-devel readline-devel ruby-devel rubygems zlib-devel ;; + (truffleruby*) + requirements_check zlib-devel clang llvm make + requirements_${_system_name_lowercase}_define_openssl $1 + ;; + (ir*) true # not that easy ;; diff --git a/scripts/functions/requirements/debian b/scripts/functions/requirements/debian index 1e97bd3ade..820c0032b0 100644 --- a/scripts/functions/requirements/debian +++ b/scripts/functions/requirements/debian @@ -182,6 +182,12 @@ requirements_debian_define() requirements_${_system_name_lowercase}_define_clang_llvm "$1" ;; + (truffleruby*) + requirements_debian_define_base + requirements_${_system_name_lowercase}_define_libssl "$1" + requirements_check clang llvm + ;; + (*) requirements_debian_define_base g++ gcc requirements_${_system_name_lowercase}_define_libssl "$1" diff --git a/scripts/functions/requirements/dragonfly b/scripts/functions/requirements/dragonfly index 3a9586f09e..37d1bd1913 100644 --- a/scripts/functions/requirements/dragonfly +++ b/scripts/functions/requirements/dragonfly @@ -37,6 +37,10 @@ requirements_dragonfly_define() fi ;; + (truffleruby*) + requirements_check openssl llvm40 + ;; + (ir*) requirements_check mono ;; diff --git a/scripts/functions/requirements/fedora_dnf b/scripts/functions/requirements/fedora_dnf index 5a9d937523..1e96b9d534 100644 --- a/scripts/functions/requirements/fedora_dnf +++ b/scripts/functions/requirements/fedora_dnf @@ -64,6 +64,11 @@ requirements_fedora_define() make ncurses-devel openssl-devel readline-devel ruby-devel rubygems zlib-devel ;; + (truffleruby*) + requirements_check zlib-devel clang llvm make + requirements_fedora_define_openssl "$1" + ;; + (ir*) true # not that easy ;; diff --git a/scripts/functions/requirements/gentoo b/scripts/functions/requirements/gentoo index 96c6c96aba..0c4d8bf483 100644 --- a/scripts/functions/requirements/gentoo +++ b/scripts/functions/requirements/gentoo @@ -44,6 +44,10 @@ requirements_gentoo_define() fi ;; + (truffleruby*) + requirements_check sys-libs/zlib dev-libs/openssl net-misc/curl sys-devel/clang sys-devel/llvm sys-devel/make + ;; + (ir*) requirements_check dev-lang/mono ;; diff --git a/scripts/functions/requirements/opensuse b/scripts/functions/requirements/opensuse index b379982f24..288ab18ac0 100644 --- a/scripts/functions/requirements/opensuse +++ b/scripts/functions/requirements/opensuse @@ -96,6 +96,10 @@ requirements_opensuse_define() requirements_check_fallback clang clang6 clang5 clang4 ;; + (truffleruby*) + requirements_check zlib-devel libopenssl-devel llvm-clang llvm make + ;; + (*) requirements_opensuse_define_default requirements_check gcc gcc-c++ diff --git a/scripts/functions/requirements/osx_brew b/scripts/functions/requirements/osx_brew index e714d26e8a..9885aed541 100644 --- a/scripts/functions/requirements/osx_brew +++ b/scripts/functions/requirements/osx_brew @@ -368,6 +368,10 @@ requirements_osx_brew_define() requirements_check node ;; + (truffleruby*) + requirements_check openssl llvm@4 + ;; + (ruby*head) __rvm_which git >/dev/null || requirements_check git requirements_osx_brew_libs_default "$1" diff --git a/scripts/functions/requirements/osx_fink b/scripts/functions/requirements/osx_fink index a2193013a3..9db47a9f2a 100644 --- a/scripts/functions/requirements/osx_fink +++ b/scripts/functions/requirements/osx_fink @@ -179,6 +179,11 @@ requirements_osx_fink_define() requirements_check node ;; + (truffleruby*) + requirements_osx_fink_libs_default "$1" + requirements_check clang50 llvm50 + ;; + (*-head) __rvm_which git >/dev/null || requirements_check git requirements_osx_fink_libs_default "$1" diff --git a/scripts/functions/requirements/osx_port b/scripts/functions/requirements/osx_port index 836def6c99..1dcc325dff 100644 --- a/scripts/functions/requirements/osx_port +++ b/scripts/functions/requirements/osx_port @@ -138,6 +138,10 @@ requirements_osx_port_define() requirements_osx_port_libs_ensure node ;; + (truffleruby*) + requirements_check openssl llvm-4.0 + ;; + (ruby*head) __rvm_which git >/dev/null || requirements_check git requirements_osx_port_libs_default "$1" diff --git a/scripts/functions/requirements/pclinuxos b/scripts/functions/requirements/pclinuxos index 73ce630f68..cbb141f741 100644 --- a/scripts/functions/requirements/pclinuxos +++ b/scripts/functions/requirements/pclinuxos @@ -74,6 +74,10 @@ requirements_pclinuxos_define() requirements_check clang clang-devel llvm llvm-devel ;; + (truffleruby*) + requirements_check clang clang-devel llvm llvm-devel lib64openssl-devel zlib zlib-devel make + ;; + (*-head) requirements_check git requirements_pclinuxos_define "${1%-head}" From de39fcb44e6d2eb675f24d2426a7a39be9dbcf31 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sun, 17 Jun 2018 14:46:53 +0200 Subject: [PATCH 4/5] Add questions for review --- scripts/functions/selector | 1 + scripts/functions/utility_system | 2 ++ scripts/mount | 1 + 3 files changed, 4 insertions(+) diff --git a/scripts/functions/selector b/scripts/functions/selector index 1e143ea728..2a23c39795 100755 --- a/scripts/functions/selector +++ b/scripts/functions/selector @@ -383,6 +383,7 @@ __rvm_ruby_string_find() else __rvm_ruby_string_autodetect case "${rvm_ruby_string}" in + # Should truffleruby-* be added here? (ruby-+([1-9])|ruby-+([1-9]).+([0-9])|ruby-1.+([1-9]).+([0-9])|jruby-[19]*) __rvm_ruby_string_latest && __rvm_ruby_string_parse_ || diff --git a/scripts/functions/utility_system b/scripts/functions/utility_system index dedef146be..122475de03 100644 --- a/scripts/functions/utility_system +++ b/scripts/functions/utility_system @@ -30,6 +30,8 @@ __rvm_remote_extension() # params: ruby-string-to-transform __rvm_ruby_package_file() { + # What's this? Is it just for binary rubies? Do we need to change something for TruffleRuby? + # We already set rvm_ruby_package_file in __rvm_select_interpreter_truffleruby(). case "$1" in *.tar.*) rvm_ruby_package_file="/$1" diff --git a/scripts/mount b/scripts/mount index b4e55d0bb8..1d9ddea038 100755 --- a/scripts/mount +++ b/scripts/mount @@ -259,6 +259,7 @@ external_select_name() fi } +# Should we add an entry for truffleruby here? What's the purpose of this function? external_propose_name() { \typeset parts __tmp1 __tmp2 From 895d2f65eaad84c61b59748bb1a6e094551c06d3 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sun, 17 Jun 2018 16:11:05 +0200 Subject: [PATCH 5/5] Add entry in CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a97ef4572e..7594f1c36f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ * Installing Rubinius on Ubuntu 17.x [\#4213](https://github.com/rvm/rvm/pull/4213) * RailsExpress patches for 2.2.10, 2.3.7, 2.4.4 and 2.5.1 [\#4344](https://github.com/rvm/rvm/pull/4344) * Add documentation in `rvm help install` for multiple undocumented flags [\#4350](https://github.com/rvm/rvm/pull/4350) +* Add support for TruffleRuby [\#4406](https://github.com/rvm/rvm/pull/4406) #### Bug fixes: * ZSH Bad pattern for Gemfile ruby declaration [\#4154](https://github.com/rvm/rvm/issues/4154) [\#4156](https://github.com/rvm/rvm/issues/4156)