diff options
author | Stephen Cprek <smcprek@us.ibm.com> | 2015-02-19 14:33:38 -0600 |
---|---|---|
committer | Stephen Cprek <smcprek@us.ibm.com> | 2015-03-23 17:28:20 -0500 |
commit | e7254c7a5d209aeded91aef86d76cf1bc5401742 (patch) | |
tree | 464c54b935e3974ce046bbf3b3c1c059881880d5 /openpower | |
parent | e075554fa34f8c80078dfb066492acd7f5361349 (diff) | |
download | blackbird-op-build-e7254c7a5d209aeded91aef86d76cf1bc5401742.tar.gz blackbird-op-build-e7254c7a5d209aeded91aef86d76cf1bc5401742.zip |
Add openPOWER version string support
See VERSION.readme for more info
Diffstat (limited to 'openpower')
-rw-r--r-- | openpower/external.mk | 3 | ||||
-rw-r--r-- | openpower/package/VERSION.readme | 119 | ||||
-rw-r--r-- | openpower/package/hostboot/hostboot.mk | 3 | ||||
-rw-r--r-- | openpower/package/openpower-pnor/openpower-pnor.mk | 13 | ||||
-rw-r--r-- | openpower/package/pkg-versions.mk | 195 |
5 files changed, 329 insertions, 4 deletions
diff --git a/openpower/external.mk b/openpower/external.mk index be628ba1..8d7b5780 100644 --- a/openpower/external.mk +++ b/openpower/external.mk @@ -1,5 +1,6 @@ +include $(sort $(wildcard $(BR2_EXTERNAL)/package/*.mk)) include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk)) # Utilize user-defined custom directory. include $(sort $(wildcard $(BR2_EXTERNAL)/custom/*.mk)) -BR2_GLOBAL_PATCH_DIR += " $(BR2_EXTERNAL)/custom/patches " +BR2_GLOBAL_PATCH_DIR += "$(BR2_EXTERNAL)/custom/patches" diff --git a/openpower/package/VERSION.readme b/openpower/package/VERSION.readme new file mode 100644 index 00000000..59fec867 --- /dev/null +++ b/openpower/package/VERSION.readme @@ -0,0 +1,119 @@ +#### Version String Readme #### + + ## Customrc ## + + Create a file at the top level of op-build called 'customrc' + to specify custom $(OPBUILD_VENDOR), $(OPBUILD_PLATFORM), and $(OPBUILD_VERSION). + + Example: + #!/bin/sh + #export OPBUILD_VENDOR=IBM + #export OPBUILD_PLATFORM=plat-ibm + #export OPBUILD_VERSION=v-1.0.1 + + ## Op-build Commands ## + + # Display package version + op-build $(package)-version + + # Force a rebuild of a package version + op-build $(package)-build-version + + ## Version String (ASCII) ## + + General: + $(op-build)\n + \t$(subpackage0)\n + \t$(subpackage1)\n + \0 + + ## Version String Details ## + + $(op-build): + - Clean + + $(vendor)-$(platform)-$(op-version) + - Dirty. + + $(vendor)-$(platform)-$(gitcommit+dirty) + $(sub-package): + - Directly upstream, no patches, op-build clean. + + $(package)-$(version) + - Directly upstream, no patches, op-build dirty. + + $(package)-$(version)-$(op-dirty) + - Directly upstream, op-build patches, op-build clean + + $(package)-$(version)-$(patch-level) + - Directly upstream, op-build patches, op-build dirty. + + $(package)-$(version)-$(op-dirty)-$(patch-level) + - SITE=local + + $(package)-site_local-$(user)-$(gitcommit+dirty) + + ## Variable Details ## + + - $(vendor) = $(OPBUILD_VENDOR) or 'open-power'. + - $(platform) = $(OPBUILD_PLATFORM) or defconfig + + Order $(OPBUILD_PLATFORM), defconfig + - $(op-version) = git tag or first 7 characters of commit or $(OPBUILD_VERSION) or 'unknown'. + + Order $(OPBUILD_VERSION), tag, commit, unknown + - **$(gitcommit+dirty) = abcd123 or abcd123-dirty or 'unknown' + - $(version) = git tag or first 7 characters of commit + - $(user) = `whoami` + - **$(op-dirty) = opdirty or 'unknown' + - $(patch-level) = $(first 7 characters of 'sha512sum *.patch | sha512sum') + + the output of this gives us a quick way to check all the patches with one string + + ** Indicates possible unknown case when source downloaded versus git clone due to git commands required + + ## Sub Packages ## + + Current sub packages included in openpower-pnor.mk $(OPENPOWER_VERSIONED_SUBPACKAGES) + + - hostboot + - occ + - skiboot + - $(platform)-xml + - hostboot-binaries + - capp-ucode + + ## PNOR section ## + + - There is one version PNOR section per side + - Each is one page w/o ECC so 4K + - The data in the section will just be ASCII + + ## Op-build Command Examples ## + + cmd> op-build openpower-pnor-version + === OPENPOWER_PNOR_VERSION === + IBM-plat-ibm-v-1.2.3-dirty + hostboot-3593853-99cca2b + occ-cc8376d + skiboot-9a3f68b-7c66ab4 + hostboot-binaries-e3c9356 + habanero-xml-4c1e936 + capp-ucode-d4b2683 + + cmd> op-build hostboot-version + === HOSTBOOT_VERSION === + hostboot-3593853-opdirty-99cca2b + + If a version does not already exist, the commands to make one will be run. + Additionally you can force with op-build $(package)-build-version + + cmd> op-build hostboot-version (or op-build hostboot-build-version) + === HOSTBOOT_VERSION === + Searching for patches... + op-build/openpower/package/hostboot/hostboot-0001-Increase-uart-delay.patch + op-build/openpower/package/hostboot/hostboot-0002-Disable-centaur-memory-throttle.patch + op-build/openpower/package/hostboot/hostboot-0003-GCC-4.9-Make-compiler-use-ELFv1-ABI-and-use-O2.patch + op-build/openpower/package/hostboot/hostboot-0004-Revert-SW294127-INITPROC-FSP-Hostboot-fast-exit-powe.patch + op-build/openpower/package/hostboot/hostboot-0005-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch + op-build/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch + op-build/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch + op-build/openpower/package/hostboot/hostboot-0008-mss-thermal-init-SW297647.patch + op-build/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch + op-build/openpower/package/hostboot/hostboot-0010-Reset-occ-when-fails-to-activate.patch + op-build/openpower/package/hostboot/hostboot-0011-eRepair-MBVPD-size-check-for-CDIMM-and-ISDIMM.patch + End of patches... + Creating version string (various output may display)... + heads/pnor_version-dirty + End creating version string... + version: hostboot-3593853-99cca2b diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk index d3b76fa8..e3883056 100644 --- a/openpower/package/hostboot/hostboot.mk +++ b/openpower/package/hostboot/hostboot.mk @@ -15,7 +15,8 @@ HOSTBOOT_INSTALL_TARGET = NO HOSTBOOT_ENV_VARS=$(TARGET_MAKE_ENV) \ CONFIG_FILE=$(BR2_EXTERNAL)/configs/hostboot/$(BR2_HOSTBOOT_CONFIG_FILE) \ - OPENPOWER_BUILD=1 CROSS_PREFIX=$(TARGET_CROSS) HOST_PREFIX="" HOST_BINUTILS_DIR=$(HOST_BINUTILS_DIR) + OPENPOWER_BUILD=1 CROSS_PREFIX=$(TARGET_CROSS) HOST_PREFIX="" HOST_BINUTILS_DIR=$(HOST_BINUTILS_DIR) \ + HOSTBOOT_VERSION=`cat $(HOSTBOOT_VERSION_FILE)` define HOSTBOOT_BUILD_CMDS $(HOSTBOOT_ENV_VARS) bash -c 'cd $(@D) && source ./env.bash && $(MAKE)' diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk index 88542078..3639e9c0 100644 --- a/openpower/package/openpower-pnor/openpower-pnor.mk +++ b/openpower/package/openpower-pnor/openpower-pnor.mk @@ -30,6 +30,11 @@ OPENPOWER_PNOR_INSTALL_TARGET = NO HOSTBOOT_IMAGE_DIR=$(STAGING_DIR)/hostboot_build_images/ HOSTBOOT_BINARY_DIR = $(STAGING_DIR)/hostboot_binaries/ OPENPOWER_PNOR_SCRATCH_DIR = $(STAGING_DIR)/openpower_pnor_scratch/ +OPENPOWER_VERSION_DIR = $(STAGING_DIR)/openpower_version + +# Subpackages we want to include in the version info (do not include openpower-pnor) +OPENPOWER_VERSIONED_SUBPACKAGES = hostboot occ skiboot hostboot-binaries $(XML_PACKAGE) capp-ucode +OPENPOWER_PNOR = openpower-pnor define OPENPOWER_PNOR_INSTALL_IMAGES_CMDS mkdir -p $(OPENPOWER_PNOR_SCRATCH_DIR) @@ -44,7 +49,8 @@ define OPENPOWER_PNOR_INSTALL_IMAGES_CMDS -sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME) \ -sbec_binary_filename $(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) \ -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_BIN_FILENAME) \ - -capp_binary_filename $(BINARIES_DIR)/$(BR2_CAPP_UCODE_BIN_FILENAME) + -capp_binary_filename $(BINARIES_DIR)/$(BR2_CAPP_UCODE_BIN_FILENAME) \ + -openpower_version_filename $(OPENPOWER_PNOR_VERSION_FILE) mkdir -p $(STAGING_DIR)/pnor/ $(TARGET_MAKE_ENV) $(@D)/create_pnor_image.pl \ @@ -58,9 +64,12 @@ define OPENPOWER_PNOR_INSTALL_IMAGES_CMDS -sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME) \ -sbec_binary_filename $(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) \ -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_BIN_FILENAME) \ - -targeting_binary_filename $(BR2_OPENPOWER_TARGETING_ECC_FILENAME) + -targeting_binary_filename $(BR2_OPENPOWER_TARGETING_ECC_FILENAME) \ + -openpower_version_filename $(OPENPOWER_PNOR_VERSION_FILE) $(INSTALL) $(STAGING_DIR)/pnor/$(BR2_OPENPOWER_PNOR_FILENAME) $(BINARIES_DIR) endef $(eval $(generic-package)) +# Generate openPOWER pnor version string by combining subpackage version string files +$(eval $(call OPENPOWER_VERSION,$(OPENPOWER_PNOR))) diff --git a/openpower/package/pkg-versions.mk b/openpower/package/pkg-versions.mk new file mode 100644 index 00000000..3ac8c9ff --- /dev/null +++ b/openpower/package/pkg-versions.mk @@ -0,0 +1,195 @@ +################################################################################ +# +# pkg-versions +# +# Read VERSION.readme in the current directory to learn about the version +# string structure +# +################################################################################ + +define OPENPOWER_SUBPACKAGE_VERSION + +$(2)_VERSION_FILE = $$(OPENPOWER_VERSION_DIR)/$(1).version.txt +ALL_SUBPACKAGE_VERSIONS += $$($(2)_VERSION_FILE) + +### Create subpackage patch file +define $(2)_OPENPOWER_PATCH_FILE + +mkdir -p "$$(OPENPOWER_VERSION_DIR)"; + +# Remove patch file to start off fresh +if [ -f $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt ]; then \ + rm -rf $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt; \ +fi + +# Check all global patch directories +$$(foreach path, $$(BR2_GLOBAL_PATCH_DIR),if ls $$(path)/$(1)/*.patch 2>/dev/null; then \ + sha512sum $$(path)/$(1)/*.patch | sha512sum | \ + xargs echo >> $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; fi;) + +# Check the package patch dir, $$(PKGDIR) doesn't exist when running the version rules +if [ -n "$$(PKGDIR)" ]; then \ + if ls $$(PKGDIR)*.patch 2>/dev/null; then sha512sum $$(PKGDIR)*.patch | sha512sum | \ + xargs echo >> $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; \ + fi; \ +else \ + if ls $$(BR2_EXTERNAL)/package/$(1)/*.patch 2>/dev/null; then sha512sum \ + $$(BR2_EXTERNAL)/package/$(1)/*.patch | sha512sum | \ + xargs echo >> $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; \ + fi; \ +fi + +# Combine all the patches found in the package and global package directories +if [ -f $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt ]; then \ + cat $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt | sha512sum | cut -c 1-7 | \ + xargs echo -n > $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt; \ +fi + +# Remove the tmp_patch file +if [ -f $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt ]; then \ + rm -rf $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; \ +fi + +endef ### + +### Create subpackage version file +define $(2)_OPENPOWER_VERSION_FILE + +mkdir -p "$$(OPENPOWER_VERSION_DIR)" + +# Add package name +echo -n " $(1)-" > $$($(2)_VERSION_FILE) + +# If site local +# Add site local and user, local commit, if local is dirty +# Else not local +# Add package version, op-build is dirty, op-build patches +if [ "$$($(2)_SITE_METHOD)" == "local" ]; then \ +echo -n "site_local-" >> $$($(2)_VERSION_FILE); \ +whoami | xargs echo -n >> $$($(2)_VERSION_FILE); \ +echo -n "-" >> $$($(2)_VERSION_FILE); \ +\ +cd "$$($(2)_SITE)"; (git describe --tags || git log -n1 --pretty=format:'%h' || echo "unknown") \ + | sed 's/\(.*\)-g\([0-9a-f]\{7\}\).*/\2/' | xargs echo -n \ + >> $$($(2)_VERSION_FILE); \ +\ +cd "$$($(2)_SITE)"; git describe --all --dirty | grep -e "-dirty" | sed 's/.*\(-dirty\)/\1/' | \ + xargs echo -n >> $$($(2)_VERSION_FILE); \ +else \ +\ +[ `echo -n $$($(2)_VERSION) | wc -c` == "40" ] && (echo -n $$($(2)_VERSION) | \ + sed "s/^\([0-9a-f]\{7\}\).*/\1/" >> $$($(2)_VERSION_FILE)) \ + || echo -n $$($(2)_VERSION) >> $$($(2)_VERSION_FILE); \ +\ +cd "$$(BR2_EXTERNAL)"; git describe --all --dirty | \ + if grep -e "-dirty"; then \ + echo -n "-opdirty" >> $$($(2)_VERSION_FILE); \ + fi; \ +\ +if [ -f $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt ]; then \ + echo -n "-" >> $$($(2)_VERSION_FILE); \ + cat $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt >> $$($(2)_VERSION_FILE); fi \ +fi + +# Add new line to version.txt +echo "" >> $$($(2)_VERSION_FILE); + +endef ### + +# Add appropriate templates to hooks +$(2)_POST_PATCH_HOOKS += $(2)_OPENPOWER_PATCH_FILE +$(2)_PRE_BUILD_HOOKS += $(2)_OPENPOWER_VERSION_FILE + +# Top-level rule to print or generate a subpackage version +$(1)-version: $$(if $$(wildcard $$($(2)_VERSION_FILE)),$(1)-print-version,$(1)-build-version) + +# Rule to print out subpackage version +$(1)-print-version: + @echo "=== $(2)_VERSION ===" + @cat $$($(2)_VERSION_FILE) | xargs echo + +# Rule to generate subpackage version +$(1)-build-version: + @echo "=== $(2)_VERSION ===" + @echo " Searching for patches..." + @$$($(2)_OPENPOWER_PATCH_FILE) + @echo " End of patches..."; + @echo " Creating version string (various output may display)..." + @$$($(2)_OPENPOWER_VERSION_FILE) + @echo " End creating version string..." + @echo -n " version: "; cat $$($(2)_VERSION_FILE) | xargs echo + +endef + +define OPENPOWER_VERSION + +UPPER_CASE_PKG = $(call UPPERCASE,$(1)) +$$(UPPER_CASE_PKG)_VERSION_FILE = $$(OPENPOWER_VERSION_DIR)/$(1).version.txt + + +$$(eval $$(foreach pkg,$$(OPENPOWER_VERSIONED_SUBPACKAGES), \ + $$(call OPENPOWER_SUBPACKAGE_VERSION,$$(pkg),$$(call UPPERCASE,$$(pkg))))) + +### Combine subpackage files into one version file +define $$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE + +mkdir -p "$$(OPENPOWER_VERSION_DIR)" + +# Add vendor or default open-power +if [ "$$(OPBUILD_VENDOR)" != '' ]; then \ +echo -n "$$(OPBUILD_VENDOR)-" > $$($$(UPPER_CASE_PKG)_VERSION_FILE); \ +else \ +echo -n "open-power-" > $$($$(UPPER_CASE_PKG)_VERSION_FILE); \ +fi + +# Add platform or default from defconfig +if [ "$$(OPBUILD_PLATFORM)" != '' ]; then \ +echo -n "$$(OPBUILD_PLATFORM)-" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \ +else \ +echo -n "$$(BR2_OPENPOWER_CONFIG_NAME)-" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \ +fi + +# Add op-build version +# Order: OPBUILD_VERSION, tag, commit, unknown +if [ "$$(OPBUILD_VERSION)" != '' ]; then \ + echo -n "$$(OPBUILD_VERSION)" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \ +else \ +cd "$$(BR2_EXTERNAL)"; (git describe --tags || git log -n1 --pretty=format:'%h' || echo "unknown") \ + | sed 's/\(.*\)-g\([0-9a-f]\{7\}\).*/\2/' | xargs echo -n \ + >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \ +fi + +# Check if op-build is dirty +cd "$$(BR2_EXTERNAL)"; git describe --all --dirty | grep -e "-dirty" | sed 's/.*\(-dirty\)/\1/' | \ + xargs echo -n >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); + +# Add new line to $$($$(UPPER_CASE_PKG)_VERSION_FILE) +echo "" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); + +# Combing subpackage version files into $$($$(UPPER_CASE_PKG)_VERSION_FILE) +$$(foreach verFile,$$(ALL_SUBPACKAGE_VERSIONS), + if [ -f $$(verFile) ]; then cat $$(verFile) \ + >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); fi ) + +endef ### + +$$(UPPER_CASE_PKG)_PRE_BUILD_HOOKS += $$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE + +# Top-level rule to print or generate openpower-pnor version +$(1)-version: $$(if $$(wildcard $$($$(UPPER_CASE_PKG)_VERSION_FILE)),$(1)-print-version,$(1)-build-version) + +# Rule to print out pnor version +$(1)-print-version: + @echo "=== $$(UPPER_CASE_PKG)_VERSION ===" + @cat $$($$(UPPER_CASE_PKG)_VERSION_FILE) + @echo ""; echo "**See openpower/package/VERSION.readme for detailed info on package strings"; echo "" + + +# Rule to generate pnor version +$(1)-build-version: $$(foreach pkg,$$(OPENPOWER_VERSIONED_SUBPACKAGES), $$(pkg)-version) + @$$($$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE) + @echo "=== $$(UPPER_CASE_PKG)_VERSION ===" + @cat $$($$(UPPER_CASE_PKG)_VERSION_FILE) + @echo ""; echo "**See openpower/package/VERSION.readme for detailed info on package strings"; echo "" + +endef |