Friendly ping.  Also adding Jeremy to CC as he last worked on this port.

Xiyue Deng <[email protected]> writes:

> Xiyue Deng <[email protected]> writes:
>
>> Hi ports maintainers,
>>
>> Some time ago I reported that www/ruby-passenger failed to build on
>> mips64el/loongson due to a linker issue[1].  Last month the port has
>> been updated and I tried to give it another shot.  Unfortunately it
>> failed again but due to another compilation error.  I have attached the
>> build log and please take a look and suggest what to test next.
>>
>> Thanks!
>>
>> [1] https://marc.info/?l=openbsd-ports&m=152359916007397&w=2
>
> I tried to dig a little more despite my lack of understand of the rake
> system.  It looks like rake doesn't take into account about
> environmental settings from ports build system, so any setting regarding
> the compiler/linker doesn't take effect at all - I verified it by
> manually changing the compiler settings to add "-v" and saw that it was
> using the default compiler and default linker.  (By the way the base-gcc
> will miscompile src/cxx_supportlib/WebSocketCommandReverseServer.h and
> either ports-clang or ports-gcc is required.)
>
> So next I manually changed all "#{cxx}" settings to
> "/usr/local/bin/clang++ -fuse-ld=lld" (similarly with "#{cc}") hoping it
> will use clang and LLD (including vendored libraries like libev and
> libuv).  And then it hit another failure message saying can't create
> dynamic relocation and advise me to recompile using "-fPIC" or pass
> "-Wl,-z,notext" (sorry I lost the build log about this error, but it
> looks similar to [2] but with mips symbols).  Adding only "-fPIC"
> resulted in the same error, and adding "-Wl,-z,notext" resulted in
> another fatal error included in the attached build log.  I have also
> attached my modification on the ruby-passenger ports hope someone can
> give a suggestion on how to properly change compilers using rake.
>
> Any advice on what to try next is appreciated.
>
> [2] https://github.com/pytorch/pytorch/issues/21700
>
>
> diff -urN /home/xiyueden/VCS/ports/www/ruby-passenger/Makefile ./Makefile
> --- /home/xiyueden/VCS/ports/www/ruby-passenger/Makefile      Tue Dec 24 
> 05:32:30 2019
> +++ ./Makefile        Fri Dec 27 20:48:52 2019
> @@ -24,7 +24,9 @@
>  
>  WANTLIB =    ${MODRUBY_WANTLIB} crypto curl kvm nghttp2 pcre pthread ssl 
> ${COMPILER_LIBCXX} z
>  
> -COMPILER =           base-clang ports-gcc base-gcc
> +# COMPILER =         base-clang ports-gcc base-gcc
> +COMPILER =           base-clang ports-clang ports-gcc base-gcc
> +MODCLANG_ARCHS =     mips64 mips64el
>  
>  # Make devel/gmake a BUILD_DEPEND instead of USE_GMAKE, as the port also uses
>  # BSD make. Depend on gsed as embedded libuv picks it up if present.
> @@ -42,6 +44,10 @@
>  PASS_DIR =           ${GEM_BASE_LIB}/gems/${DISTNAME}
>  
>  SUBST_VARS =         MODRUBY_FLAVOR NGINX_VERSION PASS_VERSION
> +
> +.if ${MACHINE_ARCH} == "mips64" || ${MACHINE_ARCH} == "mips64el"
> +USE_LLD =    Yes
> +.endif
>  
>  pre-configure:
>       ${SUBST_CMD} -DRUBY=${RUBY} \
> diff -urN 
> /home/xiyueden/VCS/ports/www/ruby-passenger/patches/patch-build_common_library_rb
>  ./patches/patch-build_common_library_rb
> --- 
> /home/xiyueden/VCS/ports/www/ruby-passenger/patches/patch-build_common_library_rb
>  Wed Dec 31 16:00:00 1969
> +++ ./patches/patch-build_common_library_rb   Mon Dec 30 04:12:09 2019
> @@ -0,0 +1,24 @@
> +--- build/common_library.rb.orig     Tue Sep 17 17:11:30 2019
> ++++ build/common_library.rb  Sun Dec 29 05:55:24 2019
> +@@ -129,8 +129,8 @@
> +     "src/cxx_supportlib/vendor-modified/libev/Makefile.am"
> +   ]
> +   file LIBEV_OUTPUT_DIR + "Makefile" => dependencies do
> +-    cc_command = cc
> +-    cxx_command = cxx
> ++    cc_command = "/usr/local/bin/clang -fuse-ld=lld"
> ++    cxx_command = "/usr/local/bin/clang++ -fuse-ld=lld"
> +     if OPTIMIZE && LTO
> +       cc_command = "#{cc_command} -flto"
> +       cxx_command = "#{cxx_command} -flto"
> +@@ -199,8 +199,8 @@
> +     "src/cxx_supportlib/vendor-copy/libuv/Makefile.am"
> +   ]
> +   file LIBUV_OUTPUT_DIR + "Makefile" => dependencies do
> +-    cc_command = cc
> +-    cxx_command = cxx
> ++    cc_command = "/usr/local/bin/clang -fuse-ld=lld"
> ++    cxx_command = "/usr/local/bin/clang++ -fuse-ld=lld"
> +     if OPTIMIZE && LTO
> +       cc_command = "#{cc_command} -flto"
> +       cxx_command = "#{cxx_command} -flto"
> diff -urN 
> /home/xiyueden/VCS/ports/www/ruby-passenger/patches/patch-build_support_cplusplus_rb
>  ./patches/patch-build_support_cplusplus_rb
> --- 
> /home/xiyueden/VCS/ports/www/ruby-passenger/patches/patch-build_support_cplusplus_rb
>       Wed Dec 31 16:00:00 1969
> +++ ./patches/patch-build_support_cplusplus_rb        Mon Dec 30 04:11:16 2019
> @@ -0,0 +1,49 @@
> +--- build/support/cplusplus.rb.orig  Tue Sep 17 17:11:30 2019
> ++++ build/support/cplusplus.rb       Sun Dec 29 16:52:41 2019
> +@@ -93,29 +93,29 @@
> + end
> + 
> + def compile_c(object, source, options_or_flags = nil)
> +-  flags = build_compiler_flags_from_options_or_flags(options_or_flags)
> ++  flags = build_compiler_flags_from_options_or_flags(options_or_flags) + " 
> -fPIC"
> +   ensure_target_directory_exists(object)
> +-  run_compiler("#{cc} -o #{object} #{EXTRA_PRE_CFLAGS} #{flags} 
> #{extra_cflags} -c #{source}")
> ++  run_compiler("/usr/local/bin/clang -o #{object} #{EXTRA_PRE_CFLAGS} 
> #{flags} #{extra_cflags} -c #{source}")
> + end
> + 
> + def compile_cxx(object, source, options_or_flags = nil)
> +-  flags = build_compiler_flags_from_options_or_flags(options_or_flags)
> ++  flags = build_compiler_flags_from_options_or_flags(options_or_flags) + " 
> -fPIC"
> +   ensure_target_directory_exists(object)
> +-  run_compiler("#{cxx} -o #{object} #{EXTRA_PRE_CXXFLAGS} #{flags} 
> #{extra_cxxflags} -c #{source}")
> ++  run_compiler("/usr/local/bin/clang++ -o #{object} #{EXTRA_PRE_CXXFLAGS} 
> #{flags} #{extra_cxxflags} -c #{source}")
> + end
> + 
> + def create_c_executable(target, objects, options_or_flags = nil)
> +   objects = [objects].flatten.join(" ")
> +-  flags = build_compiler_flags_from_options_or_flags(options_or_flags)
> ++  flags = build_compiler_flags_from_options_or_flags(options_or_flags) + " 
> -fPIC -Wl,-z,notext"
> +   ensure_target_directory_exists(target)
> +-  run_compiler("#{cc} -o #{target} #{objects} #{EXTRA_PRE_C_LDFLAGS} 
> #{flags} #{extra_c_ldflags}")
> ++  run_compiler("/usr/local/bin/clang -fuse-ld=lld -o #{target} #{objects} 
> #{EXTRA_PRE_C_LDFLAGS} #{flags} #{extra_c_ldflags}")
> + end
> + 
> + def create_cxx_executable(target, objects, options_or_flags = nil)
> +   objects = [objects].flatten.join(" ")
> +-  flags = build_compiler_flags_from_options_or_flags(options_or_flags)
> ++  flags = build_compiler_flags_from_options_or_flags(options_or_flags) + " 
> -fPIC -Wl,-z,notext"
> +   ensure_target_directory_exists(target)
> +-  run_compiler("#{cxx} -o #{target} #{objects} #{EXTRA_PRE_CXX_LDFLAGS} 
> #{flags} #{extra_cxx_ldflags}")
> ++  run_compiler("/usr/local/bin/clang++ -fuse-ld=lld -o #{target} #{objects} 
> #{EXTRA_PRE_CXX_LDFLAGS} #{flags} #{extra_cxx_ldflags}")
> + end
> + 
> + def create_static_library(target, objects)
> +@@ -144,7 +144,7 @@
> +   objects = [objects].flatten.join(" ")
> +   flags = build_compiler_flags_from_options_or_flags(options_or_flags)
> +   ensure_target_directory_exists(target)
> +-  run_compiler("#{cxx} #{shlib_flag} #{objects} #{fPIC} -o #{target} 
> #{flags}")
> ++  run_compiler("/usr/local/bin/clang++ -v -fuse-ld=lld #{shlib_flag} 
> #{objects} #{fPIC} -Wl,-z,notext -o #{target} #{flags}")
> + end
> + 
> + def define_c_object_compilation_task(object, source, options_or_flags = nil)

Attachment: signature.asc
Description: PGP signature

Reply via email to