0025114: CMake-based build tools for OCCT 7.0
[occt.git] / adm / cmake / BuildToolkit.cmake
1 # Get all used packages from toolkit
2 foreach (MODULE ${TOOLKIT_MODULES})
3   if (WIN32)
4     list (APPEND PRECOMPILED_DEFS "-D__${MODULE}_DLL")
5   endif()
6   list (APPEND COMPILER_DIRECTORIES "${OCCT_SOURCE_DIR}/src/${MODULE}")
7 endforeach()
8 string (REGEX REPLACE ";" " " PRECOMPILED_DEFS "${PRECOMPILED_DEFS}")
9
10 # Get from toolkits EXTERNLIB all used libs
11 OCCT_TOOLKIT_DEP (${PROJECT_NAME} ${PROJECT_NAME}_DEPS)
12 foreach (DEP ${${PROJECT_NAME}_DEPS})
13   IS_OCCT_TOOLKIT (${DEP} OCCT_MODULES FOUND_TOOLKIT)
14   if ("${FOUND_TOOLKIT}" STREQUAL "ON")
15     list ( APPEND USED_LIBS "${DEP}" )
16   endif()
17 endforeach()
18
19 # Get all source files from used packages
20 foreach (CDIR ${COMPILER_DIRECTORIES})
21   get_filename_component (CDirName ${CDIR} NAME)
22   set (CDIR_files)
23   file (STRINGS "${CDIR}/FILES" FLEX_Files REGEX ".+[.]lex")
24   file (STRINGS "${CDIR}/FILES" BISON_Files REGEX ".+[.]yacc")
25   file (STRINGS "${CDIR}/FILES" CFiles REGEX ".+[.]c")
26   file (STRINGS "${CDIR}/FILES" MFiles REGEX ".+[.]mm")
27
28   # Generate Flex and Bison files
29   if (${BUILD_BISON_FLEX_FILES})
30     list (LENGTH FLEX_Files FLength)
31     list (LENGTH BISON_Files BLength)
32     list (SORT FLEX_Files)
33     list (SORT BISON_Files)
34     if (${FLength} EQUAL ${BLength} AND NOT ${FLength} EQUAL 0)
35       math (EXPR FLength "${FLength} - 1")
36       foreach (FileIndex RANGE ${FLength})
37         list (GET FLEX_Files ${FileIndex} FLEX_File)
38         list (GET BISON_Files ${FileIndex} BISON_File)
39         get_filename_component (FLEX_Name ${FLEX_File} NAME_WE)
40         get_filename_component (BISON_Name ${BISON_File} NAME_WE)
41         string (COMPARE EQUAL ${FLEX_Name} ${BISON_Name} isEQUAL)
42         if (EXISTS "${FLEX_File}" AND EXISTS "${BISON_File}" AND ${isEQUAL})
43           BISON_TARGET (Parser_${BISON_Name} ${BISON_File} ${CDIR}/${BISON_Name}.tab.c)
44           FLEX_TARGET (Scanner_${FLEX_Name} ${FLEX_File} ${CDIR}/lex.${FLEX_Name}.c)
45           ADD_FLEX_BISON_DEPENDENCY (Scanner_${FLEX_Name} Parser_${BISON_Name})
46           list (APPEND CDIR_files ${BISON_Parser_${BISON_Name}_OUTPUTS} ${FLEX_Scanner_${FLEX_Name}_OUTPUTS})
47         endif()
48       endforeach()
49     endif()
50   endif()
51
52   list (APPEND CDIR_files ${CFiles})
53   if (APPLE)
54     list ( APPEND CDIR_files ${MFiles})
55   endif()
56
57   foreach (CFile ${CDIR_files})
58     list (APPEND USED_SRCFILES ${CDIR}/${CFile} )
59     SOURCE_GROUP (${CDirName} FILES ${CDIR}/${CFile})
60   endforeach()
61 endforeach()
62
63 list (APPEND COMPILER_DIRECTORIES "${OCCT_SOURCE_DIR}/src")
64 list (FIND USED_TOOLKITS ${PROJECT_NAME} isFOUND)
65
66 OCCT_MAKE_BUILD_POSTFIX()
67
68 # Create project for toolkit
69 if ("${USED_TOOLKITS}" STREQUAL "" OR NOT ${isFOUND} EQUAL -1)
70   foreach (MODULE ${OCCT_MODULES})
71     list (FIND ${MODULE}_TOOLKITS ${PROJECT_NAME} isFOUND)
72     if (NOT ${isFOUND} EQUAL -1)
73       set (CURRENT_MODULE ${MODULE})
74     endif()
75   endforeach()
76   if (isEXE)
77     add_executable (${PROJECT_NAME} ${USED_SRCFILES})
78     install (TARGETS ${PROJECT_NAME} DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}")
79   else()
80     add_library (${PROJECT_NAME} ${USED_SRCFILES})
81     install (TARGETS ${PROJECT_NAME}
82              RUNTIME DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}"
83              ARCHIVE DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}"
84              LIBRARY DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}")
85     if (MSVC)
86       install (FILES  ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}/${PROJECT_NAME}.pdb
87                CONFIGURATIONS Debug
88                DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}")
89     endif()
90   endif()
91
92   set_property (TARGET ${PROJECT_NAME} PROPERTY FOLDER "Modules/${CURRENT_MODULE}")
93   set_target_properties (${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${PRECOMPILED_DEFS}")
94   include_directories (${COMPILER_DIRECTORIES})
95   target_link_libraries (${PROJECT_NAME} ${USED_LIBS})
96 endif()