
add_definitions(
    -D_NTHALDLL_
    -D_NTHAL_)

include_directories(
    include
    ${REACTOS_SOURCE_DIR}/ntoskrnl/include)

list(APPEND HAL_GENERIC_SOURCE
    generic/beep.c
    generic/cmos.c
    generic/display.c
    generic/dma.c
    generic/drive.c
    generic/halinit.c
    generic/memory.c
    generic/misc.c
    generic/reboot.c
    generic/sysinfo.c
    generic/usage.c)

if(ARCH MATCHES i386)
    list(APPEND HAL_GENERIC_SOURCE
        generic/bios.c
        generic/portio.c)
endif()

add_library(lib_hal_generic ${HAL_GENERIC_SOURCE})
add_dependencies(lib_hal_generic asm)
add_pch(lib_hal_generic include/hal.h)

list(APPEND HAL_LEGACY_SOURCE
    legacy/bus/bushndlr.c
    legacy/bus/cmosbus.c
    legacy/bus/isabus.c
    legacy/bus/pcibus.c
    legacy/bus/pcidata.c
    legacy/bus/sysbus.c
    legacy/bussupp.c
    legacy/halpnpdd.c
    legacy/halpcat.c)

add_library(lib_hal_legacy ${HAL_LEGACY_SOURCE})
#add_pch(lib_hal_legacy include/hal.h)
target_link_libraries(lib_hal_legacy lib_hal_generic)

list(APPEND HAL_ACPI_SOURCE
    acpi/halacpi.c
    acpi/halpnpdd.c
    acpi/busemul.c
    legacy/bus/pcibus.c)

add_library(lib_hal_acpi ${HAL_ACPI_SOURCE})
#add_pch(lib_hal_acpi include/hal.h)
target_link_libraries(lib_hal_acpi lib_hal_generic)

list(APPEND HAL_UP_SOURCE
    generic/spinlock.c
    up/processor.c)

list(APPEND HAL_PIC_SOURCE
    generic/profil.c
    generic/timer.c
    generic/systimer.S
    generic/trap.S
    up/halinit_up.c
    up/pic.c)

list(APPEND HAL_APIC_SOURCE
    apic/apic.c
    apic/apictimer.c
    apic/apictrap.S
    apic/halinit_apic.c
    apic/rtctimer.c
    apic/tsc.c
    apic/tsccal.S)

if(ARCH MATCHES i386)
    list(APPEND MINI_HAL_SOURCE
        generic/portio.c
        generic/systimer.S
        legacy/bus/bushndlr.c
        legacy/bus/cmosbus.c
        legacy/bus/isabus.c
        legacy/bus/pcibus.c
        legacy/bus/sysbus.c
        legacy/bussupp.c
        generic/beep.c
        generic/bios.c
        generic/cmos.c
        generic/dma.c
        generic/display.c
        generic/drive.c
        generic/misc.c
        generic/profil.c
        generic/reboot.c
        generic/spinlock.c
        generic/sysinfo.c
        generic/timer.c
        generic/usage.c
        up/halinit_mini.c
        up/pic.c
        up/processor.c)

    spec2def(hal.dll ../hal.spec)

    # hal
    add_library(hal SHARED
        ${HAL_UP_SOURCE}
        ${HAL_PIC_SOURCE}
        generic/v86.S
        up/halup.rc
        ${CMAKE_CURRENT_BINARY_DIR}/hal.def)
    target_link_libraries(hal lib_hal_generic lib_hal_legacy libcntpr)
    add_importlibs(hal ntoskrnl)
    #add_pch(hal include/hal.h)
    add_dependencies(hal psdk bugcodes)
    set_entrypoint(hal HalInitSystem 8)
    set_subsystem(hal native)
    set_image_base(hal 0x00010000)
    add_cd_file(TARGET hal DESTINATION reactos/system32 NO_CAB FOR all)
    if(MSVC)
        add_target_link_flags(hal "/ignore:4216 /ignore:4078")
    endif()

    # hal acpi
    spec2def(halacpi.dll ../hal.spec halacpi)
    add_library(halacpi SHARED
        ${HAL_UP_SOURCE}
        ${HAL_PIC_SOURCE}
        generic/v86.S
        acpi/halacpi.rc
        ${CMAKE_CURRENT_BINARY_DIR}/halacpi.def)
    target_link_libraries(halacpi lib_hal_generic lib_hal_acpi libcntpr)
    add_importlibs(halacpi ntoskrnl)
    add_dependencies(halacpi psdk bugcodes)
    set_entrypoint(halacpi HalInitSystem@8)
    set_subsystem(halacpi native)
    set_image_base(halacpi 0x00010000)
    add_target_compile_definitions(halacpi CONFIG_ACPI)
    add_cd_file(TARGET halacpi DESTINATION reactos/system32 NO_CAB FOR all)
    if(MSVC)
        add_target_link_flags(halacpi "/ignore:4216 /ignore:4078")
    endif()

    # mini_hal
    add_library(mini_hal ${MINI_HAL_SOURCE})
    add_target_compile_definitions(mini_hal _BLDR_ _MINIHAL_)
    add_dependencies(mini_hal psdk bugcodes asm)

elseif(ARCH MATCHES amd64)

    spec2def(hal.dll ../hal.spec)

    list(APPEND HAL_SOURCE
        ${HAL_GENERIC_SOURCE}
        ${HAL_ACPI_SOURCE}
        ${HAL_APIC_SOURCE}
        generic/spinlock.c
        amd64/x86bios.c
        amd64/halinit.c
        amd64/processor.c
        ${CMAKE_CURRENT_BINARY_DIR}/hal.def)

    # hal
    add_library(hal SHARED ${HAL_SOURCE})
    add_pch(hal include/hal.h)
    add_dependencies(hal psdk bugcodes)

    set_entrypoint(hal HalInitSystem)
    set_subsystem(hal native)
    set_image_base(hal 0x00010000)
    add_importlibs(hal ntoskrnl)
    target_link_libraries(hal libcntpr)
    if(MSVC)
        add_target_link_flags(hal "/ignore:4216")
    endif()

    add_cd_file(TARGET hal DESTINATION reactos/system32 NO_CAB FOR all)

endif()

add_importlib_target(../hal.spec)
