diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..069bd13 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,69 @@ +cmake_minimum_required(VERSION 3.2) +project(NeuralNetwork CXX) + +OPTION(BUILD_SHARED_LIBS "Build also shared library." ON) +OPTION(USE_SSE "IF sse should be used." ON) +OPTION(USE_SSE2 "IF only sse2 should be used." OFF) +OPTION(ENABLE_TESTS "enables tests" ON) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Weffc++ -Wshadow -Wstrict-aliasing -ansi -Woverloaded-virtual -Wdelete-non-virtual-dtor -Wno-unused-function") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++14") +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -pthread") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -mtune=native -O3") + +if(USE_SSE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -DUSE_SSE") + if(USE_SSE2) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_SSE2") + endif(USE_SSE2) +endif(USE_SSE) + +include_directories(./include/) + +set (LIBRARY_SOURCES + include/NeuralNetwork/ActivationFunction/ActivationFunction.h + include/NeuralNetwork/ActivationFunction/Heaviside.h + include/NeuralNetwork/ActivationFunction/HyperbolicTangent.h + include/NeuralNetwork/ActivationFunction/Linear.h + include/NeuralNetwork/ActivationFunction/Sigmoid.h + include/NeuralNetwork/ActivationFunction/StreamingActivationFunction.h + include/NeuralNetwork/BasisFunction/BasisFunction.h + include/NeuralNetwork/BasisFunction/Linear.h + include/NeuralNetwork/BasisFunction/Product.h + include/NeuralNetwork/BasisFunction/Radial.h + include/NeuralNetwork/BasisFunction/StreamingBasisFunction.h + include/NeuralNetwork/FeedForward/Layer.h + include/NeuralNetwork/FeedForward/Network.h + include/NeuralNetwork/Recurrent/Network.h + include/NeuralNetwork/Network.h + include/NeuralNetwork/Neuron.h + include/NeuralNetwork/Stringifiable.h + include/NeuralNetwork/Stringifiable.h + src/NeuralNetwork/Learning/BackPropagation.cpp include/NeuralNetwork/Learning/BackPropagation.h + include/sse_mathfun.h + src/NeuralNetwork/FeedForward/Layer.cpp + src/NeuralNetwork/FeedForward/Network.cpp + src/NeuralNetwork/Recurrent/Network.cpp + src/NeuralNetwork/Neuron.cpp + src/sse_mathfun.cpp +) + +add_library(NeuralNetwork STATIC ${LIBRARY_SOURCES}) + +IF(BUILD_SHARED_LIBS) + add_library(NeuralNetworkShared SHARED ${LIBRARY_SOURCES}) + set_target_properties(NeuralNetworkShared PROPERTIES OUTPUT_NAME NeuralNetwork) +ENDIF(BUILD_SHARED_LIBS) + +IF(ENABLE_TESTS) +add_subdirectory (tests) + +enable_testing() + +add_test(activation tests/backpropagation) +add_test(backpropagation tests/backpropagation) +add_test(basis tests/basis) +add_test(feedforward tests/feedforward) +add_test(recurrent tests/recurrent) +ENDIF(ENABLE_TESTS) \ No newline at end of file diff --git a/Makefile b/Makefile index 9ec0607..8241b0c 100644 --- a/Makefile +++ b/Makefile @@ -1,30 +1,6 @@ include ./Makefile.const -.PHONY: all - -all:|pre libs - -pre: - @mkdir -p lib - -test: all - make -C tests - -install: all - @mkdir -p build/lib - @cp lib/*.so build/lib/ - -libs: | nn_build lib/NeuralNetwork.a lib/NeuralNetwork.so - -lib/NeuralNetwork.so: ./src/NeuralNetwork.so - cp ./src/NeuralNetwork.so ./lib/ - -lib/NeuralNetwork.a: ./src/NeuralNetwork.a - cp ./src/NeuralNetwork.a ./lib/ - cp ./src/NeuralNetwork.nm ./lib/ - -nn_build: - @make -C src/ +.PHONY: documentation clean documentation: doxygen diff --git a/Makefile.const b/Makefile.const index b56a1ae..7d98cb9 100644 --- a/Makefile.const +++ b/Makefile.const @@ -4,7 +4,7 @@ CXXFLAGS+= -std=c++14 #-fprefetch-loop-arrays CXXFLAGS+= -pg -fPIC CXXFLAGS+= -g -CXXFLAGS+= -fPIC -pthread +CXXFLAGS+= -fPIC -pthread y #CXXFLAGS+= -DUSE_SSE2 OPTIMALIZATION = -O3 -march=native -mtune=native diff --git a/README.md b/README.md index b107934..d4294bd 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ Artifitial Neural Network Library ================================= -s + +how to build: +mkdir build +cmake .. +make \ No newline at end of file diff --git a/src/Makefile b/src/Makefile deleted file mode 100644 index f0544f7..0000000 --- a/src/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -include ../Makefile.const - -OBJFILES= ./sse_mathfun.o ./NeuralNetwork/Recurrent/Network.o ./NeuralNetwork/Neuron.o ./NeuralNetwork/FeedForward/Network.o ./NeuralNetwork/FeedForward/Layer.o - -#LayerNetwork.o\ -# Learning/Learning.o Learning/BackPropagation.o ../sse_mathfun.o - -LINKFILES= - -LIBNAME=NeuralNetwork - -all: lib - -spec:=../include/ - - -%.o : %.cpp $(patsubst ./%.o,../include/%.h,$<) - $(CXX) $(CXXFLAGS) $(OPTIMALIZATION) -I../include -c $< -o $@ - -lib: $(LIBNAME).so $(LIBNAME).a - -$(LIBNAME).so: $(OBJFILES) - $(CXX) -shared $(CXXFLAGS) $(OBJFILES) $(LINKFILES) -o $(LIBNAME).so - -$(LIBNAME).a: $(OBJFILES) - rm -f $(LIBNAME).a # create new library - ar rcv $(LIBNAME).a $(OBJFILES) $(LINKFILES) - ranlib $(LIBNAME).a - nm --demangle $(LIBNAME).a > $(LIBNAME).nm - -clean: - @rm -rf *.o ./*.so ./*.a ./*.nm ./*/*.o - @rm -rf *.o ./*.so ./*.a ./*.nm ./*/*.o - @rm -f $(OBJFILES) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..c6f29b4 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.2) +project(NeuralNetworkTests CXX) + +add_executable(activation activation.cpp) +target_link_libraries(activation NeuralNetwork) + +add_executable(basis basis.cpp) +target_link_libraries(basis NeuralNetwork) + +add_executable(backpropagation backpropagation.cpp) +target_link_libraries(backpropagation NeuralNetwork) + +add_executable(feedforward feedforward.cpp) +target_link_libraries(feedforward NeuralNetwork) + +add_executable(recurrent recurrent.cpp) +target_link_libraries(recurrent NeuralNetwork) \ No newline at end of file diff --git a/tests/Makefile b/tests/Makefile deleted file mode 100644 index ca94969..0000000 --- a/tests/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -include ../Makefile.const - -LIB_DIR = ../lib - -ALL_TESTS=activation basis recurrent feedforward - -#LIBS=$(LIB_DIR)/Genetics.a $(LIB_DIR)/NeuralNetwork.a -#LIBS=-lGenetics.so -lNeuronNetwork - -CXXFLAGS += -I$(LIB_DIR) - -all:$(ALL_TESTS); - -test: all - @for i in $(ALL_TESTS); do echo -n ./$$i; ./$$i; echo ""; done - -../src/NeuralNetwork.so: lib - -%: %.cpp ../src/NeuralNetwork.so | lib %.cpp ../src/NeuralNetwork.so - $(CXX) $(CXXFLAGS) -I../include -o $@ $< $ -lm ../src/NeuralNetwork.so -msse4.2 -DHAVE_VECLIB - -lib: - @make -C ../ - -clean: - @for i in $(ALL_TESTS);do rm -f $$i;done; -