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')
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 '')
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'))
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)
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
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'))
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)