Commit 426aea1e authored by Greg Williams's avatar Greg Williams
Browse files

Added working makefile to build kinetic-c-client lib, install the lib, build...

Added working makefile to build kinetic-c-client lib, install the lib, build kinetic-c-client-util against installed lib, and run examples. Also reintegrated into for test suite into 'rake ci' for full coverage and convenience
parent 8af09aa9
Loading
Loading
Loading
Loading
+99 −106
Original line number Diff line number Diff line
# OUT_DIR = obj
# BIN_DIR = bin
# OBJS = $(OUT_DIR)/protobuf-c.o $(OUT_DIR)/kinetic_proto.o $(OUT_DIR)/kinetic_client.o
# INCS = -I"./include" -I"./src/lib" -I"./vendor/protobuf=c" -I"./vendor"
# BIN = $(BIN_DIR)/kinetic_client
# CC = gcc
# CFLAGS = $(INCS) -g -Wall
# LFLAGS = -Wall
# MKDIRS = mkdir -p
# RM_ALL = rm -rf

# .PHONY: directories run

# build: directories $(BIN)

# all: clean build run

# directories: $(OUT_DIR) $(BIN_DIR)

# $(OUT_DIR):
# 	$(MKDIRS) $(OUT_DIR)

# $(BIN_DIR):
# 	$(MKDIRS) $(BIN_DIR)

# clean:
# 	$(RM_ALL) $(OBJS) $(OUT_DIR) $(BIN)

# $(OUT_DIR)/protobuf-c.o: directories ./vendor/protobuf-c/protobuf-c.c
# 	$(CC) $(CFLAGS) -c ./src/vendor/protobuf-c/protobuf-c.c -o $@

# $(OUT_DIR)/kinetic_proto.o: directories /src/lib/kinetic_proto.c ./vendor/protobuf-c/protobuf-c.c
# 	$(CC) $(CFLAGS) -c ./src/lib/kinetic_proto.c -o $@

# $(OUT_DIR)/kinetic_client.o: directories ./src/lib/kinetic_client.c /src/lib/kinetic_proto.c ./vendor/protobuf-c/protobuf-c.c
# 	$(CC) $(CFLAGS) -c ./src/lib/kinetic_client.c -o $@

# $(BIN): $(OBJS)
# 	$(CC) $(LFLAGS) $(OBJS) -o $(BIN)


LIB_NAME = kinetic_client
CC      = gcc
OUT_DIR = ./build/lib/obj
BIN_DIR = ./build/lib/bin
PROJECT = kinetic-c-client

OUT_DIR = ./obj
BIN_DIR = ./bin
PUB_INC = ./include
PUB_API = $(PUB_INC)/$(LIB_NAME).h
LIB_INC = ./src/lib
EX_INC  = ./src/utility
LIB_DIR = ./src/lib
UTIL_DIR = ./src/utility
UTIL_EX = $(UTIL_DIR)/examples
PBC_INC = ./vendor/protobuf-c
SOCKET99 = ./vendor/socket99
VND_INC = ./vendor
INCS    = -I$(PUB_INC) -I$(LIB_INC) -I$(EX_INC) -I$(PBC_INC) -I$(VND_INC) -I$(SOCKET99)
CFLAGS  = $(INCS) -g -Wall
LIBS    = -lm -l crypto
BIN = $(BIN_DIR)/kinetic_client

_LIB_DEPS = kinetic_connection.h kinetic_hmac.h kinetic_logger.h kinetic_message.h kinetic_nbo.h kinetic_operation.h kinetic_pdu.h kinetic_proto.h kinetic_socket.h kinetic_types.h
DEPS = $(PBC_INC)/protobuf-c.h $(SOCKET99)/socket99.h $(patsubst %,$(LIB_INC)/%,$(_LIB_DEPS))

