aboutsummaryrefslogblamecommitdiffstatshomepage
path: root/.ci/Makefile
blob: f908c1f9c460614edc0a41ba86f18907b3d64bf7 (plain) (tree)
1
2
3
4
5
6
7
8
9
                           
                                                    
 



                                                                       

                    
 
            
                       






                                              
                 




                                 
                                                                


                                                




                  


                    
    




                    

                   
                                                              

     










                                                                             
                   
                           
    
                                

     




                                                    

     






                                                           


                          
             


                   

                                                                                   
                                  

                                                                                   
                 



                                                                                   
                  
                                                                                   





                                                                                   

                                                                                   
                      


                                                                                   

                                     
                    
                               
                                                                                                                                      
 
                  
                           

                                          






                                                                       
 
              
                                                                               
 

                                   
                    
                               
                                                                                                                                    
 
                  
                           

                                          






                                                                               
 
              
                                                                               
 

                                             
                     
                                 
                                                                                                                                               
 
                   

                                                                               
                             





                                                                                           







                                                                                              
 
               
                                                                                     
 
                         




                                                                                   
                      



                                                                                   
                             
                                                                                   
                                                   

                                                                                   
                           



                                                                                   
                            
                                                                                   
                                                                                

                                                                                   
                            


                                                                                   





                                      
                         
                                      
                                                    
 
                      
               
                                                                                                                                                        
 
                   
                             

                                    
                          
                                           
                                                                                                                                                              
 
                        
                                                            
                                       

                                                


                                                                             
 
                    
                                                                   
 
                
                                                                                          
 





                                                      
                         
                                      
                                                              
 
                      
               
                                                                                                                                                                    
 
                   
                             

                                    
                          
                                           
                                                                                                                                                                                                
 
                        
                                                      
                                       





                                                                                                               


                                                                             
 
                    
                                                                   
 
                
                                                                                          
 
               
                                                             
                                                       



                                                                
                      
                                   
                                                                                                        
 
                   
                             

                                  
                          
                                           
                                                                                                                                              

              
                      
                                   
                                                                                                          
 
                   
                             

                                       
                          
                                           
                                                                                                                                                                 

     
                        
                                       

                                                


                                                                             
 
                    
                                                                   
 
                
                                                                        
# Travis/AppVeyor commands.
# Basically, make is used as a kinda-portable shell.

# make when called by CMake produces a lot of bogus warnings if this is
# uncommented:
#MAKEFLAGS += --warn-undefined-variables

.DEFAULT_GOAL := all
.SUFFIXES:

windows := 0
ifeq ($(OS),Windows_NT)
windows := 1
endif

# Shell
ifeq ($(windows),1)
# Make might pick up sh.exe if it's available:
SHELL := cmd
.SHELLFLAGS := /c
else
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
endif

makefile_dir := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))

# Basic stuff that needed to be abstracted away:
ifeq ($(windows),1)
exe_ext := .exe
static_prefix :=
static_ext := .lib
shared_prefix :=
shared_ext := .dll
newline := @echo.
cwd := $(shell cd)
ls := dir /a-D /S /B
else
exe_ext :=
static_prefix := lib
static_ext := .a
shared_prefix := lib
shared_ext := .so
newline := @echo
cwd := $(shell pwd)
ls := function my_ls() { find "$$@" -type f | sort ; } ; my_ls
endif

# Python executable might be named differently, depending on the environment:
ifeq ($(windows),1)
ifdef appveyor_python_exe
python := $(appveyor_python_exe)
else
python := python
endif
else
python := python3
endif

ifeq ($(windows),1)
install_prefix = C:/install
else
install_prefix := $$HOME/install
endif

# Script to verify executable's target architecture:
ifeq ($(windows),1)
verify_arch = powershell -file ./.ci/verify_arch.ps1
else
verify_arch := ./.ci/verify_arch.sh
endif

# Script to check if symbols are present in the executable:
ifeq ($(windows),1)
verify_symbols := powershell -file ./.ci/verify_symbols.ps1
else
verify_symbols := ./.ci/verify_symbols.sh
endif

.PHONY: all
all: simple static dynamic

.PHONY: FORCE
FORCE:

echo/%/build: FORCE
	$(newline)
	@echo =====================================================================
	@echo Building examples/$*
	@echo =====================================================================

echo/%/run: FORCE
	@echo ---------------------------------------------------------------------
	@echo Running $*/bin/foo
	@echo ---------------------------------------------------------------------

echo/%/arch: FORCE
	@echo ---------------------------------------------------------------------
	@echo Checking target architecture of $*/bin/foo
	@echo ---------------------------------------------------------------------

echo/%/symbols: FORCE
	@echo ---------------------------------------------------------------------
	@echo Checking symbols for $*/bin/foo
	@echo ---------------------------------------------------------------------

echo/%/finished: FORCE
	@echo =====================================================================
	$(newline)

