# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Makefile. TOP := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) SHELL = '/bin/sh' SRCDIR = @srcdir@ INCLUDEDIR = @top_builddir@/include BINDIR = @top_builddir@/bin LIBDIR = @top_builddir@/lib CC = @CC@ CXX = @CXX@ CFLAGS = @CFLAGS@ CXXFLAGS = @CXXFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ OS_NAME = @OS_NAME@ OS_ARCH = @target_cpu@ JAVA_HOME = @JAVA_HOME@ JAVA_HEADERS = @JAVA_HEADERS@ ifeq ($(OS_NAME),darwin) LDFLAGS += -framework JavaVM else ifeq ($(OS_ARCH),x86_64) LDFLAGS += -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm else LDFLAGS += -L$(JAVA_HOME)/jre/lib/i386/server -ljvm endif WITH_ZOOKEEPER = @WITH_ZOOKEEPER@ WITH_INCLUDED_ZOOKEEPER = @WITH_INCLUDED_ZOOKEEPER@ BOOST = third_party/boost-1.37.0 PROTOBUF = third_party/protobuf-2.3.0 GLOG = third_party/glog-0.3.1 LEVELDB = third_party/leveldb ZOOKEEPER = third_party/zookeeper-3.3.1/src/c LIBPROCESS = third_party/libprocess LIBEV = $(LIBPROCESS)/third_party/libev-3.8 # Both GMOCK and GTEST are paths to the source of these libraries, # since we don't need to create directories when building the assets # from these libraries. GMOCK = @top_srcdir@/third_party/gmock-1.6.0 GTEST = @top_srcdir@/third_party/gmock-1.6.0/gtest # Ensure that we get better debugging info. CFLAGS += -g CXXFLAGS += -g # Add 'src' source dir and build dir to CFLAGS and CXXFLAGS. CFLAGS += -I$(SRCDIR)/.. -I.. CXXFLAGS += -I$(SRCDIR)/.. -I.. # Add include and build include to CFLAGS and CXXFLAGS. CFLAGS += -I@top_srcdir@/include -I$(INCLUDEDIR) CXXFLAGS += -I@top_srcdir@/include -I$(INCLUDEDIR) # Add boost to CFLAGS and CXXFLAGS. CFLAGS += -I@top_srcdir@/$(BOOST) CXXFLAGS += -I@top_srcdir@/$(BOOST) # Add protobuf to include and lib paths. CXXFLAGS += -I@top_srcdir@/$(PROTOBUF)/src LDFLAGS += -L@top_builddir@/$(PROTOBUF)/src/.libs # Add libprocess to CFLAGS, CXXFLAGS, and LDFLAGS. CFLAGS += -I@top_srcdir@/$(LIBPROCESS)/include CXXFLAGS += -I@top_srcdir@/$(LIBPROCESS)/include LDFLAGS += -L@top_builddir@/$(LIBPROCESS) # Add libev to LDFLAGS. LDFLAGS += -L@top_builddir@/$(LIBEV)/.libs # Add glog to include paths and library paths. CXXFLAGS += -I@top_srcdir@/$(GLOG)/src -I@top_builddir@/$(GLOG)/src LDFLAGS += -L@top_builddir@/$(GLOG)/.libs # Add leveldb to include and lib paths. CXXFLAGS += -I@top_srcdir@/$(LEVELDB)/include LDFLAGS += -L@top_builddir@/$(LEVELDB) # Add gmock and gtest to include paths. CXXFLAGS += -I$(GMOCK)/include -I$(GTEST)/include # Add included ZooKeeper to include and lib paths if necessary. ifeq ($(WITH_INCLUDED_ZOOKEEPER),1) CXXFLAGS += -I@top_srcdir@/$(ZOOKEEPER)/include -I@top_srcdir@/$(ZOOKEEPER)/generated LDFLAGS += -L@top_builddir@/$(ZOOKEEPER)/.libs endif # Add dependency tracking to CFLAGS, CXXFLAGS. CFLAGS += -MMD -MP CXXFLAGS += -MMD -MP # Add protobuf, glog, leveldb, libev, libprocess, pthread, and dl to LIBS. LIBS += -lprotobuf -lglog -lleveldb -lprocess -lev -lpthread -ldl # Add ZooKeeper if necessary. ifeq ($(WITH_ZOOKEEPER),1) LIBS += -lzookeeper_mt endif SCHED_LIB = $(LIBDIR)/libmesos_sched.a EXEC_LIB = $(LIBDIR)/libmesos_exec.a GTEST_HEADERS = $(GTEST)/include/gtest/*.h \ $(GTEST)/include/gtest/internal/*.h GMOCK_HEADERS = $(GTEST_HEADERS) $(GMOCK)/include/gmock/*.h \ $(GMOCK)/include/gmock/internal/*.h GTEST_SRC = $(GTEST_HEADERS) $(GTEST)/src/*.h $(GTEST)/src/*.cc GMOCK_SRC = $(GMOCK_HEADERS) $(GMOCK)/src/*.cc GTEST_OBJ = gtest-all.o GMOCK_OBJ = gmock-all.o GMOCK_LIB = gmock.a TESTS_OBJ = main.o utils.o master_tests.o resource_offers_tests.o \ fault_tolerance_tests.o log_tests.o resources_tests.o \ uuid_tests.o external_tests.o sample_frameworks_tests.o \ configurator_tests.o strings_tests.o multihashmap_tests.o \ protobuf_io_tests.o lxc_isolation_tests.o utils_tests.o \ jvm.o zookeeper_server.o base_zookeeper_test.o \ zookeeper_server_tests.o zookeeper_tests.o \ url_processor_tests.o killtree_tests.o exception_tests.o \ values_tests.o attributes_test.o ALLTESTS_EXE = $(BINDIR)/tests/all-tests PROCESS_SPAWN = $(BINDIR)/tests/process_spawn EXTERNAL_SCRIPTS = \ $(BINDIR)/tests/external/LxcIsolation/HoldMoreMemThanRequested.sh \ $(BINDIR)/tests/external/LxcIsolation/ScaleUpAndDown.sh \ $(BINDIR)/tests/external/LxcIsolation/TwoSeparateTasks.sh \ $(BINDIR)/tests/external/LxcIsolation/run_scheduled_memhog_test.sh \ $(BINDIR)/tests/external/SampleFrameworks/CFrameworkCmdlineParsing.sh \ $(BINDIR)/tests/external/SampleFrameworks/CFrameworkInvalidCmdline.sh \ $(BINDIR)/tests/external/SampleFrameworks/CFrameworkInvalidEnv.sh \ $(BINDIR)/tests/external/SampleFrameworks/CppFramework.sh \ $(BINDIR)/tests/external/SampleFrameworks/JavaExceptionFramework.sh \ $(BINDIR)/tests/external/SampleFrameworks/JavaFramework.sh \ $(BINDIR)/tests/external/SampleFrameworks/PythonFramework.sh \ $(BINDIR)/tests/external/KillTree/KillTreeTest.sh # Create rules for building the directories that aren't created # automagically by configure. DIRECTORIES = $(BINDIR)/tests \ $(BINDIR)/tests/external/LxcIsolation \ $(BINDIR)/tests/external/SampleFrameworks \ $(BINDIR)/tests/external/KillTree default: all -include $(patsubst %.o, %.d, $(TESTS_OBJ)) -include $(patsubst %, %.d, $(ALLTESTS_EXE)) $(DIRECTORIES): %: mkdir -p $@ $(GTEST_OBJ): %.o: $(GTEST)/src/%.cc $(GTEST_SRC) $(CXX) -c $(CXXFLAGS) -I$(GTEST) -I$(GMOCK) $< $(GMOCK_OBJ): %.o: $(GMOCK)/src/%.cc $(GMOCK_SRC) $(CXX) -c $(CXXFLAGS) -I$(GTEST) -I$(GMOCK) $< $(GMOCK_LIB): $(GTEST_OBJ) $(GMOCK_OBJ) $(AR) rcs $@ $^ $(TESTS_OBJ): %.o: $(SRCDIR)/%.cpp $(CXX) -c $(CXXFLAGS) \ -DROOT_DIR=\"$(TOP)/@top_srcdir@\" \ -DBUILD_DIR=\"$(TOP)/@top_builddir@\" \ -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(OS_NAME) \ -I$(JAVA_HEADERS) -o $@ $< $(ALLTESTS_EXE): $(TESTS_OBJ) $(GMOCK_LIB) $(SCHED_LIB) $(EXEC_LIB) | $(BINDIR)/tests $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) $(PROCESS_SPAWN): $(SRCDIR)/process_spawn.cpp $(CXX) -o $@ $< $(EXTERNAL_SCRIPTS): | $(BINDIR)/tests/external/LxcIsolation $(EXTERNAL_SCRIPTS): | $(BINDIR)/tests/external/SampleFrameworks $(EXTERNAL_SCRIPTS): | $(BINDIR)/tests/external/KillTree $(EXTERNAL_SCRIPTS): $(BINDIR)/tests/%: $(SRCDIR)/% cp $< $@ test: all $(ALLTESTS_EXE) all: $(ALLTESTS_EXE) $(EXTERNAL_SCRIPTS) $(PROCESS_SPAWN) clean: rm -f $(patsubst %.o, %.d, $(GTEST_OBJ)) $(GTEST_OBJ) rm -f $(patsubst %.o, %.d, $(GMOCK_OBJ)) $(GMOCK_OBJ) rm -f $(GMOCK_LIB) rm -f $(patsubst %.o, %.d, $(TESTS_OBJ)) rm -f $(TESTS_OBJ) rm -f $(ALLTESTS_EXE) rm -f $(EXTERNAL_SCRIPTS) rm -f TAGS .PHONY: default all test clean