Synchronize with trunk.
[reactos.git] / hal / halx86 / CMakeLists.txt
index 81d684e..6381b4a 100644 (file)
@@ -7,178 +7,76 @@ 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")
+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 AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
+        foreach(_component ${_haldata_COMPONENTS})
+            list(APPEND _haldata_SOURCES "$<TARGET_OBJECTS:lib_hal_${_component}>")
+        endforeach()
+        add_library(${_halname} SHARED
+            ${_haldata_SOURCES}
+            ${CMAKE_CURRENT_BINARY_DIR}/hal.def)
+    else()
+        foreach(_component ${_haldata_COMPONENTS})
+            list(APPEND _haldata_LIBS "lib_hal_${_component}")
+        endforeach()
+        add_library(${_halname} SHARED
+            ${_haldata_SOURCES}
+            ${CMAKE_CURRENT_BINARY_DIR}/hal.def)
+        target_link_libraries(${_halname} ${_haldata_LIBS})
     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)
+    target_link_libraries(${_halname} libcntpr)
+    add_importlibs(${_halname} ntoskrnl)
+    #add_pch(${_halname} include/hal.h)
+    add_dependencies(${_halname} psdk bugcodes asm)
+    set_entrypoint(${_halname} HalInitSystem 8)
+    set_subsystem(${_halname} native)
+    set_image_base(${_halname} 0x00010000)
+    add_cd_file(TARGET ${_halname} DESTINATION reactos/system32 NO_CAB FOR all)
     if(MSVC)
-        add_target_link_flags(halacpi "/ignore:4216 /ignore:4078")
+        add_target_link_flags(${_halname} "/ignore:4216 /ignore:4078")
+    else()
+        target_link_libraries(${_halname} -lgcc)
     endif()
+endfunction()
 
-    # mini_hal
-    add_library(mini_hal ${MINI_HAL_SOURCE})
-    add_target_compile_definitions(mini_hal _BLDR_ _MINIHAL_)
-    add_dependencies(mini_hal psdk bugcodes asm)
+# The components
+include(generic.cmake)
+include(acpi.cmake)
+include(apic.cmake)
+
+if(ARCH STREQUAL "i386")
+    include(pcidata.cmake)
+    include(legacy.cmake)
+    include(up.cmake)
+    include(pic.cmake)
+    include(minihal.cmake)
+
+    # 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)
 
-elseif(ARCH MATCHES amd64)
+    #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)
+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)
 
 endif()
-
-add_importlib_target(../hal.spec)