aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/ci.yml12
-rw-r--r--.gitignore1
-rw-r--r--Makefile84
-rw-r--r--README.md31
4 files changed, 99 insertions, 29 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0ba4227..c727bbc 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -58,20 +58,14 @@ jobs:
platform: '${{ matrix.platform }}'
if: matrix.toolset == 'mingw'
- name: Build Boost
- run: |
- cd cmake
- python -m project.ci.boost -- --with-filesystem --with-program_options --with-test
+ run: make deps
- name: Build
- run: |
- cd cmake
- python -m project.ci.cmake --install
+ run: make install
- name: Upload binaries
uses: actions/upload-artifact@v2
with:
name: 'pdb-repo-${{ matrix.os }}-${{ matrix.toolset }}-${{ matrix.platform }}-${{ matrix.configuration }}'
path: '${{ runner.workspace }}/build/install/'
- name: Test
- run: |
- cd ../build/cmake
- ctest -C '${{ env.CONFIGURATION }}' --verbose
+ run: make test
if: runner.os == 'Windows'
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0e03e15
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/.build/
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..a48be0a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,84 @@
+# Various one-liners which I'm too lazy to remember.
+# Basically a collection of really small shell scripts.
+
+MAKEFLAGS += --no-builtin-rules --no-builtin-variables --warn-undefined-variables
+unexport MAKEFLAGS
+.DEFAULT_GOAL := all
+.DELETE_ON_ERROR:
+.SUFFIXES:
+SHELL := bash
+.SHELLFLAGS := -eu -o pipefail -c
+
+.PHONY: DO
+DO:
+
+escape = $(subst ','\'',$(1))
+
+define noexpand
+ifeq ($$(origin $(1)),environment)
+ $(1) := $$(value $(1))
+endif
+ifeq ($$(origin $(1)),environment override)
+ $(1) := $$(value $(1))
+endif
+ifeq ($$(origin $(1)),command line)
+ override $(1) := $$(value $(1))
+endif
+endef
+
+TOOLSET ?= mingw
+CONFIGURATION ?= Debug
+BOOST_VERSION ?= 1.65.0
+BOOST_LIBRARIES := --with-filesystem --with-program_options --with-test
+CMAKE_FLAGS ?=
+
+this_dir := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+src_dir := $(this_dir)
+ifdef CI
+build_dir := $(this_dir)../build
+else
+build_dir := $(this_dir).build
+endif
+boost_dir := $(build_dir)/boost
+cmake_dir := $(build_dir)/cmake
+DESTDIR ?= $(build_dir)/install
+
+$(eval $(call noexpand,TOOLSET))
+$(eval $(call noexpand,CONFIGURATION))
+$(eval $(call noexpand,BOOST_VERSION))
+$(eval $(call noexpand,CMAKE_FLAGS))
+$(eval $(call noexpand,DESTDIR))
+
+.PHONY: all
+all: build
+
+.PHONY: clean
+clean:
+ rm -rf -- '$(call escape,$(build_dir))'
+
+$(boost_dir)/:
+ cd cmake && python3 -m project.boost.download --cache '$(call escape,$(build_dir))' -- '$(call escape,$(BOOST_VERSION))' '$(call escape,$(boost_dir))'
+
+.PHONY: deps
+ifdef CI
+deps:
+ cd cmake && python3 -m project.ci.boost -- $(BOOST_LIBRARIES)
+else
+deps: $(boost_dir)/
+ cd cmake && python3 -m project.boost.build --toolset '$(call escape,$(TOOLSET))' --configuration '$(call escape,$(CONFIGURATION))' -- '$(call escape,$(boost_dir))' $(BOOST_LIBRARIES)
+endif
+
+.PHONY: build
+build:
+ifdef CI
+ cd cmake && python3 -m project.ci.cmake --install -- $(CMAKE_FLAGS)
+else
+ cd cmake && python3 -m project.cmake.build --toolset '$(call escape,$(TOOLSET))' --configuration '$(call escape,$(CONFIGURATION))' --build '$(call escape,$(cmake_dir))' --install '$(call escape,$(DESTDIR))' --boost '$(call escape,$(boost_dir))' -- '$(call escape,$(src_dir))' $(CMAKE_FLAGS)
+endif
+
+.PHONY: install
+install: build
+
+.PHONY: test
+test:
+ cd -- '$(call escape,$(cmake_dir))' && ctest -C '$(call escape,$(CONFIGURATION))' --verbose
diff --git a/README.md b/README.md
index 92eef42..60991e9 100644
--- a/README.md
+++ b/README.md
@@ -14,26 +14,17 @@ vice versa, etc.
Building
--------
-Create the build files using CMake and build the project using Visual Studio.
-
-* **Prerequisites.**
-Depends on Boost.{Filesystem,Program_options}.
-* **Customization.**
-The runtime libraries are linked statically by default.
-Therefore, the Boost libraries must also link them statically.
-You can link the runtime dynamically by passing `-D CC_STATIC_RUNTIME=OFF` to
-`cmake`.
-* **Example.**
-Using Visual Studio 2015 (targeting x64), build & install the release version
-to C:\pdb-repo:
-
- > cmake -G "Visual Studio 14 2015" -A x64 ^
- -D BOOST_ROOT=C:\path\to\boost_1_61_0 ^
- C:\path\to\pdb-repo
- ...
-
- > cmake --build . --config Release --target install -- /m
- ...
+Build using CMake.
+Depends on Boost.{Filesystem,Program_options,Test}.
+The project is Windows-only, so building with either MSVC or MinGW-w64 is
+required.
+
+There's a Makefile with useful shortcuts to build the project in the .build/
+directory along with the dependencies (defaults to building with MinGW-w64):
+
+ make deps
+ make build
+ make test
License
-------