CMakeLists.txt 4.6 KB

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