-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
96 lines (88 loc) · 5.05 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
cmake_minimum_required(VERSION 3.27)
if (NOT DEFINED PROJECT_PATH OR "${PROJECT_PATH}" STREQUAL "")
set(PROJECT_PATH ${CMAKE_CURRENT_LIST_DIR})
message("CMake PROJECT_PATH: ${PROJECT_PATH}")
endif()
include(${PROJECT_PATH}/CMakeFunctions.txt)
project(reyadeyat-c C ASM)
#set(PREFIX "")
#set(CMAKE_STATIC_LIBRARY_PREFIX "")
set(CMAKE_SHARED_LIBRARY_PREFIX "")
#set(CMAKE_SHARED_MODULE_PREFIX "")
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_C_STANDARD 23)
set(CMAKE_C_COMPILER "/usr/bin/gcc")
set(TENSORFLOW_INCLUDE_DIRECTORY "/linux/tensorflow/tensorflow/include")
set(TENSORFLOW_LIB_DIRECTORY "/linux/tensorflow/tensorflow/lib")
set(LINUX_NCLUDE_DIRECTORY "/usr/include" ${TENSORFLOW_INCLUDE_DIRECTORY})
message("Defined User MODE is ${MODE}")
if (NOT DEFINED MODE OR "${MODE}" STREQUAL "")
message("NO MODE defined, defaulting MODE to mode INCLUDE")
set(MODE "INCLUDE")
endif()
if (NOT DEFINED BUILD OR "${BUILD}" STREQUAL "")
set(BUILD "DEBUG")
endif()
message("Parameters MODE = ${MODE} - BUILD = ${BUILD} - PROJECT_PATH = ${PROJECT_PATH}")
if ("${BUILD}" STREQUAL "DEBUG")
message("Compiling DEBUG mode")
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_C_FLAGS "-m64 -g -Wall -Werror -fPIC -fPIE -pie -fstack-protector --save-temps -x 'none'")
set(CMAKE_C_FLAGS_DEBUG "-g")
elseif ("${BUILD}" STREQUAL "RELEASE")
message("Compiling RELESE mode")
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_C_FLAGS "-m64 -Wall -Werror -fPIC -fPIE -pie -O2 -fstack-protector --save-temps -x 'none'")
set(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG")
set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
endif()
message("CMAKE_C_COMPILER ${CMAKE_C_COMPILER}")
message("CMAKE_C_FLAGS ${CMAKE_C_FLAGS}")
message("CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG}")
message("CMAKE_C_FLAGS_MINSIZEREL ${CMAKE_C_FLAGS_MINSIZEREL}")
message("CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE}")
message("CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
if ("${MODE}" STREQUAL "LIBRARY")
message("MODE is: LIBRARY")
add_compile_definitions(MODE=1)
#Copy Include Directory Header Files from Reyadeyat-Modules WITHOUT version headers
set(LIB_SOURCE_DIRECTORY "${PROJECT_PATH}/Reyadeyat-Modules")
set(INCLUDE_DIRECTORY "${PROJECT_PATH}/Reyadeyat-Executable-Core/include")
INCLUDE_DIRECTORIES(${LINUX_NCLUDE_DIRECTORY} ${INCLUDE_DIRECTORY} ${TENSORFLOW_INCLUDE_DIRECTORY})
COPY_FILE_LIST_FROM_TO("/reyadeyat/*.h" ${LIB_SOURCE_DIRECTORY} ${INCLUDE_DIRECTORY} false)
COPY_FILE_LIST_FROM_TO("/reyadeyat/log/*" ${LIB_SOURCE_DIRECTORY} ${INCLUDE_DIRECTORY} true)
COPY_FILE_LIST_FROM_TO("/reyadeyat/utilities/*.h" ${LIB_SOURCE_DIRECTORY} ${INCLUDE_DIRECTORY} false)
COPY_FILE_LIST_FROM_TO("/reyadeyat/algorithms/*" ${LIB_SOURCE_DIRECTORY} ${INCLUDE_DIRECTORY} true)
COPY_FILE_LIST_FROM_TO("/reyadeyat/data-structures/*" ${LIB_SOURCE_DIRECTORY} ${INCLUDE_DIRECTORY} true)
COPY_FILE_LIST_FROM_TO("/reyadeyat/file/*.h" ${LIB_SOURCE_DIRECTORY} ${INCLUDE_DIRECTORY} false)
COPY_FILE_LIST_FROM_TO("/reyadeyat/memory/*.h" ${LIB_SOURCE_DIRECTORY} ${INCLUDE_DIRECTORY} false)
LINK_DIRECTORIES("${PROJECT_PATH}/Reyadeyat-Executable-Core/lib" ${TENSORFLOW_LIB_DIRECTORY})
set(SOURCE_DIRECTORY_MAIN "${PROJECT_PATH}/Reyadeyat-Executable-Core")
file(GLOB_RECURSE SOURCE_FILE_LIST "${SOURCE_DIRECTORY_MAIN}/*.c" "${INCLUDE_DIRECTORY}/*.c")
ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCE_FILE_LIST} ${SOURCE_DIRECTORY})
COPY_FILE_LIST_FROM_TO("*.so" "${PROJECT_PATH}/Reyadeyat-Modules/lib" "${PROJECT_PATH}/Reyadeyat-Executable-Core/lib" false)
#TARGET_LINK_LIBRARIES(${PROJECT_NAME} tensorflow)
elseif("${MODE}" STREQUAL "INCLUDE")
message("MODE is: INCLUDE")
add_compile_definitions(MODE=2)
message("SOURCE_DIRECTORY = ${PROJECT_PATH}/Reyadeyat-Executable-Core")
message("INCLUDE_DIRECTORY = ${PROJECT_PATH}/Reyadeyat-Modules")
set(SOURCE_DIRECTORY "${PROJECT_PATH}/Reyadeyat-Executable-Core")
set(INCLUDE_DIRECTORY "${PROJECT_PATH}/Reyadeyat-Modules")
file(GLOB_RECURSE SOURCE_FILE_LIST "${SOURCE_DIRECTORY}/*.c" "${INCLUDE_DIRECTORY}/*.c")
file(GLOB_RECURSE EXCLUDED_FILE_LIST "${SOURCE_DIRECTORY}/bin/*.c" "${SOURCE_DIRECTORY}/build/*.c")
list(REMOVE_ITEM SOURCE_FILE_LIST ${EXCLUDED_FILE_LIST})
file(GLOB_RECURSE HEADER_FILE_LIST "${SOURCE_DIRECTORY}/*.h" "${INCLUDE_DIRECTORY}/*.h")
file(GLOB_RECURSE EXCLUDED_HEADER_FILE_LIST "${SOURCE_DIRECTORY}/bin/*.h" "${SOURCE_DIRECTORY}/build/*.h")
list(REMOVE_ITEM HEADER_FILE_LIST ${EXCLUDED_HEADER_FILE_LIST})
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORY} ${LINUX_NCLUDE_DIRECTORY})
foreach(SOURCE_FILE IN LISTS SOURCE_FILE_LIST)
message("Source file: ${SOURCE_FILE}")
endforeach()
LINK_DIRECTORIES(${TENSORFLOW_LIB_DIRECTORY})
ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCE_FILE_LIST} ${HEADER_FILE_LIST})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} tensorflow)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION "${PROJECT_PATH}/Reyadeyat-Executable-Core/bin" COMPONENT Binaries)