(self, environment: 'Environment')
How to set linker args for LLVM versions >= 3.9
How to set linker args for LLVM versions >= 3.9
How to set linker args for LLVM versions > = 3 . 9
def _set_new_link_args(self, environment: 'Environment') -> None:
        """How to set linker args for LLVM versions >= 3.9"""
        try:
            mode = self.get_config_value(['--shared-mode'], 'link_args')[0]
        except IndexError:
            mlog.debug('llvm-config --shared-mode returned an error')
            self.is_found = False
            return

        if not self.static and mode == 'static':
            # If llvm is configured with LLVM_BUILD_LLVM_DYLIB but not with
            # LLVM_LINK_LLVM_DYLIB and not LLVM_BUILD_SHARED_LIBS (which
            # upstream doesn't recommend using), then llvm-config will lie to
            # you about how to do shared-linking. It wants to link to a a bunch
            # of individual shared libs (which don't exist because llvm wasn't
            # built with LLVM_BUILD_SHARED_LIBS.
            #
            # Therefore, we'll try to get the libfiles, if the return code is 0
            # or we get an empty list, then we'll try to build a working
            # configuration by hand.
            try:
                self.__check_libfiles(True)
            except DependencyException:
                lib_ext = get_shared_library_suffix(environment, self.for_machine)
                libdir = self.get_config_value(['--libdir'], 'link_args')[0]
                # Sort for reproducibility
                matches = sorted(glob.iglob(os.path.join(libdir, f'libLLVM*{lib_ext}')))
                if not matches:
                    if self.required:
                        raise
                    self.is_found = False
                    return

                self.link_args = self.get_config_value(['--ldflags'], 'link_args')
                libname = os.path.basename(matches[0]).rstrip(lib_ext).lstrip('lib')
                self.link_args.append(f'-l{libname}')
                return
        elif self.static and mode == 'shared':
            # If, however LLVM_BUILD_SHARED_LIBS is true # (*cough* gentoo *cough*)
            # then this is correct. Building with LLVM_BUILD_SHARED_LIBS has a side
            # effect, it stops the generation of static archives. Therefore we need
            # to check for that and error out on static if this is the case
            try:
                self.__check_libfiles(False)
            except DependencyException:
                if self.required:
                    raise
                self.is_found = False
                return

        link_args = ['--link-static', '--system-libs'] if self.static else ['--link-shared']
        self.link_args = self.get_config_value(
            ['--libs', '--ldflags'] + link_args + list(self.required_modules),
            'link_args')
def _set_new_link_args ( self , environment : 'Environment' ) -> None : try : mode = self . get_config_value ( [ '--shared-mode' ] , 'link_args' ) [ 0 ] except IndexError : mlog . debug ( 'llvm-config --shared-mode returned an error' ) self . is_found = False return if not self . static and mode == 'static' : # If llvm is configured with LLVM_BUILD_LLVM_DYLIB but not with # LLVM_LINK_LLVM_DYLIB and not LLVM_BUILD_SHARED_LIBS (which # upstream doesn't recommend using), then llvm-config will lie to # you about how to do shared-linking. It wants to link to a a bunch # of individual shared libs (which don't exist because llvm wasn't # built with LLVM_BUILD_SHARED_LIBS. # # Therefore, we'll try to get the libfiles, if the return code is 0 # or we get an empty list, then we'll try to build a working # configuration by hand. try : self . __check_libfiles ( True ) except DependencyException : lib_ext = get_shared_library_suffix ( environment , self . for_machine ) libdir = self . get_config_value ( [ '--libdir' ] , 'link_args' ) [ 0 ] # Sort for reproducibility matches = sorted ( glob . iglob ( os . path . join ( libdir , f'libLLVM*{lib_ext}' ) ) ) if not matches : if self . required : raise self . is_found = False return self . link_args = self . get_config_value ( [ '--ldflags' ] , 'link_args' ) libname = os . path . basename ( matches [ 0 ] ) . rstrip ( lib_ext ) . lstrip ( 'lib' ) self . link_args . append ( f'-l{libname}' ) return elif self . static and mode == 'shared' : # If, however LLVM_BUILD_SHARED_LIBS is true # (*cough* gentoo *cough*) # then this is correct. Building with LLVM_BUILD_SHARED_LIBS has a side # effect, it stops the generation of static archives. Therefore we need # to check for that and error out on static if this is the case try : self . __check_libfiles ( False ) except DependencyException : if self . required : raise self . is_found = False return link_args = [ '--link-static' , '--system-libs' ] if self . static else [ '--link-shared' ] self . link_args = self . get_config_value ( [ '--libs' , '--ldflags' ] + link_args + list ( self . required_modules ) , 'link_args' )