-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
642 additions
and
0 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 |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Project Files unneeded by docker | ||
ci/cache | ||
ci/docker | ||
.git | ||
.gitignore | ||
.github | ||
.dockerignore | ||
.travis.yml | ||
.clang-format | ||
AUTHORS | ||
INSTALL | ||
install-sh | ||
missing | ||
README | ||
README.md | ||
|
||
build/ | ||
|
||
# Editor directories and files | ||
*.user | ||
*.swp |
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 |
---|---|---|
@@ -0,0 +1,142 @@ | ||
PROJECT := cgl | ||
BRANCH := $(shell git rev-parse --abbrev-ref HEAD) | ||
SHA1 := $(shell git rev-parse --verify HEAD) | ||
|
||
# General commands | ||
.PHONY: help | ||
BOLD=\e[1m | ||
RESET=\e[0m | ||
|
||
help: | ||
@echo -e "${BOLD}SYNOPSIS${RESET}" | ||
@echo -e "\tmake <target> [NOCACHE=1]" | ||
@echo | ||
@echo -e "${BOLD}DESCRIPTION${RESET}" | ||
@echo -e "\ttest build inside docker container to have a reproductible build." | ||
@echo | ||
@echo -e "${BOLD}MAKE TARGETS${RESET}" | ||
@echo -e "\t${BOLD}help${RESET}: display this help and exit." | ||
@echo | ||
@echo -e "\t${BOLD}<stage>${RESET}: build <stage> docker images for ALL DISTROS." | ||
@echo -e "\t${BOLD}<distro>_<stage>${RESET}: build <stage> docker image for a specific distro." | ||
@echo -e "\t${BOLD}save_<stage>${RESET}: Save <stage> docker images for ALL DISTROS." | ||
@echo -e "\t${BOLD}save_<distro>_<stage>${RESET}: Save the <stage> docker image for a specific distro." | ||
@echo -e "\t${BOLD}sh_<distro>_<stage>${RESET}: run a container using the <stage> docker image specified (debug purpose)." | ||
@echo | ||
@echo -e "\tWith ${BOLD}<stage>${RESET}:" | ||
@echo -e "\t\t${BOLD}env${RESET}" | ||
@echo -e "\t\t${BOLD}devel${RESET}" | ||
@echo -e "\t\t${BOLD}build${RESET}" | ||
@echo -e "\t\t${BOLD}test${RESET}" | ||
@echo -e "\t\t${BOLD}install_env${RESET}" | ||
@echo -e "\t\t${BOLD}install_devel${RESET}" | ||
@echo -e "\t\t${BOLD}install_build${RESET}" | ||
@echo -e "\t\t${BOLD}install_test${RESET}" | ||
@echo -e "\te.g. 'make build'" | ||
@echo | ||
@echo -e "\tWith ${BOLD}<distro>${RESET}:" | ||
@echo -e "\t\t${BOLD}alpine${RESET} (edge)" | ||
@echo -e "\t\t${BOLD}archlinux${RESET} (latest)" | ||
@echo -e "\t\t${BOLD}centos${RESET} (latest)" | ||
@echo -e "\t\t${BOLD}debian${RESET} (latest)" | ||
@echo -e "\t\t${BOLD}fedora${RESET} (latest)" | ||
@echo -e "\t\t${BOLD}opensuse${RESET} (leap)" | ||
@echo -e "\t\t${BOLD}ubuntu${RESET} (latest)" | ||
@echo -e "\te.g. 'make ubuntu_test'" | ||
@echo | ||
@echo -e "\t${BOLD}clean${RESET}: Remove cache and ALL docker images." | ||
@echo -e "\t${BOLD}clean_<distro>${RESET}: Remove cache and docker images for the specified distro." | ||
@echo -e "\t${BOLD}clean_<vm>${RESET}: Remove virtual machine for the specified vm." | ||
@echo | ||
@echo -e "\t${BOLD}NOCACHE=1${RESET}: use 'docker build --no-cache' when building container (default use cache)." | ||
@echo | ||
@echo -e "branch: $(BRANCH)" | ||
@echo -e "sha1: $(SHA1)" | ||
|
||
# Need to add cmd_distro to PHONY otherwise target are ignored since they do not | ||
# contain recipe (using FORCE do not work here) | ||
.PHONY: all | ||
all: build | ||
|
||
# Delete all implicit rules to speed up makefile | ||
MAKEFLAGS += --no-builtin-rules | ||
.SUFFIXES: | ||
# Remove some rules from gmake that .SUFFIXES does not remove. | ||
SUFFIXES = | ||
# Keep all intermediate files | ||
# ToDo: try to remove it later | ||
.SECONDARY: | ||
|
||
# Docker image name prefix. | ||
IMAGE := ${PROJECT} | ||
|
||
ifdef NOCACHE | ||
DOCKER_BUILD_CMD := docker build --no-cache | ||
else | ||
DOCKER_BUILD_CMD := docker build | ||
endif | ||
|
||
DOCKER_RUN_CMD := docker run --rm --init --net=host | ||
|
||
# Currently supported distro | ||
DISTROS = alpine archlinux centos debian fedora opensuse ubuntu | ||
|
||
# $* stem | ||
# $< first prerequist | ||
# $@ target name | ||
|
||
############ | ||
## STAGES ## | ||
############ | ||
STAGES = env devel build test install_env install_devel install_build install_test | ||
define make-stage-target = | ||
#$$(info STAGE: $1) | ||
#$$(info Create targets: $1 $(addsuffix _$1, $(DISTROS)).) | ||
targets_$1 = $(addsuffix _$1, $(DISTROS)) | ||
.PHONY: $1 $$(targets_$1) | ||
$1: $$(targets_$1) | ||
$$(targets_$1): %_$1: docker/%/Dockerfile | ||
#@docker image rm -f ${IMAGE}:$$*_$1 2>/dev/null | ||
${DOCKER_BUILD_CMD} --target=$1 --tag ${IMAGE}:$$*_$1 -f $$< .. | ||
|
||
#$$(info Create targets: save_$1 $(addprefix save_, $(addsuffix _$1, $(DISTROS))) (debug).) | ||
save_targets_$1 = $(addprefix save_, $(addsuffix _$1, $(DISTROS))) | ||
.PHONY: save_$1 $$(save_targets_$1) | ||
save_$1: $$(save_targets_$1) | ||
$$(save_targets_$1): save_%_$1: cache/%/docker_$1.tar | ||
cache/%/docker_$1.tar: %_$1 | ||
@rm -f $$@ | ||
mkdir -p cache/$$* | ||
docker save ${IMAGE}:$$*_$1 -o $$@ | ||
|
||
#$$(info Create targets: $(addprefix sh_, $(addsuffix _$1, $(DISTROS))) (debug).) | ||
sh_targets_$1 = $(addprefix sh_, $(addsuffix _$1, $(DISTROS))) | ||
.PHONY: $$(sh_targets_$1) | ||
$$(sh_targets_$1): sh_%_$1: %_$1 | ||
${DOCKER_RUN_CMD} -it --name ${IMAGE}_$$*_$1 ${IMAGE}:$$*_$1 | ||
|
||
#$$(info Create targets: $(addprefix clean_, $(addsuffix _$1, $(DISTROS))).) | ||
clean_targets_$1 = $(addprefix clean_, $(addsuffix _$1, $(DISTROS))) | ||
.PHONY: clean_$1 $$(clean_targets_$1) | ||
clean_$1: $$(clean_targets_$1) | ||
$$(clean_targets_$1): clean_%_$1: | ||
docker image rm -f ${IMAGE}:$$*_$1 2>/dev/null | ||
rm -f cache/$$*/docker_$1.tar | ||
endef | ||
|
||
$(foreach stage,$(STAGES),$(eval $(call make-stage-target,$(stage)))) | ||
|
||
## CLEAN ## | ||
clean_targets = $(addprefix clean_, $(DISTROS)) | ||
.PHONY: clean $(clean_targets) | ||
clean: $(clean_targets) | ||
docker container prune -f | ||
docker image prune -f | ||
-rmdir cache | ||
$(clean_targets): clean_%: $(addprefix clean_%_, $(STAGES)) | ||
-rmdir cache/$* | ||
|
||
.PHONY: distclean | ||
distclean: clean | ||
-docker container rm -f $$(docker container ls -aq) | ||
-docker image rm -f $$(docker image ls -aq) |
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 |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# Create a virtual environment with all tools installed | ||
# ref: https://hub.docker.com/_/alpine | ||
FROM alpine:edge AS env | ||
LABEL maintainer="[email protected]" | ||
# Install system build dependencies | ||
ENV PATH=$PATH:/usr/local/bin | ||
RUN apk add --no-cache git build-base linux-headers cmake | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/2.11 https://github.com/Mizux/CoinUtils.git \ | ||
&& cd CoinUtils \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf CoinUtils | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/0.108 https://github.com/Mizux/Osi.git \ | ||
&& cd Osi \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf Osi | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/1.17 https://github.com/Mizux/Clp.git \ | ||
&& cd Clp \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf Clp | ||
|
||
# Add the library src to our build env | ||
FROM env AS devel | ||
WORKDIR /home/project | ||
COPY . . | ||
|
||
FROM devel AS build | ||
RUN cmake --version | ||
RUN cmake -S. -Bbuild | ||
RUN cmake --build build --target all -v | ||
RUN cmake --build build --target install -v | ||
|
||
FROM build AS test | ||
RUN cmake --build build --target test -v | ||
|
||
# Test install rules | ||
FROM env AS install_env | ||
COPY --from=build /usr/local /usr/local/ | ||
|
||
FROM install_env AS install_devel | ||
WORKDIR /home/sample | ||
COPY ci/sample . | ||
|
||
FROM install_devel AS install_build | ||
RUN cmake -S. -Bbuild | ||
RUN cmake --build build --target all -v | ||
|
||
FROM install_build AS install_test | ||
RUN cmake --build build --target test -v | ||
|
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 |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# Create a virtual environment with all tools installed | ||
# ref: https://hub.docker.com/_/archlinux/ | ||
FROM archlinux:latest AS env | ||
LABEL maintainer="[email protected]" | ||
# Install system build dependencies | ||
ENV PATH=$PATH:/usr/local/bin | ||
RUN pacman -Syu --noconfirm base-devel git cmake | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/2.11 https://github.com/Mizux/CoinUtils.git \ | ||
&& cd CoinUtils \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf CoinUtils | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/0.108 https://github.com/Mizux/Osi.git \ | ||
&& cd Osi \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf Osi | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/1.17 https://github.com/Mizux/Clp.git \ | ||
&& cd Clp \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf Clp | ||
|
||
# Add the library src to our build env | ||
FROM env AS devel | ||
WORKDIR /home/project | ||
COPY . . | ||
|
||
FROM devel AS build | ||
RUN cmake --version | ||
RUN cmake -S. -Bbuild | ||
RUN cmake --build build --target all -v | ||
RUN cmake --build build --target install -v | ||
|
||
FROM build AS test | ||
RUN cmake --build build --target test -v | ||
|
||
# Test install rules | ||
FROM env AS install_env | ||
COPY --from=build /usr/local /usr/local/ | ||
|
||
FROM install_env AS install_devel | ||
WORKDIR /home/sample | ||
COPY ci/sample . | ||
|
||
FROM install_devel AS install_build | ||
RUN cmake -S. -Bbuild | ||
RUN cmake --build build --target all -v | ||
|
||
FROM install_build AS install_test | ||
RUN cmake --build build --target test -v | ||
|
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 |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# Create a virtual environment with all tools installed | ||
# ref: https://hub.docker.com/_/centos | ||
FROM centos:latest AS env | ||
LABEL maintainer="[email protected]" | ||
# Install system build dependencies | ||
ENV PATH=$PATH:/usr/local/bin | ||
RUN yum -y update \ | ||
&& yum -y groupinstall "Development Tools" \ | ||
&& yum -y install epel-release \ | ||
&& yum -y install cmake3 \ | ||
&& ln -s /usr/bin/cmake3 /usr/local/bin/cmake \ | ||
&& yum clean all \ | ||
&& rm -rf /var/cache/yum | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/2.11 https://github.com/Mizux/CoinUtils.git \ | ||
&& cd CoinUtils \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf CoinUtils | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/0.108 https://github.com/Mizux/Osi.git \ | ||
&& cd Osi \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf Osi | ||
|
||
RUN cd /tmp \ | ||
&& git clone -b stable/1.17 https://github.com/Mizux/Clp.git \ | ||
&& cd Clp \ | ||
&& cmake -S. -Bbuild \ | ||
&& cmake --build build --target install \ | ||
&& cd .. \ | ||
&& rm -rf Clp | ||
|
||
# Add the library src to our build env | ||
FROM env AS devel | ||
WORKDIR /home/project | ||
COPY . . | ||
|
||
FROM devel AS build | ||
RUN cmake --version | ||
RUN cmake -S. -Bbuild | ||
RUN cmake --build build --target all -v | ||
RUN cmake --build build --target install -v | ||
|
||
FROM build AS test | ||
RUN cmake --build build --target test -v | ||
|
||
# Test install rules | ||
FROM env AS install_env | ||
COPY --from=build /usr/local /usr/local/ | ||
|
||
FROM install_env AS install_devel | ||
WORKDIR /home/sample | ||
COPY ci/sample . | ||
|
||
FROM install_devel AS install_build | ||
RUN cmake -S. -Bbuild | ||
RUN cmake --build build --target all -v | ||
|
||
FROM install_build AS install_test | ||
RUN cmake --build build --target test -v | ||
|
Oops, something went wrong.