# Copyright 2020 Google, Inc. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer; # redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution; # neither the name of the copyright holders nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Import('*') from gem5_scons import warning import gem5_scons with gem5_scons.Configure(main) as conf: # Check for (C99 FP environment control) conf.env['CONF']['HAVE_FENV'] = conf.CheckHeader('fenv.h', '<>') if conf.env['CONF']['HAVE_FENV']: conf.env.TagImplies('fenv', 'gem5 lib') else: warning("Header file not found.\n" "This host has no IEEE FP rounding mode control.") # Check for (libpng library needed if wanting to dump # frame buffer image in png format) conf.env['CONF']['HAVE_PNG'] = conf.CheckHeader('png.h', '<>') if conf.env['CONF']['HAVE_PNG']: conf.env.TagImplies('png', 'gem5 lib') else: warning("Header file not found.\n" "This host has no libpng library.\n" "Disabling support for PNG framebuffers.") conf.env['CONF']['HAVE_POSIX_CLOCK'] = \ conf.CheckLibWithHeader([None, 'rt'], 'time.h', 'C', 'clock_nanosleep(0,0,NULL,NULL);') if not conf.env['CONF']['HAVE_POSIX_CLOCK']: warning("Can't find library for POSIX clocks.") # Valgrind gets much less confused if you tell it when you're using # alternative stacks. conf.env['CONF']['HAVE_VALGRIND'] = \ conf.CheckCHeader('valgrind/valgrind.h') # Check if the compiler supports the [[gnu::deprecated]] attribute # Create a temporary environment with -Werror in CCFLAGS werror_env = main.Clone() werror_env.Append(CCFLAGS=['-Werror']) with gem5_scons.Configure(werror_env) as conf: # Store result in the main environment main['CONF']['HAVE_DEPRECATED_NAMESPACE'] = bool( conf.TryCompile(''' int main() {return 0;} namespace [[gnu::deprecated("Test namespace deprecation")]] test_deprecated_namespace {} ''', '.cc') ) if not main['CONF']['HAVE_DEPRECATED_NAMESPACE']: warning("Deprecated namespaces are not supported by this compiler.\n" "Please make sure to check the mailing list for deprecation " "announcements.")