compilers: put elbrus in mixins

pull/5661/head
Dylan Baker 6 years ago
parent 1b276598ce
commit 5d685e7a5c
  1. 2
      mesonbuild/compilers/c.py
  2. 40
      mesonbuild/compilers/compilers.py
  3. 2
      mesonbuild/compilers/cpp.py
  4. 2
      mesonbuild/compilers/fortran.py
  5. 59
      mesonbuild/compilers/mixins/elbrus.py

@ -25,12 +25,12 @@ from .mixins.visualstudio import VisualStudioLikeCompiler
from .mixins.gnu import GnuCompiler from .mixins.gnu import GnuCompiler
from .mixins.intel import IntelGnuLikeCompiler, IntelVisualStudioLikeCompiler from .mixins.intel import IntelGnuLikeCompiler, IntelVisualStudioLikeCompiler
from .mixins.clang import ClangCompiler from .mixins.clang import ClangCompiler
from .mixins.elbrus import ElbrusCompiler
from .compilers import ( from .compilers import (
gnu_winlibs, gnu_winlibs,
msvc_winlibs, msvc_winlibs,
Compiler, Compiler,
CompilerType, CompilerType,
ElbrusCompiler,
PGICompiler, PGICompiler,
) )

@ -27,7 +27,6 @@ from ..mesonlib import (
from ..envconfig import ( from ..envconfig import (
Properties, Properties,
) )
from .mixins.gnu import GnuCompiler
"""This file contains the data files of all compilers Meson knows """This file contains the data files of all compilers Meson knows
about. To support a new compiler, add its information below. about. To support a new compiler, add its information below.
@ -1342,42 +1341,3 @@ class PGICompiler:
def get_always_args(self): def get_always_args(self):
return [] return []
class ElbrusCompiler(GnuCompiler):
# Elbrus compiler is nearly like GCC, but does not support
# PCH, LTO, sanitizers and color output as of version 1.21.x.
def __init__(self, compiler_type, defines):
GnuCompiler.__init__(self, compiler_type, defines)
self.id = 'lcc'
self.base_options = ['b_pgo', 'b_coverage',
'b_ndebug', 'b_staticpic',
'b_lundef', 'b_asneeded']
# FIXME: use _build_wrapper to call this so that linker flags from the env
# get applied
def get_library_dirs(self, env, elf_class = None):
os_env = os.environ.copy()
os_env['LC_ALL'] = 'C'
stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=os_env)[1]
paths = ()
for line in stdo.split('\n'):
if line.startswith('libraries:'):
# lcc does not include '=' in --print-search-dirs output.
libstr = line.split(' ', 1)[1]
paths = (os.path.realpath(p) for p in libstr.split(':'))
break
return paths
def get_program_dirs(self, env):
os_env = os.environ.copy()
os_env['LC_ALL'] = 'C'
stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=os_env)[1]
paths = ()
for line in stdo.split('\n'):
if line.startswith('programs:'):
# lcc does not include '=' in --print-search-dirs output.
libstr = line.split(' ', 1)[1]
paths = (os.path.realpath(p) for p in libstr.split(':'))
break
return paths

@ -24,7 +24,6 @@ from ..mesonlib import MesonException, MachineChoice, version_compare
from .compilers import ( from .compilers import (
gnu_winlibs, gnu_winlibs,
msvc_winlibs, msvc_winlibs,
ElbrusCompiler,
PGICompiler, PGICompiler,
Compiler, Compiler,
) )
@ -36,6 +35,7 @@ from .mixins.visualstudio import VisualStudioLikeCompiler
from .mixins.gnu import GnuCompiler from .mixins.gnu import GnuCompiler
from .mixins.intel import IntelGnuLikeCompiler, IntelVisualStudioLikeCompiler from .mixins.intel import IntelGnuLikeCompiler, IntelVisualStudioLikeCompiler
from .mixins.clang import ClangCompiler from .mixins.clang import ClangCompiler
from .mixins.elbrus import ElbrusCompiler
def non_msvc_eh_options(eh, args): def non_msvc_eh_options(eh, args):

@ -19,7 +19,6 @@ from .compilers import (
CompilerType, CompilerType,
clike_debug_args, clike_debug_args,
Compiler, Compiler,
ElbrusCompiler,
PGICompiler, PGICompiler,
) )
from .mixins.clike import CLikeCompiler from .mixins.clike import CLikeCompiler
@ -29,6 +28,7 @@ from .mixins.gnu import (
) )
from .mixins.intel import IntelGnuLikeCompiler, IntelVisualStudioLikeCompiler from .mixins.intel import IntelGnuLikeCompiler, IntelVisualStudioLikeCompiler
from .mixins.clang import ClangCompiler from .mixins.clang import ClangCompiler
from .mixins.elbrus import ElbrusCompiler
from .. import mlog from .. import mlog
from mesonbuild.mesonlib import ( from mesonbuild.mesonlib import (

@ -0,0 +1,59 @@
# Copyright 2019 The meson development team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Abstractions for the Elbrus family of compilers."""
import os
from .gnu import GnuCompiler
from ...mesonlib import Popen_safe
class ElbrusCompiler(GnuCompiler):
# Elbrus compiler is nearly like GCC, but does not support
# PCH, LTO, sanitizers and color output as of version 1.21.x.
def __init__(self, compiler_type, defines):
GnuCompiler.__init__(self, compiler_type, defines)
self.id = 'lcc'
self.base_options = ['b_pgo', 'b_coverage',
'b_ndebug', 'b_staticpic',
'b_lundef', 'b_asneeded']
# FIXME: use _build_wrapper to call this so that linker flags from the env
# get applied
def get_library_dirs(self, env, elf_class = None):
os_env = os.environ.copy()
os_env['LC_ALL'] = 'C'
stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=os_env)[1]
paths = ()
for line in stdo.split('\n'):
if line.startswith('libraries:'):
# lcc does not include '=' in --print-search-dirs output.
libstr = line.split(' ', 1)[1]
paths = (os.path.realpath(p) for p in libstr.split(':'))
break
return paths
def get_program_dirs(self, env):
os_env = os.environ.copy()
os_env['LC_ALL'] = 'C'
stdo = Popen_safe(self.exelist + ['--print-search-dirs'], env=os_env)[1]
paths = ()
for line in stdo.split('\n'):
if line.startswith('programs:'):
# lcc does not include '=' in --print-search-dirs output.
libstr = line.split(' ', 1)[1]
paths = (os.path.realpath(p) for p in libstr.split(':'))
break
return paths
Loading…
Cancel
Save