Beispiel #1
0
 def generate_cmake_toolchain(self, toolchain=None, cxx=None, cxxflags=None, ldflags=None, std=None, defines=None):
     set_ = cmake_set
     if_ = cmake_if
     append_ = cmake_append
     yield set_('CGET_PREFIX', self.prefix)
     yield set_('CMAKE_PREFIX_PATH', self.prefix)
     yield ['include_directories(SYSTEM ${CMAKE_PREFIX_PATH}/include)']
     if toolchain: yield ['include({})'.format(util.quote(os.path.abspath(toolchain)))]
     yield if_('CMAKE_CROSSCOMPILING',
         append_('CMAKE_FIND_ROOT_PATH', self.prefix)
     )
     yield if_('CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT',
         set_('CMAKE_INSTALL_PREFIX', self.prefix)
     )
     if cxx: yield set_('CMAKE_CXX_COMPILER', cxx)
     if std:
         yield if_('NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC"',
             set_('CMAKE_CXX_STD_FLAG', "-std={}".format(std))
         )
     yield if_('"${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC"',
         set_('CMAKE_CXX_ENABLE_PARALLEL_BUILD_FLAG', "/MP".format(std))
     )
     if cxxflags or std:
         yield set_('CMAKE_CXX_FLAGS', "$ENV{{CXXFLAGS}} ${{CMAKE_CXX_FLAGS_INIT}} ${{CMAKE_CXX_STD_FLAG}} ${{CMAKE_CXX_STD_FLAG}} {}".format(cxxflags or ''), cache='STRING')
     if ldflags:
         for link_type in ['STATIC', 'SHARED', 'MODULE', 'EXE']:
             yield set_('CMAKE_{}_LINKER_FLAGS'.format(link_type), "$ENV{{LDFLAGS}} {0}".format(ldflags), cache='STRING')
     for dkey in defines or {}:
         name, vtype, value = parse_cmake_var_type(dkey, defines[dkey])
         yield set_(name, value, cache=vtype, quote=(vtype != 'BOOL'))
     yield if_('BUILD_SHARED_LIBS',
         set_('CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS', 'ON', cache='BOOL')
     )
     yield set_('CMAKE_FIND_FRAMEWORK', 'LAST', cache='STRING')
     yield set_('CMAKE_INSTALL_RPATH', '${CGET_PREFIX}/lib', cache='STRING')
Beispiel #2
0
def cmake_set(var, val, quote=True, cache=None, description=None):
    x = val
    if quote: x = util.quote(val)
    if cache is None or cache.lower() == 'none':
        yield "set({0} {1})".format(var, x)
    else:
        yield 'set({0} {1} CACHE {2} "{3}")'.format(var, x, cache, description or '')
Beispiel #3
0
 def generate_cmake_toolchain(self,
                              toolchain=None,
                              cxxflags=None,
                              ldflags=None,
                              std=None,
                              defines=None):
     set_ = cmake_set
     if_ = cmake_if
     yield set_('CGET_PREFIX', self.prefix)
     yield set_('CMAKE_PREFIX_PATH', self.prefix)
     yield ['include_directories(SYSTEM ${CMAKE_PREFIX_PATH}/include)']
     if toolchain is not None:
         yield [
             'include({})'.format(util.quote(os.path.abspath(toolchain)))
         ]
     yield if_('CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT',
               set_('CMAKE_INSTALL_PREFIX', self.prefix))
     if std is not None:
         yield if_('NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC"',
                   set_('CMAKE_CXX_STD_FLAG', "-std={}".format(std)))
     if cxxflags is not None or std is not None:
         yield set_(
             'CMAKE_CXX_FLAGS',
             "$ENV{{CXXFLAGS}} ${{CMAKE_CXX_FLAGS_INIT}} ${{CMAKE_CXX_STD_FLAG}} {}"
             .format(cxxflags or ''),
             cache='STRING')
     if ldflags is not None:
         for link_type in ['SHARED', 'MODULE', 'EXE']:
             yield set_('CMAKE_{}_LINKER_FLAGS'.format(link_type),
                        "$ENV{{LDFLAGS}} {0}".format(ldflags),
                        cache='STRING')
     for dkey in defines or {}:
         name, vtype, value = parse_cmake_var_type(dkey, defines[dkey])
         yield set_(name, value, cache=vtype, quote=(vtype != 'BOOL'))
