From fda2ee2ad8bdeb7eb6f10c882a7527f9a914a519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 29 Dec 2025 14:14:04 +0100 Subject: [PATCH] [BOOTVID] Modularize the different bootvid's build rules (#8548) The aim is to be able to compile multiple bootvids for a given ReactOS build without having to duplicate the same commands. --- drivers/base/bootvid/CMakeLists.txt | 105 +++++++++++------- drivers/base/bootvid/arm/armbvid.cmake | 7 ++ drivers/base/bootvid/bootvid.rc | 25 +++-- drivers/base/bootvid/i386/pc/vgabvid.cmake | 11 ++ drivers/base/bootvid/i386/pc98/pc98bvid.cmake | 7 ++ drivers/base/bootvid/i386/xbox/xboxbvid.cmake | 7 ++ drivers/base/bootvid/precomp.h | 17 +-- sdk/include/reactos/version.rc | 2 +- 8 files changed, 119 insertions(+), 62 deletions(-) create mode 100644 drivers/base/bootvid/arm/armbvid.cmake create mode 100644 drivers/base/bootvid/i386/pc/vgabvid.cmake create mode 100644 drivers/base/bootvid/i386/pc98/pc98bvid.cmake create mode 100644 drivers/base/bootvid/i386/xbox/xboxbvid.cmake diff --git a/drivers/base/bootvid/CMakeLists.txt b/drivers/base/bootvid/CMakeLists.txt index bf1ae30dc56..82c284b8298 100644 --- a/drivers/base/bootvid/CMakeLists.txt +++ b/drivers/base/bootvid/CMakeLists.txt @@ -1,43 +1,70 @@ -spec2def(bootvid.dll bootvid.spec ADD_IMPORTLIB) +function(add_bootvid _target _configfile) + cmake_parse_arguments(_bviddata "" "NAME_ON_CD" "SOURCES" ${ARGN}) -if((ARCH STREQUAL "i386") OR (ARCH STREQUAL "amd64")) - if(SARCH STREQUAL "pc98") - list(APPEND SOURCE - i386/pc98/pc98.h - i386/pc98/bootvid.c) - elseif(SARCH STREQUAL "xbox") - list(APPEND SOURCE - i386/xbox/xbox.h - i386/xbox/bootvid.c) - else() - list(APPEND SOURCE - i386/pc/pc.h - i386/pc/cmdcnst.h - i386/pc/bootvid.c - i386/pc/bootdata.c - i386/pc/vga.h - i386/pc/vga.c) + # Handle the spec file for the dll name + spec2def(${_target}.dll bootvid.spec ADD_IMPORTLIB) + + # Set default values for the version resource file + set(REACTOS_STR_INTERNAL_NAME "$") + set(REACTOS_STR_ORIGINAL_FILENAME "$") + + # Include the per-target definitions (COMPILE_DEFINITIONS, MODULE_HEADER, and SOURCE) + include(${_configfile}) + list(APPEND SOURCE ${_bviddata_SOURCES}) + + # Manage the module-specific header for precomp.h + if(MODULE_HEADER) + #get_filename_component(MODULE_HEADER "${MODULE_HEADER}" ABSOLUTE) + file(RELATIVE_PATH MODULE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}" "${MODULE_HEADER}") + #string(REPLACE "\\" "/" MODULE_HEADER "${MODULE_HEADER}") + file(TO_CMAKE_PATH "${MODULE_HEADER}" MODULE_HEADER) + list(APPEND COMPILE_DEFINITIONS "MODULE_HEADER=\"${MODULE_HEADER}\"") endif() -elseif(ARCH STREQUAL "arm") - list(APPEND SOURCE - arm/arm.h - arm/bootvid.c) + + # Add the common sources + list(APPEND SOURCE common.c console.c fontdata.c precomp.h) + + # Generate the per-target version resource file in two passes: + # 1. Configure-time generation to replace the values with generator expressions; + # 2. Generation-time by overwriting the file with the resolved expressions. + configure_file(bootvid.rc ${CMAKE_CURRENT_BINARY_DIR}/${_target}.rc) + file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.rc + INPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.rc) # TARGET ${_target} + + # Create the actual target + add_library(${_target} MODULE + ${SOURCE} + ${CMAKE_CURRENT_BINARY_DIR}/${_target}.rc + ${CMAKE_CURRENT_BINARY_DIR}/${_target}.def) + add_pch(${_target} precomp.h "") + target_compile_definitions(${_target} PRIVATE ${COMPILE_DEFINITIONS}) + + set_module_type(${_target} kerneldll ENTRYPOINT 0) + add_importlibs(${_target} ntoskrnl hal) + add_dependencies(${_target} psdk) + + if(NOT _bviddata_NAME_ON_CD) + set(_bviddata_NAME_ON_CD "$") + endif() + add_cd_file(TARGET ${_target} DESTINATION reactos/system32 NO_CAB NAME_ON_CD ${_bviddata_NAME_ON_CD} FOR all) +endfunction() + +if(ARCH STREQUAL "i386") +## FIXME: Temporary bootvid.dll renames on the CD. +## These should be done instead by the setup program during install. + if(SARCH STREQUAL "pc98") + set(PC98BVID_NAME_ON_CD bootvid.dll) + set(VGABVID_NAME_ON_CD vgabvid.dll) + elseif(SARCH STREQUAL "xbox") + set(XBOXBVID_NAME_ON_CD bootvid.dll) + set(VGABVID_NAME_ON_CD vgabvid.dll) + endif() + add_bootvid(pc98bvid i386/pc98/pc98bvid.cmake NAME_ON_CD ${PC98BVID_NAME_ON_CD}) + add_bootvid(xboxbvid i386/xbox/xboxbvid.cmake NAME_ON_CD ${XBOXBVID_NAME_ON_CD}) +endif() +if((ARCH STREQUAL "i386") OR (ARCH STREQUAL "amd64")) + add_bootvid(bootvid i386/pc/vgabvid.cmake NAME_ON_CD ${VGABVID_NAME_ON_CD}) +elseif(ARCH STREQUAL "arm") + add_bootvid(bootvid arm/armbvid.cmake) endif() - -list(APPEND SOURCE - common.c - console.c - fontdata.c - precomp.h) - -add_library(bootvid MODULE - ${SOURCE} - bootvid.rc - ${CMAKE_CURRENT_BINARY_DIR}/bootvid.def) - -set_module_type(bootvid kerneldll ENTRYPOINT 0) -add_importlibs(bootvid ntoskrnl hal) -add_pch(bootvid precomp.h SOURCE) -add_dependencies(bootvid psdk) -add_cd_file(TARGET bootvid DESTINATION reactos/system32 NO_CAB FOR all) diff --git a/drivers/base/bootvid/arm/armbvid.cmake b/drivers/base/bootvid/arm/armbvid.cmake new file mode 100644 index 00000000000..09a0a6080b0 --- /dev/null +++ b/drivers/base/bootvid/arm/armbvid.cmake @@ -0,0 +1,7 @@ + +set(MODULE_HEADER ${CMAKE_CURRENT_LIST_DIR}/arm.h) # For precomp.h +list(APPEND SOURCE + ${MODULE_HEADER} + ${CMAKE_CURRENT_LIST_DIR}/bootvid.c) + +set(REACTOS_STR_FILE_DESCRIPTION "ARM Versatile Boot Video Driver") diff --git a/drivers/base/bootvid/bootvid.rc b/drivers/base/bootvid/bootvid.rc index 5e1c312ad17..9ef2bdfa8ea 100644 --- a/drivers/base/bootvid/bootvid.rc +++ b/drivers/base/bootvid/bootvid.rc @@ -7,14 +7,23 @@ #define REACTOS_VERSION_DLL -#if defined(SARCH_PC98) -#define REACTOS_STR_FILE_DESCRIPTION "NEC PC-98 Boot Video Driver" -#elif defined(SARCH_XBOX) -#define REACTOS_STR_FILE_DESCRIPTION "Original Xbox Boot Video Driver" -#else -#define REACTOS_STR_FILE_DESCRIPTION "VGA Boot Driver" +/* Each bootvid configuration file defines REACTOS_STR_FILE_DESCRIPTION */ +#cmakedefine REACTOS_STR_FILE_DESCRIPTION "${REACTOS_STR_FILE_DESCRIPTION}" +#ifndef REACTOS_STR_FILE_DESCRIPTION +#define REACTOS_STR_FILE_DESCRIPTION "Boot Video Driver" +#endif + +/* The main bootvid CMake file defines default values for + * REACTOS_STR_INTERNAL_NAME and REACTOS_STR_ORIGINAL_FILENAME. + * Each bootvid configuration file can override these values. */ +#cmakedefine REACTOS_STR_INTERNAL_NAME "${REACTOS_STR_INTERNAL_NAME}" +#ifndef REACTOS_STR_INTERNAL_NAME +#define REACTOS_STR_INTERNAL_NAME "bootvid" +#endif + +#cmakedefine REACTOS_STR_ORIGINAL_FILENAME "${REACTOS_STR_ORIGINAL_FILENAME}" +#ifndef REACTOS_STR_ORIGINAL_FILENAME +#define REACTOS_STR_ORIGINAL_FILENAME "bootvid.dll" #endif -#define REACTOS_STR_INTERNAL_NAME "bootvid.dll" -#define REACTOS_STR_ORIGINAL_FILENAME "bootvid.dll" #include diff --git a/drivers/base/bootvid/i386/pc/vgabvid.cmake b/drivers/base/bootvid/i386/pc/vgabvid.cmake new file mode 100644 index 00000000000..b85bf14b132 --- /dev/null +++ b/drivers/base/bootvid/i386/pc/vgabvid.cmake @@ -0,0 +1,11 @@ + +set(MODULE_HEADER ${CMAKE_CURRENT_LIST_DIR}/pc.h) # For precomp.h +list(APPEND SOURCE + ${MODULE_HEADER} + ${CMAKE_CURRENT_LIST_DIR}/cmdcnst.h + ${CMAKE_CURRENT_LIST_DIR}/bootvid.c + ${CMAKE_CURRENT_LIST_DIR}/bootdata.c + ${CMAKE_CURRENT_LIST_DIR}/vga.h + ${CMAKE_CURRENT_LIST_DIR}/vga.c) + +set(REACTOS_STR_FILE_DESCRIPTION "VGA Boot Driver") diff --git a/drivers/base/bootvid/i386/pc98/pc98bvid.cmake b/drivers/base/bootvid/i386/pc98/pc98bvid.cmake new file mode 100644 index 00000000000..ddcfb6e628a --- /dev/null +++ b/drivers/base/bootvid/i386/pc98/pc98bvid.cmake @@ -0,0 +1,7 @@ + +set(MODULE_HEADER ${CMAKE_CURRENT_LIST_DIR}/pc98.h) # For precomp.h +list(APPEND SOURCE + ${MODULE_HEADER} + ${CMAKE_CURRENT_LIST_DIR}/bootvid.c) + +set(REACTOS_STR_FILE_DESCRIPTION "NEC PC-98 Boot Video Driver") diff --git a/drivers/base/bootvid/i386/xbox/xboxbvid.cmake b/drivers/base/bootvid/i386/xbox/xboxbvid.cmake new file mode 100644 index 00000000000..45a88a2d281 --- /dev/null +++ b/drivers/base/bootvid/i386/xbox/xboxbvid.cmake @@ -0,0 +1,7 @@ + +set(MODULE_HEADER ${CMAKE_CURRENT_LIST_DIR}/xbox.h) # For precomp.h +list(APPEND SOURCE + ${MODULE_HEADER} + ${CMAKE_CURRENT_LIST_DIR}/bootvid.c) + +set(REACTOS_STR_FILE_DESCRIPTION "Original Xbox Boot Video Driver") diff --git a/drivers/base/bootvid/precomp.h b/drivers/base/bootvid/precomp.h index bd89136915e..1d2cbc033bd 100644 --- a/drivers/base/bootvid/precomp.h +++ b/drivers/base/bootvid/precomp.h @@ -13,20 +13,9 @@ #include #include -/* Arch-specific includes */ -#if defined(_M_IX86) || defined(_M_AMD64) -#if defined(SARCH_PC98) -#include "i386/pc98/pc98.h" -#elif defined(SARCH_XBOX) -#include "i386/xbox/xbox.h" -#else -#include "i386/pc/vga.h" -#include "i386/pc/pc.h" -#endif -#elif defined(_M_ARM) -#include "arm/arm.h" -#else -#error Unknown architecture +/* Module-specific header */ +#ifdef MODULE_HEADER +#include MODULE_HEADER #endif /* Define if FontData has upside-down characters */ diff --git a/sdk/include/reactos/version.rc b/sdk/include/reactos/version.rc index 32c612b65a9..93ee42450a1 100644 --- a/sdk/include/reactos/version.rc +++ b/sdk/include/reactos/version.rc @@ -15,7 +15,7 @@ #include "version.h" #include "buildno.h" -/* Define some defaults (shouldn't be overwritten by applications */ +/* Define some defaults (shouldn't be overwritten by applications) */ #define REACTOS_DEFAULT_STR_COMPANY_NAME "ReactOS Project" #define REACTOS_DEFAULT_STR_DESCRIPTION "ReactOS Core Component" #define REACTOS_DEFAULT_STR_INTERNAL_NAME ""