From cfdcbe8fabcab82fb30fd8b4c4968140ec4dc9a1 Mon Sep 17 00:00:00 2001 From: Corentin Le Molgat Date: Fri, 27 Sep 2024 17:04:19 +0200 Subject: [PATCH] cmake: Add openBSD vagrant based CI --- cmake/Makefile | 2 + cmake/vagrant/openbsd/cpp/Vagrantfile | 115 +++++++++++++++++++++ cmake/vagrant/openbsd/dotnet/Vagrantfile | 118 ++++++++++++++++++++++ cmake/vagrant/openbsd/java/Vagrantfile | 119 ++++++++++++++++++++++ cmake/vagrant/openbsd/python/Vagrantfile | 122 +++++++++++++++++++++++ 5 files changed, 476 insertions(+) create mode 100644 cmake/vagrant/openbsd/cpp/Vagrantfile create mode 100644 cmake/vagrant/openbsd/dotnet/Vagrantfile create mode 100644 cmake/vagrant/openbsd/java/Vagrantfile create mode 100644 cmake/vagrant/openbsd/python/Vagrantfile diff --git a/cmake/Makefile b/cmake/Makefile index 0c9f4d8fb7..3984a11e9c 100644 --- a/cmake/Makefile +++ b/cmake/Makefile @@ -145,6 +145,7 @@ help: @echo -e "\tWith ${BOLD}${RESET}:" @echo -e "\t\t${BOLD}freebsd${RESET} (FreeBSD 14)" @echo -e "\t\t${BOLD}netbsd${RESET} (NetBSD 9)" + @echo -e "\t\t${BOLD}openbsd${RESET} (OpenBSD 7)" @echo -e "\te.g. 'make freebsd_cpp'" @echo @echo -e "\t${BOLD}glop_${RESET}: Build Glop using an Ubuntu:rolling docker image." @@ -721,6 +722,7 @@ clean_web: $(addprefix clean_web_, $(WEB_STAGES)) VMS := \ freebsd \ netbsd \ + openbsd define make-vagrant-target = #$$(info VMS: $1) diff --git a/cmake/vagrant/openbsd/cpp/Vagrantfile b/cmake/vagrant/openbsd/cpp/Vagrantfile new file mode 100644 index 0000000000..85a99d367b --- /dev/null +++ b/cmake/vagrant/openbsd/cpp/Vagrantfile @@ -0,0 +1,115 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://vagrantcloud.com/search. + config.vm.guest = :openbsd + config.vm.box = "generic/openbsd7" + config.vm.provider "virtualbox" do |v| + v.name = "ortools_openbsd_cpp" + end + config.ssh.shell = "sh" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # NOTE: This will enable public access to the opened port + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine and only allow access + # via 127.0.0.1 to disable public access + # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + #config.vm.synced_folder "../../..", "/home/vagrant/project" + config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true + + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + # end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Enable provisioning with a shell script. Additional provisioners such as + # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the + # documentation for more information about their specific syntax and use. + # note: clang installed by default + config.vm.provision "env", type: "shell", inline:<<-SHELL + set -x + pkg update -f + pkg install -y git cmake + SHELL + + config.vm.provision "file", source: "../../../../CMakeLists.txt", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../cmake", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../ortools", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../examples/contrib", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/cpp", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" + + config.vm.provision "devel", type: "shell", inline:<<-SHELL + set -x + cd project + ls + SHELL + + config.vm.provision "configure", type: "shell", inline:<<-SHELL + set -x + cd project + cmake -S. -Bbuild -DBUILD_DEPS=ON + SHELL + + config.vm.provision "build", type: "shell", inline:<<-SHELL + set -x + cd project + cmake --build build -v + SHELL + + config.vm.provision "test", type: "shell", inline:<<-SHELL + set -x + cd project + cmake --build build --target test -v + SHELL +end diff --git a/cmake/vagrant/openbsd/dotnet/Vagrantfile b/cmake/vagrant/openbsd/dotnet/Vagrantfile new file mode 100644 index 0000000000..b129bca007 --- /dev/null +++ b/cmake/vagrant/openbsd/dotnet/Vagrantfile @@ -0,0 +1,118 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://vagrantcloud.com/search. + config.vm.guest = :openbsd + config.vm.box = "generic/openbsd7" + config.vm.provider "virtualbox" do |v| + v.name = "ortools_openbsd_dotnet" + end + config.ssh.shell = "sh" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # NOTE: This will enable public access to the opened port + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine and only allow access + # via 127.0.0.1 to disable public access + # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + #config.vm.synced_folder "../../..", "/home/vagrant/project" + config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true + + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + # end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Enable provisioning with a shell script. Additional provisioners such as + # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the + # documentation for more information about their specific syntax and use. + # note: clang installed by default + config.vm.provision "env", type: "shell", inline:<<-SHELL + set -x + pkg update -f + pkg install -y git cmake + kldload linux64 + pkg install -y swig linux-dotnet-sdk + SHELL + + config.vm.provision "file", source: "../../../../CMakeLists.txt", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../cmake", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../ortools", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../examples/contrib", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/cpp", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../tools/doc/orLogo.png", destination: "$HOME/project/tools/doc/" + + config.vm.provision "devel", type: "shell", inline:<<-SHELL + set -x + cd project + ls + SHELL + + config.vm.provision "configure", type: "shell", inline:<<-SHELL + set -x + cd project + cmake -S. -Bbuild -DBUILD_DOTNET=ON -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF + SHELL + + config.vm.provision "build", type: "shell", inline:<<-SHELL + set -x + cd project + cmake --build build -v + SHELL + + config.vm.provision "test", type: "shell", inline:<<-SHELL + set -x + cd project + cmake --build build --target test -v + SHELL +end diff --git a/cmake/vagrant/openbsd/java/Vagrantfile b/cmake/vagrant/openbsd/java/Vagrantfile new file mode 100644 index 0000000000..c029867471 --- /dev/null +++ b/cmake/vagrant/openbsd/java/Vagrantfile @@ -0,0 +1,119 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://vagrantcloud.com/search. + config.vm.guest = :openbsd + config.vm.box = "generic/openbsd7" + config.vm.provider "virtualbox" do |v| + v.name = "ortools_openbsd_java" + end + config.ssh.shell = "sh" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # NOTE: This will enable public access to the opened port + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine and only allow access + # via 127.0.0.1 to disable public access + # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + #config.vm.synced_folder "../../..", "/home/vagrant/project" + config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true + + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + # end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Enable provisioning with a shell script. Additional provisioners such as + # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the + # documentation for more information about their specific syntax and use. + # note: clang installed by default + config.vm.provision "env", type: "shell", inline:<<-SHELL + set -x + pkg update -f + pkg install -y git cmake + pkg install -y swig openjdk11 maven + mount -t fdescfs fdesc /dev/fd + mount -t procfs proc /proc + SHELL + + config.vm.provision "file", source: "../../../../CMakeLists.txt", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../cmake", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../ortools", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../examples/contrib", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/cpp", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" + + config.vm.provision "devel", type: "shell", inline:<<-SHELL + set -x + cd project + ls + SHELL + + config.vm.provision "configure", type: "shell", inline:<<-SHELL + set -x + cd project + export JAVA_HOME=/usr/local/openjdk11 + cmake -S. -Bbuild -DBUILD_JAVA=ON -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF + SHELL + + config.vm.provision "build", type: "shell", inline:<<-SHELL + set -x + cd project + cmake --build build -v + SHELL + + config.vm.provision "test", type: "shell", inline:<<-SHELL + set -x + cd project + cmake --build build --target test -v + SHELL +end diff --git a/cmake/vagrant/openbsd/python/Vagrantfile b/cmake/vagrant/openbsd/python/Vagrantfile new file mode 100644 index 0000000000..d2083458d3 --- /dev/null +++ b/cmake/vagrant/openbsd/python/Vagrantfile @@ -0,0 +1,122 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://vagrantcloud.com/search. + config.vm.guest = :openbsd + config.vm.box = "generic/openbsd7" + config.vm.provider "virtualbox" do |v| + v.name = "ortools_openbsd_python" + end + config.ssh.shell = "sh" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # NOTE: This will enable public access to the opened port + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine and only allow access + # via 127.0.0.1 to disable public access + # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + #config.vm.synced_folder "../../..", "/home/vagrant/project" + config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true + + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + # end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Enable provisioning with a shell script. Additional provisioners such as + # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the + # documentation for more information about their specific syntax and use. + # note: clang installed by default + config.vm.provision "env", type: "shell", inline:<<-SHELL + set -x + pkg update -f + pkg install -y git cmake + pkg install -y swig python39 py39-wheel py39-pip py39-pytest-virtualenv + pkg install -y py39-numpy py39-pandas py39-matplotlib + SHELL + + config.vm.provision "file", source: "../../../../CMakeLists.txt", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../cmake", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../ortools", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../examples/contrib", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/cpp", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/dotnet", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/java", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/python", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../examples/tests", destination: "$HOME/project/examples/" + config.vm.provision "file", source: "../../../../patches", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../LICENSE", destination: "$HOME/project/" + config.vm.provision "file", source: "../../../../Version.txt", destination: "$HOME/project/" + + config.vm.provision "devel", type: "shell", inline:<<-SHELL + set -x + export PATH=${HOME}/.local/bin:"$PATH" + cd project + ls + SHELL + + config.vm.provision "configure", type: "shell", inline:<<-SHELL + set -x + export PATH=${HOME}/.local/bin:"$PATH" + cd project + cmake -S. -Bbuild -DBUILD_PYTHON=ON -DVENV_USE_SYSTEM_SITE_PACKAGES=ON -DBUILD_CXX_SAMPLES=OFF -DBUILD_CXX_EXAMPLES=OFF + SHELL + + config.vm.provision "build", type: "shell", inline:<<-SHELL + set -x + export PATH=${HOME}/.local/bin:"$PATH" + cd project + cmake --build build -v + SHELL + + config.vm.provision "test", type: "shell", inline:<<-SHELL + set -x + export PATH=${HOME}/.local/bin:"$PATH" + cd project + cmake --build build --target test -v + SHELL +end