[HAL] Implement amd64 BIOS call support
[reactos.git] / hal / halx86 / CMakeLists.txt
index 4684c89..f4148eb 100644 (file)
@@ -5,257 +5,78 @@ add_definitions(
 
 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 STREQUAL "i386")
-    list(APPEND HAL_GENERIC_SOURCE
-        generic/bios.c
-        generic/portio.c)
-endif()
-
-if(CMAKE_VERSION VERSION_GREATER 2.8.7)
-    add_library(lib_hal_generic OBJECT ${HAL_GENERIC_SOURCE})
-else()
-    add_library(lib_hal_generic ${HAL_GENERIC_SOURCE})
-    add_dependencies(lib_hal_generic asm)
-endif()
-
-add_pch(lib_hal_generic include/hal.h)
-
-if(ARCH STREQUAL "i386")
-
-    #####################################
-    # Generate the pcidata source files in the x86 build
-    #
-    add_custom_command(
-        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h
-        COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h ClassTable INIT_FUNCTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
-        DEPENDS native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids)
-
-    add_custom_command(
-        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h
-        COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h VendorTable INIT_FUNCTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
-        DEPENDS native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids)
-    #####################################
-
-    list(APPEND HAL_LEGACY_SOURCE
-        legacy/bus/bushndlr.c
-        legacy/bus/cmosbus.c
-        legacy/bus/isabus.c
-        legacy/bus/pcibus.c
-        ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c
-        ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c
-        legacy/bus/sysbus.c
-        legacy/bussupp.c
-        legacy/halpnpdd.c
-        legacy/halpcat.c)
-
-    if(CMAKE_VERSION VERSION_GREATER 2.8.7)
-        add_library(lib_hal_legacy OBJECT ${HAL_LEGACY_SOURCE})
-    else()
-        add_library(lib_hal_legacy ${HAL_LEGACY_SOURCE})
-    endif()
-
-    #add_pch(lib_hal_legacy include/hal.h)
-
-    if(NOT CMAKE_VERSION VERSION_GREATER 2.8.7)
-        target_link_libraries(lib_hal_legacy lib_hal_generic)
-    endif()
-
-endif()
-
-list(APPEND HAL_ACPI_SOURCE
-    acpi/halacpi.c
-    acpi/halpnpdd.c
-    acpi/busemul.c
-    legacy/bus/pcibus.c)
-
-if(CMAKE_VERSION VERSION_GREATER 2.8.7)
-    add_library(lib_hal_acpi OBJECT ${HAL_ACPI_SOURCE})
-else()
-    add_library(lib_hal_acpi ${HAL_ACPI_SOURCE})
-endif()
-#add_pch(lib_hal_acpi include/hal.h)
-
-if(NOT CMAKE_VERSION VERSION_GREATER 2.8.7)
-    target_link_libraries(lib_hal_acpi lib_hal_generic)
-endif()
-
-list(APPEND HAL_UP_SOURCE
-    generic/spinlock.c
-    up/processor.c)
-
-if(CMAKE_VERSION VERSION_GREATER 2.8.7)
-    add_library(lib_hal_up OBJECT ${HAL_UP_SOURCE})
-endif()
-
-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 STREQUAL "i386")
-    list(APPEND HAL_PIC_SOURCE
-        generic/profil.c
-        generic/timer.c
-        generic/systimer.S
-        generic/trap.S
-        up/halinit_up.c
-        up/pic.c)
-
-    if(CMAKE_VERSION VERSION_GREATER 2.8.7)
-        add_library(lib_hal_pic OBJECT ${HAL_PIC_SOURCE})
-    endif()
-
-    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 ADD_IMPORTLIB)
-
-    # hal
-    if(CMAKE_VERSION VERSION_GREATER 2.8.7)
-        add_library(hal SHARED
-            $<TARGET_OBJECTS:lib_hal_generic>
-            $<TARGET_OBJECTS:lib_hal_legacy>
-            $<TARGET_OBJECTS:lib_hal_up>
-            $<TARGET_OBJECTS:lib_hal_pic>
-            generic/v86.S
-            up/halup.rc
+    ${REACTOS_SOURCE_DIR}/ntoskrnl/include
+    ${REACTOS_SOURCE_DIR}/sdk/include/reactos/libs/fast486)
+
+function(add_hal _halname)
+    cmake_parse_arguments(_haldata "" "" "SOURCES;COMPONENTS" ${ARGN})
+
+    # Handle the spec file for the dll name
+    spec2def(${_halname}.dll ../hal.spec ADD_IMPORTLIB)
+
+    # Create the actual target
+    if(NOT MSVC)
+        foreach(_component ${_haldata_COMPONENTS})
+            list(APPEND _haldata_SOURCES "$<TARGET_OBJECTS:lib_hal_${_component}>")
+        endforeach()
+        add_library(${_halname} MODULE
+            ${_haldata_SOURCES}
             ${CMAKE_CURRENT_BINARY_DIR}/hal.def)
     else()
