-
Notifications
You must be signed in to change notification settings - Fork 68
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from d235j/makefile-cleanups
Cleaned up Makefile and dependency install scripts for Mac and Linux
- Loading branch information
Showing
2 changed files
with
145 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,103 +1,122 @@ | ||
CPP_SOURCES=ksp_plugin/plugin.cpp ksp_plugin/interface.cpp ksp_plugin/physics_bubble.cpp | ||
PROTO_SOURCES=$(wildcard */*.proto) | ||
PROTO_CC_SOURCES=$(wildcard serialization/*.cc) | ||
PROTO_OBJECTS=$(PROTO_CC_SOURCES:.cc=.o) | ||
CXX := clang++ | ||
|
||
OBJECTS=$(CPP_SOURCES:.cpp=.o) | ||
VERSION_HEADER=base/version.hpp | ||
PROTO_HEADERS=$(PROTO_SOURCES:.proto=.pb.h) | ||
|
||
LIB_DIR=Debug/GameData/Principia | ||
LIB=$(LIB_DIR)/principia.so | ||
VERSION_HEADER := base/version.hpp | ||
|
||
DEP_DIR=deps | ||
CPP_SOURCES := ksp_plugin/plugin.cpp ksp_plugin/interface.cpp ksp_plugin/physics_bubble.cpp | ||
PROTO_SOURCES := $(wildcard */*.proto) | ||
PROTO_CC_SOURCES := $(PROTO_SOURCES:.proto=.pb.cc) | ||
PROTO_HEADERS := $(PROTO_SOURCES:.proto=.pb.h) | ||
|
||
TEST_INCLUDE=-I$(DEP_DIR)/gmock/include -I$(DEP_DIR)/gtest/include -I$(DEP_DIR)/gmock -I$(DEP_DIR)/gtest | ||
INCLUDE=-I. -I$(DEP_DIR)/glog/src -I$(DEP_DIR)/protobuf/src -I$(DEP_DIR)/benchmark/include $(TEST_INCLUDE) | ||
OBJECTS := $(CPP_SOURCES:.cpp=.o) | ||
PROTO_OBJECTS := $(PROTO_CC_SOURCES:.cc=.o) | ||
TEST_DIRS := base geometry integrators ksp_plugin_test physics quantities testing_utilities | ||
TEST_BINS := $(addsuffix /test,$(TEST_DIRS)) | ||
|
||
CPPC=clang++ | ||
SHARED_ARGS=-std=c++1y -stdlib=libc++ -O3 -g -m64 -fPIC -fexceptions -ferror-limit=0 -fno-omit-frame-pointer # -Wall -Wpedantic | ||
COMPILE_ARGS=-c $(SHARED_ARGS) $(INCLUDE) | ||
LINK_ARGS=$(SHARED_ARGS) | ||
LIB_PATHS=-L$(DEP_DIR)/glog/.libs/ -L$(DEP_DIR)/benchmark/src/ -L$(DEP_DIR)/protobuf/src/.libs/ -L$(DEP_DIR)/gmock/lib/.libs/ | ||
LIBS=-l:libc++.a -l:libprotobuf.a -l:libglog.a -lpthread | ||
ADAPTER_BUILD_DIR := ksp_plugin_adapter/obj | ||
ADAPTER_CONFIGURATION := Debug | ||
FINAL_PRODUCTS_DIR := Debug | ||
ADAPTER := $(ADAPTER_BUILD_DIR)/$(ADAPTER_CONFIGURATION)/ksp_plugin_adapter.dll | ||
|
||
all: $(DEP_DIR) $(LIB) run_tests | ||
LIB_DIR := $(FINAL_PRODUCTS_DIR)/GameData/Principia | ||
LIB := $(LIB_DIR)/principia.so | ||
|
||
adapter: | ||
mdtool build ksp_plugin_adapter/ksp_plugin_adapter.csproj | ||
DEP_DIR := deps | ||
LIBS := $(DEP_DIR)/protobuf/src/.libs/libprotobuf.a $(DEP_DIR)/glog/.libs/libglog.a -lpthread | ||
TEST_INCLUDES := -I$(DEP_DIR)/gmock/include -I$(DEP_DIR)/gtest/include -I$(DEP_DIR)/gmock -I$(DEP_DIR)/gtest | ||
INCLUDES := -I. -I$(DEP_DIR)/glog/src -I$(DEP_DIR)/protobuf/src -I$(DEP_DIR)/benchmark/include $(TEST_INCLUDES) | ||
SHARED_ARGS := -std=c++1y -stdlib=libc++ -O3 -g -fPIC -fexceptions -ferror-limit=0 -fno-omit-frame-pointer -Wall -Wpedantic | ||
|
||
$(LIB): $(VERSION_HEADER) $(PROTO_HEADERS) $(OBJECTS) $(PROTO_OBJECTS) Makefile adapter | ||
$(CPPC) -shared $(LINK_ARGS) $(OBJECTS) $(PROTO_OBJECTS) $(INCLUDE) -o $(LIB) $(LIB_PATHS) $(LIBS) | ||
# detect OS | ||
UNAME_S := $(shell uname -s) | ||
ifeq ($(UNAME_S),Linux) | ||
UNAME_P := $(shell uname -p) | ||
ifeq ($(UNAME_P),x86_64) | ||
SHARED_ARGS += -m64 | ||
else | ||
SHARED_ARGS += -m32 | ||
endif | ||
MDTOOL := mdtool | ||
endif | ||
ifeq ($(UNAME_S),Darwin) | ||
SHARED_ARGS += -mmacosx-version-min=10.7 -arch i386 | ||
MDTOOL ?= "/Applications/Xamarin Studio.app/Contents/MacOS/mdtool" | ||
endif | ||
|
||
CXXFLAGS := -c $(SHARED_ARGS) $(INCLUDES) | ||
LDFLAGS := $(SHARED_ARGS) | ||
|
||
|
||
.PHONY: all adapter lib tests check plugin run_tests clean | ||
.DEFAULT_GOAL := plugin | ||
|
||
##### CONVENIENCE TARGETS ##### | ||
all: $(LIB) $(ADAPTER) tests | ||
|
||
adapter: $(ADAPTER) | ||
lib: $(LIB) | ||
|
||
tests: $(TEST_BINS) | ||
|
||
check: tests run_tests | ||
|
||
##### CORE ##### | ||
$(ADAPTER): | ||
$(MDTOOL) build -c:$(ADAPTER_CONFIGURATION) ksp_plugin_adapter/ksp_plugin_adapter.csproj | ||
|
||
$(LIB): $(VERSION_HEADER) $(PROTO_HEADERS) $(PROTO_OBJECTS) $(OBJECTS) | ||
$(CXX) -shared $(LDFLAGS) $(PROTO_OBJECTS) $(OBJECTS) -o $(LIB) $(LIBS) | ||
|
||
$(LIB_DIR): | ||
mkdir -p $(LIB_DIR) | ||
|
||
$(DEP_DIR): | ||
./install_deps.sh | ||
|
||
$(VERSION_HEADER): .git | ||
./generate_version_header.sh | ||
|
||
%.pb.h: %.proto | ||
%.pb.cc %.pb.h: %.proto | ||
$(DEP_DIR)/protobuf/src/protoc $< --cpp_out=. | ||
|
||
%.o: %.cpp | ||
$(CPPC) $(COMPILE_ARGS) $< -o $@ | ||
$(CXX) $(CXXFLAGS) $< -o $@ | ||
|
||
%.o: %.cc $(PROTO_HEADERS) | ||
$(CPPC) $(COMPILE_ARGS) $< -o $@ | ||
$(CXX) $(CXXFLAGS) $< -o $@ | ||
|
||
##### DISTRIBUTION ##### | ||
plugin: $(LIB) $(ADAPTER) | ||
cd $(LIB_DIR)/..; zip -r Principia-$(UNAME_S)-$(shell git rev-parse --short HEAD)-$(shell date "+%Y-%m-%d").zip Principia/ | ||
|
||
##### TESTS ##### | ||
TEST_BINS=base/test geometry/test integrators/test ksp_plugin_test/test physics/test quantities/test testing_utilities/test | ||
run_tests: $(TEST_BINS) | ||
base/test; true | ||
geometry/test; true | ||
integrators/test; true | ||
ksp_plugin_test/test; true | ||
physics/test; true | ||
quantities/test; true | ||
testing_utilities/test; true | ||
|
||
TEST_LIBS=-l:libc++.a -l:libprotobuf.a -l:libglog.a -lpthread | ||
run_tests: | ||
-base/test | ||
-geometry/test | ||
-integrators/test | ||
-ksp_plugin_test/test | ||
-physics/test | ||
-quantities/test | ||
-testing_utilities/test | ||
|
||
TEST_LIBS=$(DEP_DIR)/protobuf/src/.libs/libprotobuf.a $(DEP_DIR)/glog/.libs/libglog.a -lpthread | ||
|
||
GMOCK_SOURCE=$(DEP_DIR)/gmock/src/gmock-all.cc $(DEP_DIR)/gmock/src/gmock_main.cc $(DEP_DIR)/gtest/src/gtest-all.cc | ||
GMOCK_OBJECTS=$(GMOCK_SOURCE:.cc=.o) | ||
|
||
BASE_TEST_SOURCES=$(wildcard base/*.cpp) | ||
BASE_TEST_OBJECTS=$(BASE_TEST_SOURCES:.cpp=.o) | ||
base/test: $(GMOCK_OBJECTS) $(BASE_TEST_OBJECTS) $(PROTO_OBJECTS) Makefile | ||
$(CPPC) $(LINK_ARGS) $(BASE_TEST_OBJECTS) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) $(INCLUDE) $(LIB_PATHS) $(TEST_LIBS) -o $@ | ||
|
||
GEOMETRY_TEST_SOURCES=$(wildcard geometry/*.cpp) | ||
GEOMETRY_TEST_OBJECTS=$(GEOMETRY_TEST_SOURCES:.cpp=.o) | ||
geometry/test: $(GMOCK_OBJECTS) $(GEOMETRY_TEST_OBJECTS) $(PROTO_OBJECTS) Makefile | ||
$(CPPC) $(LINK_ARGS) $(GEOMETRY_TEST_OBJECTS) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) $(INCLUDE) $(LIB_PATHS) $(TEST_LIBS) -o $@ | ||
|
||
INTEGRATOR_TEST_SOURCES=$(wildcard integrators/*.cpp) | ||
INTEGRATOR_TEST_OBJECTS=$(INTEGRATOR_TEST_SOURCES:.cpp=.o) | ||
integrators/test: $(GMOCK_OBJECTS) $(INTEGRATOR_TEST_OBJECTS) $(PROTO_OBJECTS) Makefile | ||
$(CPPC) $(LINK_ARGS) $(INTEGRATOR_TEST_OBJECTS) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) $(INCLUDE) $(LIB_PATHS) $(TEST_LIBS) -o $@ | ||
|
||
PLUGIN_TEST_SOURCES=$(wildcard ksp_plugin_test/*.cpp) $(wildcard ksp_plugin/*.cpp) | ||
PLUGIN_TEST_OBJECTS=$(PLUGIN_TEST_SOURCES:.cpp=.o) | ||
ksp_plugin_test/test: $(GMOCK_OBJECTS) $(PLUGIN_TEST_OBJECTS) $(PROTO_OBJECTS) Makefile | ||
$(CPPC) $(LINK_ARGS) $(PLUGIN_TEST_OBJECTS) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) $(INCLUDE) $(LIB_PATHS) $(TEST_LIBS) -o $@ | ||
|
||
PHYSICS_TEST_SOURCES=$(wildcard physics/*.cpp) | ||
PHYSICS_TEST_OBJECTS=$(PHYSICS_TEST_SOURCES:.cpp=.o) | ||
physics/test: $(GMOCK_OBJECTS) $(PHYSICS_TEST_OBJECTS) $(PROTO_OBJECTS) Makefile | ||
$(CPPC) $(LINK_ARGS) $(PHYSICS_TEST_OBJECTS) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) $(INCLUDE) $(LIB_PATHS) $(TEST_LIBS) -o $@ | ||
|
||
QUANTITIES_TEST_SOURCES=$(wildcard quantities/*.cpp) | ||
QUANTITIES_TEST_OBJECTS=$(QUANTITIES_TEST_SOURCES:.cpp=.o) | ||
quantities/test: $(GMOCK_OBJECTS) $(QUANTITIES_TEST_OBJECTS) $(PROTO_OBJECTS) Makefile | ||
$(CPPC) $(LINK_ARGS) $(QUANTITIES_TEST_OBJECTS) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) $(INCLUDE) $(LIB_PATHS) $(TEST_LIBS) -o $@ | ||
|
||
TESTING_UTILITIES_TEST_SOURCES=$(wildcard testing_utilities/*.cpp) | ||
TESTING_UTILITIES_TEST_OBJECTS=$(TESTING_UTILITIES_TEST_SOURCES:.cpp=.o) | ||
testing_utilities/test: $(GMOCK_OBJECTS) $(TESTING_UTILITIES_TEST_OBJECTS) $(PROTO_OBJECTS) Makefile | ||
$(CPPC) $(LINK_ARGS) $(TESTING_UTILITIES_TEST_OBJECTS) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) $(INCLUDE) $(LIB_PATHS) $(TEST_LIBS) -o $@ | ||
|
||
clean: | ||
rm -f $(LIB) $(PROTO_HEADERS) $(OBJECTS) $(PROTO_OBJECTS) $(BASE_TEST_OBJECTS) $(GEOMETRY_TEST_OBJECTS) $(INTEGRATOR_TEST_OBJECTS) $(PLUGIN_TEST_OBJECTS) $(PHYSICS_TEST_OBJS) $(QUANTITIES_TEST_OBJECTS) $(TESTING_UTILITIES_TEST_OBJECTS) $(TEST_BINS) | ||
test_objects = $(patsubst %.cpp,%.o,$(wildcard $*/*.cpp)) | ||
ksp_plugin_test_objects = $(patsubst %.cpp,%.o,$(wildcard ksp_plugin/*.cpp)) $(patsubst %.cpp,%.o,$(wildcard ksp_plugin_test/*.cpp)) | ||
|
||
# We need to special-case ksp_plugin_test because it requires object files from ksp_plugin. The other tests don't do this. | ||
.SECONDEXPANSION: | ||
ksp_plugin_test/test: $$(ksp_plugin_test_objects) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) | ||
$(CXX) $(LDFLAGS) $^ $(TEST_LIBS) -o $@ | ||
|
||
.SECONDEXPANSION: | ||
%/test: $$(test_objects) $(GMOCK_OBJECTS) $(PROTO_OBJECTS) | ||
$(CXX) $(LDFLAGS) $^ $(TEST_LIBS) -o $@ | ||
|
||
##### CLEAN ##### | ||
clean_test-%: | ||
rm -f $(test_objects) | ||
|
||
clean: $(addprefix clean_test-,$(TEST_DIRS)) | ||
rm -rf $(ADAPTER_BUILD_DIR) $(FINAL_PRODUCTS_DIR) | ||
rm -f $(LIB) $(VERSION_HEADER) $(PROTO_HEADERS) $(PROTO_CC_SOURCES) $(OBJECTS) $(PROTO_OBJECTS) $(TEST_BINS) $(LIB) $(ksp_plugin_test_objects) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters