diff --git a/Makefile.ppc b/Makefile.ppc index e69de29..8d4d5ef 100644 --- a/Makefile.ppc +++ b/Makefile.ppc @@ -0,0 +1,257 @@ +#********************************************************************************************************* +# readline Makefile +# target -> libreadline.a +# libreadline.so +#********************************************************************************************************* + +#********************************************************************************************************* +# include config.mk +#********************************************************************************************************* +CONFIG_MK_EXIST = $(shell if [ -f ../config.mk ]; then echo exist; else echo notexist; fi;) +ifeq ($(CONFIG_MK_EXIST), exist) +include ../config.mk +else +CONFIG_MK_EXIST = $(shell if [ -f config.mk ]; then echo exist; else echo notexist; fi;) +ifeq ($(CONFIG_MK_EXIST), exist) +include config.mk +else +CONFIG_MK_EXIST = +endif +endif + +#********************************************************************************************************* +# check configure +#********************************************************************************************************* +check_defined = \ + $(foreach 1,$1,$(__check_defined)) +__check_defined = \ + $(if $(value $1),, \ + $(error Undefined $1$(if $(value 2), ($(strip $2))))) + +$(call check_defined, CONFIG_MK_EXIST, Please configure this project in RealEvo-IDE or \ +create a config.mk file!) +$(call check_defined, SYLIXOS_BASE_PATH, SylixOS base project path) +$(call check_defined, TOOLCHAIN_PREFIX, the prefix name of toolchain) +$(call check_defined, DEBUG_LEVEL, debug level(debug or release)) + +#********************************************************************************************************* +# toolchain select +#********************************************************************************************************* +CC = $(TOOLCHAIN_PREFIX)gcc +CXX = $(TOOLCHAIN_PREFIX)g++ +AS = $(TOOLCHAIN_PREFIX)gcc +AR = $(TOOLCHAIN_PREFIX)ar +LD = $(TOOLCHAIN_PREFIX)g++ + +#********************************************************************************************************* +# do not change the following code +# buildin internal application source +#********************************************************************************************************* +#********************************************************************************************************* +# src(s) file +#********************************************************************************************************* +SRCS = \ +readline/bind.c \ +readline/callback.c \ +readline/colors.c \ +readline/compat.c \ +readline/complete.c \ +readline/display.c \ +readline/funmap.c \ +readline/histexpand.c \ +readline/histfile.c \ +readline/history.c \ +readline/histsearch.c \ +readline/input.c \ +readline/isearch.c \ +readline/keymaps.c \ +readline/kill.c \ +readline/macro.c \ +readline/mbutil.c \ +readline/misc.c \ +readline/nls.c \ +readline/parens.c \ +readline/parse-colors.c \ +readline/readline.c \ +readline/rltty.c \ +readline/savestring.c \ +readline/search.c \ +readline/shell.c \ +readline/signals.c \ +readline/terminal.c \ +readline/text.c \ +readline/tilde.c \ +readline/undo.c \ +readline/util.c \ +readline/vi_mode.c \ +readline/xfree.c \ +readline/xmalloc.c + +#********************************************************************************************************* +# build path +#********************************************************************************************************* +ifeq ($(DEBUG_LEVEL), debug) +OUTDIR = Debug +else +OUTDIR = Release +endif + +OUTPATH = ./$(OUTDIR) +OBJPATH = $(OUTPATH)/obj +DEPPATH = $(OUTPATH)/dep + +#********************************************************************************************************* +# target +#********************************************************************************************************* +LIB = $(OUTPATH)/libreadline.a +DLL = $(OUTPATH)/libreadline.so + +#********************************************************************************************************* +# objects +#********************************************************************************************************* +OBJS = $(addprefix $(OBJPATH)/, $(addsuffix .o, $(basename $(SRCS)))) +DEPS = $(addprefix $(DEPPATH)/, $(addsuffix .d, $(basename $(SRCS)))) + +#********************************************************************************************************* +# include path +#********************************************************************************************************* +INCDIR = -I"$(SYLIXOS_BASE_PATH)/libsylixos/SylixOS" +INCDIR += -I"$(SYLIXOS_BASE_PATH)/libsylixos/SylixOS/include" +INCDIR += -I"$(SYLIXOS_BASE_PATH)/libsylixos/SylixOS/include/inet" + +INCDIR += -I"." +INCDIR += -I"./readline" + +#********************************************************************************************************* +# compiler preprocess +#********************************************************************************************************* +DSYMBOL = -DSYLIXOS +DSYMBOL += -DSYLIXOS_LIB +DSYMBOL += -DHAVE_CONFIG_H +DSYMBOL += -D_POSIX_VERSION=2008 + +#********************************************************************************************************* +# depend dynamic library +#********************************************************************************************************* +DEPEND_DLL = -lcextern + +#********************************************************************************************************* +# depend dynamic library search path +#********************************************************************************************************* +DEPEND_DLL_PATH = -L"$(SYLIXOS_BASE_PATH)/libcextern/$(OUTDIR)" + +#********************************************************************************************************* +# compiler optimize +#********************************************************************************************************* +ifeq ($(DEBUG_LEVEL), debug) +OPTIMIZE = -O0 -g3 -gdwarf-2 +else +OPTIMIZE = -O2 -g1 -gdwarf-2 # Do NOT use -O3 and -Os +endif # -Os is not align for function + # loop and jump. +#********************************************************************************************************* +# depends and compiler parameter (cplusplus in kernel MUST NOT use exceptions and rtti) +#********************************************************************************************************* +DEPENDFLAG = -MM +CXX_EXCEPT = -fno-exceptions -fno-rtti +COMMONFLAGS = $(CPUFLAGS) $(OPTIMIZE) -Wall -fmessage-length=0 -fsigned-char -fno-short-enums +ASFLAGS = -x assembler-with-cpp $(DSYMBOL) $(INCDIR) $(COMMONFLAGS) -c +CFLAGS = $(DSYMBOL) $(INCDIR) $(COMMONFLAGS) -fPIC -c +CXXFLAGS = $(DSYMBOL) $(INCDIR) $(CXX_EXCEPT) $(COMMONFLAGS) -fPIC -c +ARFLAGS = -r + +#********************************************************************************************************* +# define some useful variable +#********************************************************************************************************* +DEPEND = $(CC) $(DEPENDFLAG) $(CFLAGS) +DEPEND.d = $(subst -g ,,$(DEPEND)) +COMPILE.S = $(AS) $(ASFLAGS) +COMPILE_VFP.S = $(AS) $(ASFLAGS) +COMPILE.c = $(CC) $(CFLAGS) +COMPILE.cxx = $(CXX) $(CXXFLAGS) + +#********************************************************************************************************* +# target +#********************************************************************************************************* +all: $(LIB) $(DLL) + @echo create "$(LIB) $(DLL)" success. + +#********************************************************************************************************* +# include depends +#********************************************************************************************************* +ifneq ($(MAKECMDGOALS), clean) +ifneq ($(MAKECMDGOALS), clean_project) +sinclude $(DEPS) +endif +endif + +#********************************************************************************************************* +# create depends files +#********************************************************************************************************* +$(DEPPATH)/%.d: %.c + @echo creating $@ + @if [ ! -d "$(dir $@)" ]; then mkdir -p "$(dir $@)"; fi + @rm -f $@; \ + echo -n '$@ $(addprefix $(OBJPATH)/, $(dir $<))' > $@; \ + $(DEPEND.d) $< >> $@ || rm -f $@; exit; + +$(DEPPATH)/%.d: %.cpp + @echo creating $@ + @if [ ! -d "$(dir $@)" ]; then mkdir -p "$(dir $@)"; fi + @rm -f $@; \ + echo -n '$@ $(addprefix $(OBJPATH)/, $(dir $<))' > $@; \ + $(DEPEND.d) $< >> $@ || rm -f $@; exit; + +#********************************************************************************************************* +# compile source files +#********************************************************************************************************* +$(OBJPATH)/%.o: %.S + @if [ ! -d "$(dir $@)" ]; then mkdir -p "$(dir $@)"; fi + $(COMPILE.S) $< -o $@ + +$(OBJPATH)/%.o: %.c + @if [ ! -d "$(dir $@)" ]; then mkdir -p "$(dir $@)"; fi + $(COMPILE.c) $< -o $@ + +$(OBJPATH)/%.o: %.cpp + @if [ ! -d "$(dir $@)" ]; then mkdir -p "$(dir $@)"; fi + $(COMPILE.cxx) $< -o $@ + +#********************************************************************************************************* +# link libreadline.a object files +#********************************************************************************************************* +$(LIB): $(OBJS) + $(AR) $(ARFLAGS) $(LIB) $(OBJS) + +#********************************************************************************************************* +# link libreadline.so object files +#********************************************************************************************************* +$(DLL): $(OBJS) + $(LD) $(CPUFLAGS) -fPIC -shared -o $(DLL) $(OBJS) \ + $(DEPEND_DLL_PATH) $(DEPEND_DLL) -lm -lgcc + +#********************************************************************************************************* +# clean +#********************************************************************************************************* +.PHONY: clean +.PHONY: clean_project + +#********************************************************************************************************* +# clean objects +#********************************************************************************************************* +clean: + -rm -rf $(LIB) + -rm -rf $(DLL) + -rm -rf $(OBJS) + -rm -rf $(OBJPATH) + -rm -rf $(DEPPATH) + +#********************************************************************************************************* +# clean project +#********************************************************************************************************* +clean_project: + -rm -rf $(OUTPATH) + +#********************************************************************************************************* +# END +#*********************************************************************************************************