## Copyright (c) 2015, Eric R. Schendel.
## All rights reserved.
##
## 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 gnum 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 HOLDER 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.

# Author: Eric R. Schendel <eschendel@sidra.org>

include(ConfigureCompilerIDs)
include(ConfigureCompilerSanity)
include(DetectArchitectureOptimizations)

if(COMPILER_TYPE_GNU)

  if(NOT (${CMAKE_PROJECT_NAME}_TARGET_ARCHITECTURE STREQUAL "auto"))
    list(APPEND ARCH_OPT_COMPILE_OPTIONS "-march=${${CMAKE_PROJECT_NAME}_TARGET_ARCHITECTURE}")
  endif(NOT (${CMAKE_PROJECT_NAME}_TARGET_ARCHITECTURE STREQUAL "auto"))

  if(${CMAKE_PROJECT_NAME}_ENABLE_INTEL_AVX2)
    list(APPEND ARCH_OPT_DEFINITIONS "-DENABLE_INTEL_AVX2")
    list(APPEND ARCH_OPT_COMPILE_OPTIONS "-mavx2")
  endif(${CMAKE_PROJECT_NAME}_ENABLE_INTEL_AVX2)

  if(${CMAKE_PROJECT_NAME}_ENABLE_INTEL_BMI2)
    list(APPEND ARCH_OPT_DEFINITIONS "-DENABLE_INTEL_BMI2")
    list(APPEND ARCH_OPT_COMPILE_OPTIONS "-mbmi2")
  endif(${CMAKE_PROJECT_NAME}_ENABLE_INTEL_BMI2)

endif(COMPILER_TYPE_GNU)

message(STATUS "Definitions for architecture optimizations: ${ARCH_OPT_DEFINITIONS}")
message(STATUS "Compiler options for architecture optimizations: ${ARCH_OPT_COMPILE_OPTIONS}")

add_definitions(${ARCH_OPT_DEFINITIONS})
add_compile_options(${ARCH_OPT_COMPILE_OPTIONS})
