示例#1
0
    def _toolchain_content(self):
        sections = []
        sections.append("def configure(conf):")
        sections.append("    if not conf.env.CXXFLAGS:")
        sections.append("       conf.env.CXXFLAGS = []")
        sections.append("    if not conf.env.LINKFLAGS:")
        sections.append("       conf.env.LINKFLAGS = []")
        if "Visual Studio" in self._compiler:
            # first we set the options for the compiler, then load
            if self._compiler_version:
                sections.append("    conf.env.MSVC_VERSION = '{}.0'".format(
                    self._compiler_version))
            try:
                sections.append("    conf.env.MSVC_TARGETS = '{}'".format(
                    self._arch_conan2waf[self._arch]))
            except KeyError:
                raise ConanException("Architecture  '%s' not supported" %
                                     self._arch)

            sections.append("    conf.env.CXXFLAGS.append('/{}')".format(
                self._compiler_runtime))

            sections.append("    conf.env.CXXFLAGS.extend(['/EHsc'])")
            if self._build_type == "Debug":
                sections.append("    conf.env.CXXFLAGS.extend(['/Zi', '/FS'])")
                sections.append("    conf.env.LINKFLAGS.extend(['/DEBUG'])")
            elif self._build_type == "Release":
                sections.append(
                    "    conf.env.CXXFLAGS.extend(['/O2', '/Ob1', '/DNDEBUG'])"
                )
        else:
            sections.append("    conf.env.CC_VERSION = {}".format(
                self._gcc_ver_conan2waf(self._compiler_version)))

            cxxf = self._libcxx_flags(compiler=self._compiler,
                                      libcxx=self._compiler_libcxx)
            cppstd = cppstd_from_settings(self._conanfile.settings)
            cxxf.append(
                cppstd_flag(
                    self._conanfile.settings.get_safe("compiler"),
                    self._conanfile.settings.get_safe("compiler.version"),
                    cppstd))
            for flag in cxxf:
                sections.append(
                    "    conf.env.CXXFLAGS.append('{}')".format(flag))

            if self._compiler_cppstd:
                cppstdf = cppstd_flag(self._compiler, self._compiler_version,
                                      self._compiler_cppstd)
                sections.append(
                    "    conf.env.CXXFLAGS.append('{}')".format(cppstdf))

            if self._build_type == "Debug":
                sections.append("    conf.env.CXXFLAGS.extend(['-g'])")
            elif self._build_type == "Release":
                sections.append("    conf.env.CXXFLAGS.extend(['-O3'])")

        return "\n".join(sections)
示例#2
0
    def test_visual_cppstd_flags(self):
        self.assertEquals(cppstd_flag("Visual Studio", "12", "11"), None)
        self.assertEquals(cppstd_flag("Visual Studio", "12", "14"), None)
        self.assertEquals(cppstd_flag("Visual Studio", "12", "17"), None)

        self.assertEquals(cppstd_flag("Visual Studio", "14", "11"), None)
        self.assertEquals(cppstd_flag("Visual Studio", "14", "14"), '/std:c++14')
        self.assertEquals(cppstd_flag("Visual Studio", "14", "17"), '/std:c++latest')

        self.assertEquals(cppstd_flag("Visual Studio", "17", "11"), None)
        self.assertEquals(cppstd_flag("Visual Studio", "17", "14"), '/std:c++14')
        self.assertEquals(cppstd_flag("Visual Studio", "17", "17"), '/std:c++17')
        self.assertEquals(cppstd_flag("Visual Studio", "17", "20"), '/std:c++latest')
示例#3
0
    def test_visual_cppstd_flags(self):
        self.assertEquals(cppstd_flag("Visual Studio", "12", "11"), None)
        self.assertEquals(cppstd_flag("Visual Studio", "12", "14"), None)
        self.assertEquals(cppstd_flag("Visual Studio", "12", "17"), None)

        self.assertEquals(cppstd_flag("Visual Studio", "14", "11"), None)
        self.assertEquals(cppstd_flag("Visual Studio", "14", "14"), '/std:c++14')
        self.assertEquals(cppstd_flag("Visual Studio", "14", "17"), '/std:c++latest')

        self.assertEquals(cppstd_flag("Visual Studio", "17", "11"), None)
        self.assertEquals(cppstd_flag("Visual Studio", "17", "14"), '/std:c++14')
        self.assertEquals(cppstd_flag("Visual Studio", "17", "17"), '/std:c++17')
示例#4
0
    def __init__(self, conanfile):
        self._conanfile = conanfile
        self._build_type = conanfile.settings.get_safe("build_type")
        self._compiler = conanfile.settings.get_safe("compiler")
        self._compiler_version = conanfile.settings.get_safe(
            "compiler.version")
        self._compiler_runtime = conanfile.settings.get_safe(
            "compiler.runtime")
        self._shared = self._conanfile.options.get_safe("shared")
        self._fpic = self._deduce_fpic()

        self._libcxx_flag = libcxx_flag(conanfile.settings)
        self._cppstd_flag = cppstd_flag(conanfile.settings)
        self._skip_rpath = True if self._conanfile.settings.get_safe(
            "os") == "Macos" else False
        self._arch_flag = architecture_flag(self._conanfile.settings)
        self._build_type_flags = build_type_flags(self._conanfile.settings)

        self._os_host = conanfile.settings.get_safe("os")
        self._arch_host = conanfile.settings.get_safe("arch")
        self._os_target, self._arch_target = get_target_os_arch(conanfile)
        self._arch_build, self._os_build = self._get_build_os_arch()

        self._trip_build, self._trip_host, self._trip_target = self._get_host_build_target_flags(
        )

        self._build_type_define = build_type_define(
            build_type=self._build_type)
        self._glibcxx_define = libcxx_define(self._conanfile.settings)

        self.variables = {}
        self.preprocessor_definitions = {}
示例#5
0
def vs_std_cpp(settings):
    cppstd = cppstd_from_settings(settings)
    if settings.get_safe("compiler") == "Visual Studio" and cppstd:
        flag = cppstd_flag(settings.get_safe("compiler"),
                           settings.get_safe("compiler.version"), cppstd)
        return flag
    return None
