mirror of
https://github.com/reactos/reactos.git
synced 2026-06-01 00:40:26 +08:00
[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.
This commit is contained in:
@@ -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 "$<TARGET_NAME:${_target}>")
|
||||
set(REACTOS_STR_ORIGINAL_FILENAME "$<TARGET_FILE_NAME:${_target}>")
|
||||
|
||||
# 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 "$<TARGET_FILE_NAME:${_target}>")
|
||||
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)
|
||||
|
||||
7
drivers/base/bootvid/arm/armbvid.cmake
Normal file
7
drivers/base/bootvid/arm/armbvid.cmake
Normal file
@@ -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")
|
||||
@@ -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 <reactos/version.rc>
|
||||
|
||||
11
drivers/base/bootvid/i386/pc/vgabvid.cmake
Normal file
11
drivers/base/bootvid/i386/pc/vgabvid.cmake
Normal file
@@ -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")
|
||||
7
drivers/base/bootvid/i386/pc98/pc98bvid.cmake
Normal file
7
drivers/base/bootvid/i386/pc98/pc98bvid.cmake
Normal file
@@ -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")
|
||||
7
drivers/base/bootvid/i386/xbox/xboxbvid.cmake
Normal file
7
drivers/base/bootvid/i386/xbox/xboxbvid.cmake
Normal file
@@ -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")
|
||||
@@ -13,20 +13,9 @@
|
||||
#include <ndk/halfuncs.h>
|
||||
#include <drivers/bootvid/bootvid.h>
|
||||
|
||||
/* 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 */
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
Reference in New Issue
Block a user