
# Specify Output directories
#
# XCode is creating the "Debug/Release" folder on its own and does not need to be added.
macro(smtg_specify_output_directories)
    if(SMTG_WIN OR (SMTG_MAC AND CMAKE_GENERATOR STREQUAL Xcode))
        set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
    else ()
        set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE}")
        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE}")
        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}")
    endif()
endmacro()

# Specify build types
#
# Specifies what build types (configurations) will be available.
macro(smtg_specify_build_types)
    set(CMAKE_CONFIGURATION_TYPES "Debug;Release")

    # This variable is only meaningful to single-configuration generators (such as make and Ninja).
    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build type")
endmacro()

# Group predefined cmake projects
#
# Put predefined targets like "ALL_BUILD" and "ZERO_CHECK" into a separate folder within the IDE.
macro(smtg_group_predefined_cmake_projects)
    set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER Predefined)
    set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endmacro()

# Configure CMake generator
macro(smtg_configure_cmake_generator)
    smtg_specify_output_directories()
    smtg_specify_build_types()
    smtg_group_predefined_cmake_projects()

    # Generates a compile_commands.json file containing the exact compiler calls.
    # (This option is implemented only by Makefile Generators and the Ninja. It 
    # is ignored on other generators.)
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE STRING "Generate compile commands" FORCE)
endmacro()