示例#6
0
def vs_std_cpp(settings):
    if settings.get_safe("compiler") == "Visual Studio" and \
       settings.get_safe("cppstd"):
        flag = cppstd_flag(settings.get_safe("compiler"),
                           settings.get_safe("compiler.version"),
                           settings.get_safe("cppstd"))
        return flag
    return None
示例#7
0
 def check_flag_available(values_range, value, setting_id):
     available = [v for v in values_range if cppstd_flag(compiler, compiler_version, v)]
     if str(value) not in available:
         raise ConanException("The specified '%s=%s' is not available "
                              "for '%s %s'. Possible values are %s'" % (setting_id,
                                                                        value,
                                                                        compiler,
                                                                        compiler_version,
                                                                        available))
示例#8
0
 def _cppstd_flag(self):
     if conan_version >= Version("1.24"):
         return tools.cppstd_flag(self._settings)
     else:
         from conans.client.build.cppstd_flags import cppstd_flag, cppstd_from_settings 
         compiler = self._settings.get_safe("compiler")
         compiler_version = self._settings.get_safe("compiler.version")
         cppstd = cppstd_from_settings(self._settings)
         return cppstd_flag(compiler, compiler_version, cppstd)
示例#9
0
    def content(self):
        """With compiler_args you can invoke your compiler:
        $ gcc main.c @conanbuildinfo.args -o main
        $ clang main.c @conanbuildinfo.args -o main
        $ cl /EHsc main.c @conanbuildinfo.args
        """
        flags = []
        flags.extend(format_defines(self._deps_build_info.defines))
        flags.extend(format_include_paths(self._deps_build_info.include_paths,
                                          compiler=self.compiler))

        flags.extend(self._deps_build_info.cxxflags)
        flags.extend(self._deps_build_info.cflags)

        arch_flag = architecture_flag(arch=self.conanfile.settings.get_safe("arch"),
                                      os=self.conanfile.settings.get_safe("os"),
                                      compiler=self.compiler)
        if arch_flag:
            flags.append(arch_flag)

        build_type = self.conanfile.settings.get_safe("build_type")
        btfs = build_type_flags(compiler=self.compiler, build_type=build_type,
                                vs_toolset=self.conanfile.settings.get_safe("compiler.toolset"))
        if btfs:
            flags.extend(btfs)
        btd = build_type_define(build_type=build_type)
        if btd:
            flags.extend(format_defines([btd]))

        if self.compiler == "Visual Studio":
            runtime = visual_runtime(self.conanfile.settings.get_safe("compiler.runtime"))
            if runtime:
                flags.append(runtime)
            # Necessary in the "cl" invocation before specify the rest of linker flags
            flags.append(visual_linker_option_separator)

        os_build, _ = get_build_os_arch(self.conanfile)
        if not hasattr(self.conanfile, 'settings_build'):
            os_build = os_build or self.conanfile.settings.get_safe("os")

        flags.extend(rpath_flags(os_build, self.compiler, self._deps_build_info.lib_paths))
        flags.extend(format_library_paths(self._deps_build_info.lib_paths, compiler=self.compiler))
        flags.extend(format_libraries(self._deps_build_info.libs, compiler=self.compiler))
        flags.extend(format_libraries(self._deps_build_info.system_libs, compiler=self.compiler))
        flags.extend(self._deps_build_info.sharedlinkflags)
        flags.extend(self._deps_build_info.exelinkflags)
        flags.extend(self._libcxx_flags())
        flags.extend(format_frameworks(self._deps_build_info.frameworks, compiler=self.compiler))
        flags.extend(format_framework_paths(self._deps_build_info.framework_paths,
                                            compiler=self.compiler))
        flags.append(cppstd_flag(self.conanfile.settings))
        sysrf = sysroot_flag(self._deps_build_info.sysroot, compiler=self.compiler)
        if sysrf:
            flags.append(sysrf)

        return " ".join(flag for flag in flags if flag)
示例#10
0
    def __init__(self, conanfile, win_bash=False, include_rpath_flags=False):
        """
        FIXME: include_rpath_flags CONAN 2.0 to default True? Could break many packages in center
        """
        self._conanfile = conanfile
        self._win_bash = win_bash
        self._include_rpath_flags = include_rpath_flags
        self.subsystem = OSInfo().detect_windows_subsystem(
        ) if self._win_bash else None
        self._deps_cpp_info = conanfile.deps_cpp_info
        self._os = conanfile.settings.get_safe("os")
        self._os_version = conanfile.settings.get_safe("os.version")
        self._os_sdk = conanfile.settings.get_safe("os.sdk")
        self._os_subsystem = conanfile.settings.get_safe("os.subsystem")
        self._arch = conanfile.settings.get_safe("arch")
        self._os_target, self._arch_target = get_target_os_arch(conanfile)

        self._build_type = conanfile.settings.get_safe("build_type")

        self._compiler = conanfile.settings.get_safe("compiler")
        conan_v2_error("compiler setting should be defined.",
                       not self._compiler)

        self._compiler_version = conanfile.settings.get_safe(
            "compiler.version")
        self._compiler_runtime = conanfile.settings.get_safe(
            "compiler.runtime")
        self._libcxx = conanfile.settings.get_safe("compiler.libcxx")
        self._cppstd = cppstd_from_settings(conanfile.settings)

        # Set the generic objects before mapping to env vars to let the user
        # alter some value
        self.libs = list(self._deps_cpp_info.libs)
        self.libs.extend(list(self._deps_cpp_info.system_libs))
        self.include_paths = list(self._deps_cpp_info.include_paths)
        self.library_paths = list(self._deps_cpp_info.lib_paths)

        self.defines = self._configure_defines()
        # Will go to CFLAGS and CXXFLAGS ["-m64" "-m32", "-g", "-s"]
        self.flags = self._configure_flags()
        # Only c++ flags [-stdlib, -library], will go to CXXFLAGS
        self.cxx_flags = self._configure_cxx_flags()
        # cpp standard
        self.cppstd_flag = cppstd_flag(conanfile.settings)
        # Not -L flags, ["-m64" "-m32"]
        self.link_flags = self._configure_link_flags()  # TEST!
        # Precalculate -fPIC
        self.fpic = self._configure_fpic()

        # Precalculate build, host, target triplets
        self.build, self.host, self.target = self._get_host_build_target_flags(
        )
