ソースを参照

Closes #6 - Adds CMake infrastructure for optional CIP objects

CapXilinx 12 年 前
コミット
92b9b813b1

+ 1 - 1
.gitignore

@@ -2,4 +2,4 @@ bin/
 doc/
 .project
 .cproject
-
+*.*~

+ 20 - 7
buildsupport/OpENer.cmake

@@ -4,6 +4,9 @@ FUNCTION(opener_add_definition)
   ENDFOREACH(ARG)
 ENDFUNCTION(opener_add_definition)
 
+##############################################
+# Adds platform specific include directories #
+############################################## 
 macro(opener_platform_support ARGS)
 
   if(OpENer_PLATFORM STREQUAL "")
@@ -13,18 +16,28 @@ macro(opener_platform_support ARGS)
   include( ${OpENer_BUILDSUPPORT_DIR}/${OpENer_PLATFORM}/OpENer_PLATFORM_${ARGS}.cmake)
   opener_platform_spec()
 endmacro(opener_platform_support ARGS)
- 
+
+
+#######################################
+# Adds common Include directories     #
+####################################### 
 macro(opener_common_includes)
-  #######################################
-  # Set source directories              #
-  #######################################
   set( SRC_DIR "${PROJECT_SOURCE_DIR}" )
   set( CIP_SRC_DIR "${PROJECT_SOURCE_DIR}/cip" )
   set( ENET_ENCAP_SRC_DIR "${PROJECT_SOURCE_DIR}/enet_encap" )
   set( PORTS_SRC_DIR "${PROJECT_SOURCE_DIR}/ports")
 
-  #######################################
-  # Include directories                 #
-  #######################################
   include_directories( ${PROJECT_SOURCE_DIR} ${SRC_DIR} ${CIP_SRC_DIR} ${ENET_ENCAP_SRC_DIR} ${PORTS_SRC_DIR} )
 endmacro(opener_common_includes)
+
+MACRO(opener_add_cip_object NAME DESCRIPTION)
+  set(OpENer_CIP_OBJECT_${NAME} OFF CACHE BOOL "${DESCRIPTION}")
+  FOREACH(dependencies ${ARGN})
+	if(NOT ${dependencies})
+	return()
+	endif(NOT ${dependencies})
+  ENDFOREACH(dependencies)
+  if(NOT OpENer_CIP_OBJECT_${NAME})
+    return()
+  endif(NOT OpENer_CIP_OBJECT_${NAME})
+ENDMACRO(opener_add_cip_object)

+ 29 - 0
buildsupport/OpENer_CIP_Object_generator.cmake

@@ -0,0 +1,29 @@
+FILE(GLOB_RECURSE FILES_FOUND "${OpENer_CIP_OBJECTS_DIR}/*CMakeLists.txt")
+
+FOREACH(FILE ${FILES_FOUND})
+  string(REPLACE "${OpENer_CIP_OBJECTS_DIR}" "" CIP_OBJECT_NAME ${FILE})
+  STRING(REGEX MATCH "^/([^/]*)/CMakeLists.txt$" CIP_OBJECT_NAME ${CIP_OBJECT_NAME})
+  IF(CIP_OBJECT_NAME)
+    string(REPLACE "/CMakeLists.txt" "" CIP_OBJECT_NAME "${CIP_OBJECT_NAME}")
+    string(REPLACE "/" "" CIP_OBJECT_NAME "${CIP_OBJECT_NAME}")
+    LIST(APPEND CIP_OBJECT_LIST ${CIP_OBJECT_NAME})
+  ENDIF(CIP_OBJECT_NAME)
+ENDFOREACH(FILE)
+
+SET(WRITE_FILE "")
+FOREACH(CIP_OBJECT ${CIP_OBJECT_LIST})
+  SET(WRITE_FILE "${WRITE_FILE}SET(SOURCE_GROUP_BACKUP \"\${SOURCE_GROUP}\")\n")
+  SET(WRITE_FILE "${WRITE_FILE}SET(SOURCE_GROUP \"\${SOURCE_GROUP}/${CIP_OBJECT}\")\n")
+  SET(WRITE_FILE "${WRITE_FILE}ADD_SUBDIRECTORY(\"\${OpENer_CIP_OBJECTS_DIR}/${CIP_OBJECT}\")\n")
+  SET(WRITE_FILE "${WRITE_FILE}SET(SOURCE_GROUP \"\${SOURCE_GROUP_BACKUP}\")\n")
+ENDFOREACH(CIP_OBJECT)
+
+file(WRITE ${CMAKE_BINARY_DIR}/cip_objects/CMakeLists_new.txt ${WRITE_FILE})
+  
+execute_process( COMMAND ${CMAKE_COMMAND} -E compare_files ${CMAKE_BINARY_DIR}/cip_objects/CMakeLists_new.txt ${CMAKE_BINARY_DIR}/cip_objects/CMakeLists.txt RESULT_VARIABLE test_not_successful OUTPUT_QUIET ERROR_QUIET )  
+
+IF(test_not_successful)
+  file(REMOVE ${CMAKE_BINARY_DIR}/cip_objects/CMakeLists.txt)
+  file(RENAME ${CMAKE_BINARY_DIR}/cip_objects/CMakeLists_new.txt ${CMAKE_BINARY_DIR}/cip_objects/CMakeLists.txt)
+ENDIF( test_not_successful)  
+file(REMOVE ${CMAKE_BINARY_DIR}/cip_objects/CMakeLists_new.txt) 

+ 7 - 0
src/CMakeLists.txt

@@ -57,10 +57,17 @@ endif(OpENer_TRACES)
 
 set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -Wall" )
 
+#######################################
+# Add custom CIP objects              #
+#######################################
+set( OpENer_CIP_OBJECTS_DIR ${PROJECT_SOURCE_DIR}/cip_objects )
+include(${OpENer_BUILDSUPPORT_DIR}/OpENer_CIP_Object_generator.cmake)
+
 #######################################
 # Add subdirectories                  #
 #######################################
 add_subdirectory(cip)
+add_subdirectory(cip_objects)
 add_subdirectory(enet_encap)
 add_subdirectory(ports)
 

+ 1 - 0
src/cip_objects/CMakeLists.txt

@@ -0,0 +1 @@
+INCLUDE(${CMAKE_BINARY_DIR}/cip_objects/CMakeLists.txt)