# examples/simple: x64/Release build.

.PHONY: simple/build
simple/build: echo/simple/build
	"$(python)" -m project.cmake.build --install "$(install_prefix)/simple" --platform x64 --configuration Release examples/simple

.PHONY: simple/run
simple/run: echo/simple/run
	"$(install_prefix)/simple/bin/foo"

.PHONY: simple/arch
simple/arch: echo/simple/arch
	$(verify_arch) "$(install_prefix)/simple/bin/foo$(exe_ext)" x64

.PHONY: simple/symbols
simple/symbols: echo/simple/symbols
	$(verify_symbols) "$(install_prefix)/simple/bin/foo$(exe_ext)"

.PHONY: simple
simple: simple/build simple/run simple/arch simple/symbols echo/simple/finished

# examples/static: x86/Debug build.

.PHONY: static/build
static/build: echo/static/build
	"$(python)" -m project.cmake.build --install "$(install_prefix)/static" --platform x86 --configuration Debug examples/static

.PHONY: static/run
static/run: echo/static/run
	"$(install_prefix)/static/bin/foo"

.PHONY: static/arch
static/arch: echo/static/arch
	$(verify_arch) "$(install_prefix)/static/bin/foo$(exe_ext)" x86

.PHONY: static/symbols
static/symbols: echo/static/symbols
	$(verify_symbols) "$(install_prefix)/static/bin/foo$(exe_ext)" main bar

.PHONY: static
static: static/build static/run static/arch static/symbols echo/static/finished

# examples/dynamic: x64/RelWithDebInfo build.

.PHONY: dynamic/build
dynamic/build: echo/dynamic/build
	"$(python)" -m project.cmake.build --install "$(install_prefix)/dynamic" --platform x64 --configuration RelWithDebInfo examples/dynamic

.PHONY: dynamic/run
# Windows can pick up DLLs in the same directory, otherwise we need to add them
# to PATH.
dynamic/run: echo/dynamic/run
ifeq ($(windows),1)
	"$(install_prefix)/dynamic/bin/foo"
else
	LD_LIBRARY_PATH="$(install_prefix)/dynamic/lib" "$(install_prefix)/dynamic/bin/foo"
endif

.PHONY: dynamic/arch
dynamic/arch: echo/dynamic/arch
	$(verify_arch) "$(install_prefix)/dynamic/bin/foo$(exe_ext)" x64

.PHONY: dynamic/symbols
dynamic/symbols: echo/dynamic/symbols
	$(verify_symbols) "$(install_prefix)/dynamic/bin/foo$(exe_ext)" main
	$(verify_symbols) "$(install_prefix)/dynamic/lib/$(shared_prefix)baz$(shared_ext)" baz

.PHONY: dynamic
dynamic: dynamic/build dynamic/run dynamic/arch dynamic/symbols echo/dynamic/finished

echo/boost/%/build: FORCE
	$(newline)
	@echo =====================================================================
	@echo Building Boost 1.$*.0
	@echo =====================================================================

echo/boost/%/ls: FORCE
	@echo ---------------------------------------------------------------------
	@echo Boost 1.$*.0: stage/
	@echo ---------------------------------------------------------------------

echo/boost/%/exe/build: FORCE
	@echo ---------------------------------------------------------------------
	@echo Boost 1.$*.0: building examples/boost
	@echo ---------------------------------------------------------------------

echo/boost/%/exe/run: FORCE
	@echo ---------------------------------------------------------------------
	@echo Boost 1.$*.0: running boost_1_$*_0/bin/foo
	@echo ---------------------------------------------------------------------

echo/boost/%/exe/arch: FORCE
	@echo ---------------------------------------------------------------------
	@echo Boost 1.$*.0: checking target architecture of boost_1_$*_0/bin/foo
	@echo ---------------------------------------------------------------------

echo/boost/%/finished: FORCE
	@echo =====================================================================
	$(newline)

# Boost 1.58.0:
# * temporary download,
# * x86, Debug, static libraries only.
# examples/boost:
# * x86/Debug build.

.PHONY: boost/58/download
boost/58/download: echo/boost/58/build
	"$(python)" -m project.boost.download 1.58.0

.PHONY: boost/58/build
boost/58/build:
	"$(python)" -m project.boost.build --platform x86 --configuration Debug --link static -- ./boost_1_58_0 --with-filesystem --with-program_options

.PHONY: boost/58/ls
boost/58/ls: echo/boost/58/ls
	$(ls) "./boost_1_58_0/stage"

.PHONY: boost/58/exe/build
boost/58/exe/build: echo/boost/58/exe/build
	"$(python)" -m project.cmake.build --install "$(install_prefix)/boost_1_58_0" --platform x86 --configuration Debug --boost boost_1_58_0 examples/boost