示例#11
0
    def content(self):
        """With compiler_args you can invoke your compiler:
        $ gcc main.c @conanbuildinfo.args -o main
        $ clang main.c @conanbuildinfo.args -o main
        $ cl /EHsc main.c @conanbuildinfo.args
        """
        flags = []
        flags.extend(format_defines(self._deps_build_info.defines))
        flags.extend(format_include_paths(self._deps_build_info.include_paths, compiler=self.compiler))

        flags.extend(self._deps_build_info.cppflags)
        flags.extend(self._deps_build_info.cflags)

        arch_flag = architecture_flag(arch=self.conanfile.settings.get_safe("arch"), compiler=self.compiler)
        if arch_flag:
            flags.append(arch_flag)

        build_type = self.conanfile.settings.get_safe("build_type")
        btfs = build_type_flags(compiler=self.compiler, build_type=build_type,
                                vs_toolset=self.conanfile.settings.get_safe("compiler.toolset"))
        if btfs:
            flags.extend(btfs)
        btd = build_type_define(build_type=build_type)
        if btd:
            flags.extend(format_defines([btd]))

        if self.compiler == "Visual Studio":
            runtime = visual_runtime(self.conanfile.settings.get_safe("compiler.runtime"))
            if runtime:
                flags.append(runtime)
            # Necessary in the "cl" invocation before specify the rest of linker flags
            flags.append(visual_linker_option_separator)

        the_os = (self.conanfile.settings.get_safe("os_build") or
                  self.conanfile.settings.get_safe("os"))
        flags.extend(rpath_flags(the_os, self.compiler, self._deps_build_info.lib_paths))
        flags.extend(format_library_paths(self._deps_build_info.lib_paths, compiler=self.compiler))
        flags.extend(format_libraries(self._deps_build_info.libs, compiler=self.compiler))
        flags.extend(self._deps_build_info.sharedlinkflags)
        flags.extend(self._deps_build_info.exelinkflags)
        flags.extend(self._libcxx_flags())
        flags.append(cppstd_flag(self.conanfile.settings.get_safe("compiler"),
                                 self.conanfile.settings.get_safe("compiler.version"),
                                 self.conanfile.settings.get_safe("cppstd")))
        sysrf = sysroot_flag(self._deps_build_info.sysroot, compiler=self.compiler)
        if sysrf:
            flags.append(sysrf)

        return " ".join(flag for flag in flags if flag)
示例#12
0
    def _get_cpp_standard_vars(self):
        if not self._cppstd:
            return {}

        ret = {}
        if self._cppstd.startswith("gnu"):
            ret["CONAN_CMAKE_CXX_STANDARD"] = self._cppstd[3:]
            ret["CONAN_CMAKE_CXX_EXTENSIONS"] = "ON"
        else:
            ret["CONAN_CMAKE_CXX_STANDARD"] = self._cppstd
            ret["CONAN_CMAKE_CXX_EXTENSIONS"] = "OFF"

        ret["CONAN_STD_CXX_FLAG"] = cppstd_flag(self._compiler, self._compiler_version,
                                                self._cppstd)
        return ret
示例#13
0
def check_cppstd(settings):
    compiler = settings.get_safe("compiler")
    compiler_version = settings.get_safe("compiler.version")
    cppstd = settings.get_safe("cppstd")
    if not cppstd or compiler not in ("gcc", "clang", "apple-clang",
                                      "Visual Studio"):
        return
    cpp_values = settings.cppstd.values_range
    available = [
        v for v in cpp_values if cppstd_flag(compiler, compiler_version, v)
    ]
    if str(cppstd) not in available:
        raise ConanException("The specified 'cppstd=%s' is not available "
                             "for '%s %s'. Possible values are %s'" %
                             (cppstd, compiler, compiler_version, available))
示例#14
0
文件: cmake.py 项目: 19317362/conan
    def _get_cpp_standard_vars(self):
        if not self._cppstd:
            return {}

        ret = {}
        if self._cppstd.startswith("gnu"):
            ret["CONAN_CMAKE_CXX_STANDARD"] = self._cppstd[3:]
            ret["CONAN_CMAKE_CXX_EXTENSIONS"] = "ON"
        else:
            ret["CONAN_CMAKE_CXX_STANDARD"] = self._cppstd
            ret["CONAN_CMAKE_CXX_EXTENSIONS"] = "OFF"

        ret["CONAN_STD_CXX_FLAG"] = cppstd_flag(self._compiler, self._compiler_version,
                                                self._cppstd)
        return ret
示例#15
0
    def _get_cpp_standard_vars(self):
        cppstd = cppstd_from_settings(self._conanfile.settings)

        if not cppstd:
            return {}

        definitions = {}
        if cppstd.startswith("gnu"):
            definitions["CONAN_CMAKE_CXX_STANDARD"] = cppstd[3:]
            definitions["CONAN_CMAKE_CXX_EXTENSIONS"] = "ON"
        else:
            definitions["CONAN_CMAKE_CXX_STANDARD"] = cppstd
            definitions["CONAN_CMAKE_CXX_EXTENSIONS"] = "OFF"

        definitions["CONAN_STD_CXX_FLAG"] = cppstd_flag(self._conanfile.settings)
        return definitions
示例#16
0
    def _get_cpp_standard_vars(self):
        cppstd = cppstd_from_settings(self._conanfile.settings)
        compiler = self._ss("compiler")
        compiler_version = self._ss("compiler.version")

        if not cppstd:
            return {}

        ret = {}
        if cppstd.startswith("gnu"):
            ret["CONAN_CMAKE_CXX_STANDARD"] = cppstd[3:]
            ret["CONAN_CMAKE_CXX_EXTENSIONS"] = "ON"
        else:
            ret["CONAN_CMAKE_CXX_STANDARD"] = cppstd
            ret["CONAN_CMAKE_CXX_EXTENSIONS"] = "OFF"

        ret["CONAN_STD_CXX_FLAG"] = cppstd_flag(compiler, compiler_version, cppstd)
        return ret
