Makefile revision a55544875a65b33468ef662b3a3b8bbd2ab2b5d8
1# Copyright 2015 Google Inc. All rights reserved 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15# Find source file location from path to this Makefile 16MAKEPARALLEL_SRC_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) 17ifndef MAKEPARALLEL_SRC_PATH 18 MAKEPARALLEL_SRC_PATH := . 19endif 20 21# Set defaults if they weren't set by the including Makefile 22MAKEPARALLEL_CXX ?= $(CXX) 23MAKEPARALLEL_LD ?= $(CXX) 24MAKEPARALLEL_INTERMEDIATES_PATH ?= . 25MAKEPARALLEL_BIN_PATH ?= . 26 27MAKEPARALLEL_CXX_SRCS := \ 28 makeparallel.cpp 29 30MAKEPARALLEL_CXXFLAGS := -Wall -Werror -MMD -MP 31 32MAKEPARALLEL_CXX_SRCS := $(addprefix $(MAKEPARALLEL_SRC_PATH)/,\ 33 $(MAKEPARALLEL_CXX_SRCS)) 34 35MAKEPARALLEL_CXX_OBJS := $(patsubst $(MAKEPARALLEL_SRC_PATH)/%.cpp,$(MAKEPARALLEL_INTERMEDIATES_PATH)/%.o,$(MAKEPARALLEL_CXX_SRCS)) 36 37MAKEPARALLEL := $(MAKEPARALLEL_BIN_PATH)/makeparallel 38 39ifeq ($(shell uname),Linux) 40MAKEPARALLEL_LIBS := -lrt -lpthread 41endif 42 43# Rule to build makeparallel into MAKEPARALLEL_BIN_PATH 44$(MAKEPARALLEL): $(MAKEPARALLEL_CXX_OBJS) 45 @mkdir -p $(dir $@) 46 $(MAKEPARALLEL_LD) -std=c++11 $(MAKEPARALLEL_CXXFLAGS) -o $@ $^ $(MAKEPARALLEL_LIBS) 47 48# Rule to build source files into object files in MAKEPARALLEL_INTERMEDIATES_PATH 49$(MAKEPARALLEL_CXX_OBJS): $(MAKEPARALLEL_INTERMEDIATES_PATH)/%.o: $(MAKEPARALLEL_SRC_PATH)/%.cpp 50 @mkdir -p $(dir $@) 51 $(MAKEPARALLEL_CXX) -c -std=c++11 $(MAKEPARALLEL_CXXFLAGS) -o $@ $< 52 53makeparallel_clean: 54 rm -rf $(MAKEPARALLEL) 55 rm -rf $(MAKEPARALLEL_INTERMEDIATES_PATH)/*.o 56 rm -rf $(MAKEPARALLEL_INTERMEDIATES_PATH)/*.d 57 58.PHONY: makeparallel_clean 59 60-include $(MAKEPARALLEL_INTERMEDIATES_PATH)/*.d 61 62.PHONY: test 63test: $(MAKEPARALLEL) 64 MAKEFLAGS= $(MAKE) -j1234 -C $(MAKEPARALLEL_SRC_PATH) -f Makefile.test MAKEPARALLEL=$(MAKEPARALLEL) test 65