diff options
| -rw-r--r-- | CMakeLists.txt | 14 | ||||
| -rw-r--r-- | CONTRIBUTING.md | 4 | ||||
| -rw-r--r-- | arch/x86/cpuid/CMakeLists.txt | 68 | ||||
| -rw-r--r-- | arch/x86/ic/CMakeLists.txt | 54 | ||||
| -rw-r--r-- | arch/x86/io/CMakeLists.txt | 55 | ||||
| -rw-r--r-- | arch/x86/msr/CMakeLists.txt | 47 | ||||
| -rw-r--r-- | cmake/module/cmaketodo | 10 | ||||
| -rw-r--r-- | cmake/module/dexport.cmake (renamed from cmake/module/runfile.cmake) | 10 | ||||
| -rw-r--r-- | cmake/module/feature.cmake | 39 | ||||
| -rw-r--r-- | drivers/acpi/CMakeLists.txt | 55 | ||||
| -rw-r--r-- | kernel/details/CMakeLists.txt | 21 |
11 files changed, 267 insertions, 110 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 383bc13..5e55185 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,8 +59,17 @@ list(APPEND CMAKE_MODULE_PATH ) include(feature) + +# Propagate project information to feature module +featureProjectDataAssign( + "${OBJECTIVE_SUPPORTED_PROCESSORS}" + "${ObjectiveProject_SOURCE_DIR}" + "${ObjectiveProject_ARCHITECTURE}" + "cmake/toolchain" +) + include(metadata) -include(runfile) +include(dexport) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -91,6 +100,7 @@ add_library(ASM_NASM_COMPILER_REQUIREMENTS INTERFACE) # Target with linker requirements add_library(CXX_LINKER_REQUIREMENTS INTERFACE) + target_link_options(CXX_LINKER_REQUIREMENTS INTERFACE ${ObjectiveProject_CXX_FLAGS} ) @@ -144,4 +154,4 @@ target_link_libraries(Objective PRIVATE target_link_libraries(Objective PRIVATE CXX_LINKER_REQUIREMENTS) outFeaturesToFile() -writerunfile() +definesFileExport() diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cc57821..58d1259 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,7 +62,7 @@ differ. `email` branch indent to receive patches from email and used by gerrit instance when pushing to review. ## Sending a patch -**`<builddir>/CMakeReplication.txt` file must is attached to the commit** +**`<builddir>/CMakeDexport.txt` file must is attached to the commit** Before to submit a patch, please read its whole. Make sure there are no unintended changes and fix them. Trailing whitespaces, empty commits, test code, bad words and etc. must be deleted. @@ -132,7 +132,7 @@ Attach the following information: - Version of the kernel. - Explain the behavior you would expect and the actual behaviour. - Exactly what steps did you take to trigger the bug? -- `<builddir>/CMakeReplication.txt` file content. +- `<builddir>/CMakeDexport.txt` file content. - If possible provide an exact example that demonstrates your problem. This could be a code snippet or display content from emulator or something else. Create the minimum working example that demonstrates your problem. Remove diff --git a/arch/x86/cpuid/CMakeLists.txt b/arch/x86/cpuid/CMakeLists.txt index e6af515..6833df5 100644 --- a/arch/x86/cpuid/CMakeLists.txt +++ b/arch/x86/cpuid/CMakeLists.txt @@ -16,32 +16,56 @@ * ObjectiveOS. If not, see <https://www.gnu.org/licenses/>. ]] -add_library(CPUID STATIC) -target_link_libraries(CPUID PUBLIC CXX_COMPILER_REQUIREMENTS) +set(IS_CPUID_DEFINES TRUE) +ifFeatureEnables(CPUID IS_CPUID_DEFINES) -target_sources(CPUID PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/Cpuid.cpp -) +if(NOT IS_CPUID_DEFINES) + add_library(CPUID INTERFACE) +else() -target_sources(CPUID - PUBLIC - FILE_SET HEADERS - BASE_DIRS - ${CMAKE_CURRENT_LIST_DIR} - FILES - ${CMAKE_CURRENT_LIST_DIR}/Cpuid.h -) + target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE + FEATRUE_CPUID + ) -target_link_libraries(Architecture INTERFACE CPUID) + add_library(CPUID STATIC) -add_library(CPUIDASM OBJECT) + target_link_libraries(CPUID PUBLIC CXX_COMPILER_REQUIREMENTS) -target_sources(CPUIDASM PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/CpuidCheck.nasm -) + target_sources(CPUID PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/Cpuid.cpp + ) -target_link_libraries(CPUIDASM PUBLIC - ASM_NASM_COMPILER_REQUIREMENTS -) + target_sources(CPUID + PUBLIC + FILE_SET HEADERS + BASE_DIRS + ${CMAKE_CURRENT_LIST_DIR} + FILES + ${CMAKE_CURRENT_LIST_DIR}/Cpuid.h + ) -target_sources(ArchitectureAssemblerSources PRIVATE $<TARGET_OBJECTS:CPUIDASM>) + target_link_libraries(Architecture INTERFACE CPUID) + + add_library(CPUIDASM OBJECT) + + target_sources(CPUIDASM PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/CpuidCheck.nasm + ) + + target_link_libraries(CPUIDASM PUBLIC + ASM_NASM_COMPILER_REQUIREMENTS + ) + + target_sources(ArchitectureAssemblerSources PRIVATE $<TARGET_OBJECTS:CPUIDASM>) +endif() + +startFeatureRecording(CPUID) + +setFeatureField(NAME "cpuid extension") +setFeatureField(HASHCOMMIT "e3e68862bbc731802efc39cbfb1b6df7ab255204") +setFeatureField(DESCRIPTION "This feature makes available to use cpuid" + "processor's function") +setFeatureField(TAGS "NEW;MULTIPLATFORM") +setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>") + +saveFeatureRecording() diff --git a/arch/x86/ic/CMakeLists.txt b/arch/x86/ic/CMakeLists.txt index b724a64..cdb30c3 100644 --- a/arch/x86/ic/CMakeLists.txt +++ b/arch/x86/ic/CMakeLists.txt @@ -16,19 +16,41 @@ * ObjectiveOS. If not, see <https://www.gnu.org/licenses/>. ]] -add_library(IC STATIC) -target_link_libraries(IC PUBLIC CXX_COMPILER_REQUIREMENTS) - -target_sources(IC PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/Pic.cpp -) - -target_sources(IC - PUBLIC - FILE_SET HEADERS - FILES - ${CMAKE_CURRENT_LIST_DIR}/Pic.h - ${CMAKE_CURRENT_LIST_DIR}/IPic.h -) - -target_link_libraries(Architecture INTERFACE IC) +set(IS_PIC_DEFINES TRUE) +ifFeatureEnables(PIC IS_PIC_DEFINES) + +if(NOT IS_PIC_DEFINES) + add_library(PIC INTERFACE) +else() + target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE + FEATURE_PIC + ) + + add_library(PIC STATIC) + target_link_libraries(PIC PUBLIC CXX_COMPILER_REQUIREMENTS) + + target_sources(PIC PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/Pic.cpp + ) + + target_sources(PIC + PUBLIC + FILE_SET HEADERS + FILES + ${CMAKE_CURRENT_LIST_DIR}/Pic.h + ${CMAKE_CURRENT_LIST_DIR}/IPic.h + ) + + target_link_libraries(Architecture INTERFACE PIC) +endif() + +startFeatureRecording(PIC) + +setFeatureField(NAME "PIC support") +setFeatureField(HASHCOMMIT "515a11b818e4140845f69bb26a19d270a9e42178") +setFeatureField(DESCRIPTION "PIC x86 support") +setFeatureField(TAGS "NEW") +setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>") +setFeatureDependencies("x86;ACPI") + +saveFeaturerecording() diff --git a/arch/x86/io/CMakeLists.txt b/arch/x86/io/CMakeLists.txt index 0686529..b63c4eb 100644 --- a/arch/x86/io/CMakeLists.txt +++ b/arch/x86/io/CMakeLists.txt @@ -16,19 +16,42 @@ * ObjectiveOS. If not, see <https://www.gnu.org/licenses/>. ]] -add_library(IO STATIC) -target_link_libraries(IO PUBLIC CXX_COMPILER_REQUIREMENTS) - -target_sources(IO PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/VGADisplay.cpp -) - -target_sources(IO - PUBLIC - FILE_SET HEADERS - FILES - ${CMAKE_CURRENT_LIST_DIR}/VGADisplay.h - ${CMAKE_CURRENT_LIST_DIR}/VGADisplayInfo.h -) - -target_link_libraries(Architecture INTERFACE IO) +set(IS_DISPLAY_DEFINES TRUE) +ifFeatureEnables(DISPLAY IS_DISPLAY_DEFINES) + +if(NOT IS_DISPLAY_DEFINES) + add_library(DISPLAY INTERFACE) +else() + target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE + FEATURE_DISPLAY + ) + + add_library(DISPLAY STATIC) + target_link_libraries(DISPLAY PUBLIC CXX_COMPILER_REQUIREMENTS) + + target_sources(DISPLAY PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/VGADisplay.cpp + ) + + target_sources(DISPLAY + PUBLIC + FILE_SET HEADERS + FILES + ${CMAKE_CURRENT_LIST_DIR}/VGADisplay.h + ${CMAKE_CURRENT_LIST_DIR}/VGADisplayInfo.h + ) + + target_link_libraries(Architecture INTERFACE DISPLAY) +endif() + +startFeatureRecording(DISPLAY) + +setFeatureField(NAME "VGA driver for x86 processors") +setFeatureField(HASHCOMMIT "b82ccebd3a0cce28177b5fac046139e2de7737fa") +setFeatureField(DESCRIPTION "Add ability to write into framebuffer" + "under the x86 processorŅ") +setFeatureField(TAGS "NEW") +setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>") +setFeatureDependencies(x86) + +saveFeatureRecording() diff --git a/arch/x86/msr/CMakeLists.txt b/arch/x86/msr/CMakeLists.txt index 3f4fd8a..47112dd 100644 --- a/arch/x86/msr/CMakeLists.txt +++ b/arch/x86/msr/CMakeLists.txt @@ -16,18 +16,41 @@ * ObjectiveOS. If not, see <https://www.gnu.org/licenses/>. ]] -add_library(MSR STATIC) -target_link_libraries(MSR PUBLIC CXX_COMPILER_REQUIREMENTS) +set(IS_MSR_DEFINES TRUE) +ifFeatureEnables(MSR IS_MSR_DEFINES) -target_sources(MSR PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/Msr.cpp -) +if(NOT IS_MSR_DEFINES) + add_library(MSR INTERFACE) +else() + target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE + FEATRUE_MSR + ) -target_sources(MSR - PUBLIC - FILE_SET HEADERS - FILES - ${CMAKE_CURRENT_LIST_DIR}/Msr.h -) + add_library(MSR STATIC) + target_link_libraries(MSR PUBLIC CXX_COMPILER_REQUIREMENTS) -target_link_libraries(Architecture INTERFACE MSR) + target_sources(MSR PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/Msr.cpp + ) + + target_sources(MSR + PUBLIC + FILE_SET HEADERS + FILES + ${CMAKE_CURRENT_LIST_DIR}/Msr.h + ) + + target_link_libraries(Architecture INTERFACE MSR) +endif() + +startFeatureRecording(MSR) + +setFeatureField(NAME "MSR register extension") +setFeatureField(HASHCOMMIT "515a11b818e4140845f69bb26a19d270a9e42178") +setFeatureField(DESCRIPTION "This feature makes available to use" + "the x86 MSR register") +setFeatureField(TAGS "NEW") +setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>") +setFeatureDependencies("x86;CPUID") + +saveFeaturerecording() diff --git a/cmake/module/cmaketodo b/cmake/module/cmaketodo new file mode 100644 index 0000000..9ccad77 --- /dev/null +++ b/cmake/module/cmaketodo @@ -0,0 +1,10 @@ +1.(DONE) Don't create a feature with duplicating name + Add checks in create and save feature functions + +2.(DONE) Add processing for FEATURES_SUSPEND variable features functions to suspend +this module variables populating. + +3.(DONE) Are Features accord toolchain? Implement this check. Maybe to process a cache cmake +variable. FEATURES_TIE_BUILD + +4. find_package() support for modules, and write documentation. diff --git a/cmake/module/runfile.cmake b/cmake/module/dexport.cmake index 86c7493..6ab5146 100644 --- a/cmake/module/runfile.cmake +++ b/cmake/module/dexport.cmake @@ -17,11 +17,11 @@ include_guard(GLOBAL) -set(CONFFILE_NAME "CMakeFeaturesDefineEnum.txt" CACHE STRING "Build configuration +set(CONFFILE_NAME "CMakeDexport.txt" CACHE STRING "Build configuration file contains cmake run command to reproduce last run") macro(convertCacheVarIntoArg var cachelist outfile) - if("${var}" IN_LIST ${cachelist} AND DEFINED "${${var}}") + if("${var}" IN_LIST ${cachelist} AND DEFINED "${var}") file(APPEND ${${outfile}} " -D${var}=${${var}}") endif() endmacro() @@ -37,10 +37,10 @@ macro(parseFeatures vars outfile) endforeach() endmacro() -function(writerunfile) - set(OUT_FILE "${CMAKE_BINARY_DIR}/${CONFFILE_NAME}") +function(definesFileExport) + cmake_path(APPEND OUTFILE "${CMAKE_BINARY_DIR}" "${CONFFILE_NAME}") get_directory_property(cacheVars CACHE_VARIABLES) - parseFeatures(cacheVars OUT_FILE) + parseFeatures(cacheVars OUTFILE) endfunction() diff --git a/cmake/module/feature.cmake b/cmake/module/feature.cmake index 8ee7848..bb2459c 100644 --- a/cmake/module/feature.cmake +++ b/cmake/module/feature.cmake @@ -42,8 +42,23 @@ macro(createFeatureModuleFunction name args bodyfunc) endmacro() #[[ +# Return TRUE if feature define passed from cmake option, FALSE otherwise + # featurename - the name of a feature + # result - out argument keeps variable name to propagate + ]] +createFeatureModuleFunction("ifFeatureEnables" "featurename;result" +[[ if(DEFINED FEATURE_${featurename}) + set(${result} TRUE) + else() + set(${result} FALSE) + endif() + + return(PROPAGATE ${result})]] +) + +#[[ # !IMPORTANT! Call before any other function execution and only one time. - # !IMPORTANT! Incorrect use of this function cause undefined behaviour. + # Incorrect use of this function cause undefined behaviour. # Filling cache variables related project information. ]] createFeatureModuleFunction("featureProjectDataAssign" @@ -65,7 +80,7 @@ createFeatureModuleFunction("featureModuleInitialization" "" set_property(GLOBAL PROPERTY CONSERVED_FEATURES "") # Name of out file - set(FEATURE_OUT_FILE "CMakeFeaturesDefineEnum.txt" CACHE STRING "Features data + set(FEATURE_OUT_FILE "CMakeFeatures.txt" CACHE STRING "Features data out filename") set(FEATURE_AVAILABLE_FIELDS "NAME;DESCRIPTION;TAGS;HASHCOMMIT;AUTHORSHIP" CACHE STRING "Available feature fields")]] @@ -122,11 +137,12 @@ createFeatureModuleFunction("saveFeatureRecording" "" # Save feature divides on three category: nothing to save, cannot to finish # and can finish the save process + list(POP_BACK POPULATING_FEATURES_PROPERTY PROMISE_SAVE) + if(POPULATING_FEATURES_LENGTH LESS 1) message(WARNING "Nothing feature to save") elseif(POPULATING_FEATURES_LENGTH EQUAL 1) - list(POP_BACK POPULATING_FEATURES_PROPERTY SAVING_FEATURE) - list(APPEND FEATURES_LIST_PROPERTY \${SAVING_FEATURE}) + list(APPEND FEATURES_LIST_PROPERTY \${PROMISE_SAVE}) # Finish the save process for all features in CONSERVED_FEATURES list while(NOT "\${CONSERVED_FEATURES_PROPERTY}" STREQUAL "") @@ -151,8 +167,7 @@ createFeatureModuleFunction("saveFeatureRecording" "" list(APPEND FEATURES_LIST_PROPERTY \${CONSERVED_FEATURE}) endwhile() elseif(POPULATING_FEATURES_LENGTH GREATER 1) - list(POP_BACK POPULATING_FEATURES_PROPERTY UNFINISHED_FEATURE) - list(APPEND CONSERVED_FEATURES_PROPERTY \${UNFINISHED_FEATURE}) + list(APPEND CONSERVED_FEATURES_PROPERTY \${PROMISE_SAVE}) endif() set_property(GLOBAL PROPERTY @@ -199,7 +214,7 @@ createFeatureModuleFunction("setFeatureField" "field;value" # Element in names must be an architecture, compiler or another feature. # Would is a list. ]] -createFeatureModuleFunction("setFeatureDependency" "names" +createFeatureModuleFunction("setFeatureDependencies" "names" [[ get_property( POPULATING_FEATURES_PROPERTY GLOBAL PROPERTY POPULATING_FEATURES) get_property( CONSERVED_FEATURES_PROPERTY GLOBAL PROPERTY CONSERVED_FEATURES) list(POP_BACK POPULATING_FEATURES_PROPERTY RECORDING_FEATURE) @@ -248,7 +263,7 @@ createFeatureModuleFunction("setFeatureDependency" "names" #[[ # Function that push features data into file. Content is like cmake variables. - # <FEATURE_PROPERTY> = "<VARIABLE>" +# <FEATURE_PROPERTY> = "<VALUE>" ]] createFeatureModuleFunction("outFeaturesToFile" "" [[ get_directory_property(cacheVars CACHE_VARIABLES) @@ -260,8 +275,12 @@ createFeatureModuleFunction("outFeaturesToFile" "" file(APPEND "\${OUT_FILE}" "# Toolset variables\n") if("CMAKE_TOOLCHAIN_FILE" IN_LIST cacheVars AND NOT "\${CMAKE_TOOLCHAIN_FILE}" STREQUAL "") cmake_path(GET CMAKE_TOOLCHAIN_FILE FILENAME TOOLCHAIN_FILE_NAME) - file(APPEND "\${OUT_FILE}" " -DCMAKE_TOOLCHAIN_FILE=" - "\${FEATURE_PROJECT_ROOT_DIR}/\${FEATURE_TOOLCHAIN_DIR}/\${TOOLCHAIN_FILE_NAME}") + cmake_path(APPEND TOOLCHAIN_PATH + "\${FEATURE_PROJECT_ROOT_DIR}" + "\${FEATURE_TOOLCHAIN_DIR}" + "\${TOOLCHAIN_FILE_NAME}" + ) + file(APPEND "\${OUT_FILE}" " -DCMAKE_TOOLCHAIN_FILE=\${TOOLCHAIN_PATH}") else() cmake_path(GET CMAKE_CXX_COMPILER FILENAME CXX_COMPILER_EXECUTABLE) file(APPEND "\${OUT_FILE}" "CMAKE_CXX_COMPILER= \\"\${CXX_COMPILER_EXECUTABLE}\\"\n") diff --git a/drivers/acpi/CMakeLists.txt b/drivers/acpi/CMakeLists.txt index 35c1d7b..55f0f3c 100644 --- a/drivers/acpi/CMakeLists.txt +++ b/drivers/acpi/CMakeLists.txt @@ -16,20 +16,41 @@ * ObjectiveOS. If not, see <https://www.gnu.org/licenses/>. ]] -add_library(ACPI STATIC) -target_link_libraries(ACPI PUBLIC CXX_COMPILER_REQUIREMENTS) - -target_sources(ACPI PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/Acpi.cpp - ${CMAKE_CURRENT_LIST_DIR}/Ics.cpp -) - -target_sources(ACPI - PUBLIC - FILE_SET HEADERS - FILES - ${CMAKE_CURRENT_LIST_DIR}/Acpi.h - ${CMAKE_CURRENT_LIST_DIR}/Ics.h -) - -target_link_libraries(Drivers INTERFACE ACPI) +set(IS_ACPI_DEFINES TRUE) +ifFeatureEnables(MSR IS_ACPI_DEFINES) + +if(NOT IS_ACPI_DEFINES) + add_library(ACPI INTERFACE) +else() + target_compile_definitions(CXX_COMPILER_REQUIREMENTS INTERFACE + FEATURE_ACPI + ) + + add_library(ACPI STATIC) + target_link_libraries(ACPI PUBLIC CXX_COMPILER_REQUIREMENTS) + + target_sources(ACPI PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/Acpi.cpp + ${CMAKE_CURRENT_LIST_DIR}/Ics.cpp + ) + + target_sources(ACPI + PUBLIC + FILE_SET HEADERS + FILES + ${CMAKE_CURRENT_LIST_DIR}/Acpi.h + ${CMAKE_CURRENT_LIST_DIR}/Ics.h + ) + + target_link_libraries(Drivers INTERFACE ACPI) +endif() + +startFeatureRecording(ACPI) + +setFeatureField(NAME "ACPI tables") +setFeatureField(HASHCOMMIT "515a11b818e4140845f69bb26a19d270a9e42178") +setFeatureField(DESCRIPTION "ACPI tables support") +setFeatureField(TAGS "NEW") +setFeatureField(AUTHORSHIP "Alexey Gavrilov <alexey.gavrilov@mail.com>") + +saveFeaturerecording() diff --git a/kernel/details/CMakeLists.txt b/kernel/details/CMakeLists.txt index ceab7f6..1ecfc06 100644 --- a/kernel/details/CMakeLists.txt +++ b/kernel/details/CMakeLists.txt @@ -16,11 +16,16 @@ * ObjectiveOS. If not, see <https://www.gnu.org/licenses/>. ]] -target_sources(CPUID - PUBLIC - FILE_SET HEADERS - BASE_DIRS - ${CMAKE_CURRENT_LIST_DIR} - FILES - ${CMAKE_CURRENT_LIST_DIR}/Platform.h -) +set(IS_CPUID_DEFINES TRUE) +ifFeatureEnables(CPUID IS_CPUID_DEFINES) + +if(IS_CPUID_DEFINES) + target_sources(CPUID + PUBLIC + FILE_SET HEADERS + BASE_DIRS + ${CMAKE_CURRENT_LIST_DIR} + FILES + ${CMAKE_CURRENT_LIST_DIR}/Platform.h + ) +endif() |