示例#17
0
    def __init__(self, conanfile, win_bash=False, include_rpath_flags=False):
        """
        FIXME: include_rpath_flags CONAN 2.0 to default True? Could break many packages in center
        """
        self._conanfile = conanfile
        self._win_bash = win_bash
        self._include_rpath_flags = include_rpath_flags
        self.subsystem = OSInfo().detect_windows_subsystem(
        ) if self._win_bash else None
        self._deps_cpp_info = conanfile.deps_cpp_info
        self._arch = conanfile.settings.get_safe("arch")
        self._build_type = conanfile.settings.get_safe("build_type")
        self._compiler = conanfile.settings.get_safe("compiler")
        self._compiler_version = conanfile.settings.get_safe(
            "compiler.version")
        self._libcxx = conanfile.settings.get_safe("compiler.libcxx")
        self._cppstd = conanfile.settings.get_safe("cppstd")

        # Set the generic objects before mapping to env vars to let the user
        # alter some value
        self.libs = copy.copy(self._deps_cpp_info.libs)
        self.include_paths = copy.copy(self._deps_cpp_info.include_paths)
        self.library_paths = copy.copy(self._deps_cpp_info.lib_paths)

        self.defines = self._configure_defines()
        # Will go to CFLAGS and CXXFLAGS ["-m64" "-m32", "-g", "-s"]
        self.flags = self._configure_flags()
        # Only c++ flags [-stdlib, -library], will go to CXXFLAGS
        self.cxx_flags = self._configure_cxx_flags()
        # cpp standard
        self.cppstd_flag = cppstd_flag(self._compiler, self._compiler_version,
                                       self._cppstd)
        # Not -L flags, ["-m64" "-m32"]
        self.link_flags = self._configure_link_flags()  # TEST!
        # Not declared by default
        self.fpic = None

        # Precalculate build, host, target triplets
        self.build, self.host, self.target = self._get_host_build_target_flags(
        )
示例#18
0
文件: make.py 项目: wjt2015/conan
    def __init__(self, conanfile):
        self._conanfile = conanfile

        self._set_libcxx = True
        self._set_cppstd = True
        self._set_arch = True
        self._set_shared = True if conanfile.options.get_safe(
            "shared") else False
        self._set_fpic = True if conanfile.options.get_safe("fPIC") else False

        self._compiler = conanfile.settings.get_safe("compiler")
        self._compiler_version = conanfile.settings.get_safe(
            "compiler.version")
        self._compiler_runtime = conanfile.settings.get_safe(
            "compiler.runtime")
        self._libcxx = conanfile.settings.get_safe("compiler.libcxx")

        # cpp standard
        self._cppstd = cppstd_from_settings(conanfile.settings)
        self._cppstd_flag = cppstd_flag(conanfile.settings)

        # arch_build in compiler flag format
        self._arch_flag = architecture_flag(self._conanfile.settings)

        # build_type information in compiler flag format
        self._build_type_flags = " ".join(
            build_type_flags(self._conanfile.settings))

        self._os_host = conanfile.settings.get_safe("os")
        self._arch_host = conanfile.settings.get_safe("arch")
        self._os_target, self._arch_target = get_target_os_arch(conanfile)
        self._arch_build, self._os_build = self._get_build_os_arch()
        self._build_type = conanfile.settings.get_safe("build_type")

        # Precalculate build, host, target triplets
        self._trip_build, self._trip_host, self._trip_target = self._get_host_build_target_flags(
        )

        self.definitions = {}
示例#19
0
    def __init__(self, conanfile, win_bash=False, include_rpath_flags=False):
        """
        FIXME: include_rpath_flags CONAN 2.0 to default True? Could break many packages in center
        """
        self._conanfile = conanfile
        self._win_bash = win_bash
        self._include_rpath_flags = include_rpath_flags
        self.subsystem = OSInfo().detect_windows_subsystem() if self._win_bash else None
        self._deps_cpp_info = conanfile.deps_cpp_info
        self._arch = conanfile.settings.get_safe("arch")
        self._build_type = conanfile.settings.get_safe("build_type")
        self._compiler = conanfile.settings.get_safe("compiler")
        self._compiler_version = conanfile.settings.get_safe("compiler.version")
        self._libcxx = conanfile.settings.get_safe("compiler.libcxx")
        self._cppstd = conanfile.settings.get_safe("cppstd")

        # Set the generic objects before mapping to env vars to let the user
        # alter some value
        self.libs = copy.copy(self._deps_cpp_info.libs)
        self.include_paths = copy.copy(self._deps_cpp_info.include_paths)
        self.library_paths = copy.copy(self._deps_cpp_info.lib_paths)

        self.defines = self._configure_defines()
        # Will go to CFLAGS and CXXFLAGS ["-m64" "-m32", "-g", "-s"]
        self.flags = self._configure_flags()
        # Only c++ flags [-stdlib, -library], will go to CXXFLAGS
        self.cxx_flags = self._configure_cxx_flags()
        # cpp standard
        self.cppstd_flag = cppstd_flag(self._compiler, self._compiler_version, self._cppstd)
        # Not -L flags, ["-m64" "-m32"]
        self.link_flags = self._configure_link_flags()  # TEST!
        # Not declared by default
        self.fpic = None

        # Precalculate build, host, target triplets
        self.build, self.host, self.target = self._get_host_build_target_flags()
