set(ASM_DIALECT "_NASM")
set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS asm)

if(X64)
    list(APPEND ASM_FLAGS -DARCH_X86_64=1 -I ${CMAKE_CURRENT_SOURCE_DIR}/../common/x86/)
    if(ENABLE_PIC)
        list(APPEND ASM_FLAGS -DPIC)
    endif()
    if(APPLE)
        set(ARGS -f macho64 -DPREFIX)
    elseif(UNIX AND NOT CYGWIN)
        set(ARGS -f elf64)
    else()
        set(ARGS -f win64)
    endif()
else()
    list(APPEND ASM_FLAGS -DARCH_X86_64=0 -I ${CMAKE_CURRENT_SOURCE_DIR}/../common/x86/)
    if(APPLE)
        set(ARGS -f macho32 -DPREFIX)
    elseif(UNIX AND NOT CYGWIN)
        set(ARGS -f elf32)
    else()
        set(ARGS -f win32 -DPREFIX)
    endif()
endif()

if(GCC)
    list(APPEND ASM_FLAGS -DHAVE_ALIGNED_STACK=1)
else()
    list(APPEND ASM_FLAGS -DHAVE_ALIGNED_STACK=0)
endif()

if(HIGH_BIT_DEPTH)
    if(MAIN12)
        list(APPEND ASM_FLAGS -DHIGH_BIT_DEPTH=1 -DBIT_DEPTH=12 -DX265_NS=${X265_NS})
    else()
        list(APPEND ASM_FLAGS -DHIGH_BIT_DEPTH=1 -DBIT_DEPTH=10 -DX265_NS=${X265_NS})
    endif()
else()
    list(APPEND ASM_FLAGS -DHIGH_BIT_DEPTH=0 -DBIT_DEPTH=8 -DX265_NS=${X265_NS})
endif()

list(APPEND ASM_FLAGS "${CMAKE_ASM_NASM_FLAGS}")

if(CMAKE_BUILD_TYPE MATCHES Release)
    list(APPEND ASM_FLAGS "${CMAKE_ASM_NASM_FLAGS_RELEASE}")
elseif(CMAKE_BUILD_TYPE MATCHES Debug)
    list(APPEND ASM_FLAGS "${CMAKE_ASM_NASM_FLAGS_DEBUG}")
elseif(CMAKE_BUILD_TYPE MATCHES MinSizeRel)
    list(APPEND ASM_FLAGS "${CMAKE_ASM_NASM_FLAGS_MINSIZEREL}")
elseif(CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
    list(APPEND ASM_FLAGS "${CMAKE_ASM_NASM_FLAGS_RELWITHDEBINFO}")
endif()

set(NASM_FLAGS ${ARGS} ${ASM_FLAGS} PARENT_SCOPE)
string(REPLACE ";" " " CMAKE_ASM_NASM_COMPILER_ARG1 "${ARGS}")

# This section exists to override the one in CMakeASMInformation.cmake
# (the default Information file). This removes the <FLAGS>
# thing so that your C compiler flags that have been set via
# set_target_properties don't get passed to nasm and confuse it.
if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT)
    string(REPLACE ";" " " STR_ASM_FLAGS "${ASM_FLAGS}")
    set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> ${STR_ASM_FLAGS} -o <OBJECT> <SOURCE>")
endif()

include(CMakeASMInformation)
set(ASM_DIALECT)