.PHONY: boost/58/exe/run
# Boost should be linked statically, no need to adjust PATH:
boost/58/exe/run: echo/boost/58/exe/run
	"$(install_prefix)/boost_1_58_0/bin/foo"

.PHONY: boost/58/exe/arch
boost/58/exe/arch: echo/boost/58/exe/arch
	$(verify_arch) "$(install_prefix)/boost_1_58_0/bin/foo$(exe_ext)" x86

.PHONY: boost/58/exe
boost/58/exe: boost/58/exe/build boost/58/exe/run boost/58/exe/arch

.PHONY: boost/58
boost/58: boost/58/download boost/58/build boost/58/ls boost/58/exe echo/boost/58/finished

# Boost 1.72.0:
# * cached download,
# * x86 & x64, Debug & Release, shared libraries only.
# examples/boost:
# * x64/Release build.

.PHONY: boost/72/download
boost/72/download: echo/boost/72/build
	"$(python)" -m project.boost.download --cache . 1.72.0

.PHONY: boost/72/build
boost/72/build:
	"$(python)" -m project.boost.build --platform x86 x64 --configuration Debug Release --link shared -- ./boost_1_72_0 --with-filesystem --with-program_options

.PHONY: boost/72/ls
boost/72/ls: echo/boost/72/ls
	$(ls) "./boost_1_72_0/stage"

.PHONY: boost/72/exe/build
boost/72/exe/build: echo/boost/72/exe/build
	"$(python)" -m project.cmake.build --install "$(install_prefix)/boost_1_72_0" --platform x64 --configuration Release --boost boost_1_72_0 -- examples/boost -D Boost_USE_STATIC_LIBS=OFF

.PHONY: boost/72/exe/run
# Boost is linked dynamically, we need to adjust PATH:
boost/72/exe/run: echo/boost/72/exe/run
ifeq ($(windows),1)
	set "PATH=$(cwd)\boost_1_72_0\stage\x64\Release\lib;%PATH%" && "$(install_prefix)/boost_1_72_0/bin/foo"
else
	LD_LIBRARY_PATH="$(cwd)/boost_1_72_0/stage/x64/Release/lib" "$(install_prefix)/boost_1_72_0/bin/foo"
endif

.PHONY: boost/72/exe/arch
boost/72/exe/arch: echo/boost/72/exe/arch
	$(verify_arch) "$(install_prefix)/boost_1_72_0/bin/foo$(exe_ext)" x64

.PHONY: boost/72/exe
boost/72/exe: boost/72/exe/build boost/72/exe/run boost/72/exe/arch

.PHONY: boost/72
boost/72: boost/72/download boost/72/build boost/72/ls boost/72/exe echo/boost/72/finished

# Boost 1.65.0:
# * download to $HOME (on Travis), C:\projects (on AppVeyor),
# * x64, MinSizeRel (= Release), static libraries only.
# examples/boost:
# * x64/MinSizeRel build (set in .travis.yml and .appveyor.yml).

ifdef TRAVIS
.PHONY: boost/65/build
boost/65/build: echo/boost/65/build
	"$(python)" -m project.ci.travis.boost --link static -- --with-filesystem --with-program_options

.PHONY: boost/65/ls
boost/65/ls: echo/boost/65/ls
	$(ls) "$$HOME/boost/stage"

.PHONY: boost/65/exe/build
boost/65/exe/build: echo/boost/65/exe/build
	TRAVIS_BUILD_DIR="$$TRAVIS_BUILD_DIR/examples/boost" "$(python)" -m project.ci.travis.cmake --install "$(install_prefix)/boost_1_65_0"
endif
ifdef APPVEYOR
.PHONY: boost/65/build
boost/65/build: echo/boost/65/build
	"$(python)" -m project.ci.appveyor.boost --link static -- --with-filesystem --with-program_options

.PHONY: boost/65/ls
boost/65/ls: echo/boost/65/ls
	$(ls) "C:/projects/boost/stage"

.PHONY: boost/65/exe/build
boost/65/exe/build: echo/boost/65/exe/build
	set "APPVEYOR_BUILD_FOLDER=%APPVEYOR_BUILD_FOLDER%\examples\boost" && "$(python)" -m project.ci.appveyor.cmake --install "$(install_prefix)/boost_1_65_0"
endif

.PHONY: boost/65/exe/run
boost/65/exe/run: echo/boost/65/exe/run
	"$(install_prefix)/boost_1_65_0/bin/foo"

.PHONY: boost/65/exe/arch
boost/65/exe/arch: echo/boost/65/exe/arch
	$(verify_arch) "$(install_prefix)/boost_1_65_0/bin/foo$(exe_ext)" x64

.PHONY: boost/65/exe
boost/65/exe: boost/65/exe/build boost/65/exe/run boost/65/exe/arch

.PHONY: boost/65
boost/65: boost/65/build boost/65/ls boost/65/exe echo/boost/65/finished