示例#20
0
    def test_apple_clang_cppstd_flags(self):
        self.assertEquals(cppstd_flag("apple-clang", "3.9", "98"), None)
        self.assertEquals(cppstd_flag("apple-clang", "3.9", "gnu98"), None)
        self.assertEquals(cppstd_flag("apple-clang", "3.9", "11"), None)
        self.assertEquals(cppstd_flag("apple-clang", "3.9", "14"), None)

        self.assertEquals(cppstd_flag("apple-clang", "4.0", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("apple-clang", "4.0", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("apple-clang", "4.0", "11"), "-std=c++11")
        self.assertEquals(cppstd_flag("apple-clang", "4.0", "14"), None)

        self.assertEquals(cppstd_flag("apple-clang", "5.0", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("apple-clang", "5.0", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("apple-clang", "5.0", "11"), "-std=c++11")
        self.assertEquals(cppstd_flag("apple-clang", "5.0", "14"), None)

        self.assertEquals(cppstd_flag("apple-clang", "5.1", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("apple-clang", "5.1", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("apple-clang", "5.1", "11"), "-std=c++11")
        self.assertEquals(cppstd_flag("apple-clang", "5.1", "14"), "-std=c++1y")

        self.assertEquals(cppstd_flag("apple-clang", "6.1", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "6.1", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "6.1", "17"), "-std=c++1z")

        self.assertEquals(cppstd_flag("apple-clang", "7", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "7", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "7", "17"), "-std=c++1z")

        self.assertEquals(cppstd_flag("apple-clang", "8", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "8", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "8", "17"), "-std=c++1z")

        self.assertEquals(cppstd_flag("apple-clang", "9", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "9", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "9", "17"), "-std=c++1z")

        self.assertEquals(cppstd_flag("apple-clang", "9.1", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "9.1", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "9.1", "17"), "-std=c++17")
示例#21
0
    def get_build_flags(self):

        if tools.cross_building(self.settings):
            flags = self.get_build_cross_flags()
        else:
            flags = []

        # https://www.boost.org/doc/libs/1_70_0/libs/context/doc/html/context/architectures.html
        if self._b2_os:
            flags.append("target-os=%s" % self._b2_os)
        if self._b2_architecture:
            flags.append("architecture=%s" % self._b2_architecture)
        if self._b2_address_model:
            flags.append("address-model=%s" % self._b2_address_model)
        if self._b2_binary_format:
            flags.append("binary-format=%s" % self._b2_binary_format)
        if self._b2_abi:
            flags.append("abi=%s" % self._b2_abi)

        flags.append("--layout=%s" % self.options.layout)
        flags.append("-sBOOST_BUILD_PATH=%s" % self._boost_build_dir)
        flags.append("-sNO_ZLIB=%s" % ("0" if self.options.zlib else "1"))
        flags.append("-sNO_BZIP2=%s" % ("0" if self.options.bzip2 else "1"))
        flags.append("-sNO_LZMA=%s" % ("0" if self.options.lzma else "1"))
        flags.append("-sNO_ZSTD=%s" % ("0" if self.options.zstd else "1"))

        def add_defines(option, library):
            if option:
                for define in self.deps_cpp_info[library].defines:
                    flags.append("define=%s" % define)

        if self.zip_bzip2_requires_needed:
            add_defines(self.options.zlib, "zlib")
            add_defines(self.options.bzip2, "bzip2")
            add_defines(self.options.lzma, "lzma")
            add_defines(self.options.zstd, "zstd")

        if self._is_msvc and self.settings.compiler.runtime:
            flags.append("runtime-link=%s" % ("static" if "MT" in str(self.settings.compiler.runtime) else "shared"))

        flags.append("threading=multi")

        flags.append("link=%s" % ("static" if not self.options.shared else "shared"))
        if self.settings.build_type == "Debug":
            flags.append("variant=debug")
        else:
            flags.append("variant=release")

        for libname in lib_list:
            if getattr(self.options, "without_%s" % libname):
                flags.append("--without-%s" % libname)

        toolset, _, _ = self.get_toolset_version_and_exe()
        flags.append("toolset=%s" % toolset)

        if self.settings.get_safe("compiler.cppstd"):
            flags.append("cxxflags=%s" % cppstd_flag(
                    self.settings.get_safe("compiler"),
                    self.settings.get_safe("compiler.version"),
                    self.settings.get_safe("compiler.cppstd")
                )
            )

        # CXX FLAGS
        cxx_flags = []
        # fPIC DEFINITION
        if self.settings.os != "Windows":
            if self.options.fPIC:
                cxx_flags.append("-fPIC")

        # Standalone toolchain fails when declare the std lib
        if self.settings.os != "Android":
            try:
                if self._gnu_cxx11_abi:
                    flags.append("define=_GLIBCXX_USE_CXX11_ABI=%s" % self._gnu_cxx11_abi)

                if "clang" in str(self.settings.compiler):
                    if str(self.settings.compiler.libcxx) == "libc++":
                        cxx_flags.append("-stdlib=libc++")
                        flags.append('linkflags="-stdlib=libc++"')
                    else:
                        cxx_flags.append("-stdlib=libstdc++")
            except:
                pass

        if self.options.error_code_header_only:
            flags.append("define=BOOST_ERROR_CODE_HEADER_ONLY=1")
        if self.options.system_no_deprecated:
            flags.append("define=BOOST_SYSTEM_NO_DEPRECATED=1")
        if self.options.asio_no_deprecated:
            flags.append("define=BOOST_ASIO_NO_DEPRECATED=1")
        if self.options.filesystem_no_deprecated:
            flags.append("define=BOOST_FILESYSTEM_NO_DEPRECATED=1")
        if self.options.segmented_stacks:
            flags.extend(["segmented-stacks=on",
                          "define=BOOST_USE_SEGMENTED_STACKS=1",
                          "define=BOOST_USE_UCONTEXT=1"])

        if tools.is_apple_os(self.settings.os):
            if self.settings.get_safe("os.version"):
                cxx_flags.append(tools.apple_deployment_target_flag(self.settings.os,
                                                                    self.settings.os.version))

        if self.settings.os == "iOS":
            cxx_flags.append("-DBOOST_AC_USE_PTHREADS")
            cxx_flags.append("-DBOOST_SP_USE_PTHREADS")
            cxx_flags.append("-fvisibility=hidden")
            cxx_flags.append("-fvisibility-inlines-hidden")
            cxx_flags.append("-fembed-bitcode")

        cxx_flags = 'cxxflags="%s"' % " ".join(cxx_flags) if cxx_flags else ""
        flags.append(cxx_flags)

        if self.options.extra_b2_flags:
            flags.append(str(self.options.extra_b2_flags))

        return flags
示例#22
0
    def content(self):
        """With compiler_args you can invoke your compiler:
        $ gcc main.c @conanbuildinfo.args -o main
        $ clang main.c @conanbuildinfo.args -o main
        $ cl /EHsc main.c @conanbuildinfo.args
        """
        flags = []
        flags.extend(
            format_defines(self._deps_build_info.defines,
                           compiler=self.compiler))
        flags.extend(
            format_include_paths(self._deps_build_info.include_paths,
                                 compiler=self.compiler))

        flags.extend(self._deps_build_info.cppflags)
        flags.extend(self._deps_build_info.cflags)

        arch_flag = architecture_flag(
            arch=self.conanfile.settings.get_safe("arch"),
            compiler=self.compiler)
        if arch_flag:
            flags.append(arch_flag)

        build_type = self.conanfile.settings.get_safe("build_type")
        btf = build_type_flag(compiler=self.compiler, build_type=build_type)
        if btf:
            flags.append(btf)
        btd = build_type_define(build_type=build_type)
        if btd:
            flags.extend(format_defines([btd], self.compiler))

        if self.compiler == "Visual Studio":
            runtime = visual_runtime(
                self.conanfile.settings.get_safe("compiler.runtime"))
            if runtime:
                flags.append(runtime)
            # Necessary in the "cl" invocation before specify the rest of linker flags
            flags.append(visual_linker_option_separator)

        the_os = self.conanfile.settings.get_safe("os_build") or \
                 self.conanfile.settings.get_safe("os")
        flags.extend(
            rpath_flags(the_os, self.compiler,
                        self._deps_build_info.lib_paths))
        flags.extend(
            format_library_paths(self._deps_build_info.lib_paths,
                                 compiler=self.compiler))
        flags.extend(
            format_libraries(self._deps_build_info.libs,
                             compiler=self.compiler))
        flags.extend(self._deps_build_info.sharedlinkflags)
        flags.extend(self._deps_build_info.exelinkflags)
        flags.extend(self._libcxx_flags())
        flags.extend(
            cppstd_flag(self.conanfile.settings.get_safe("compiler"),
                        self.conanfile.settings.get_safe("compiler.version"),
                        self.conanfile.settings.get_safe("cppstd")))
        sysrf = sysroot_flag(self._deps_build_info.sysroot,
                             compiler=self.compiler)
        if sysrf:
            flags.append(sysrf)

        return " ".join(flag for flag in flags if flag)
示例#23
0
    def test_gcc_cppstd_flags(self):
        self.assertEquals(cppstd_flag("gcc", "4.2", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("gcc", "4.2", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("gcc", "4.2", "11"), None)
        self.assertEquals(cppstd_flag("gcc", "4.2", "14"), None)

        self.assertEquals(cppstd_flag("gcc", "4.3", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("gcc", "4.3", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("gcc", "4.3", "11"), "-std=c++0x")
        self.assertEquals(cppstd_flag("gcc", "4.3", "14"), None)

        self.assertEquals(cppstd_flag("gcc", "4.6", "11"), '-std=c++0x')
        self.assertEquals(cppstd_flag("gcc", "4.6", "14"), None)

        self.assertEquals(cppstd_flag("gcc", "4.7", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "4.7", "14"), None)

        self.assertEquals(cppstd_flag("gcc", "4.8", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "4.8", "14"), '-std=c++1y')
        self.assertEquals(cppstd_flag("gcc", "4.8", "17"), None)

        self.assertEquals(cppstd_flag("gcc", "4.9", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "4.9", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("gcc", "4.9", "17"), None)

        self.assertEquals(cppstd_flag("gcc", "5", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "5", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("gcc", "5", "gnu14"), '-std=gnu++14')
        self.assertEquals(cppstd_flag("gcc", "5", "17"), None)

        self.assertEquals(cppstd_flag("gcc", "5.1", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "5.1", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("gcc", "5.1", "17"), '-std=c++1z')

        self.assertEquals(cppstd_flag("gcc", "7", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "7", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("gcc", "7", "17"), '-std=c++1z')
示例#24
0
    def test_clang_cppstd_flags(self):
        self.assertEquals(cppstd_flag("clang", "2.0", "98"), None)
        self.assertEquals(cppstd_flag("clang", "2.0", "gnu98"), None)
        self.assertEquals(cppstd_flag("clang", "2.0", "11"), None)
        self.assertEquals(cppstd_flag("clang", "2.0", "14"), None)

        self.assertEquals(cppstd_flag("clang", "2.1", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("clang", "2.1", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("clang", "2.1", "11"), "-std=c++0x")
        self.assertEquals(cppstd_flag("clang", "2.1", "14"), None)

        self.assertEquals(cppstd_flag("clang", "3.0", "11"), '-std=c++0x')
        self.assertEquals(cppstd_flag("clang", "3.0", "14"), None)

        self.assertEquals(cppstd_flag("clang", "3.1", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "3.1", "14"), None)

        self.assertEquals(cppstd_flag("clang", "3.4", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "3.4", "14"), '-std=c++1y')
        self.assertEquals(cppstd_flag("clang", "3.4", "17"), None)

        self.assertEquals(cppstd_flag("clang", "3.5", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "3.5", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("clang", "3.5", "17"), '-std=c++1z')

        self.assertEquals(cppstd_flag("clang", "5", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "5", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("clang", "5", "gnu14"), '-std=gnu++14')
        self.assertEquals(cppstd_flag("clang", "5", "17"), '-std=c++1z')

        self.assertEquals(cppstd_flag("clang", "5.1", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "5.1", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("clang", "5.1", "17"), '-std=c++1z')

        self.assertEquals(cppstd_flag("clang", "7", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "7", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("clang", "7", "17"), '-std=c++1z')
示例#25
0
    def test_apple_clang_cppstd_flags(self):
        self.assertEquals(cppstd_flag("apple-clang", "3.9", "98"), None)
        self.assertEquals(cppstd_flag("apple-clang", "3.9", "gnu98"), None)
        self.assertEquals(cppstd_flag("apple-clang", "3.9", "11"), None)
        self.assertEquals(cppstd_flag("apple-clang", "3.9", "14"), None)

        self.assertEquals(cppstd_flag("apple-clang", "4.0", "98"),
                          "-std=c++98")
        self.assertEquals(cppstd_flag("apple-clang", "4.0", "gnu98"),
                          "-std=gnu++98")
        self.assertEquals(cppstd_flag("apple-clang", "4.0", "11"),
                          "-std=c++11")
        self.assertEquals(cppstd_flag("apple-clang", "4.0", "14"), None)

        self.assertEquals(cppstd_flag("apple-clang", "5.0", "98"),
                          "-std=c++98")
        self.assertEquals(cppstd_flag("apple-clang", "5.0", "gnu98"),
                          "-std=gnu++98")
        self.assertEquals(cppstd_flag("apple-clang", "5.0", "11"),
                          "-std=c++11")
        self.assertEquals(cppstd_flag("apple-clang", "5.0", "14"), None)

        self.assertEquals(cppstd_flag("apple-clang", "5.1", "98"),
                          "-std=c++98")
        self.assertEquals(cppstd_flag("apple-clang", "5.1", "gnu98"),
                          "-std=gnu++98")
        self.assertEquals(cppstd_flag("apple-clang", "5.1", "11"),
                          "-std=c++11")
        self.assertEquals(cppstd_flag("apple-clang", "5.1", "14"),
                          "-std=c++1y")

        self.assertEquals(cppstd_flag("apple-clang", "6.1", "11"),
                          '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "6.1", "14"),
                          '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "6.1", "17"),
                          "-std=c++1z")

        self.assertEquals(cppstd_flag("apple-clang", "7", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "7", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "7", "17"), "-std=c++1z")

        self.assertEquals(cppstd_flag("apple-clang", "8", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "8", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "8", "17"), "-std=c++1z")

        self.assertEquals(cppstd_flag("apple-clang", "9", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("apple-clang", "9", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("apple-clang", "9", "17"), "-std=c++1z")
示例#26
0
    def test_clang_cppstd_flags(self):
        self.assertEquals(cppstd_flag("clang", "2.0", "98"), None)
        self.assertEquals(cppstd_flag("clang", "2.0", "gnu98"), None)
        self.assertEquals(cppstd_flag("clang", "2.0", "11"), None)
        self.assertEquals(cppstd_flag("clang", "2.0", "14"), None)

        self.assertEquals(cppstd_flag("clang", "2.1", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("clang", "2.1", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("clang", "2.1", "11"), "-std=c++0x")
        self.assertEquals(cppstd_flag("clang", "2.1", "14"), None)

        self.assertEquals(cppstd_flag("clang", "3.0", "11"), '-std=c++0x')
        self.assertEquals(cppstd_flag("clang", "3.0", "14"), None)

        self.assertEquals(cppstd_flag("clang", "3.1", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "3.1", "14"), None)

        self.assertEquals(cppstd_flag("clang", "3.4", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "3.4", "14"), '-std=c++1y')
        self.assertEquals(cppstd_flag("clang", "3.4", "17"), None)

        self.assertEquals(cppstd_flag("clang", "3.5", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "3.5", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("clang", "3.5", "17"), '-std=c++1z')

        self.assertEquals(cppstd_flag("clang", "5", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "5", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("clang", "5", "gnu14"), '-std=gnu++14')
        self.assertEquals(cppstd_flag("clang", "5", "17"), '-std=c++17')

        self.assertEquals(cppstd_flag("clang", "5.1", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "5.1", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("clang", "5.1", "17"), '-std=c++17')

        self.assertEquals(cppstd_flag("clang", "7", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("clang", "7", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("clang", "7", "17"), '-std=c++17')
示例#27
0
    def get_build_flags(self):

        if tools.cross_building(self.settings):
            flags = self.get_build_cross_flags()
        else:
            flags = []

        # https://www.boost.org/doc/libs/1_68_0/libs/context/doc/html/context/architectures.html
        if self._b2_os:
            flags.append("target-os=%s" % self._b2_os)
        if self._b2_architecture:
            flags.append("architecture=%s" % self._b2_architecture)
        if self._b2_address_model:
            flags.append("address-model=%s" % self._b2_address_model)
        if self._b2_binary_format:
            flags.append("binary-format=%s" % self._b2_binary_format)
        if self._b2_abi:
            flags.append("abi=%s" % self._b2_abi)

        if self.settings.compiler == "gcc":
            flags.append("--layout=system")

        if self.settings.compiler == "Visual Studio" and self.settings.compiler.runtime:
            flags.append("runtime-link=%s" % ("static" if "MT" in str(self.settings.compiler.runtime) else "shared"))

        if self.settings.os == "Windows" and self.settings.compiler == "gcc":
            flags.append("threading=multi")

        flags.append("link=%s" % ("static" if not self.options.shared else "shared"))
        if self.settings.build_type == "Debug":
            flags.append("variant=debug")
        else:
            flags.append("variant=release")

        for libname in lib_list:
            if getattr(self.options, "without_%s" % libname):
                flags.append("--without-%s" % libname)

        if self.settings.cppstd:
            toolset, _, _ = self.get_toolset_version_and_exe()
            flags.append("toolset=%s" % toolset)
            flags.append("cxxflags=%s" % cppstd_flag(
                    self.settings.get_safe("compiler"),
                    self.settings.get_safe("compiler.version"),
                    self.settings.get_safe("cppstd")
                )
            )

        # CXX FLAGS
        cxx_flags = []
        # fPIC DEFINITION
        if self.settings.compiler != "Visual Studio":
            if self.options.fPIC:
                cxx_flags.append("-fPIC")

        # Standalone toolchain fails when declare the std lib
        if self.settings.os != "Android":
            try:
                if str(self.settings.compiler.libcxx) == "libstdc++":
                    flags.append("define=_GLIBCXX_USE_CXX11_ABI=0")
                elif str(self.settings.compiler.libcxx) == "libstdc++11":
                    flags.append("define=_GLIBCXX_USE_CXX11_ABI=1")
                if "clang" in str(self.settings.compiler):
                    if str(self.settings.compiler.libcxx) == "libc++":
                        cxx_flags.append("-stdlib=libc++")
                        flags.append('linkflags="-stdlib=libc++"')
                    else:
                        cxx_flags.append("-stdlib=libstdc++")
            except:
                pass

        if self.settings.os == "iOS":
            arch = self.settings.get_safe('arch')

            cxx_flags.append("-DBOOST_AC_USE_PTHREADS")
            cxx_flags.append("-DBOOST_SP_USE_PTHREADS")
            cxx_flags.append("-fvisibility=hidden")
            cxx_flags.append("-fvisibility-inlines-hidden")
            cxx_flags.append("-fembed-bitcode")
            cxx_flags.extend(["-arch", tools.to_apple_arch(arch)])

            try:
                cxx_flags.append("-mios-version-min=%s" % self.settings.os.version)
                self.output.info("iOS deployment target: %s" % self.settings.os.version)
            except:
                pass

            flags.append("macosx-version=%s" % self.b2_macosx_version())

        cxx_flags = 'cxxflags="%s"' % " ".join(cxx_flags) if cxx_flags else ""
        flags.append(cxx_flags)

        return flags
示例#28
0
    def test_gcc_cppstd_flags(self):
        self.assertEquals(cppstd_flag("gcc", "4.2", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("gcc", "4.2", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("gcc", "4.2", "11"), None)
        self.assertEquals(cppstd_flag("gcc", "4.2", "14"), None)

        self.assertEquals(cppstd_flag("gcc", "4.3", "98"), "-std=c++98")
        self.assertEquals(cppstd_flag("gcc", "4.3", "gnu98"), "-std=gnu++98")
        self.assertEquals(cppstd_flag("gcc", "4.3", "11"), "-std=c++0x")
        self.assertEquals(cppstd_flag("gcc", "4.3", "14"), None)

        self.assertEquals(cppstd_flag("gcc", "4.6", "11"), '-std=c++0x')
        self.assertEquals(cppstd_flag("gcc", "4.6", "14"), None)

        self.assertEquals(cppstd_flag("gcc", "4.7", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "4.7", "14"), None)

        self.assertEquals(cppstd_flag("gcc", "4.8", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "4.8", "14"), '-std=c++1y')
        self.assertEquals(cppstd_flag("gcc", "4.8", "17"), None)

        self.assertEquals(cppstd_flag("gcc", "4.9", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "4.9", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("gcc", "4.9", "17"), None)

        self.assertEquals(cppstd_flag("gcc", "5", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "5", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("gcc", "5", "gnu14"), '-std=gnu++14')
        self.assertEquals(cppstd_flag("gcc", "5", "17"), None)

        self.assertEquals(cppstd_flag("gcc", "5.1", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "5.1", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("gcc", "5.1", "17"), '-std=c++1z')

        self.assertEquals(cppstd_flag("gcc", "7", "11"), '-std=c++11')
        self.assertEquals(cppstd_flag("gcc", "7", "14"), '-std=c++14')
        self.assertEquals(cppstd_flag("gcc", "7", "17"), '-std=c++1z')
示例#29
0
    def get_build_flags(self):

        if tools.cross_building(self.settings):
            flags = self.get_build_cross_flags()
        else:
            flags = []

        # https://www.boost.org/doc/libs/1_69_0/libs/context/doc/html/context/architectures.html
        if self._b2_os:
            flags.append("target-os=%s" % self._b2_os)
        if self._b2_architecture:
            flags.append("architecture=%s" % self._b2_architecture)
        if self._b2_address_model:
            flags.append("address-model=%s" % self._b2_address_model)
        if self._b2_binary_format:
            flags.append("binary-format=%s" % self._b2_binary_format)
        if self._b2_abi:
            flags.append("abi=%s" % self._b2_abi)

        flags.append("-sBOOST_BUILD_PATH=%s" % self._boost_build_dir)
        if self.settings.compiler == "gcc":
            flags.append("--layout=system")

        if self._is_msvc and self.settings.compiler.runtime:
            flags.append("runtime-link=%s" % ("static" if "MT" in str(
                self.settings.compiler.runtime) else "shared"))

        flags.append("threading=multi")

        flags.append("link=%s" %
                     ("static" if not self.options.shared else "shared"))
        if self.settings.build_type == "Debug":
            flags.append("variant=debug")
        else:
            flags.append("variant=release")

        for libname in lib_list:
            if getattr(self.options, "without_%s" % libname):
                flags.append("--without-%s" % libname)

        toolset, _, _ = self.get_toolset_version_and_exe()
        flags.append("toolset=%s" % toolset)

        if self.settings.cppstd:
            flags.append(
                "cxxflags=%s" %
                cppstd_flag(self.settings.get_safe("compiler"),
                            self.settings.get_safe("compiler.version"),
                            self.settings.get_safe("cppstd")))

        # CXX FLAGS
        cxx_flags = []
        # fPIC DEFINITION
        if self.settings.os != "Windows":
            if self.options.fPIC:
                cxx_flags.append("-fPIC")

        # Standalone toolchain fails when declare the std lib
        if self.settings.os != "Android":
            try:
                if str(self.settings.compiler.libcxx) == "libstdc++":
                    flags.append("define=_GLIBCXX_USE_CXX11_ABI=0")
                elif str(self.settings.compiler.libcxx) == "libstdc++11":
                    flags.append("define=_GLIBCXX_USE_CXX11_ABI=1")
                if "clang" in str(self.settings.compiler):
                    if str(self.settings.compiler.libcxx) == "libc++":
                        cxx_flags.append("-stdlib=libc++")
                        flags.append('linkflags="-stdlib=libc++"')
                    else:
                        cxx_flags.append("-stdlib=libstdc++")
            except:
                pass

        if self.options.error_code_header_only:
            flags.append("define=BOOST_ERROR_CODE_HEADER_ONLY=1")
        if self.options.system_no_deprecated:
            flags.append("define=BOOST_SYSTEM_NO_DEPRECATED=1")
        if self.options.asio_no_deprecated:
            flags.append("define=BOOST_ASIO_NO_DEPRECATED=1")

        if tools.is_apple_os(self.settings.os):
            if self.settings.get_safe("os.version"):
                cxx_flags.append(
                    tools.apple_deployment_target_flag(
                        self.settings.os, self.settings.os.version))

        if self.settings.os == "iOS":
            cxx_flags.append("-DBOOST_AC_USE_PTHREADS")
            cxx_flags.append("-DBOOST_SP_USE_PTHREADS")
            cxx_flags.append("-fvisibility=hidden")
            cxx_flags.append("-fvisibility-inlines-hidden")
            cxx_flags.append("-fembed-bitcode")

        cxx_flags = 'cxxflags="%s"' % " ".join(cxx_flags) if cxx_flags else ""
        flags.append(cxx_flags)

        return flags