#!/usr/bin/perl # It is so hard getting the absolute path of the current script in bash # so I converted CP back to perl. :) use File::Basename ; use Cwd ; use Cwd 'abs_path'; $trick_bin = dirname(abs_path($0)) ; $trick_home = dirname($trick_bin) ; #### Handle arguments #### $numArgs = $#ARGV + 1; $makefileAddArgs = ' '; foreach $argnum (0 .. $#ARGV) { $arg = $ARGV[$argnum]; if ($arg =~ /(\w+)=(\w+)/ ) { $makefileAddArgs = $makefileAddArgs . $1 . "=" . $2 . " "; } elsif ($arg =~ /-d/ ) { $makefileAddArgs = $makefileAddArgs . " debug "; } elsif ($arg =~ /-t/ ) { $makefileAddArgs = $makefileAddArgs . " test "; } else { $ENV{TRICK_CPFLAGS} .= " $arg" ; } } if ( -f "S_define" ) { if ( not -w "." ) { print getcwd() , " is not writable\n" ; print "CP aborted\n" ; exit 1 ; } unlink "build/Makefile_sim", "makefile" ; $makefile_text = do { local $/; } ; $makefile_text =~ s/SUB_TRICK_HOME/$trick_home/ ; $makefile_text =~ s/SUB_TRICK_BIN/$trick_bin/ ; open MAKEFILE, ">makefile" ; print MAKEFILE $makefile_text ; close MAKEFILE ; system("make -f makefile " . $makefileAddArgs) ; exit $? >> 8; } else { print "S_define does not exist" ; exit 1 ; } __END__ # CP found at SUB_TRICK_BIN ifndef TRICK_HOME export TRICK_HOME := SUB_TRICK_HOME endif ifneq ($(wildcard ${TRICK_HOME}/share/trick/makefiles/Makefile.common),) include ${TRICK_HOME}/share/trick/makefiles/Makefile.common S_MAIN = S_main_${TRICK_HOST_CPU}.exe ifeq ($(MAKECMDGOALS), test) TRICK_HOST_CPU := $(shell $(TRICK_HOME)/bin/trick-gte TRICK_HOST_CPU)_test S_MAIN = T_main_${TRICK_HOST_CPU}.exe endif ifndef TRICK_VERBOSE_BUILD PRINT_CP = $(info $(call COLOR,Running) configuration_processor) PRINT_ICG = $(info $(call COLOR,Running) ICG) PRINT_S_DEF_DEPS = $(info $(call COLOR,Tracing) S_define) PRINT_CONVERT_SWIG = $(info $(call COLOR,Running) convert_swig) PRINT_MAKEFILE_SRC = $(info $(call COLOR,Writing) Makefile_src) PRINT_MAKEFILE_SWIG = $(info $(call COLOR,Writing) Makefile_swig) endif all test: $(TRICK_STATIC_LIB) S_source.hh \ build/Makefile_io_src \ build/Makefile_src \ build/Makefile_swig \ build/convert_swig_last_run \ S_main build: @mkdir $@ debug: all debug: TRICK_CPFLAGS += --debug $(TRICK_STATIC_LIB): $(info Cannot find $@. Please build Trick for this platform.) @exit -1 # CP creates S_source.hh required for ICG and SWIG processing S_source.hh: S_define | build $(PRINT_CP) $(ECHO_CMD)${TRICK_HOME}/$(LIBEXEC)/trick/configuration_processor $(TRICK_CPFLAGS) $(PRINT_S_DEF_DEPS) $(ECHO_CMD)$(TRICK_CPPC) $(TRICK_SFLAGS) $(TRICK_SYSTEM_SFLAGS) -M -MT S_source.hh -MF build/S_define.deps -x c++ S_define # Automatic and manual ICG rules build/Makefile_io_src: | S_source.hh build $(PRINT_ICG) $(ECHO_CMD)${TRICK_HOME}/bin/trick-ICG -m ${TRICK_ICGFLAGS} ${TRICK_CXXFLAGS} ${TRICK_SYSTEM_CXXFLAGS} S_source.hh ICG: $(PRINT_ICG) $(ECHO_CMD)${TRICK_HOME}/bin/trick-ICG -m ${TRICK_ICGFLAGS} ${TRICK_CXXFLAGS} ${TRICK_SYSTEM_CXXFLAGS} S_source.hh force_ICG: $(PRINT_ICG) $(ECHO_CMD)${TRICK_HOME}/bin/trick-ICG -f -m ${TRICK_ICGFLAGS} ${TRICK_CXXFLAGS} ${TRICK_SYSTEM_CXXFLAGS} S_source.hh # Create makefile for source code build/Makefile_src: | build/Makefile_io_src S_source.hh $(PRINT_MAKEFILE_SRC) $(ECHO_CMD)${TRICK_HOME}/$(LIBEXEC)/trick/make_makefile_src $? # Create makefile for SWIG code build/Makefile_swig: | build/Makefile_io_src $(PRINT_MAKEFILE_SWIG) $(ECHO_CMD)${TRICK_HOME}/$(LIBEXEC)/trick/make_makefile_swig $? # Automatic and manual convert_swig rules build/convert_swig_last_run: | build/Makefile_swig $(PRINT_CONVERT_SWIG) $(ECHO_CMD)${TRICK_HOME}/$(LIBEXEC)/trick/convert_swig ${TRICK_CONVERT_SWIG_FLAGS} @touch $@ convert_swig: $(PRINT_CONVERT_SWIG) $(ECHO_CMD)${TRICK_HOME}/$(LIBEXEC)/trick/convert_swig ${TRICK_CONVERT_SWIG_FLAGS} @touch build/convert_swig_last_run # Force S_define_exp to be remade each time this rule runs .PHONY: S_define_exp S_define_exp: $(TRICK_CC) -E -C -xc++ ${TRICK_SFLAGS} $(TRICK_SYSTEM_SFLAGS) S_define > $@ help: @echo -e "\ Simulation make options:\n\ make [debug] [TRICK_VERBOSE_BUILD=1] - Makes everything: S_main and S_sie.resource\n\ make sie - Builds the S_sie.resource file.\n\ make clean - Removes all object files in simulation directory\n\ make spotless - Performs a clean\n\ make apocalypse - Performs a clean" CLEAN_TARGETS = tidy clean spotless distclean apocalypse ifeq ($(findstring ${MAKECMDGOALS},$(CLEAN_TARGETS)),) -include S_overrides.mk -include build/S_define.deps -include build/Makefile_src -include build/Makefile_src_deps -include build/Makefile_io_src -include build/Makefile_swig -include build/Makefile_ICG -include build/Makefile_convert_swig -include build/Makefile_src_deps endif else all: $(error error with TRICK_HOME, cannot find ${TRICK_HOME}/share/trick/makefiles/Makefile.common) endif tidy: -rm -f S_source.hh S_sie.resource -rm -f S_main* T_main* -rm -f build/Makefile_* -rm -f S_default.dat clean: tidy -rm -f DP_Product/DP_rt_frame DP_Product/DP_rt_itimer -rm -f DP_Product/DP_rt_jobs DP_Product/DP_rt_timeline DP_Product/DP_mem_stats -rm -rf build trick -rm -f makefile spotless: clean distclean: clean apocalypse: clean @echo "I love the smell of napalm in the morning"