Files
vpp/src/pkg/CMakeLists.txt
Andrew Yourtchenko 5ca8bfcacb build: allow for reproducible builds
Setting and using the SOURCE_DATE_EPOCH variable takes
care of most of the magic necessary.
https://reproducible-builds.org/docs/source-date-epoch/

vpp-ext-deps packages after this change is being built with that
date set to date of the last modification of the
subtree (similar logic to deriving the "number" for
the package version)

For the rest of the packages, pinning the following
three variables should result in bit-identical
artifacts across multiple runs:

export SOURCE_DATE_EPOCH=$(date +%s)
export VPP_BUILD_HOST="buildhost"
export VPP_BUILD_USER="builduser"

Add a blurb in the docs describing this new functionality.

Type: improvement
Change-Id: I71b085f0577b2358aa98f01dafd8e392239420a6
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2023-10-26 12:09:44 +00:00

77 lines
2.2 KiB
CMake

# Copyright (c) 2019 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
if(CMAKE_CROSSCOMPILING)
return()
endif()
get_cmake_property(VPP_COMPONENTS COMPONENTS)
string(REPLACE ";" " " VPP_COMPONENTS "${VPP_COMPONENTS}")
##############################################################################
# pinned timestamp for reproducible builds
##############################################################################
set(VPP_SOURCE_DATE_EPOCH
""
CACHE
STRING "Artifact build timestamp for reproducible builds"
)
if(VPP_SOURCE_DATE_EPOCH STREQUAL "")
set(VPP_TIMESTAMP_ARG "")
else()
set(VPP_TIMESTAMP_ARG "--date=@${VPP_SOURCE_DATE_EPOCH}")
endif()
execute_process(
COMMAND date -R ${VPP_TIMESTAMP_ARG}
OUTPUT_VARIABLE TIMESTAMP
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# parse /etc/os-release
file(READ "/etc/os-release" os_release)
string(REPLACE "\n" ";" os_release ${os_release})
foreach(l ${os_release})
string(REPLACE "=" ";" l ${l})
list(GET l 0 _name)
list(GET l 1 _value)
string(REPLACE "\"" "" _value ${_value})
set(OS_${_name} ${_value})
endforeach()
set(VPP_DEB_BUILD_DEPENDS "python3-all, python3-setuptools")
set(VPP_DEB_WITH_PYTHON2 "no")
foreach(f rules changelog control)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/debian/${f}.in
${VPP_BINARY_DIR}/debian/${f}
@ONLY
)
endforeach()
foreach(f copyright vpp.preinst vpp.postrm vpp.postinst vpp.service)
file(COPY
${CMAKE_CURRENT_SOURCE_DIR}/debian/${f}
DESTINATION ${VPP_BINARY_DIR}/debian
)
endforeach()
add_custom_target(pkg-deb
COMMENT "Building .deb packages..."
WORKING_DIRECTORY ${VPP_BINARY_DIR}
COMMAND "dpkg-buildpackage" "-us" "-uc" "-b"
USES_TERMINAL
)