Use posix open/read/write/close as it seems to be much faster than stdio.
[lwext4.git] / CMakeLists.txt
1 project(lwext4 C)
2 cmake_minimum_required(VERSION 3.4)
3
4
5 include_directories(include)
6 include_directories(${PROJECT_BINARY_DIR}/include)
7 include_directories(blockdev/filedev)
8 include_directories(blockdev/filedev_win)
9
10 set(BLOCKDEV_TYPE  none)
11
12 add_definitions(-DCONFIG_USE_DEFAULT_CONFIG=0)
13 add_definitions(-DVERSION="${VERSION}")
14
15 #Examples
16 if    (CMAKE_SYSTEM_PROCESSOR STREQUAL  cortex-m0)
17     #...
18 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  cortex-m3)
19     add_definitions(-DCONFIG_UNALIGNED_ACCESS=1)
20 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  arm-sim)
21     #...
22 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  cortex-m4)
23     add_definitions(-DCONFIG_UNALIGNED_ACCESS=1)
24 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  bf518)
25     #...
26 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  avrxmega7)
27     add_definitions(-DCONFIG_HAVE_OWN_ERRNO=1)
28 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  msp430g2210)
29     add_definitions(-DCONFIG_DEBUG_PRINTF=0)
30     add_definitions(-DCONFIG_DEBUG_ASSERT=0)
31     #...
32 elseif(LIB_ONLY)
33     add_definitions(-DCONFIG_DEBUG_PRINTF=0)
34     add_definitions(-DCONFIG_DEBUG_ASSERT=0)
35     add_definitions(-DCONFIG_HAVE_OWN_OFLAGS=1)
36     add_definitions(-DCONFIG_HAVE_OWN_ERRNO=0)
37     add_definitions(-DCONFIG_BLOCK_DEV_CACHE_SIZE=16)
38 else()
39     #Generic example target
40     if (WIN32)
41       set(BLOCKDEV_TYPE  windows)
42     else()
43       set(BLOCKDEV_TYPE  linux)
44     endif()
45     set (INSTALL_LIB 1)
46     add_definitions(-DCONFIG_HAVE_OWN_OFLAGS=0)
47     add_definitions(-DCONFIG_HAVE_OWN_ERRNO=0)
48     add_definitions(-DCONFIG_HAVE_OWN_ASSERT=0)
49     add_definitions(-DCONFIG_BLOCK_DEV_CACHE_SIZE=16)
50 endif()
51
52 macro(output_configure)
53     get_property(
54         definitions
55         DIRECTORY
56         PROPERTY COMPILE_DEFINITIONS
57     )
58     file(WRITE
59          ${PROJECT_BINARY_DIR}/include/generated/ext4_config.h
60          "")
61     foreach(item ${definitions})
62         string(REGEX MATCH "^CONFIG_" match_res ${item})
63         if(match_res)
64             string(REGEX REPLACE "=(.+)$" "" replace_res ${item})
65             string(CONFIGURE
66                    "#define ${replace_res} ${CMAKE_MATCH_1}"
67                    output_str)
68             file(APPEND
69                  ${PROJECT_BINARY_DIR}/include/generated/ext4_config.h
70                  "${output_str}\n")
71         endif()
72     endforeach()
73 endmacro()
74 output_configure()
75
76 add_subdirectory(blockdev)
77
78 #Library build
79 add_subdirectory(src)
80 #Detect all possible warnings for lwext4 target
81 if (NOT CMAKE_COMPILER_IS_GNUCC)
82     set_target_properties(lwext4 PROPERTIES COMPILE_FLAGS "")
83 else()
84     set_target_properties(lwext4 PROPERTIES COMPILE_FLAGS "-Wall -Wextra -pedantic")
85 endif()
86
87 #DISTRIBUTION
88 set(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}")
89 set(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}")
90 set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}")
91 set(CPACK_SOURCE_GENERATOR "TBZ2")
92 set(CPACK_SOURCE_PACKAGE_FILE_NAME
93   "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
94 set(CPACK_SOURCE_IGNORE_FILES
95 "/build" ".git")
96 include(CPack)
97
98
99 add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)