#***************************************************************************** # # #Filename : Makefile.vxworks #Description: makefile to be used in order to compile libcurl for VxWoorks 6.3. # #How to use: # 1. Adjust environment variables at the file beginning # 2. Open the Command Prompt window and change directory ('cd') # into the 'lib' folder # 3. Add <CYGWIN>/bin folder to the PATH environment variable # For example type 'set PATH=C:/embedded/cygwin/bin;%PATH%' # 4. Build the library by typing 'make -f ./Makefile.vxworks' # As a result the libcurl.a should be created in the 'lib' folder. # To clean package use 'make -f ./Makefile.vxworks clean' #Requirements: # 1. WinXP machine # 2. Full CYGWIN installation (open source) with GNU make version # v3.78 or higher # 3. WindRiver Workbench with vxWorks 6.3 (commercial) #***************************************************************************** # ---------------------------------------------------------------------- # Environment # ---------------------------------------------------------------------- export WIND_HOME := C:/embedded/Workbench2.5.0.1 export WIND_BASE := $(WIND_HOME)/vxworks-6.3 export WIND_HOST_TYPE := x86-win32 # BUILD_TYE:= <debug>|<release> (build with debugging info or optimized) BUILD_TYPE := debug USER_CFLAGS:= # directories where to seek for includes and libraries OPENSSL_INC := D:/libraries/openssl/openssl-0.9.8zc-vxWorks6.3/include OPENSSL_LIB := D:/libraries/openssl/openssl-0.9.8zc-vxWorks6.3 ZLIB_INC := D:/libraries/zlib/zlib-1.2.8-VxWorks6.3/zlib-1.2.8 ZLIB_LIB := D:/libraries/zlib/zlib-1.2.8-VxWorks6.3/binaries/vxworks_3.1_gnu/Debug/lib ARES_INC := ARES_LIB := # ---------------------------------------------------------------------- # Compiler # ---------------------------------------------------------------------- CC := ccppc AR := arppc LINK := ccppc CFLAGS := -D__GNUC__ -D__ppc__ -msoft-float -fno-builtin -mcpu=604 -mlongcall -DCPU=PPC604 -D_GNU_TOOL -Wall -W -Winline $(USER_CFLAGS) LDFLAGS := -nostdlib -Wl,-i -Wl,-X INCLUDE_FLAG := -I C_DEBUGFLAG := -g C_OPTFLAG := -O2 COMPILE_ONLY_FLAG := -c OBJ_EXTENSION := .o CC_OBJ_OUTPUT = -o $@ ARFLAGS := -rc LIBS_FLAG := -l LIBS_DIRFLAG:= -L LD_DEBUGFLAG := $(C_DEBUGFLAG) EXECUTE_EXTENSION := .out TOOL_CHAIN_BIN := $(WIND_HOME)/gnu/3.4.4-vxworks-6.3/$(WIND_HOST_TYPE)/bin/ # ---------------------------------------------------------------------- # Add -DINET6 if the OS kernel image was built with IPv6 support # CFLAGS += -DINET6 # Set up compiler and linker flags for debug or optimization ifeq ($(BUILD_TYPE), debug) CFLAGS += $(C_DEBUGFLAG) LDFLAGS += $(LD_DEBUGFLAG) else CFLAGS += $(C_OPTFLAG) endif # ---------------------------------------------------------------------- # Main Makefile and possible sub-make files MAKEFILES := Makefile.vxworks # List of external include directories #----- # IMPORTANT: include OPENSSL directories before system # in order to prevent WindRiver OpenSSL to be used. #----- INCLUDE_DIRS := ../include $(OPENSSL_INC) $(ZLIB_INC) $(ARES_INC) $(WIND_BASE)/target/h $(WIND_BASE)/target/h/wrn/coreip # List of external libraries and their directories LIBS_LIST := . LIB_DIRS := . ifneq ($(OPENSSL_LIB), ) LIBS_LIST += crypto ssl LIB_DIRS += $(OPENSSL_LIB) endif ifneq ($(ZLIB_LIB), ) LIBS_LIST += z LIB_DIRS += $(ZLIB_LIB) endif ifneq ($(ARES_LIB), ) LIBS_LIST += ares LIB_DIRS += $(ARES_LIB) endif # Add include and library directories and libraries CFLAGS += $(INCLUDE_DIRS:%=$(INCLUDE_FLAG)%) LDFLAGS += $(LIB_DIRS:%=$(LIBS_DIRFLAG)%) # List of targets to make for libs target LIBS_TARGET_LIST := libcurl.a # List of execuatble applications to make in addition to libs for all target EXE_TARGET_LIST := # Support for echoing rules # If ECHORULES variable was set (for example, using 'make' command line) # some shell commands in the rules will be echoed ifneq ($(strip $(findstring $(ECHORULES), yes YES 1 true TRUE)),) _@_ := else _@_ := @ endif # Directory to hold compilation intermediate files TMP_DIR := tmp # Get sources and headers to be compiled include Makefile.inc # List of headers INCLUDE_FILES := $(HHEADERS) INCLUDE_FILES += $(shell find ../include -name \*.h) # List of sources OBJLIST := $(CSOURCES:%.c=$(TMP_DIR)/%$(OBJ_EXTENSION)) # ---------------------------------------------------------------------- #### default rule # It should be first rule in this file .PHONY: default default: libcurl.a #### Compiling C files $(TMP_DIR)/%$(OBJ_EXTENSION): %.c $(MAKEFILES) @echo Compiling C file $< $(ECHO_STDOUT) @[ -d $(@D) ] || mkdir -p $(@D) $(_@_) $(TOOL_CHAIN_BIN)$(CC) $(COMPILE_ONLY_FLAG) $(CFLAGS) $< $(CC_OBJ_OUTPUT) #### Creating library $(LIBS_TARGET_LIST): $(INCLUDE_FILES) $(MAKEFILES) $(OBJLIST) @echo Creating library $@ $(ECHO_STDOUT) $(_@_) [ -d $(@D) ] || mkdir -p $(@D) $(_@_) rm -f $@ $(_@_) $(TOOL_CHAIN_BIN)$(AR) $(ARFLAGS) $@ $(filter %$(OBJ_EXTENSION), $^) #### Creating application $(EXE_TARGET_LIST): $(INCLUDE_FILES) $(MAKEFILES) $(LIBS_TARGET_LIST) @echo Creating application $@ @[ -d $(@D) ] || mkdir -p $(@D) $(_@_) $(TOOL_CHAIN_BIN)$(LINK) $(CC_OBJ_OUTPUT) $($(@)_EXE_OBJ_LIST) $(LDFLAGS) $($(@)_EXE_LIBS_NEEDED:%=$(LIBS_FLAG)%) $(LIBS_LIST:%=$(LIBS_FLAG)%) $(USER_LIBS_LIST) $(USER_LIBS_LIST) #### Master Targets libs: $(LIBS_TARGET_LIST) @echo All libs made. all: $(LIBS_TARGET_LIST) $(EXE_TARGET_LIST) $(INCLUDE_TARGET_LIST) @echo All targets made. # Clean up .PHONY: clean clean: $(_@_) rm -rf $(TMP_DIR) @echo libcurl was cleaned.