1cmake_minimum_required(VERSION 3.13 FATAL_ERROR) 2cmake_policy(SET CMP0054 NEW) 3cmake_policy(SET CMP0057 NEW) 4 5project(levelx_test LANGUAGES C) 6 7# Set build configurations 8set(BUILD_CONFIGURATIONS default_build_coverage 9 free_sector_verify_build 10 full_build 11 standalone_build 12 standalone_free_sector_verify_build 13 standalone_full_build 14 new_driver_interface_build 15 nor_obsolete_cache_build 16 nor_mapping_cache_build 17 nor_obsolete_mapping_cache_build) 18set(CMAKE_CONFIGURATION_TYPES 19 ${BUILD_CONFIGURATIONS} 20 CACHE STRING "list of supported configuration types" FORCE) 21set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS 22 ${CMAKE_CONFIGURATION_TYPES}) 23list(GET CMAKE_CONFIGURATION_TYPES 0 BUILD_TYPE) 24if((NOT CMAKE_BUILD_TYPE) OR (NOT ("${CMAKE_BUILD_TYPE}" IN_LIST 25 CMAKE_CONFIGURATION_TYPES))) 26 set(CMAKE_BUILD_TYPE 27 "${BUILD_TYPE}" 28 CACHE STRING "Build Type of the project" FORCE) 29endif() 30 31message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") 32message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.") 33set(FX_FAULT_TOLERANT_DEFINITIONS 34 -DFX_ENABLE_FAULT_TOLERANT -DFX_UPDATE_FILE_SIZE_ON_ALLOCATE 35 -DFX_FAULT_TOLERANT_TRANSACTION_FAIL_FUNCTION) 36set(default_build_coverage "") 37set(free_sector_verify_build -DLX_FREE_SECTOR_DATA_VERIFY) 38set(full_build -DLX_FREE_SECTOR_DATA_VERIFY 39 -DLX_DIRECT_READ 40 -DLX_NAND_FLASH_DIRECT_MAPPING_CACHE 41 -DLX_NOR_DISABLE_EXTENDED_CACHE 42 -DLX_THREAD_SAFE_ENABLE) 43# For Standalone builds LX_STANADLONE_ENABLE is defined in line 61 44set(standalone_build -DLX_STANDALONE_ENABLE) 45set(standalone_free_sector_verify_build -DLX_STANDALONE_ENABLE ${free_sector_verify_build}) 46set(standalone_full_build -DLX_STANDALONE_ENABLE ${full_build}) 47set(new_driver_interface_build -DLX_NOR_ENABLE_CONTROL_BLOCK_FOR_DRIVER_INTERFACE 48 -DLX_NAND_ENABLE_CONTROL_BLOCK_FOR_DRIVER_INTERFACE) 49set(nor_obsolete_cache_build -DLX_NOR_ENABLE_OBSOLETE_COUNT_CACHE) 50set(nor_mapping_cache_build -DLX_NOR_ENABLE_MAPPING_BITMAP) 51set(nor_obsolete_mapping_cache_build -DLX_NOR_ENABLE_MAPPING_BITMAP 52 -DLX_NOR_ENABLE_OBSOLETE_COUNT_CACHE) 53 54add_compile_options( 55 -m32 56 -std=c99 57 -ggdb 58 -g3 59 -gdwarf-2 60 -fdiagnostics-color 61 -Werror 62 ${${CMAKE_BUILD_TYPE}}) 63add_link_options(-m32) 64 65enable_testing() 66 67if(CMAKE_BUILD_TYPE MATCHES "standalone.*") 68 set(LX_STANDALONE_ENABLE 69 ON 70 CACHE BOOL "LevelX standalone enabled(No Azure RTOS ThreadX)" FORCE) 71 set(FX_STANDALONE_ENABLE 72 ON 73 CACHE BOOL "FileX standalone enabled(No Azure RTOS ThreadX)" FORCE) 74endif() 75 76add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../.. levelx) 77add_subdirectory(regression) 78add_subdirectory(samples) 79 80# Coverage 81if(CMAKE_BUILD_TYPE MATCHES ".*_coverage") 82 target_compile_options(levelx PRIVATE -fprofile-arcs -ftest-coverage) 83 target_link_options(levelx PRIVATE -fprofile-arcs -ftest-coverage) 84endif() 85 86 87# Build ThreadX library once 88execute_process(COMMAND ${CMAKE_CURRENT_LIST_DIR}/run.sh build_libs) 89add_custom_target(build_libs ALL COMMAND ${CMAKE_CURRENT_LIST_DIR}/run.sh 90 build_libs) 91add_dependencies(levelx build_libs) 92target_include_directories(levelx PUBLIC ${CMAKE_BINARY_DIR}/../libs/inc) 93if(NOT LX_STANDALONE_ENABLE) 94 add_library(threadx SHARED IMPORTED GLOBAL) 95 add_library("azrtos::threadx" ALIAS threadx) 96 set_target_properties( 97 threadx PROPERTIES IMPORTED_LOCATION 98 ${CMAKE_BINARY_DIR}/../libs/threadx/libthreadx.so) 99 add_library(filex SHARED IMPORTED GLOBAL) 100 add_library("azrtos::filex" ALIAS filex) 101 set_target_properties(filex PROPERTIES IMPORTED_LOCATION 102 ${CMAKE_BINARY_DIR}/../libs/filex/libfilex.so) 103else() 104 get_filename_component( 105 externals ${CMAKE_CURRENT_SOURCE_DIR} ABSOLUTE) 106 add_subdirectory(${externals}/filex filex) 107 add_library("azrtos::filex" ALIAS filex) 108endif() 109 110target_compile_options( 111 levelx 112 PRIVATE -Werror 113 -Wall 114 -Wextra 115 -pedantic 116 -fmessage-length=0 117 -fsigned-char 118 -ffunction-sections 119 -fdata-sections 120 -Wunused 121 -Wuninitialized 122 -Wmissing-declarations 123 -Wconversion 124 -Wpointer-arith 125 -Wshadow 126 -Wlogical-op 127 -Waggregate-return 128 -Wfloat-equal) 129