LIB_OBJS = $(LIB_NAME).o kinetic_connection.o kinetic_hmac.o kinetic_logger.o kinetic_message.o kinetic_nbo.o kinetic_operation.o kinetic_pdu.o kinetic_proto.o kinetic_socket.o protobuf-c.o socket99.o
OBJ = $(patsubst %,$(OUT_DIR)/%,$(LIB_OBJS))
KINETIC_LIB = $(BIN_DIR)/lib${PROJECT}.a
UTIL_EXEC = $(BIN_DIR)/$(PROJECT)-util

$(OUT_DIR)/%.o: %.c $(DEPS)
	$(CC) -c -o $@ $< $(CFLAGS)

$(OUT_DIR)/$(LIB_NAME).o: $(LIB_INC)/$(LIB_NAME).c
	$(CC) -c -o $@ $(INCS) $(CFLAGS)

$(LIB_NAME): $(OBJ)
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

.PHONY: clean

clean:
	rm -f $(OUT_DIR)/*.o *~ core

run:
	@echo=off; echo "\nRunning Executable $(BIN):"
	./$(BIN)


PROJECT = kinetic-c-client
CC = gcc
OPTIMIZE = -O3
WARN = -Wall -Wextra -pedantic
#CDEFS += 
CFLAGS += -std=c99 -g ${WARN} ${CDEFS} ${OPTIMIZE}
#LDFLAGS +=

# A tautological compare is expected in the test suite.
# CFLAGS += -Wno-tautological-compare

all: lib${PROJECT}.a
# all: test_${PROJECT}

LIB_OBJS = $(LIB_NAME).o kinetic_connection.o kinetic_hmac.o kinetic_logger.o kinetic_message.o kinetic_nbo.o kinetic_operation.o kinetic_pdu.o kinetic_proto.o kinetic_socket.o protobuf-c.o socket99.o
LIB_INCS = -I$(LIB_DIR) -I$(PUB_INC) -I$(PBC_INC) -I$(VND_INC)
LIB_DEPS = $(PUB_INC)/kinetic_client.h $(PUB_INC)/kinetic_types.h $(LIB_DIR)/kinetic_connection.h $(LIB_DIR)/kinetic_hmac.h $(LIB_DIR)/kinetic_logger.h $(LIB_DIR)/kinetic_message.h $(LIB_DIR)/kinetic_nbo.h $(LIB_DIR)/kinetic_operation.h $(LIB_DIR)/kinetic_pdu.h $(LIB_DIR)/kinetic_proto.h $(LIB_DIR)/kinetic_socket.h
# LIB_OBJ = $(patsubst %,$(OUT_DIR)/%,$(LIB_OBJS))
LIB_OBJS = $(OUT_DIR)/kinetic_nbo.o $(OUT_DIR)/kinetic_operation.o $(OUT_DIR)/kinetic_pdu.o $(OUT_DIR)/kinetic_proto.o $(OUT_DIR)/kinetic_socket.o $(OUT_DIR)/kinetic_message.o $(OUT_DIR)/kinetic_message.o $(OUT_DIR)/kinetic_logger.o $(OUT_DIR)/kinetic_hmac.o $(OUT_DIR)/kinetic_connection.o $(OUT_DIR)/kinetic_operation.o $(OUT_DIR)/kinetic_client.o $(OUT_DIR)/socket99.o $(OUT_DIR)/protobuf-c.o

# TEST_OBJS=
default: $(KINETIC_LIB)

${PROJECT}: main.c ${OBJS}
	${CC} -o $@ main.c ${OBJS} ${LDFLAGS}

lib${PROJECT}.a: ${OBJS}
	ar -rcs lib${PROJECT}.a ${OBJS}

# test_${PROJECT}: test_${PROJECT}.c ${OBJS} ${TEST_OBJS}
# 	${CC} -o $@ test_${PROJECT}.c ${OBJS} ${TEST_OBJS} ${CFLAGS} ${LDFLAGS}

# test: ./test_${PROJECT}
# 	./test_${PROJECT}
test: Rakefile $(LIB_OBJS)
	bundle install
	bundle exec rake ci

clean:
	rm -f ${PROJECT} test_${PROJECT} *.o *.a *.core
	rm -rf $(BIN_DIR)/* $(OUT_DIR)/*.o *.core

# $(OUT_DIR)/%.o: %.c $(DEPS)
# 	$(CC) -c -o $@ $< $(CFLAGS)

$(OUT_DIR)/kinetic_nbo.o: $(LIB_DIR)/kinetic_nbo.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_pdu.o: $(LIB_DIR)/kinetic_pdu.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_proto.o: $(LIB_DIR)/kinetic_proto.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_socket.o: $(LIB_DIR)/kinetic_socket.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_message.o: $(LIB_DIR)/kinetic_message.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_logger.o: $(LIB_DIR)/kinetic_logger.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_hmac.o: $(LIB_DIR)/kinetic_hmac.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_connection.o: $(LIB_DIR)/kinetic_connection.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_operation.o: $(LIB_DIR)/kinetic_operation.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_client.o: $(LIB_DIR)/kinetic_client.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/socket99.o: $(SOCKET99)/socket99.c $(SOCKET99)/socket99.h
	$(CC) -c -o $@ $< $(CFLAGS) -I$(SOCKET99)
$(OUT_DIR)/protobuf-c.o: $(PBC_INC)/protobuf-c/protobuf-c.c $(PBC_INC)/protobuf-c/protobuf-c.h
	$(CC) -c -o $@ $< -std=c99 -g -Wall ${OPTIMIZE} -I$(PBC_INC)

$(KINETIC_LIB): $(LIB_OBJS)
	ar -rcs $@ $(LIB_OBJS)
	ar -t $@

UTIL_OBJS = $(OUT_DIR)/noop.o $(OUT_DIR)/put.o $(OUT_DIR)/get.o
UTIL_INCS = -I$(UTIL_DIR) -I/usr/local/include
# TODO: Delete LIB_DIR dep after kinetic_proto is yanked out of public API
LDFLAGS += -lm -l crypto -l kinetic-c-client

$(OUT_DIR)/noop.o: $(UTIL_EX)/noop.c
	$(CC) -c -o $@ $< $(CFLAGS) $(UTIL_INCS)
$(OUT_DIR)/put.o: $(UTIL_EX)/put.c
	$(CC) -c -o $@ $< $(CFLAGS) $(UTIL_INCS)
$(OUT_DIR)/get.o: $(UTIL_EX)/get.c
	$(CC) -c -o $@ $< $(CFLAGS) $(UTIL_INCS)
$(UTIL_EXEC): $(UTIL_DIR)/main.c $(UTIL_OBJS)
	${CC} -o $@ $< $(UTIL_OBJS) $(UTIL_INCS) ${CFLAGS} ${LDFLAGS} -l kinetic-c-client

utility: ${UTIL_EXEC}

# Configure to launch java simulator
# JAVA=${JAVA_HOME}/bin/java
SIM_JARS_PREFIX = vendor/kinetic-java/kinetic-simulator-0.7.0.2-kinetic-proto-2.0.6-SNAPSHOT
CLASSPATH = ${JAVA_HOME}/lib/tools.jar:$(SIM_JARS_PREFIX)-jar-with-dependencies.jar:$(SIM_JARS_PREFIX)-sources.jar:$(SIM_JARS_PREFIX).jar
SIM_RUNNER = com.seagate.kinetic.simulator.internal.SimulatorRunner
SIM_ADMIN = com.seagate.kinetic.admin.cli.KineticAdminCLI

run: ${UTIL_EXEC}
	echo Running Executable ${UTIL_EXEC}:
	exec java -classpath "${CLASSPATH}" ${SIM_RUNNER} "$@" & > ./sim.log
	sleep 5
	exec java -classpath "${CLASSPATH}" ${SIM_ADMIN} -setup -erase true > ./erase.log
	${UTIL_EXEC} noop
	${UTIL_EXEC} put
	${UTIL_EXEC} get

all: clean test default install run

.PHONY: clean

# Installation
PREFIX ?= /usr/local
INSTALL ?= install
RM ?= rm

install: lib${PROJECT}.a
install: ${KINETIC_LIB}
	${INSTALL} -d ${PREFIX}/lib/
	${INSTALL} -c lib${PROJECT}.a ${PREFIX}/lib/lib${PROJECT}.a
	${INSTALL} -c ${KINETIC_LIB} ${PREFIX}/lib/
	${INSTALL} -d ${PREFIX}/include/
	${INSTALL} -c ${PROJECT}.h ${PREFIX}/include/
	${INSTALL} -c ${PROJECT}_types.h ${PREFIX}/include/
	${INSTALL} -c ./include/${LIB_NAME}.h ${PREFIX}/include/
	${INSTALL} -c ./include/kinetic_types.h ${PREFIX}/include/
	${INSTALL} -c ./src/lib/kinetic_proto.h ${PREFIX}/include/

uninstall:
	${RM} -f ${PREFIX}/lib/lib${PROJECT}.a
	${RM} -f ${PREFIX}/include/${PROJECT}.h
	${RM} -f ${PREFIX}/include/${PROJECT}_types.h
	${RM} -f ${PREFIX}/include/${LIB_NAME}.h
	${RM} -f ${PREFIX}/include/kinetic_types.h
	${RM} -f ${PREFIX}/include/kinetic_proto.h


# Other dependencies
theft.o: Makefile
theft.o: theft.h theft_types.h theft_types_internal.h
$(BIN_DIR)/lib${PROJECT}.a: Makefile
# kinetic-lib.o: kinetic_client.h kinetic_connection.h kinetic_hmac.h kinetic_logger.h kinetic_message.h kinetic_nbo.h kinetic_operation.h kinetic_pdu.h kinetic_proto.h kinetic_socket.h protobuf-c.h socket99.h


+20 −4
Original line number Diff line number Diff line
@@ -246,9 +246,6 @@ namespace :system do
  end
end

desc "Test examples (test utility)"
task :run => ['tests:utility']

desc "Prepend license to source files"
task :apply_license do
  Dir['include/**/*.h', 'src/**/*.h', 'src/**/*.c', 'test/**/*.h', 'test/**/*.c'].each do |f|
