| [117] | 1 |  | 
|---|
| [88] | 2 | # | 
|---|
|  | 3 | # $Id: Makefile 120 2009-05-26 19:01:47Z rosiere $ | 
|---|
|  | 4 | # | 
|---|
|  | 5 | # [ Description ] | 
|---|
|  | 6 | # | 
|---|
|  | 7 | # Makefile | 
|---|
|  | 8 | # | 
|---|
|  | 9 |  | 
|---|
|  | 10 | #---------------------------------------------------------- | 
|---|
|  | 11 | #---------------------------------------------------------- | 
|---|
|  | 12 | #-----[ Environment ]-------------------------------------- | 
|---|
|  | 13 | #---------------------------------------------------------- | 
|---|
|  | 14 | #---------------------------------------------------------- | 
|---|
|  | 15 | ifeq ($(origin MORPHEO_TOPLEVEL), undefined) | 
|---|
|  | 16 | $(error "variable MORPHEO_TOPLEVEL is undefined") | 
|---|
|  | 17 | else | 
|---|
|  | 18 | include $(MORPHEO_TOPLEVEL)/Makefile.tools | 
|---|
|  | 19 | include $(MORPHEO_TOPLEVEL)/Makefile.flags | 
|---|
|  | 20 | endif | 
|---|
|  | 21 |  | 
|---|
|  | 22 | ifeq ($(origin MORPHEO_TMP), undefined) | 
|---|
|  | 23 | $(error "variable MORPHEO_TMP is undefined") | 
|---|
|  | 24 | endif | 
|---|
|  | 25 |  | 
|---|
| [117] | 26 | DATA_ALL                        = * | 
|---|
|  | 27 | ifeq ($(origin DATA), undefined) | 
|---|
|  | 28 | DATA                            = $(DATA_ALL) | 
|---|
|  | 29 | endif | 
|---|
|  | 30 | ifeq ($(origin PRIORITY), undefined) | 
|---|
|  | 31 | PRIORITY                        = 0 | 
|---|
|  | 32 | endif | 
|---|
| [120] | 33 | ifeq ($(flavor CLEAN), undefined) | 
|---|
|  | 34 | CLEAN                           = 0 | 
|---|
|  | 35 | endif | 
|---|
| [117] | 36 |  | 
|---|
| [88] | 37 | #---------------------------------------------------------- | 
|---|
|  | 38 | #---------------------------------------------------------- | 
|---|
|  | 39 | #-----[ Directory ]---------------------------------------- | 
|---|
|  | 40 | #---------------------------------------------------------- | 
|---|
|  | 41 | #---------------------------------------------------------- | 
|---|
|  | 42 | ENTITY                          =       Test | 
|---|
|  | 43 |  | 
|---|
|  | 44 | DIR_TMP                         =       $(MORPHEO_TMP) | 
|---|
|  | 45 | DIR_INC                         =       include | 
|---|
|  | 46 | DIR_SRC                         =       src | 
|---|
|  | 47 | DIR_OBJ                         =       $(DIR_TMP)/obj | 
|---|
| [113] | 48 | DIR_LIB                         =       $(DIR_TMP)/lib | 
|---|
| [88] | 49 | DIR_BIN                         =       $(DIR_TMP)/bin | 
|---|
| [101] | 50 | DIR_LOG                         =       $(DIR_TMP)/log | 
|---|
| [117] | 51 | DIR_DATA                        =       ./data | 
|---|
|  | 52 | DIR_LOGS                        =       $(patsubst $(DIR_DATA)/%,$(DIR_LOG)/%,$(wildcard $(DIR_DATA)/*)) | 
|---|
|  | 53 |  | 
|---|
| [88] | 54 | DIR_SOFT                        =       $(MORPHEO_TOPLEVEL)/Softwares | 
|---|
|  | 55 |  | 
|---|
|  | 56 | #MORPHEO                        -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/processor/Morpheo/Makefile.deps | 
|---|
|  | 57 | #MORPHEO_DIR                    -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/processor/Morpheo/Makefile.deps | 
|---|
|  | 58 | #MORPHEO_INCDIR                 -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/processor/Morpheo/Makefile.deps | 
|---|
|  | 59 | #MORPHEO_LIBDIR                 -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/processor/Morpheo/Makefile.deps | 
|---|
|  | 60 | #MORPHEO_LIBNAME                -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/processor/Morpheo/Makefile.deps | 
|---|
|  | 61 |  | 
|---|
|  | 62 | #ENVIRONMENT_DIR                -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/Environment/Makefile.deps | 
|---|
|  | 63 | #ENVIRONMENT_INCDIR             -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/Environment/Makefile.deps | 
|---|
|  | 64 | #ENVIRONMENT_LIBDIR             -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/Environment/Makefile.deps | 
|---|
|  | 65 | #ENVIRONMENT_LIBNAME            -       define in $(MORPHEO_TOPLEVEL)/IPs/systemC/Environment/Makefile.deps | 
|---|
|  | 66 |  | 
|---|
|  | 67 | #---------------------------------------------------------- | 
|---|
|  | 68 | #---------------------------------------------------------- | 
|---|
|  | 69 | #-----[ Variables ]---------------------------------------- | 
|---|
|  | 70 | #---------------------------------------------------------- | 
|---|
|  | 71 | #---------------------------------------------------------- | 
|---|
| [113] | 72 | SOURCES                         =       $(wildcard $(DIR_SRC)/*.cpp) | 
|---|
|  | 73 | OBJECTS                         =       $(patsubst $(DIR_SRC)/%.cpp,$(DIR_OBJ)/%.o,$(SOURCES)) | 
|---|
| [117] | 74 | LOGS                            =       $(patsubst $(DIR_DATA)/%.cfg,$(DIR_LOG)/%.log,$(wildcard $(DIR_DATA)/$(DATA)/*.cfg)) | 
|---|
| [88] | 75 | EXEC                            =       $(DIR_BIN)/soft.x | 
|---|
| [117] | 76 | EXEC_PREFIX                     =       $(NICE) -n $(PRIORITY) | 
|---|
| [88] | 77 | #$(VALGRIND) | 
|---|
|  | 78 |  | 
|---|
|  | 79 | #-----[ Compilation ]-------------------------------------- | 
|---|
| [117] | 80 | INCDIR                          =       $(SYSTEMC_INCDIR_$(SIMULATOR_SYSTEMC))          \ | 
|---|
| [88] | 81 | $(MORPHEO_INCDIR)                       \ | 
|---|
|  | 82 | $(ENVIRONMENT_INCDIR)                   \ | 
|---|
|  | 83 | -I$(DIR_INC) | 
|---|
|  | 84 |  | 
|---|
| [117] | 85 | #LIBDIR                         =       $(SYSTEMC_LIBDIR_$(SIMULATOR_SYSTEMC))          \ | 
|---|
| [113] | 86 | #                                       $(ENVIRONMENT_LIBDIR)                   \ | 
|---|
|  | 87 | #                                       $(MORPHEO_LIBDIR) | 
|---|
|  | 88 |  | 
|---|
|  | 89 | # FIXME !!! | 
|---|
| [117] | 90 | LIBDIR                          =       $(SYSTEMC_LIBDIR_$(SIMULATOR_SYSTEMC))          \ | 
|---|
| [113] | 91 | -L$(DIR_LIB) | 
|---|
| [88] | 92 |  | 
|---|
|  | 93 | LIBNAME                         =       $(ENVIRONMENT_LIBNAME)                  \ | 
|---|
|  | 94 | $(MORPHEO_LIBNAME)                      \ | 
|---|
| [117] | 95 | $(SYSTEMC_LIBNAME_$(SIMULATOR_SYSTEMC)) | 
|---|
| [88] | 96 |  | 
|---|
| [117] | 97 | FLAGS                           =       $(SYSTEMC_CFLAGS_$(SIMULATOR_SYSTEMC)) | 
|---|
| [88] | 98 |  | 
|---|
|  | 99 | PLATFORMS_CXX_FLAGS             =       $(MORPHEO_FLAGS) $(CXX_FLAGS) $(FLAGS) $(INCDIR) | 
|---|
|  | 100 | PLATFORMS_L_FLAGS               =       $(MORPHEO_FLAGS) $(CXX_FLAGS) $(FLAGS) $(LIBDIR) | 
|---|
|  | 101 |  | 
|---|
|  | 102 | #---------------------------------------------------------- | 
|---|
|  | 103 | #---------------------------------------------------------- | 
|---|
|  | 104 | #-----[ Rules ]-------------------------------------------- | 
|---|
|  | 105 | #---------------------------------------------------------- | 
|---|
|  | 106 | #---------------------------------------------------------- | 
|---|
|  | 107 |  | 
|---|
|  | 108 | vpath   %.h     $(DIR_INC) | 
|---|
|  | 109 | vpath   %.cpp   $(DIR_SRC) | 
|---|
|  | 110 | vpath   %.o     $(DIR_OBJ) | 
|---|
| [117] | 111 | vpath   %.cfg   $(DIR_DATA)/*/ | 
|---|
| [88] | 112 |  | 
|---|
|  | 113 | .PRECIOUS                       : $(DIR_OBJ)/%.o $(DIR_BIN)/%.x $(DIR_LOG)/%.log | 
|---|
|  | 114 |  | 
|---|
| [113] | 115 | all                             : $(EXEC) | 
|---|
| [88] | 116 |  | 
|---|
| [113] | 117 | $(DIR_BIN)/%.x                  :  $(DIR_OBJ) $(DIR_BIN) | 
|---|
| [88] | 118 | @\ | 
|---|
| [113] | 119 | $(ECHO) "Linkage            : $*";\ | 
|---|
| [117] | 120 | case "${SIMULATOR_SYSTEMC}" in                                                          \ | 
|---|
| [113] | 121 | "modelsim")                                                                 \ | 
|---|
|  | 122 | $(MAKE) $(WORK_NAME);                                                   \ | 
|---|
|  | 123 | $(MODELTECH_SCCOM) $(PLATFORMS_CXX_FLAGS) $(SOURCES);                   \ | 
|---|
|  | 124 | $(MODELTECH_SCCOM) -link $(PLATFORMS_L_FLAGS) $(LIBNAME);               \ | 
|---|
|  | 125 | $(ECHO) "#!$(SHELL)"                                              > $@; \ | 
|---|
|  | 126 | $(ECHO) "cd $${PWD};"                                            >> $@; \ | 
|---|
|  | 127 | $(ECHO) "$(MODELTECH_VSIM) -sc_arg "'"$${*}"'" $(WORK_NAME).top;" >> $@;\ | 
|---|
|  | 128 | $(ECHO) "cd -;"                                                  >> $@; \ | 
|---|
|  | 129 | $(CHMOD) +x $@;                                                         \ | 
|---|
|  | 130 | ;;                                                                      \ | 
|---|
|  | 131 | *)                                                                          \ | 
|---|
|  | 132 | $(MAKE) $(OBJECTS);                                                     \ | 
|---|
|  | 133 | $(CXX) $(PLATFORMS_L_FLAGS) -o $@ $(OBJECTS) $(LIBNAME);                \ | 
|---|
|  | 134 | ;;                                                                      \ | 
|---|
|  | 135 | esac;                                                                           \ | 
|---|
| [88] | 136 |  | 
|---|
| [119] | 137 | run                             : | 
|---|
| [88] | 138 | @\ | 
|---|
| [120] | 139 | declare -i clean=$(CLEAN);                                                              \ | 
|---|
|  | 140 | if $(TEST) $${clean} -ne 0 -a "$(DATA)" != "$(DATA_ALL)"; then                          \ | 
|---|
|  | 141 | $(RM) $(DIR_LOG)/$(DATA);                                                       \ | 
|---|
|  | 142 | fi;                                                                                     \ | 
|---|
|  | 143 | $(MAKE) $(DIR_LOGS);                                                                    \ | 
|---|
|  | 144 | declare logs="$(LOGS)";                                                                 \ | 
|---|
|  | 145 | $(MAKE) $${logs};                                                                       \ | 
|---|
|  | 146 | declare -i nb_test=0;                                                                   \ | 
|---|
|  | 147 | declare -i nb_test_ko=0;                                                                \ | 
|---|
|  | 148 | for log in $${logs}; do                                                                 \ | 
|---|
|  | 149 | $(GREP) -q "Test OK" $$log;                                                     \ | 
|---|
|  | 150 | declare -i test_ok=$$?;                                                         \ | 
|---|
|  | 151 | $(GREP) -q "Test KO" $$log;                                                     \ | 
|---|
|  | 152 | declare -i test_ko=$$?;                                                         \ | 
|---|
|  | 153 | if $(TEST) $${test_ko} -eq 0 -o $${test_ok} -ne 0;                              \ | 
|---|
|  | 154 | then nb_test_ko=$$(($${nb_test_ko} + 1));                                       \ | 
|---|
|  | 155 | fi;                                                                             \ | 
|---|
|  | 156 | nb_test=$$(($${nb_test} + 1));                                                  \ | 
|---|
|  | 157 | done;                                                                                   \ | 
|---|
|  | 158 | if $(TEST) $${nb_test_ko} -ne 0;                                                        \ | 
|---|
| [101] | 159 | then $(ECHO) "-------------------| Test KO !!! ($${nb_test_ko}/$${nb_test})"; exit 1;   \ | 
|---|
| [120] | 160 | else $(ECHO) "-------------------| Test OK"; exit 0;                                    \ | 
|---|
| [88] | 161 | fi; | 
|---|
|  | 162 |  | 
|---|
| [117] | 163 | execute                         : run | 
|---|
|  | 164 |  | 
|---|
|  | 165 | debug                           : | 
|---|
| [108] | 166 | @\ | 
|---|
| [120] | 167 | $(MAKE) run DATA=debug CLEAN=1; | 
|---|
| [88] | 168 |  | 
|---|
| [117] | 169 | bench                           : | 
|---|
|  | 170 | @\ | 
|---|
|  | 171 | $(MAKE) run DATA=bench; | 
|---|
| [108] | 172 |  | 
|---|
| [119] | 173 | $(DIR_LOG)/%.log                : $(DIR_DATA)/%.cfg $(EXEC) | 
|---|
| [88] | 174 | @\ | 
|---|
|  | 175 | file=$$($(BASENAME) $<);                                \ | 
|---|
|  | 176 | data=$$($(CAT) $<);                                     \ | 
|---|
|  | 177 | log=$@;                                                 \ | 
|---|
| [117] | 178 | $(ECHO) "Run                : $*";                      \ | 
|---|
| [88] | 179 | $(EXEC_PREFIX) $(EXEC) $${data} &> $$log;               \ | 
|---|
|  | 180 | $(GREP) -q "Test OK" $$log;                             \ | 
|---|
|  | 181 | declare -i test_ok=$$?;                                 \ | 
|---|
|  | 182 | $(GREP) -q "Test KO" $$log;                             \ | 
|---|
|  | 183 | declare -i test_ko=$$?;                                 \ | 
|---|
|  | 184 | declare timing=$$($(GREP) -h "Timing" $$log);           \ | 
|---|
| [120] | 185 | if $(TEST) $${test_ko} -ne 0 -a $${test_ok} -eq 0;      \ | 
|---|
| [117] | 186 | then test="... OK    ";                                 \ | 
|---|
|  | 187 | else test="... KO !!!";                                 \ | 
|---|
| [88] | 188 | fi;                                                     \ | 
|---|
| [117] | 189 | $(ECHO) -e "                     $* $${test}\t$${timing}";\ | 
|---|
|  | 190 | echo "{$$($(date))} $* $${test} $${timing}" >> $$($(DIRNAME) $*).res;\ | 
|---|
| [88] | 191 |  | 
|---|
|  | 192 | #-----[ Library + Software ]------------------------------- | 
|---|
|  | 193 |  | 
|---|
| [119] | 194 | env                             : soft lib | 
|---|
|  | 195 |  | 
|---|
| [88] | 196 | lib                             : | 
|---|
|  | 197 | @\ | 
|---|
|  | 198 | $(MAKE) --directory=$(ENVIRONMENT_DIR) --makefile=Makefile;\ | 
|---|
|  | 199 | $(MAKE) --directory=$(MORPHEO_DIR)     --makefile=Makefile; | 
|---|
|  | 200 |  | 
|---|
|  | 201 | soft                            : | 
|---|
|  | 202 | @\ | 
|---|
|  | 203 | $(MAKE) --directory=$(DIR_SOFT)        --makefile=Makefile; | 
|---|
|  | 204 |  | 
|---|
|  | 205 | #-----[ Rules ]-------------------------------------------- | 
|---|
|  | 206 |  | 
|---|
|  | 207 | $(DIR_OBJ)/%.o                  : %.cpp | 
|---|
|  | 208 | @\ | 
|---|
|  | 209 | $(ECHO) "Compilation        : $*";\ | 
|---|
|  | 210 | $(CXX) $(PLATFORMS_CXX_FLAGS) -c -o $@ $<; | 
|---|
|  | 211 |  | 
|---|
| [117] | 212 | $(DIR_OBJ) $(DIR_BIN) $(DIR_LOGS) : | 
|---|
| [88] | 213 | @\ | 
|---|
|  | 214 | $(ECHO) "Create directory   : $@";\ | 
|---|
|  | 215 | $(MKDIR) $@ | 
|---|
|  | 216 |  | 
|---|
|  | 217 | #-----[ Clean + help ]------------------------------------- | 
|---|
|  | 218 |  | 
|---|
|  | 219 | clean                           : | 
|---|
|  | 220 | @\ | 
|---|
|  | 221 | $(ECHO) "Delete     temporary files in directory $(PWD)";\ | 
|---|
| [117] | 222 | $(RM)   $(OBJECTS) $(EXEC) $(LOGS) \ | 
|---|
|  | 223 | *~ $(DIR_SRC)/*~ $(DIR_INC)/*~ $(DIR_DATA)/*/*~ *.res *.txt\ | 
|---|
| [113] | 224 | *core* \ | 
|---|
|  | 225 | tty* \ | 
|---|
|  | 226 | *.vhdl \ | 
|---|
|  | 227 | *.log \ | 
|---|
|  | 228 | *.stat \ | 
|---|
|  | 229 | *.pos \ | 
|---|
|  | 230 | modelsim.ini transcript *wlf* $(WORK_NAME) | 
|---|
| [88] | 231 |  | 
|---|
|  | 232 | clean_all                       : clean | 
|---|
|  | 233 | @\ | 
|---|
|  | 234 | $(ECHO) "Delete     generated files in directory $(PWD)";\ | 
|---|
| [113] | 235 | $(RM) $(DIR_OBJ) $(DIR_BIN) $(DIR_LOG);\ | 
|---|
| [109] | 236 | $(MAKE) --directory=$(DIR_SOFT)        --makefile=Makefile clean_all; \ | 
|---|
| [88] | 237 | $(MAKE) --directory=$(ENVIRONMENT_DIR) --makefile=Makefile clean_all; \ | 
|---|
| [109] | 238 | $(MAKE) --directory=$(MORPHEO_DIR)     --makefile=Makefile clean_all; | 
|---|
| [88] | 239 |  | 
|---|
|  | 240 |  | 
|---|
|  | 241 | help                            : | 
|---|
|  | 242 | @\ | 
|---|
|  | 243 | $(ECHO) " -----[ Common ]-------------------------------------";\ | 
|---|
|  | 244 | $(ECHO) "";\ | 
|---|
|  | 245 | $(ECHO) " * all (default rules) : create software";\ | 
|---|
| [117] | 246 | $(ECHO) " * run                 : execute platforms with test configuration";\ | 
|---|
| [120] | 247 | $(ECHO) "                         set DATA     to select a specific directory in $(DIR_DATA) (default : all)";\ | 
|---|
| [117] | 248 | $(ECHO) "                         set PRIORITY to nice the execution (default : 0)";\ | 
|---|
| [120] | 249 | $(ECHO) "                         set CLEAN    to remove previous log (default : 0)";\ | 
|---|
|  | 250 | $(ECHO) "                         example : make run DATA=debug PRIORITY=10 CLEAN";\ | 
|---|
| [117] | 251 | $(ECHO) " * execute             : cf 'make run'";\ | 
|---|
|  | 252 | $(ECHO) " * debug               : cf 'make run DATA=debug'";\ | 
|---|
|  | 253 | $(ECHO) " * bench               : cf 'make run DATA=bench'";\ | 
|---|
| [88] | 254 | $(ECHO) " * lib                 : make library";\ | 
|---|
|  | 255 | $(ECHO) " * soft                : make software";\ | 
|---|
|  | 256 | $(ECHO) " * clean               : erase temporary files";\ | 
|---|
|  | 257 | $(ECHO) " * clean_all           : erase generated files";\ | 
|---|
|  | 258 | $(ECHO) " * help                : print this message";\ | 
|---|
|  | 259 | $(ECHO) ""; | 
|---|
|  | 260 |  | 
|---|
| [113] | 261 | include $(MORPHEO_TOPLEVEL)/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Synthesis | 
|---|
| [88] | 262 | include $(MORPHEO_TOPLEVEL)/IPs/systemC/processor/Morpheo/Makefile.deps | 
|---|
|  | 263 | include $(MORPHEO_TOPLEVEL)/IPs/systemC/Environment/Makefile.deps | 
|---|