Blame view

trunk/auto/modules.sh 3.2 KB
winlin authored
1 2
# generate the module info to Makefile
#
winlin authored
3
# params:
4 5
#     $SRS_OBJS the objs directory to store the Makefile. ie. ./objs
#     $SRS_OBJS_DIR the objs directory for Makefile. ie. objs
winlin authored
6 7 8 9 10 11 12 13
#     $SRS_MAKEFILE the makefile name. ie. Makefile
#
#     $MODULE_DIR the module dir. ie. src/os/linux
#     $MODULE_ID the id of module. ie. CORE
#     $MODULE_DEPENDS array, the denpend MODULEs id. ie. (CORE OS)
#     $ModuleLibIncs array, the depend 3rdpart library includes. ie. (objs/st-1.9/obj objs/libx264/obj)
#     $MODULE_FILES array, the head/cpp files of modules. ie. (public log)
#     
winlin authored
14
# returns:
winlin authored
15
#     $MODULE_OBJS array, the objects of the modules, used for link the binary
winlin authored
16
17
FILE=${SRS_OBJS}/${SRS_MAKEFILE}
winlin authored
18 19 20 21
echo "#####################################################################################" >> ${FILE}
echo "# the ${MODULE_ID} module." >> ${FILE}
echo "#####################################################################################" >> ${FILE}
echo  >> ${FILE}
winlin authored
22 23

# INCS
winlin authored
24 25 26 27
echo "# INCS for ${MODULE_ID}, headers of module and its depends to compile" >> ${FILE}
#
# the public include files, for example:
#       CORE_MODULE_INCS = -Isrc/core
28
echo "${MODULE_ID}_MODULE_INCS = -I${MODULE_DIR} " >> ${FILE}
winlin authored
29 30 31 32 33 34 35 36
#
# the private include files, for example:
#       CORE_INCS = -Isrc/core -Iobjs/st -Iobjs -Iobjs/hp -Iobjs 
#       MAIN_INCS = -Isrc/main $(CORE_MODULE_INCS) -Iobjs/st -Iobjs
# where the public will be used for other modules which depends on it.
INCS_NAME="${MODULE_ID}_INCS"
#
# current module header files
37
echo -n "${INCS_NAME} = -I${MODULE_DIR} " >> ${FILE}
winlin authored
38 39
#
# depends module header files
winlin authored
40 41 42 43 44
for item in ${MODULE_DEPENDS[*]}; do
    DEP_INCS_NAME="${item}_INCS"do
    DEP_INCS_NAME="${item}_MODULE_INCS"
    echo -n "\$(${DEP_INCS_NAME}) " >> ${FILE}
done
winlin authored
45 46
#
# depends library header files
winlin authored
47
for item in ${ModuleLibIncs[*]}; do
48
    echo -n "-I${item} " >> ${FILE}
winlin authored
49
done
winlin authored
50
echo "" >> ${FILE}; echo "" >> ${FILE}
winlin authored
51 52

# DEPS
winlin authored
53 54 55
echo "# DEPS for ${MODULE_ID}, the depends of make schema" >> ${FILE}
# depends on headers of self module, for example:
#       CORE_DEPS =  src/core/srs_core.hpp
winlin authored
56 57 58 59 60 61 62 63
DEPS_NAME="${MODULE_ID}_DEPS"
echo -n "${DEPS_NAME} = " >> ${FILE}
for item in ${MODULE_FILES[*]}; do
    HEADER_FILE="${MODULE_DIR}/${item}.hpp"
    if [ -f ${HEADER_FILE} ]; then
        echo -n " ${HEADER_FILE}" >> ${FILE}
    fi
done
winlin authored
64 65
# depends on other modules, for example:
#       MAIN_DEPS =  $(CORE_DEPS)
winlin authored
66 67 68 69 70 71 72
for item in ${MODULE_DEPENDS[*]}; do
    DEP_DEPS_NAME="${item}_DEPS"
    echo -n " \$(${DEP_DEPS_NAME}) " >> ${FILE}
done
echo "" >> ${FILE}; echo "" >> ${FILE}

# OBJ
winlin authored
73
echo "# OBJ for ${MODULE_ID}, each object file" >> ${FILE}
winlin authored
74 75 76
MODULE_OBJS=()
for item in ${MODULE_FILES[*]}; do
    CPP_FILE="${MODULE_DIR}/${item}.cpp"
77
    OBJ_FILE="${SRS_OBJS_DIR}/${MODULE_DIR}/${item}.o"
winlin authored
78 79 80
    MODULE_OBJS="${MODULE_OBJS[@]} ${CPP_FILE}"
    if [ -f ${CPP_FILE} ]; then
        echo "${OBJ_FILE}: \$(${DEPS_NAME}) ${CPP_FILE} " >> ${FILE}
81
        echo "	\$(CXX) -c \$(CXXFLAGS) \$(${INCS_NAME})\\" >> ${FILE}
82
        echo "          -o ${OBJ_FILE} ${CPP_FILE}" >> ${FILE}
winlin authored
83 84 85 86
    fi
done
echo "" >> ${FILE}
winlin authored
87
# parent Makefile, to create module output dir before compile it.
88
echo "	mkdir -p ${SRS_OBJS_DIR}/${MODULE_DIR}" >> ${SRS_WORKDIR}/${SRS_MAKEFILE}
winlin authored
89 90

echo -n "generate module ${MODULE_ID} ok"; echo '!';