@@ -368,17 +365,36 @@ namespace :tests do

end

desc "Build kinetic-c library"
task :lib do
  sh "make clean"
  sh "make"
  sh "sudo make install"
end

desc "Build example utility"
task :utility do
  sh "make utility"
end

desc "Test examples (test utility)"
task :run => ['utility'] do
  sh "make run" 
end

task :test_all => [
  'tests:unit',
  'tests:integration',
  'tests:system',
  'tests:utility'
]

desc "Build all and run test utility"
task :all => [
  'cppcheck',
  'test_all',
  'lib',
  'utility',
  'run'
]

desc "Run full CI build"
+0 −0

File moved.

+3 −3
Original line number Diff line number Diff line
@@ -25,9 +25,9 @@
#include <stdbool.h>

#include "kinetic_client.h"
#include "noop.h"
#include "put.h"
#include "get.h"
#include "examples/noop.h"
#include "examples/put.h"
#include "examples/get.h"

typedef struct _Arguments {
    char host[HOST_NAME_MAX];
+29 −0
Original line number Diff line number Diff line
#! /usr/bin/env bash

BASE_DIR=`dirname "$0"`/..
BASE_DIR=`cd "$BASE_DIR"; pwd`
#echo "BASE_DIR=$BASE_DIR"

JAVA=""
if [ "$JAVA_HOME" != "" ]; then
    JAVA=$JAVA_HOME/bin/java
else
   echo "JAVA_HOME must be set."
   exit 1
fi

#Set the classpath
if [ "$CLASSPATH" != "" ]; then
   CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar
else
   CLASSPATH=$JAVA_HOME/lib/tools.jar
fi

for f in $BASE_DIR/kinetic-simulator/target/*.jar; do
   CLASSPATH=${CLASSPATH}:$f
done

#echo "CLASSPATH=$CLASSPATH"

exec "$JAVA" -classpath "$CLASSPATH" com.seagate.kinetic.simulator.internal.SimulatorRunner "$@"