-        add_library(hal SHARED
-            ${HAL_UP_SOURCE}
-            ${HAL_PIC_SOURCE}
-            generic/v86.S
-            up/halup.rc
+        foreach(_component ${_haldata_COMPONENTS})
+            list(APPEND _haldata_LIBS "lib_hal_${_component}")
+        endforeach()
+        add_library(${_halname} MODULE
+            ${_haldata_SOURCES}
             ${CMAKE_CURRENT_BINARY_DIR}/hal.def)
+        target_link_libraries(${_halname} ${_haldata_LIBS})
     endif()
 
-    if(NOT CMAKE_VERSION VERSION_GREATER 2.8.7)
-        target_link_libraries(hal lib_hal_generic lib_hal_legacy)
-    endif()
-    target_link_libraries(hal 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)
+    target_link_libraries(${_halname} libcntpr)
+    add_importlibs(${_halname} ntoskrnl)
+    #add_pch(${_halname} include/hal.h)
+    add_dependencies(${_halname} psdk asm)
+    set_module_type(${_halname} kerneldll ENTRYPOINT HalInitSystem 8)
+    add_cd_file(TARGET ${_halname} 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)
-    if(CMAKE_VERSION VERSION_GREATER 2.8.7)
-        add_library(halacpi SHARED
-            $<TARGET_OBJECTS:lib_hal_generic>
-            $<TARGET_OBJECTS:lib_hal_acpi>
-            $<TARGET_OBJECTS:lib_hal_up>
-            $<TARGET_OBJECTS:lib_hal_pic>
-            generic/v86.S
-            acpi/halacpi.rc
-            ${CMAKE_CURRENT_BINARY_DIR}/halacpi.def)
+        add_target_link_flags(${_halname} "/ignore:4216 /ignore:4078")
     else()
-        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(${_halname} -lgcc)
     endif()
+endfunction()
 
-    if(NOT CMAKE_VERSION VERSION_GREATER 2.8.7)
-        target_link_libraries(halacpi lib_hal_generic lib_hal_acpi)
-    endif()
-    target_link_libraries(halacpi 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()
+# The components
+include(generic.cmake)
+include(acpi.cmake)
+include(apic.cmake)
 
-    # mini_hal
-    add_library(mini_hal ${MINI_HAL_SOURCE})
-    add_target_compile_definitions(mini_hal _BLDR_ _MINIHAL_)
-    add_dependencies(mini_hal psdk bugcodes asm)
+if(ARCH STREQUAL "i386")
+    include(pcidata.cmake)
+    include(legacy.cmake)
+    include(up.cmake)
+    include(pic.cmake)
+    add_subdirectory(minihal)
 
-elseif(ARCH STREQUAL "amd64")
+    # hal
+    add_hal(hal SOURCES up/halup.rc COMPONENTS generic legacy up pic)
+    add_hal(halacpi SOURCES acpi/halacpi.rc COMPONENTS generic acpi up pic)
+    add_hal(halapic SOURCES acpi/halacpi.rc COMPONENTS generic legacy up apic)
+    add_hal(halaacpi SOURCES acpi/halacpi.rc COMPONENTS generic acpi up apic)
+
+    #add_hal(halmps SOURCES up/halup.rc COMPONENTS generic legacy smp pic)
+    #add_hal(halmacpi SOURCES acpi/halacpi.rc COMPONENTS generic acpi smp pic)
+    #add_hal(halmapic SOURCES acpi/halacpi.rc COMPONENTS generic legacy smp apic)
+    #add_hal(halmaacpi SOURCES acpi/halacpi.rc COMPONENTS generic acpi smp apic)
 
-    spec2def(hal.dll ../hal.spec ADD_IMPORTLIB)
+elseif(ARCH STREQUAL "amd64")
 
     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)
+        amd64/processor.c)
 
-    # 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)
+    add_hal(hal SOURCES ${HAL_SOURCE} COMPONENTS generic acpi apic)
+    target_link_libraries(hal fast486)
 
 endif()
-
-