Beispiel #4
0
 def configure(self, src_dir, defines=None, generator=None, install_prefix=None):
     self.prefix.log("configure")
     util.mkdir(self.build_dir)
     args = [src_dir]
     if generator is not None: args = ['-G', util.quote(generator)] + args
     if install_prefix is not None: args.insert(0, '-DCMAKE_INSTALL_PREFIX=' + install_prefix)
     for d in defines or []:
         args.append('-D{0}'.format(d))
     self.cmake(args=args, cwd=self.build_dir, use_toolchain=True)
Beispiel #5
0
 def configure(self,
               src_dir,
               defines=None,
               generator=None,
               install_prefix=None):
     self.prefix.log("configure")
     util.mkdir(self.build_dir)
     args = [src_dir]
     if generator is not None: args = ['-G', util.quote(generator)] + args
     if install_prefix is not None:
         args.insert(0, '-DCMAKE_INSTALL_PREFIX=' + install_prefix)
     for d in defines or []:
         args.append('-D{0}'.format(d))
     self.cmake(args=args, cwd=self.build_dir, use_toolchain=True)
Beispiel #6
0
 def configure(self, src_dir, defines=None, generator=None, install_prefix=None, test=True):
     self.prefix.log("configure")
     util.mkdir(self.build_dir)
     args = [src_dir]
     if generator is not None: args = ['-G', util.quote(generator)] + args
     if self.prefix.verbose: args.extend(['-DCMAKE_VERBOSE_MAKEFILE=On'])
     if test: args.extend(['-DBUILD_TESTING=On'])
     else: args.extend(['-DBUILD_TESTING=Off'])
     if install_prefix is not None: args.insert(0, '-DCMAKE_INSTALL_PREFIX=' + install_prefix)
     for d in defines or []:
         args.append('-D{0}'.format(d))
     try:
         self.cmake(args=args, cwd=self.build_dir, use_toolchain=True)
     except:
         self.show_logs()
         raise
Beispiel #7
0
 def generate_cmake_toolchain(self, toolchain=None, cxxflags=None, ldflags=None, std=None, defines=None):
     set_ = cmake_set
     if_ = cmake_if
     yield set_('CGET_PREFIX', self.prefix)
     yield set_('CMAKE_PREFIX_PATH', self.prefix)
     yield ['include_directories(SYSTEM ${CMAKE_PREFIX_PATH}/include)']
     if toolchain is not None: yield ['include({})'.format(util.quote(os.path.abspath(toolchain)))]
     yield if_('CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT',
         set_('CMAKE_INSTALL_PREFIX', self.prefix)
     )
     if std is not None:
         yield if_('NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC"',
             set_('CMAKE_CXX_STD_FLAG', "-std={}".format(std))
         )
     if cxxflags is not None or std is not None:
         yield set_('CMAKE_CXX_FLAGS', "$ENV{{CXXFLAGS}} ${{CMAKE_CXX_FLAGS_INIT}} ${{CMAKE_CXX_STD_FLAG}} {}".format(cxxflags or ''), cache='STRING')
     if ldflags is not None:
         for link_type in ['SHARED', 'MODULE', 'EXE']:
             yield set_('CMAKE_{}_LINKER_FLAGS'.format(link_type), "$ENV{{LDFLAGS}} {0}".format(ldflags), cache='STRING')
     for dkey in defines or {}:
         name, vtype, value = parse_cmake_var_type(dkey, defines[dkey])
         yield set_(name, value, cache=vtype, quote=(vtype != 'BOOL'))
Beispiel #8
0
def cmake_append(var, *vals, **kwargs):
    quote = True
    if 'quote' in kwargs: quote = kwargs['quote']
    x = ' '.join(vals)
    if quote: x = ' '.join([util.quote(val) for val in vals])
    yield 'list(APPEND {0} {1})'.format(var, x)