Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8b8689a9f | ||
|
|
1150400339 | ||
|
|
96aea948c6 | ||
|
|
d77389c076 | ||
|
|
7f850e3f83 | ||
|
|
51350fcd6a | ||
|
|
de287acce5 | ||
|
|
719ba879a8 | ||
|
|
ef4e5de217 | ||
|
|
5064bcac1a | ||
|
|
d2059a76ad | ||
|
|
a37d680997 | ||
|
|
64773dd26f | ||
|
|
48be5bd710 | ||
|
|
1d436e3bb3 | ||
|
|
eb67611896 | ||
|
|
b37cd9ce26 | ||
|
|
1602f4c577 | ||
|
|
c3d0283c96 | ||
|
|
5a38e3f820 | ||
|
|
85ba4de8b0 | ||
|
|
769b81ad69 | ||
|
|
d4aec84493 | ||
|
|
78bbac517c | ||
|
|
bc66e85636 | ||
|
|
8e65cd93dc | ||
|
|
d009183a38 | ||
|
|
fa00aadcf3 | ||
|
|
d94cd2f90d | ||
|
|
98dd811d8c | ||
|
|
91d22ebe2f | ||
|
|
58abcf917a | ||
|
|
b1ee46279d | ||
|
|
4b0b8e2170 | ||
|
|
0befcc5bcf | ||
|
|
ea95ba08e2 | ||
|
|
b650340b8b | ||
|
|
17378ae351 | ||
|
|
c8727203d0 | ||
|
|
ac4673868c | ||
|
|
a2b97d056e | ||
|
|
e13f3cd10f | ||
|
|
9ea03296a1 | ||
|
|
30b2f90207 | ||
|
|
301ca92cf2 | ||
|
|
976f865ff4 | ||
|
|
e7326b3815 | ||
|
|
571ac807d7 | ||
|
|
91b223774b | ||
|
|
91e95723fe | ||
|
|
4101b947f2 | ||
|
|
d1231ef0d6 | ||
|
|
db350bdc75 | ||
|
|
424b8c37ae | ||
|
|
deb4d4cbaf | ||
|
|
0f943b2b68 | ||
|
|
95d496296e | ||
|
|
af885d09b8 | ||
|
|
9686ba2280 | ||
|
|
aecf26fbb9 | ||
|
|
cfee61a908 | ||
|
|
bfdc9635eb | ||
|
|
d892268952 | ||
|
|
5ff2a58401 | ||
|
|
c4cff77947 | ||
|
|
b921acb284 | ||
|
|
bbbf4249e7 | ||
|
|
286335bb99 | ||
|
|
5bd0240c4f | ||
|
|
89c6e67a32 | ||
|
|
87dd733679 | ||
|
|
a7fd523488 | ||
|
|
3fc5c85d4b | ||
|
|
62d1428b2b | ||
|
|
be00d9fab5 | ||
|
|
688abe475a | ||
|
|
d3fea168e9 | ||
|
|
1f51b27e0a | ||
|
|
663ac3641c | ||
|
|
39e4e54d95 | ||
|
|
229959f4f3 | ||
|
|
76b5614560 | ||
|
|
d922192fd4 | ||
|
|
f4f8322a80 | ||
|
|
5b9da095dc | ||
|
|
86687ea518 | ||
|
|
d206a1f8b7 | ||
|
|
83ad298c39 | ||
|
|
a0683cf7e5 | ||
|
|
72af1720a8 | ||
|
|
000534f74b | ||
|
|
00c895fc64 | ||
|
|
4699b3dcdf | ||
|
|
d27b779b30 | ||
|
|
8f0dbac9cb | ||
|
|
3ba0f3bf83 | ||
|
|
854c95feb9 | ||
|
|
06e8d24ebc | ||
|
|
1215128c3d | ||
|
|
81bec68ca9 | ||
|
|
c77141ca6f | ||
|
|
7ca797f3a5 | ||
|
|
fa4f1c8479 | ||
|
|
1f3a810554 | ||
|
|
ebc98bf5be | ||
|
|
1d744e5b54 | ||
|
|
a7bfaf09d0 | ||
|
|
7802ac31f7 | ||
|
|
9efefc74b9 | ||
|
|
f6c4430870 | ||
|
|
3206f48898 | ||
|
|
88c37b53fe | ||
|
|
1907e0f062 | ||
|
|
bcd2162311 | ||
|
|
1afa2caeae | ||
|
|
c5b2afa46d | ||
|
|
991c2247c5 | ||
|
|
0dc6f76d2f | ||
|
|
709f6e9c66 | ||
|
|
9cc760aeb9 | ||
|
|
1496406616 | ||
|
|
46a6157613 | ||
|
|
c629e52bff | ||
|
|
1f8950d056 | ||
|
|
c4cd20ce70 | ||
|
|
d141efa55d | ||
|
|
9d37207658 | ||
|
|
93cf9fc383 | ||
|
|
c0d873bc38 | ||
|
|
2835538c70 | ||
|
|
d5d0e5e003 |
@@ -1,16 +0,0 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Ignore skills that might be installed locally by a developer, to prevent
|
||||
# cluttering the output of `git status` and prevent people from accidentally
|
||||
# checking in locally installed skills.
|
||||
skills/*
|
||||
|
||||
# But don't ignore the ones that belong to this project and are checked in. As
|
||||
# we add skills that we intend to commit and make available to all project
|
||||
# developers, they must be individually added here if they don't start with
|
||||
# "osl-".
|
||||
!skills/osl-*/
|
||||
!skills/prepare-patch-release/
|
||||
!skills/release-notes-update/
|
||||
@@ -1,313 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# .agents/setup-agent — Set up AI coding tool integration for this repository.
|
||||
#
|
||||
# Creates the tool-specific symlinks and config files needed to use the shared
|
||||
# resources in AGENTS.md and .agents/ with your preferred AI coding assistant.
|
||||
# Run "setup-agent <tool>" once after cloning; re-running is always safe.
|
||||
#
|
||||
# The canonical project instructions live in AGENTS.md (root) and skills live
|
||||
# in .agents/skills/<name>/SKILL.md. Everything tool-specific is either a
|
||||
# symlink into those locations, or a thin wrapper that references them.
|
||||
# Tool-specific directories (.claude/, .cursor/, etc.) are git-ignored so that
|
||||
# each developer runs this script for the tool they actually use.
|
||||
#
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# TOOL STRATEGIES (update this section when tool conventions change)
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
#
|
||||
# CLAUDE CODE
|
||||
# Reads: .claude/CLAUDE.md (project) or CLAUDE.md (root) — NOT AGENTS.md natively.
|
||||
# If Anthropic eventually adds native AGENTS.md support, the
|
||||
# .claude/CLAUDE.md wrapper can be retired.
|
||||
# Skills: .claude/skills/ (each subdirectory is a skill)
|
||||
# Setup: Write .claude/CLAUDE.md containing "@AGENTS.md" (Claude's include
|
||||
# syntax), symlink .claude/skills -> ../.agents/skills.
|
||||
# Docs: https://docs.anthropic.com/en/docs/claude-code/memory
|
||||
# https://docs.anthropic.com/en/docs/claude-code/skills
|
||||
#
|
||||
# OPENAI CODEX
|
||||
# Reads: AGENTS.md natively — no wrapper needed.
|
||||
# Skills: .agents/skills/ natively, and also .codex/skills/ as a fallback.
|
||||
# Setup: Symlink .codex/skills -> ../.agents/skills so either path works.
|
||||
# Docs: https://developers.openai.com/codex/guides/agents-md
|
||||
# https://developers.openai.com/codex/skills
|
||||
#
|
||||
# CURSOR
|
||||
# Reads: .cursor/rules/*.mdc files — does NOT read AGENTS.md natively.
|
||||
# If Cursor adds native AGENTS.md support, the rules symlink can be
|
||||
# retired.
|
||||
# Skills: Cursor uses a different slash-command mechanism; .agents/skills/
|
||||
# are not directly usable today, but the convention may change.
|
||||
# Setup: Symlink .cursor/rules/project.mdc -> ../../AGENTS.md so Cursor
|
||||
# picks up our instructions as a project rule.
|
||||
# Docs: https://docs.cursor.com/context/rules-for-ai
|
||||
# https://docs.cursor.com/cmdk/overview
|
||||
#
|
||||
# OPENCODE
|
||||
# Reads: AGENTS.md natively — no wrapper needed.
|
||||
# Skills: Documented to read .agents/skills/ natively, but in practice also
|
||||
# requires .opencode/commands/<name>.md symlinks (as of 2025-05).
|
||||
# Remove the per-command symlinks once opencode reliably finds
|
||||
# .agents/skills/ on its own.
|
||||
# Setup: Symlink .opencode/skills -> ../.agents/skills (future-proof),
|
||||
# plus individual .opencode/commands/<name>.md -> skill SKILL.md
|
||||
# files (current workaround).
|
||||
# Docs: https://opencode.ai/docs/configuration
|
||||
# https://opencode.ai/docs/skills
|
||||
#
|
||||
# GITHUB COPILOT
|
||||
# Reads: AGENTS.md natively (VS Code Copilot ≥ 1.99 / GitHub Copilot Chat).
|
||||
# Also reads .github/copilot-instructions.md as a fallback for older
|
||||
# clients or non-VS Code surfaces.
|
||||
# Skills: .agents/skills/ natively supported.
|
||||
# Setup: Symlink .github/copilot-instructions.md -> ../AGENTS.md so older
|
||||
# clients also receive our instructions. Remove once all Copilot
|
||||
# surfaces reliably pick up AGENTS.md directly.
|
||||
# Docs: https://code.visualstudio.com/docs/copilot/customization/custom-instructions
|
||||
# https://docs.github.com/en/copilot/concepts/about-prompting-copilot
|
||||
# https://docs.github.com/en/copilot/concepts/agents/about-agent-skills
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
SKILLS_DIR=".agents/skills"
|
||||
SUPPORTED_TOOLS="claude codex cursor opencode copilot"
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
Usage: .agents/setup-agent <tool|all|clear|list> [tool...]
|
||||
|
||||
Commands:
|
||||
<tool> [...] Set up one or more tools
|
||||
all Set up all supported tools
|
||||
clear Remove all tool-specific setup created by this script
|
||||
clear <tool> Remove setup for one specific tool
|
||||
list List supported tools
|
||||
|
||||
Supported tools: $SUPPORTED_TOOLS
|
||||
|
||||
Examples:
|
||||
.agents/setup-agent claude
|
||||
.agents/setup-agent claude cursor
|
||||
.agents/setup-agent all
|
||||
.agents/setup-agent clear
|
||||
.agents/setup-agent clear opencode
|
||||
EOF
|
||||
}
|
||||
|
||||
rel() { echo "${1#"$REPO_ROOT"/}"; }
|
||||
|
||||
# Create a symlink only if the path doesn't already exist.
|
||||
# Silent if the link already points to the correct target.
|
||||
safe_symlink() {
|
||||
local link="$1" target="$2"
|
||||
if [ -L "$link" ] && [ "$(readlink "$link")" = "$target" ]; then
|
||||
return 0
|
||||
elif [ -e "$link" ] || [ -L "$link" ]; then
|
||||
echo " SKIP (already exists): $(rel "$link")"
|
||||
return 0
|
||||
fi
|
||||
mkdir -p "$(dirname "$link")"
|
||||
ln -s "$target" "$link"
|
||||
echo " LINK: $(rel "$link") -> $target"
|
||||
}
|
||||
|
||||
# Write a file only if the path doesn't already exist.
|
||||
safe_write() {
|
||||
local file="$1"
|
||||
shift
|
||||
local content="$*"
|
||||
if [ -e "$file" ]; then
|
||||
echo " SKIP (already exists): $(rel "$file")"
|
||||
return 0
|
||||
fi
|
||||
mkdir -p "$(dirname "$file")"
|
||||
printf '%s\n' "$content" > "$file"
|
||||
echo " FILE: $(rel "$file")"
|
||||
}
|
||||
|
||||
# Remove a symlink only if it still points to the expected target.
|
||||
safe_remove_symlink() {
|
||||
local link="$1" expected_target="$2"
|
||||
[ ! -L "$link" ] && return 0
|
||||
if [ "$(readlink "$link")" = "$expected_target" ]; then
|
||||
rm "$link"
|
||||
echo " REMOVED: $(rel "$link")"
|
||||
else
|
||||
echo " SKIP (modified, not removing): $(rel "$link")"
|
||||
fi
|
||||
}
|
||||
|
||||
# Remove a file only if its content still matches what we wrote.
|
||||
safe_remove_file() {
|
||||
local file="$1"
|
||||
shift
|
||||
local expected="$*"
|
||||
[ ! -f "$file" ] || [ -L "$file" ] && return 0
|
||||
if [ "$(cat "$file")" = "$expected" ]; then
|
||||
rm "$file"
|
||||
echo " REMOVED: $(rel "$file")"
|
||||
else
|
||||
echo " SKIP (modified, not removing): $(rel "$file")"
|
||||
fi
|
||||
}
|
||||
|
||||
try_rmdir() { rmdir "$1" 2>/dev/null && echo " RMDIR: $(rel "$1")" || true; }
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Common (tool-agnostic project setup)
|
||||
#------------------------------------------------------------------------------
|
||||
setup_common() {
|
||||
echo "Setting up common project infrastructure..."
|
||||
# specs/ at the project root is a symlink into docs/dev/specs/ so that
|
||||
# speckit bash scripts find the directory where they expect it, while the
|
||||
# actual specs are committed under docs/dev/specs/ and are not cluttered
|
||||
# at the project root for developers who don't use agents.
|
||||
safe_symlink "$REPO_ROOT/specs" "docs/dev/specs"
|
||||
}
|
||||
clear_common() {
|
||||
echo "Removing common project infrastructure..."
|
||||
safe_remove_symlink "$REPO_ROOT/specs" "docs/dev/specs"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Claude Code (.claude/)
|
||||
#------------------------------------------------------------------------------
|
||||
setup_claude() {
|
||||
echo "Setting up Claude Code..."
|
||||
safe_write "$REPO_ROOT/.claude/CLAUDE.md" "@AGENTS.md"
|
||||
safe_symlink "$REPO_ROOT/.claude/skills" "../.agents/skills"
|
||||
safe_write "$REPO_ROOT/.claude/.gitignore" "settings.local.json"
|
||||
}
|
||||
clear_claude() {
|
||||
echo "Removing Claude Code setup..."
|
||||
safe_remove_file "$REPO_ROOT/.claude/CLAUDE.md" "@AGENTS.md"
|
||||
safe_remove_symlink "$REPO_ROOT/.claude/skills" "../.agents/skills"
|
||||
safe_remove_file "$REPO_ROOT/.claude/.gitignore" "settings.local.json"
|
||||
try_rmdir "$REPO_ROOT/.claude"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# OpenAI Codex (.codex/)
|
||||
#------------------------------------------------------------------------------
|
||||
setup_codex() {
|
||||
echo "Setting up OpenAI Codex..."
|
||||
safe_symlink "$REPO_ROOT/.codex/skills" "../.agents/skills"
|
||||
safe_write "$REPO_ROOT/.codex/.gitignore" "*.log"
|
||||
}
|
||||
clear_codex() {
|
||||
echo "Removing OpenAI Codex setup..."
|
||||
safe_remove_symlink "$REPO_ROOT/.codex/skills" "../.agents/skills"
|
||||
safe_remove_file "$REPO_ROOT/.codex/.gitignore" "*.log"
|
||||
try_rmdir "$REPO_ROOT/.codex"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Cursor (.cursor/)
|
||||
#------------------------------------------------------------------------------
|
||||
setup_cursor() {
|
||||
echo "Setting up Cursor..."
|
||||
safe_symlink "$REPO_ROOT/.cursor/rules/project.mdc" "../../AGENTS.md"
|
||||
safe_write "$REPO_ROOT/.cursor/.gitignore" "$(printf 'composer/\nchat/')"
|
||||
}
|
||||
clear_cursor() {
|
||||
echo "Removing Cursor setup..."
|
||||
safe_remove_symlink "$REPO_ROOT/.cursor/rules/project.mdc" "../../AGENTS.md"
|
||||
safe_remove_file "$REPO_ROOT/.cursor/.gitignore" "$(printf 'composer/\nchat/')"
|
||||
try_rmdir "$REPO_ROOT/.cursor/rules"
|
||||
try_rmdir "$REPO_ROOT/.cursor"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Opencode (.opencode/)
|
||||
#------------------------------------------------------------------------------
|
||||
OPENCODE_GITIGNORE="$(printf 'node_modules\npackage.json\npackage-lock.json\nbun.lock')"
|
||||
|
||||
setup_opencode() {
|
||||
echo "Setting up Opencode..."
|
||||
safe_symlink "$REPO_ROOT/.opencode/skills" "../.agents/skills"
|
||||
safe_write "$REPO_ROOT/.opencode/.gitignore" "$OPENCODE_GITIGNORE"
|
||||
# Individual command links (needed in practice despite docs implying otherwise)
|
||||
for skill_dir in "$REPO_ROOT/$SKILLS_DIR"/*/; do
|
||||
[ -d "$skill_dir" ] || continue
|
||||
local skill_name
|
||||
skill_name="$(basename "$skill_dir")"
|
||||
safe_symlink "$REPO_ROOT/.opencode/commands/${skill_name}.md" \
|
||||
"../../$SKILLS_DIR/${skill_name}/SKILL.md"
|
||||
done
|
||||
}
|
||||
clear_opencode() {
|
||||
echo "Removing Opencode setup..."
|
||||
safe_remove_symlink "$REPO_ROOT/.opencode/skills" "../.agents/skills"
|
||||
safe_remove_file "$REPO_ROOT/.opencode/.gitignore" "$OPENCODE_GITIGNORE"
|
||||
for skill_dir in "$REPO_ROOT/$SKILLS_DIR"/*/; do
|
||||
[ -d "$skill_dir" ] || continue
|
||||
local skill_name
|
||||
skill_name="$(basename "$skill_dir")"
|
||||
safe_remove_symlink "$REPO_ROOT/.opencode/commands/${skill_name}.md" \
|
||||
"../../$SKILLS_DIR/${skill_name}/SKILL.md"
|
||||
done
|
||||
try_rmdir "$REPO_ROOT/.opencode/commands"
|
||||
try_rmdir "$REPO_ROOT/.opencode"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# GitHub Copilot (.github/copilot-instructions.md)
|
||||
# Copilot natively reads AGENTS.md, but also checks copilot-instructions.md.
|
||||
#------------------------------------------------------------------------------
|
||||
setup_copilot() {
|
||||
echo "Setting up GitHub Copilot..."
|
||||
safe_symlink "$REPO_ROOT/.github/copilot-instructions.md" "../AGENTS.md"
|
||||
}
|
||||
clear_copilot() {
|
||||
echo "Removing GitHub Copilot setup..."
|
||||
safe_remove_symlink "$REPO_ROOT/.github/copilot-instructions.md" "../AGENTS.md"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Dispatch
|
||||
#------------------------------------------------------------------------------
|
||||
run_tool() {
|
||||
local action="$1" tool="$2"
|
||||
case "$tool" in
|
||||
claude) "${action}_claude" ;;
|
||||
codex) "${action}_codex" ;;
|
||||
cursor) "${action}_cursor" ;;
|
||||
opencode) "${action}_opencode" ;;
|
||||
copilot) "${action}_copilot" ;;
|
||||
*)
|
||||
echo "Unknown tool: $tool (supported: $SUPPORTED_TOOLS)" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
[ $# -eq 0 ] && { usage; exit 0; }
|
||||
|
||||
case "$1" in
|
||||
all)
|
||||
setup_common
|
||||
for t in $SUPPORTED_TOOLS; do run_tool setup "$t"; done
|
||||
;;
|
||||
clear)
|
||||
shift
|
||||
if [ $# -eq 0 ]; then
|
||||
for t in $SUPPORTED_TOOLS; do run_tool clear "$t"; done
|
||||
clear_common
|
||||
else
|
||||
for t in "$@"; do run_tool clear "$t"; done
|
||||
fi
|
||||
;;
|
||||
list)
|
||||
echo "Supported tools: $SUPPORTED_TOOLS"
|
||||
;;
|
||||
-h|--help|help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
setup_common
|
||||
for t in "$@"; do run_tool setup "$t"; done
|
||||
;;
|
||||
esac
|
||||
@@ -1,103 +0,0 @@
|
||||
---
|
||||
name: prepare-patch-release
|
||||
description: Do all the tasks needed for a patch release of the project.argument-hint: [new-version]
|
||||
---
|
||||
|
||||
Do all the tasks needed for a patch release of the project. These patch
|
||||
releases generally happen on the first day of every month.
|
||||
|
||||
Arguments: `$ARGUMENTS`
|
||||
- First argument (optional): the version of the upcoming release we are
|
||||
preparing. If omitted, find the most recent tag on this branch, and the
|
||||
new version will update the third portion of the version. It might be
|
||||
either a version number (like `3.1.4.0`) or a tag (like `v3.1.4.0`).
|
||||
|
||||
Hint: The numeric "version" is a four-part numeric deignation with the pattern
|
||||
`MAJOR.MINOR.PATCH.TWEAK`. The "version tag" is usually the numeric version
|
||||
with a "v" prepended, for example, `v3.1.4.0`.
|
||||
|
||||
## Steps and Checklist
|
||||
|
||||
- [ ] Determine the version of the new release.
|
||||
- [ ] Update the main @CMakeLists.txt.
|
||||
- [ ] Use the "release-notes-update" skill to update @CHANGES.md.
|
||||
- [ ] Review the release notes to ensure that the changes do not deprecate any
|
||||
API calls or break API or ABI backward-compatibility, or remove support
|
||||
for any dependency or toolchain versions. If you think these rules are
|
||||
being violated, ask for confirmation.
|
||||
- [ ] Review @README.md for changes.
|
||||
- [ ] Review @INSTALL.md for changes.
|
||||
- [ ] Review @CREDITS.md for changes.
|
||||
- [ ] Review @SECURITY.md for changes.
|
||||
|
||||
## Steps to determine the versions of the last and new releases.
|
||||
|
||||
1. **Determine the previous tag** if not provided by looking at the
|
||||
most recent git tag in the current branch, and deducing the 4-part
|
||||
version number from that.
|
||||
2. The assumed new version for a patch release has the same major and minor
|
||||
numbers, the patch number is incremented by one since the last tag, and the
|
||||
tweak number is "0".
|
||||
3. If no optional version was present in the arguments, use the assumed new
|
||||
version.
|
||||
4. If a version was supplied in the arguments, double check that it differs
|
||||
from the last tag as explained above. If it does not, ask for verification
|
||||
that the version requested is correct before proceeding.
|
||||
|
||||
## Steps to update CMakeLists.txt
|
||||
|
||||
1. In the main @CMakeLists.txt, alter the version to that of the new release,
|
||||
if it isn't already the same.
|
||||
2. For a patch release, ensure that `${PROJECT_NAME}_SUPPORTED_RELEASE` should
|
||||
be set to ON. In main (not yet a supported release) it shold be OFF. If you
|
||||
find these to not be as expected, ask for confirmation of whether to fix.
|
||||
3. For a patch release, `PROJECT_VERSEION_RELEASE_TYPE` should be set to empty
|
||||
(""). In main, it will typically be "dev", "beta", or other designations.
|
||||
If you find these to not be as expected, ask for confirmation of whether to
|
||||
fix.
|
||||
|
||||
## Reviewing README.md
|
||||
|
||||
If this release added support for any new image file formats, be sure that
|
||||
README.md mentions them in its list of image formats supported.
|
||||
|
||||
## Reviewing INSTALL.md
|
||||
|
||||
If any of the new commits (as described in the release notes for this version)
|
||||
appear to add dependencies, or add support for new versions of dependencies,
|
||||
be sure that INSTALL.md is updated to include that dependency (if not already
|
||||
listed among the required and optional dependencies), and reflects the latest
|
||||
version that we claim to support.
|
||||
|
||||
Double check @externalpackages.cmake and ensure that any minimum required
|
||||
versions of dependencies that cmake will enforce match the oldest versions
|
||||
of those dependencies as documentd in INSTALL.md.
|
||||
|
||||
## Reviewing CREDITS.md
|
||||
|
||||
The @CREDITS.md file lists all known contributors to the project, sorted alpha
|
||||
by first name. In cases where an author's actual name is unknown, we use the
|
||||
GitHub userid.
|
||||
|
||||
Ensure that any authors referenced in the new release notes for the version we
|
||||
are releasing are inserted in the credit list, if they are not already
|
||||
present. You don't need to check older versions, we presume those have already
|
||||
been included.
|
||||
|
||||
## Reviewing SECURITY.md
|
||||
|
||||
The @SECURITY.md file lists which versions are currently supported at what
|
||||
levels, and lists all previously-fixed SVE's or security advisories. Be sure
|
||||
to check this file in older branches (the last two releases, say), and if you
|
||||
are preparing a patch release, also check in main and more recent (higher
|
||||
numbered) releases for more recently modified SECURITY.md, and be sure that
|
||||
this branch gets amended with any information that seems to have been updated
|
||||
more recently in those other branches. Check whichever is newer of the local
|
||||
and remote copy of that branch, since the local one may have had release notes
|
||||
or its version in CMakeLists.txt updated, but not yet pushed to GitHub.
|
||||
|
||||
|
||||
## Reference
|
||||
|
||||
- Full release procedures: `docs/dev/RELEASING.md`
|
||||
- Steps for updating release notes: `release-notes-update/SKILL.md`
|
||||
@@ -1,217 +0,0 @@
|
||||
---
|
||||
name: release-notes-update
|
||||
description: Generate or update release notes for a patch, minor, or major release, or just to update main. Run git-cliff, organize and edit the output per project conventions, and insert into CHANGES.md.
|
||||
argument-hint: [patch|minor|major|main] [prev-tag]
|
||||
---
|
||||
|
||||
Generate release notes for an OSL release.
|
||||
|
||||
Arguments: `$ARGUMENTS`
|
||||
- First argument (optional): release type — `patch` (default), `minor`, `major`, or `main`.
|
||||
- Second argument (optional): previous release tag (e.g. `v3.1.2.0`). If omitted, find the most recent tag automatically. If the release type is `main`, instead of a tag, look for the last commit at which the CHANGES.md file was updated.
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Determine the previous tag** if not provided:
|
||||
```
|
||||
git describe --tags --abbrev=0
|
||||
```
|
||||
or look at recent tags: `git tag --sort=-version:refname | head -10`.
|
||||
However, if the "release type" is `main`, instead of a tag, just find
|
||||
the commit at which CHANGES.md was last updated.
|
||||
|
||||
2. **Run git-cliff** to get raw commit data:
|
||||
```
|
||||
git cliff -c src/doc/cliff.toml <prev-tag>..HEAD > /tmp/cliff-out.md
|
||||
```
|
||||
Read `/tmp/cliff-out.md` to see the raw output.
|
||||
|
||||
3. **Read CHANGES.md** to see the current top of the file and understand where to insert.
|
||||
|
||||
4. **Format the release notes** according to the release type:
|
||||
|
||||
### For patch releases:
|
||||
|
||||
Follow the skeleton in `docs/dev/Changes-skeleton-patch.md`:
|
||||
|
||||
```
|
||||
Release X.Y.Z.W (Month DD, YYYY) -- compared to X.Y.Z.W-1
|
||||
---------------------------------------------------------
|
||||
- *category*: Description. [#NNNN](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/NNNN) (by author)
|
||||
```
|
||||
|
||||
Rules:
|
||||
- **Remove** the section headings git-cliff generates; patch notes are a flat
|
||||
list.
|
||||
- **Add conventional commit prefixes** to any "uncategorized" entries (those
|
||||
lacking a `feat:`, `fix:`, etc. prefix).
|
||||
- **Reorder** entries logically: feature enhancements first, then bug fixes,
|
||||
then build/CI fixes, then internal changes, then test improvements, then
|
||||
docs/admin.
|
||||
- **Omit** entries that are purely internal and too minor to matter to users.
|
||||
Ask for confirmation about entries you propose to omit.
|
||||
- Prefer to use author's actual name if known. If the name cannot be found,
|
||||
the GitHub userid can be used instead.
|
||||
- Omit the author if it is the project leader, Larry Gritz, unless he is not
|
||||
the dominant author (at least 75% of commits) in this release.
|
||||
- Keep entries to one line each. Be terse but informative.
|
||||
- Use the format `*subsystem*:` for the category prefix (e.g., back end target
|
||||
such as `*optix*:` or `*batch*:`, utility like `*testrender*:` or
|
||||
`*osltoy*:`, class or API category like `*ShadingSystem*:`, or topic
|
||||
category such as `*build*:`, `*ci*:`, `*docs*:`).
|
||||
- We aim to make patch releases on the first day of each month. If we are
|
||||
within a few days of a month end, list the date as the beginning of the
|
||||
upcoming month. Ask for confirmation that this is the planned release date.
|
||||
|
||||
|
||||
### For minor or major releases:
|
||||
|
||||
Follow the skeleton in `docs/dev/Changes-skeleton-major.md`. Sections:
|
||||
|
||||
```
|
||||
Release X.Y.0.0 (Month, YYYY) -- compared to X.Y-1
|
||||
--------------------------------------------------
|
||||
|
||||
### New minimum dependencies, toolchain, and compatibility changes:
|
||||
### ✏️ OSL Language, standard library, and oslc compiler (for shader writers):
|
||||
### ⛰️ API changes and new ShadingSystem features (for renderer writers):
|
||||
### ☀️ testshade/testrender/osltoy improvements
|
||||
### 🐛/🔧 Internals: fixes, improvements, and developer concerns
|
||||
### 🏗 Build/test/CI and platform ports
|
||||
* CMake build system and scripts:
|
||||
* Dependency and platform support:
|
||||
* Testing and Continuous integration (CI) systems:
|
||||
### 📚 Notable documentation changes:
|
||||
### 🏢 Project Administration
|
||||
### 🤝 Contributors
|
||||
```
|
||||
|
||||
Note that the section outline may already be present, in which case you
|
||||
only need to fit items into the existing category outline.
|
||||
|
||||
Rules:
|
||||
- Group commits into sections; within each section, cluster related items together.
|
||||
- When needed, expand terse one-liners into enough prose that users understand what changed and why it matters.
|
||||
- For `feat:` commits, make sure the feature is explained sufficiently — don't just copy the commit subject.
|
||||
- For `api:` or `api!:` commits, clearly call out what changed in the public API.
|
||||
- Include PR links and author attribution for every entry.
|
||||
- The notes should "tell the story" of the release, not just be a dump of commit subjects.
|
||||
- We aim to make major/minor releases approximately in October 1 of each year. If the anticipted release date is already in the file, don't change it. If it is not present, ask for confirmation of the planned release date.
|
||||
|
||||
### For updating release notes in main:
|
||||
|
||||
Rules:
|
||||
- Generally, follow the rules for "major/minor releases", except as noted in other items below.
|
||||
- Don't apply a new skeleton of category listings unless they are not present for the upcoming release.
|
||||
|
||||
5. **Insert the formatted notes** into `CHANGES.md` in the appropriate place (as detailed below). Leave the existing content intact.
|
||||
- When updating `main` or preparing a `major` or `minor` release, insert the updates in the top section for the upcoming major/minor release. Insert a new set of category sections only if it's not already present.
|
||||
- When doing a `patch` release, insert the changes immediately above the last patch release of that branch, so that CHANGES.md lists releases in descending numerical (version) order.
|
||||
- When porting a set of release notes from a release branch into main, or from an older (obsolete) release branch to the current release branch, insert it into the right place to maintain overall descending order.
|
||||
|
||||
6. **Double check that the notes are adequately descriptive.** (See more
|
||||
detailed description of this step below.)
|
||||
|
||||
7. **Forward-port release notes from release branches if needed**
|
||||
|
||||
8. **Show a summary** of what was inserted and ask the user to review before finalizing.
|
||||
|
||||
## Forward-porting release notes
|
||||
|
||||
Release notes may have been generated independently in main, and release
|
||||
branches. When updating one branch, we ensure that any changes from older
|
||||
branches have been incorporated.
|
||||
|
||||
- When preparing `patch` release notes, check the CHANGES.md file in the
|
||||
"dev-X.(Y-1)" branch for the previous minor release family to identify any
|
||||
X.(Y-1).Z patch release notes that are not reflected in the current release
|
||||
notes that we are updating.
|
||||
- When updating `main` or doing a `major` or `minor` release, check the
|
||||
CHANGES.md file in both the "dev-X.(Y-1)" and "dev-X.(Y-2)" branches.
|
||||
Check whichever is newer of the local and remote copy of that branch, since
|
||||
the local one may have had release notes or its version in CMakeLists.txt
|
||||
updated, but not yet pushed to GitHub.
|
||||
- If any patch releases are present in the older dev branches checked, insert
|
||||
the release notes for those patch releases into the right positions in the
|
||||
current release notes that we are updating.
|
||||
- If a change is forward-ported in this manner and the same PR is an update in
|
||||
the current set of changes we are updating as our main task, document that
|
||||
in the current set of notes using the following convention: in the line of
|
||||
the notes, the explanation of the version where it appears should reflect
|
||||
the first version of all branches where it appeared, for example, `(3.2.0.0,
|
||||
3.1.3.0, 3.0.8.0)` to indicate that the patch was added to each of those
|
||||
versions. The versions should be listed in descending order.
|
||||
|
||||
## Useful abbreviations for category labels
|
||||
|
||||
| Abbrev | Meaning |
|
||||
|--------|---------|
|
||||
| build | CMake/build system |
|
||||
| deps | Changes to accommodate dependency or toolchain changes |
|
||||
| ci | CI/GitHub Actions |
|
||||
| docs | documentation |
|
||||
| int | internal/refactor |
|
||||
| test | testsuite or unit tests |
|
||||
| HEADER.h | Developer utilities in a public header file |
|
||||
|
||||
## Combining PRs into single entries
|
||||
|
||||
To be more concise and easier to read, within a release's notes, related
|
||||
PRs/commits can be combined into a single bullet-point line, which would look
|
||||
like
|
||||
```
|
||||
- *category*: Combined Description. [#NNNN1](URL) (by author1) [#NNNN2](URL2) (by author2) [#NNNN2](URL2) (by author2)
|
||||
|
||||
```
|
||||
if fully combined, or if explained one by one,
|
||||
```
|
||||
- *category*: Description 1 [#NNNN1](URL) (by author1), amendment 2, [#NNNN2](URL2) (by author2), amendment 3, [#NNNN3](URL3) (by author3)
|
||||
```
|
||||
Choose the fully combined or explained one by one based on which is more clear
|
||||
to the reader.
|
||||
|
||||
If the authors are all the same, only have the author designation at the end.
|
||||
|
||||
Here are the cases where it's ok to combine commits in this way:
|
||||
- If it is clear that multiple PRs are part of the same feature or fix,
|
||||
consisting of an initial commit, and subsequent smaller changes or
|
||||
continuations of the same topic.
|
||||
- An initial commit, and a subsequent commit that is obviously a fix to a bug
|
||||
in the initial commit.
|
||||
- "CI" changes that all only add new cases to the test matrix.
|
||||
- "CI" changes that all only fix spontaneous breakages in the GitHub runners.
|
||||
- "Build" changes that are all just minor updates to versions of dependencies
|
||||
that we support or test against.
|
||||
|
||||
Some more examples of combined commit messages:
|
||||
|
||||
```
|
||||
- feat: Add GPS metadata functionality for TIFF [PR1](PR URL 1) [PR2](PR URL 2) [PR3](PR URL 3) (by author).
|
||||
- ci: New CI variants for MSVS 2026 [PR1](PR URL 1) (by author1), VFX Platform 2027 [PR2](PR URL 2) (by author2).
|
||||
- ci: Various fixes for unexpected changes to GitHub Actions runners [PR1](PR URL 1), [PR2](PR URL 2) (by author)
|
||||
- build: Added support for gcc 15 [PR1](PR URL 1) (by author1), OpenEXR 3.5.1 [PR2](PR URL 2) (by author2), libtiff 4.8 [PR3](PR URL 3) (by author3).
|
||||
```
|
||||
|
||||
Always ask for confirmation before combining commits in this manner. Confirm
|
||||
separately for each proposed combination of a group of multiple original
|
||||
commits into a single commit. Give the user the opportunity to revise the
|
||||
combined description or request other changes for the grouping.
|
||||
|
||||
## Double check that the notes are adequately descriptive
|
||||
|
||||
For newly added items for this release, read the short descriptions provided
|
||||
by git-cliff, double check them against the full commit messages to be sure
|
||||
the one-line summary is adequate. If the summary is misleading, too brief and
|
||||
leaving out the fact that an important thing was changed, or not adequately
|
||||
capturing the scope of changes, feel free to propose an alternate wording that
|
||||
will make it more clear to readers what changed as a result of the PR. Ask for
|
||||
confirmation on these and explain why you felt the one-line description wasn't
|
||||
enough.
|
||||
|
||||
## Reference
|
||||
|
||||
Full release procedures: `docs/dev/RELEASING.md`
|
||||
Patch skeleton: `docs/dev/Changes-skeleton-patch.md`
|
||||
Major skeleton: `docs/dev/Changes-skeleton-major.md`
|
||||
Example good patch notes: https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/releases/tag/v1.15.2.0
|
||||
Example good major/minor notes: https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/releases/tag/v1.15.0.0
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
Language: Cpp
|
||||
BasedOnStyle: WebKit
|
||||
SpaceBeforeParens: ControlStatements
|
||||
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
|
||||
@@ -6,43 +6,3 @@ bdb473cbdb119f3d9060d48f75f965cbd45f6d7a
|
||||
|
||||
# More clang-format: liboslquery, oslinfo, oslc, osl.imageio, osltoy (#1220)
|
||||
bf366d7a90c46599b82071dac6dbef7c5e3ca157
|
||||
|
||||
# Turn on clang-format for cpp files in testsuite (#1269)
|
||||
00c895fc642eb89685797c292048bdff15d675e7
|
||||
5e848fb761261521a3ee7cd8a4f6814f32fe4a47
|
||||
|
||||
# CI: Change our clang-format standard to clang11 (#1372)
|
||||
91d22ebe2f65d4ed0599e421172a15d99fe0e1b4
|
||||
|
||||
# More clang-format (this time, testrender and liboslnoise) (#1511)
|
||||
08706b7cbac781b6a9389780428016be985d9d89
|
||||
|
||||
# clang-format #1509
|
||||
b4026fd1695c08532557b3ba1c2142323087ccf9
|
||||
1f73b075c99861afa42fac44567b37f797bc72f2
|
||||
7f2e83794e6fa63d5180653cffb77be2cc38b32b
|
||||
28399fefc890442b5ac020e7a90cee0d5bf9f03c
|
||||
e56851056d33233b0bb8324faac251907099961a
|
||||
1c57fc61d8ab7c3f309be4335e4c71c26399edd4
|
||||
46d451ce74d00e904874df476ebeca19bb119ea9
|
||||
c1045f2c2845a98e661c7181932a031eb3c76063
|
||||
|
||||
# More clang-format (#1512)
|
||||
8c6ffdd911b9eb7db4adf41ab88891360452d7c5
|
||||
|
||||
# style: more clang-format (#1515)
|
||||
102430c83554fe7e328cd8c3317db00507bcfaba
|
||||
|
||||
# Revert some formatting (#1518)
|
||||
21eac9d9215d071b0a7b9ce2c32f189ed0c62c4a
|
||||
|
||||
# Another round of clang-format (#1540)
|
||||
38015b6be28643254aea530154b7860136cf5e15
|
||||
89d5db2b5c5fda79184d8245d903e580fc6a4e9c
|
||||
|
||||
# clang-format: the very last piece of the puzzle (#1555)
|
||||
4ee62cd2ef05543f818f4d95a19efc1d684a7381
|
||||
5be7c6bd4e7bd2e560cb6be8c06f11985384a87a
|
||||
|
||||
# Raise CI formatting standard to clang-format 17
|
||||
a9ce35135e6c022d538a4a184fee1b5ce908aed8
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<!--
|
||||
Please ask questions ("how do I...?" "why doesn't this work?") on the [osl-dev mail list](https://lists.aswf.io/g/osl-dev), not by filing issues.
|
||||
|
||||
Make concrete suggestions for fixing the code ("here is a patch") by filing
|
||||
a pull request, not an issue.
|
||||
-->
|
||||
|
||||
### Problem
|
||||
|
||||
<!-- Describe the problem or suggestion here.] -->
|
||||
|
||||
**Expected behavior:** <!-- What you expected to happen -->
|
||||
|
||||
**Actual behavior:** <!-- What actually happened -->
|
||||
|
||||
<!-- If your problem is a broken build, please create a -->
|
||||
<!-- [gist](https://gist.github.com) that contains the _full_ verbose -->
|
||||
<!-- build log, which you can create like this: -->
|
||||
<!-- ```make clean ; make VERBOSE=1 > build.log``` -->
|
||||
|
||||
<!-- If you are reporting a problem about a release branch, have you -->
|
||||
<!-- already tried the current head of `master` to see if the problem -->
|
||||
<!-- has been fixed? -->
|
||||
|
||||
|
||||
### Steps to Reproduce
|
||||
|
||||
1. [First Step]
|
||||
2. [Second Step]
|
||||
3. [and so on...]
|
||||
|
||||
|
||||
### Versions
|
||||
|
||||
* OSL branch/version:
|
||||
* OS:
|
||||
* C++ compiler:
|
||||
* LLVM version:
|
||||
* OIIO version:
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: I think I have identified a legit bug and can describe it.
|
||||
title: "[BUG]"
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Note: The prompts below are just to help you formulate a good and actionable
|
||||
request. Feel free to deviate from this format or to delete this text and
|
||||
write free-form if you prefer.
|
||||
|
||||
**Describe the bug**
|
||||
|
||||
A clear and concise description of what the bug is. What happened, and
|
||||
what did you expect to happen instead.
|
||||
|
||||
|
||||
**OSL version and dependencies**
|
||||
|
||||
* OSL branch/version:
|
||||
* OS:
|
||||
* C++ compiler:
|
||||
* LLVM version:
|
||||
* OIIO version:
|
||||
|
||||
|
||||
**To Reproduce**
|
||||
|
||||
Steps to reproduce the behavior:
|
||||
1. Do this...
|
||||
2. Then this...
|
||||
3. Then THIS happens (reproduce the exact error message if you can)
|
||||
4. Whereas I expected this other specific thing to happen instead.
|
||||
|
||||
|
||||
**Evidence**
|
||||
|
||||
- Error messages (paste them here exactly)
|
||||
- Example shader code (if applicable)
|
||||
|
||||
|
||||
**IF YOU ALREADY HAVE A CODE FIX:** There is no need to file a separate issue,
|
||||
please just go straight to making a [pull request](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pulls).
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
name: Build problems
|
||||
about: I'm having trouble building OSL. Help!
|
||||
title: "[BUILD]"
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**PLEASE DO NOT REPORT BUILD TROUBLES AS GITHUB "ISSUES" UNLESS YOU ARE RALLY SURE IT'S A BUG**
|
||||
|
||||
The best way to get help with your build problems is to ask a question on the
|
||||
[osl-dev developer mail list](https://lists.aswf.io/g/osl-dev). For quick
|
||||
questions, you could also try the [ASWF Slack](https://slack.aswf.io)
|
||||
`#openshadinglanguage` channel.
|
||||
|
||||
When you email about this, please attach one or both of the following:
|
||||
1. The full verbose build log, which you can create like this:
|
||||
```make clean ; make VERBOSE=1 > build.log```
|
||||
2. The `CMakeCache.txt` file from your build directory.
|
||||
|
||||
If you are pretty sure that you have identified a **BUG** or other actual
|
||||
problem with the OSL build scripts and you can describe how to reproduce it,
|
||||
please file a [bug report issue](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/issues/new?template=bug_report.md).
|
||||
@@ -1,25 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: I have a concrete idea about how to improve OSL.
|
||||
title: "[FEATURE REQUEST]"
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Note: The prompts below are just to help you formulate a good and actionable
|
||||
request. Feel free to deviate from this format or to delete this text and
|
||||
write free-form if you prefer.
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the feature request here.
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
name: Question
|
||||
about: How do I... I need help with...
|
||||
title: "[HELP]"
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**PLEASE DO NOT ASK USAGE QUESTIONS USING GITHUB "ISSUES"**
|
||||
|
||||
If you are pretty sure that you have identified a **BUG** in OSL, please file
|
||||
a [bug report issue](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/issues/new?template=bug_report.md).
|
||||
|
||||
But if you are just asking a question:
|
||||
* How do I...?
|
||||
* I need help with...
|
||||
* Am I doing something wrong?
|
||||
* I can't build OSL
|
||||
|
||||
For anything of this nature, the best way to get help using OSL is to ask a
|
||||
question on the [osl-dev developer mail list](https://lists.aswf.io/g/osl-dev).
|
||||
For quick questions, you could also try the [ASWF Slack](https://slack.aswf.io) `#openshadinglanguage` channel.
|
||||
|
||||
Please check the [documentation](https://docs.openshadinglanguage.org) first;
|
||||
you may find the answer more quickly than you can get your question answered
|
||||
on the mail list.
|
||||
|
||||
@@ -1,46 +1,22 @@
|
||||
|
||||
|
||||
|
||||
------ :scissors: -------------------------------------------------------------------
|
||||
|
||||
YOU MAY DELETE ALL OF THIS IF YOU ALREADY HAVE A DESCRIPTIVE COMMIT MESSAGE!
|
||||
|
||||
This is just a template and set of reminders about what constitutes a good PR.
|
||||
But please look over the checklist at the bottom.
|
||||
|
||||
If THIS TEXT is still in your PR description, we'll know you didn't read the
|
||||
instructions!
|
||||
|
||||
|
||||
|
||||
|
||||
### Description
|
||||
## Description
|
||||
|
||||
<!-- Please provide a description of what this PR is meant to fix, and -->
|
||||
<!-- how it works (if it's not going to be very clear from the code). -->
|
||||
|
||||
### Tests
|
||||
## Tests
|
||||
|
||||
<!-- Did you / should you add a testsuite case (new test, or add to an -->
|
||||
<!-- existing test) to verify that this works? -->
|
||||
|
||||
|
||||
### Checklist:
|
||||
## Checklist:
|
||||
|
||||
<!-- Put an 'x' in the boxes as you complete the checklist items -->
|
||||
|
||||
- [ ] **I have read the guidelines** on [contributions](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/CONTRIBUTING.md) and [code review procedures](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/docs/dev/CodeReview.md).
|
||||
- [ ] **I have read the [Policy on AI Coding Assistants](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/docs/dev/AI_Policy.md)**
|
||||
and if I used AI coding assistants, I have an `Assisted-by: TOOL / MODEL`
|
||||
line in the pull request description above.
|
||||
- [ ] **I have updated the documentation** if my PR adds features or changes
|
||||
behavior.
|
||||
- [ ] **I am sure that this PR's changes are tested in the testsuite**.
|
||||
- [ ] **I have run and passed the testsuite in CI** *before* submitting the
|
||||
PR, by pushing the changes to my fork and seeing that the automated CI
|
||||
passed there. (Exceptions: If most tests pass and you can't figure out why
|
||||
the remaining ones fail, it's ok to submit the PR and ask for help. Or if
|
||||
any failures seem entirely unrelated to your change; sometimes things break
|
||||
on the GitHub runners.)
|
||||
- [ ] **My code follows the prevailing code style of this project** and I
|
||||
fixed any problems reported by the clang-format CI test.
|
||||
- [ ] I have read the [contribution guidelines](../CONTRIBUTING.md).
|
||||
- [ ] I have previously submitted a [Contributor License Agreement](http://opensource.imageworks.com/cla/).
|
||||
- [ ] I have updated the documentation, if applicable.
|
||||
- [ ] I have ensured that the change is tested somewhere in the testsuite (adding new test cases if necessary).
|
||||
- [ ] My code follows the prevailing code style of this project.
|
||||
|
||||
|
||||
@@ -1,149 +0,0 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
name: Analysis
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Run nightly while we're still working our way through the warnings
|
||||
- cron: "0 8 * * *"
|
||||
# Run unconditionally once weekly
|
||||
# - cron: "0 0 * * 0"
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev-1.14
|
||||
- dev-1.15
|
||||
- '*analysis*'
|
||||
- '*sonar*'
|
||||
paths:
|
||||
- '**'
|
||||
- '!**.md'
|
||||
- '!**.rst'
|
||||
- '!**/ci.yml'
|
||||
- '!**/docs.yml'
|
||||
- '!**/scorecard.yml'
|
||||
- '!**/wheel.yml'
|
||||
- '!**.properties'
|
||||
- '!docs/**'
|
||||
# Run analysis on PRs only if the branch name indicates that the purpose of
|
||||
# the PR is related to the Sonar analysis. We don't run on every PR because
|
||||
# the analysis run is very expensive and just isn't usually necessary.
|
||||
pull_request:
|
||||
branches:
|
||||
- '*analysis*'
|
||||
- '*sonar*'
|
||||
# Allow manual kicking off of the workflow from github.com
|
||||
workflow_dispatch:
|
||||
|
||||
permissions: read-all
|
||||
|
||||
# Allow subsequent pushes to the same PR or REF to cancel any previous jobs.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
aswf:
|
||||
name: "SonarCloud Analysis"
|
||||
if: github.event.repository.fork == false
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- desc: sonar gcc9/C++14 llvm13 py3.9 exr3.1 oiio2.3 avx2
|
||||
nametag: static-analysis-sonar
|
||||
os: ubuntu-latest
|
||||
vfxyear: 2022
|
||||
vfxsuffix: -clang13
|
||||
cxx_std: 14
|
||||
openimageio_ver: master
|
||||
python_ver: 3.9
|
||||
pybind11_ver: v2.9.0
|
||||
simd: avx2,f16c
|
||||
batched: b8_AVX2,b16_AVX512
|
||||
coverage: 1
|
||||
# skip_tests: 1
|
||||
sonar: 1
|
||||
setenvs: export SONAR_SCANNER_VERSION=4.7.0.2747
|
||||
SONAR_SERVER_URL="https://sonarcloud.io"
|
||||
BUILD_WRAPPER_OUT_DIR=bw_output
|
||||
OSL_CMAKE_BUILD_WRAPPER="build-wrapper-linux-x86-64 --out-dir bw_output"
|
||||
CMAKE_BUILD_TYPE=Debug
|
||||
CMAKE_UNITY_BUILD=OFF
|
||||
CODECOV=1
|
||||
TESTRENDER_AA=1
|
||||
OSL_TESTSUITE_SKIP_DIFF=1
|
||||
CTEST_TEST_TIMEOUT=1200
|
||||
OSL_CMAKE_FLAGS="-DOSL_TEST_BIG_TIMEOUT=1200 -DUSE_QT=0"
|
||||
CTEST_EXCLUSIONS="broken|noise-reg.regress|noise-gabor-reg.regress"
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
container:
|
||||
image: aswf/ci-osl:${{matrix.vfxyear}}${{matrix.vfxsuffix}}
|
||||
env:
|
||||
CXX: ${{matrix.cxx_compiler}}
|
||||
CC: ${{matrix.cc_compiler}}
|
||||
CMAKE_CXX_STANDARD: ${{matrix.cxx_std}}
|
||||
FMT_VERSION: ${{matrix.fmt_ver}}
|
||||
OPENEXR_VERSION: ${{matrix.openexr_ver}}
|
||||
OPENIMAGEIO_VERSION: ${{matrix.openimageio_ver}}
|
||||
PYBIND11_VERSION: ${{matrix.pybind11_ver}}
|
||||
PYTHON_VERSION: ${{matrix.python_ver}}
|
||||
USE_BATCHED: ${{matrix.batched}}
|
||||
USE_SIMD: ${{matrix.simd}}
|
||||
# DEBUG_CI: 1
|
||||
steps:
|
||||
# We would like to use harden-runner, but it flags too many false
|
||||
# positives, every time we download a dependency. We should use it only
|
||||
# on CI runs where we are producing artifacts that users might rely on.
|
||||
# - name: Harden Runner
|
||||
# uses: step-security/harden-runner@248ae51c2e8cc9622ecf50685c8bf7150c6e8813 # v1.4.3
|
||||
# with:
|
||||
# egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
|
||||
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2
|
||||
with:
|
||||
fetch-depth: '0'
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{github.job}}-${{matrix.nametag}}-${{steps.ccache_cache_keys.outputs.date}}
|
||||
restore-keys: ${{github.job}}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
${{matrix.setenvs}}
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Remove existing OIIO
|
||||
if: matrix.openimageio_ver != ''
|
||||
run: |
|
||||
sudo rm -rf /usr/local/include/OpenImageIO
|
||||
sudo rm -rf /usr/local/lib*/cmake/OpenImageIO
|
||||
sudo rm -rf /usr/local/lib*/libOpenImageIO*
|
||||
sudo rm -rf /usr/local/lib*/python3.9/site-packages/OpenImageIO*
|
||||
- name: Dependencies
|
||||
run: |
|
||||
${{matrix.depcmds}}
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
if: matrix.skip_tests != '1'
|
||||
run: src/build-scripts/ci-test.bash
|
||||
- name: Code coverage
|
||||
if: matrix.coverage == '1'
|
||||
run: src/build-scripts/ci-coverage.bash
|
||||
- name: Sonar-scanner
|
||||
if: matrix.sonar == 1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: |
|
||||
sonar-scanner -X --define sonar.host.url="${{ env.SONAR_SERVER_URL }}" --define sonar.cfamily.build-wrapper-output="build/bw_output" --define sonar.cfamily.gcov.reportsPath="_coverage"
|
||||
@@ -1,332 +0,0 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
##########################################################################
|
||||
# Common steps for all CI workflows
|
||||
##########################################################################
|
||||
|
||||
name: CI Steps
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
# This inputs receive values via the "with:" section in ci_workflow.yml
|
||||
inputs:
|
||||
disable:
|
||||
type: boolean
|
||||
default: false
|
||||
build:
|
||||
type: string
|
||||
runner:
|
||||
type: string
|
||||
container:
|
||||
type: string
|
||||
container_volumes:
|
||||
type: string
|
||||
default: '[]'
|
||||
cc_compiler:
|
||||
type: string
|
||||
cxx_compiler:
|
||||
type: string
|
||||
cxx_std:
|
||||
type: string
|
||||
batched:
|
||||
type: string
|
||||
build_type:
|
||||
type: string
|
||||
depcmds:
|
||||
type: string
|
||||
extra_artifacts:
|
||||
type: string
|
||||
fmt_ver:
|
||||
type: string
|
||||
fmt_commit:
|
||||
type: string
|
||||
gcc_action_ver:
|
||||
type: string
|
||||
llvm_action_ver:
|
||||
type: string
|
||||
opencolorio_ver:
|
||||
type: string
|
||||
openexr_ver:
|
||||
type: string
|
||||
openimageio_ver:
|
||||
type: string
|
||||
pybind11_ver:
|
||||
type: string
|
||||
python_action_ver:
|
||||
type: string
|
||||
python_ver:
|
||||
type: string
|
||||
setenvs:
|
||||
type: string
|
||||
simd:
|
||||
type: string
|
||||
skip_build:
|
||||
type: string
|
||||
skip_tests:
|
||||
type: string
|
||||
abi_check:
|
||||
type: string
|
||||
benchmark:
|
||||
type: string
|
||||
build_docs:
|
||||
type: string
|
||||
clang_format:
|
||||
type: string
|
||||
generator:
|
||||
type: string
|
||||
ctest_args:
|
||||
type: string
|
||||
ctest_test_timeout:
|
||||
type: string
|
||||
coverage:
|
||||
type: string
|
||||
sonar:
|
||||
type: string
|
||||
old_node:
|
||||
type: string
|
||||
default: 0
|
||||
nametag:
|
||||
type: string
|
||||
required_deps:
|
||||
type: string
|
||||
optional_deps:
|
||||
type: string
|
||||
build_local_deps:
|
||||
type: string
|
||||
secrets:
|
||||
PASSED_GITHUB_TOKEN:
|
||||
required: false
|
||||
PASSED_SONAR_TOKEN:
|
||||
required: false
|
||||
|
||||
permissions: read-all
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
steps:
|
||||
name: "${{inputs.cxx_compiler}} c++${{inputs.cxx_std}} py${{inputs.python_ver}}"
|
||||
if: ${{ !inputs.disable }}
|
||||
runs-on: ${{ inputs.runner }}
|
||||
container:
|
||||
image: ${{ inputs.container }}
|
||||
volumes: ${{ fromJson( inputs.container_volumes ) }}
|
||||
options: -v /:/host/root ${{ (contains(inputs.runner, 'gpu') && '-e NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility --gpus all') || '-e A=x' }}
|
||||
# Extra options:
|
||||
# - Ensure the GPU runners have OptiX is visible in the container.
|
||||
# - Mount the native filesystem under /host/root
|
||||
env:
|
||||
CXX: ${{inputs.cxx_compiler}}
|
||||
CC: ${{inputs.cc_compiler}}
|
||||
CMAKE_BUILD_TYPE: ${{inputs.build_type}}
|
||||
CMAKE_CXX_STANDARD: ${{inputs.cxx_std}}
|
||||
CMAKE_GENERATOR: ${{inputs.generator}}
|
||||
CTEST_ARGS: ${{inputs.ctest_args}}
|
||||
CTEST_TEST_TIMEOUT: ${{inputs.ctest_test_timeout}}
|
||||
USE_SIMD: ${{inputs.simd}}
|
||||
FMT_VERSION: ${{inputs.fmt_ver}}
|
||||
fmt_BUILD_VERSION: ${{inputs.fmt_ver}}
|
||||
fmt_GIT_COMMIT: ${{inputs.fmt_commit}}
|
||||
OPENCOLORIO_VERSION: ${{inputs.opencolorio_ver}}
|
||||
OPENEXR_VERSION: ${{inputs.openexr_ver}}
|
||||
OPENIMAGEIO_VERSION: ${{inputs.openimageio_ver}}
|
||||
PYBIND11_VERSION: ${{inputs.pybind11_ver}}
|
||||
PYTHON_VERSION: ${{inputs.python_ver}}
|
||||
USE_BATCHED: ${{inputs.batched}}
|
||||
ABI_CHECK: ${{inputs.abi_check}}
|
||||
ACTIONS_RUNNER_FORCE_ACTIONS_NODE_VERSION: node16
|
||||
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
|
||||
# For CI, sometimes we want to require all dependencies to be present,
|
||||
# except for a select few listed explicitly. This ensures that we don't
|
||||
# accidentally have a situation in which we think we are building
|
||||
# against and testing an optional dependency, but in fact are not.
|
||||
OSL_REQUIRED_DEPS: ${{inputs.required_deps}}
|
||||
OSL_OPTIONAL_DEPS: ${{inputs.optional_deps}}
|
||||
OSL_BUILD_LOCAL_DEPS: ${{inputs.build_local_deps}}
|
||||
SETENVS: ${{inputs.setenvs}}
|
||||
DEPCMDS: ${{inputs.depcmds}}
|
||||
|
||||
steps:
|
||||
# Install nodejs 20 with glibc 2.17, to work around the face that the
|
||||
# GHA runners are insisting on a node version that is too new for the
|
||||
# glibc in the ASWF containers prior to 2023.
|
||||
- name: install nodejs20glibc2.17
|
||||
if: inputs.old_node == '1'
|
||||
run: |
|
||||
curl --silent https://unofficial-builds.nodejs.org/download/release/v20.18.1/node-v20.18.1-linux-x64-glibc-217.tar.xz | tar -xJ --strip-components 1 -C /node20217 -f -
|
||||
- name: Checkout repo
|
||||
if: inputs.old_node != '1'
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- name: Checkout repo-OLD
|
||||
if: inputs.old_node == '1'
|
||||
# Must use an old checkout action for old containers
|
||||
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||
- name: Install LLVM and Clang
|
||||
if: inputs.llvm_action_ver != ''
|
||||
uses: KyleMayes/install-llvm-action@ebc0426251bc40c7cd31162802432c68818ab8f0 # v2.0.9
|
||||
with:
|
||||
version: ${{ inputs.llvm_action_ver }}
|
||||
- name: Build setup
|
||||
shell: bash
|
||||
run: |
|
||||
eval "$SETENVS"
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
shell: bash
|
||||
run: echo "date=`date -u +'%Y-%m-%dT%H:%M:%SZ'`" >> $GITHUB_OUTPUT
|
||||
- name: ccache-restore
|
||||
if: inputs.old_node != '1'
|
||||
id: ccache-restore
|
||||
uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{inputs.nametag}}-${{steps.ccache_cache_keys.outputs.date}}
|
||||
restore-keys: ${{inputs.nametag}}
|
||||
- name: ccache-restore-OLD
|
||||
if: inputs.old_node == '1'
|
||||
id: ccache-restore-old
|
||||
# Must use an old cache restore action for old containers
|
||||
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
# path: ./ccache
|
||||
key: ${{inputs.nametag}}-${{steps.ccache_cache_keys.outputs.date}}
|
||||
restore-keys: ${{inputs.nametag}}
|
||||
- name: Install gcc
|
||||
if: inputs.gcc_action_ver != ''
|
||||
run: |
|
||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y g++-${{inputs.gcc_action_ver}}
|
||||
- name: Install python
|
||||
if: inputs.python_action_ver != ''
|
||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||
with:
|
||||
python-version: ${{ inputs.python_action_ver }}
|
||||
- name: Dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
eval "$DEPCMDS"
|
||||
if [[ "$RUNNER_OS" == "Linux" ]]; then
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
elif [[ "$RUNNER_OS" == "macOS" ]]; then
|
||||
src/build-scripts/install_homebrew_deps.bash
|
||||
if [[ "$OPENIMAGEIO_VERSION" != "" ]] ; then \
|
||||
OPENIMAGEIO_CMAKE_FLAGS="-DOIIO_BUILD_TESTS=0 -DUSE_OPENGL=0 -DCMAKE_UNITY_BUILD=ON" ; \
|
||||
source src/build-scripts/build_openimageio.bash ; \
|
||||
else \
|
||||
brew install --display-times -q openimageio ; \
|
||||
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python${PYTHON_VERSION}/site-packages ; \
|
||||
fi
|
||||
src/build-scripts/save-env.bash
|
||||
elif [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||
src/build-scripts/gh-win-installdeps.bash
|
||||
fi
|
||||
- name: Install sonar-scanner and build-wrapper
|
||||
if: inputs.sonar == '1'
|
||||
uses: sonarsource/sonarqube-scan-action@a31c9398be7ace6bbfaf30c0bd5d415f843d45e9 # v7.0.0
|
||||
- name: Build
|
||||
if: inputs.skip_build != '1'
|
||||
shell: bash
|
||||
run: src/build-scripts/ci-build.bash
|
||||
- name: Check out ABI standard
|
||||
if: inputs.abi_check != ''
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
ref: ${{inputs.abi_check}}
|
||||
path: abi_standard
|
||||
- name: Build ABI standard
|
||||
if: inputs.abi_check != ''
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p abi_standard/build
|
||||
pushd abi_standard
|
||||
src/build-scripts/ci-build.bash
|
||||
popd
|
||||
- name: ccache-save
|
||||
if: inputs.old_node != '1'
|
||||
id: ccache-save
|
||||
uses: actions/cache/save@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{inputs.nametag}}-${{steps.ccache_cache_keys.outputs.date}}
|
||||
- name: ccache-save-OLD
|
||||
if: inputs.old_node == '1'
|
||||
id: ccache-save-old
|
||||
# Must use an old cache action for old containers
|
||||
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{inputs.nametag}}-${{steps.ccache_cache_keys.outputs.date}}
|
||||
- name: Testsuite
|
||||
if: inputs.skip_tests != '1'
|
||||
shell: bash
|
||||
run: src/build-scripts/ci-test.bash
|
||||
- name: Benchmarks
|
||||
if: inputs.benchmark == '1'
|
||||
shell: bash
|
||||
run: src/build-scripts/ci-benchmark.bash
|
||||
- name: clang-format
|
||||
if: inputs.clang_format == '1'
|
||||
shell: bash
|
||||
run: src/build-scripts/run-clang-format.bash
|
||||
- name: Code coverage
|
||||
if: inputs.coverage == '1'
|
||||
run: src/build-scripts/ci-coverage.bash
|
||||
- name: Sonar-scanner
|
||||
if: inputs.sonar == 1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: |
|
||||
which sonar-scanner
|
||||
ls -l /__w/OpenShadingLanguage/OpenShadingLanguage/bw_output
|
||||
echo "BUILD_OUTPUT_DIR is ${BUILD_WRAPPER_OUT_DIR}"
|
||||
find . -name "*.gcov" -print
|
||||
# sonar-scanner --define sonar.cfamily.build-wrapper-output="${BUILD_WRAPPER_OUT_DIR}"
|
||||
time sonar-scanner --define sonar.host.url="${SONAR_SERVER_URL}" --define sonar.cfamily.build-wrapper-output="$BUILD_WRAPPER_OUT_DIR" --define sonar.cfamily.gcov.reportsPath="_coverage" --define sonar.cfamily.threads="$PARALLEL"
|
||||
# Consult https://docs.sonarcloud.io/advanced-setup/ci-based-analysis/sonarscanner-cli/ for more information and options
|
||||
- name: Check ABI
|
||||
if: inputs.abi_check != ''
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/ci-abicheck.bash ./build abi_standard/build \
|
||||
liboslexec liboslcomp liboslquery liboslnoise
|
||||
- name: Build Docs
|
||||
if: inputs.build_docs == '1'
|
||||
shell: bash
|
||||
run: |
|
||||
cd src/doc
|
||||
time make doxygen
|
||||
time make sphinx
|
||||
- name: Upload testsuite debugging artifacts
|
||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||
if: ${{ inputs.old_node != '1' && (failure() || inputs.build_docs == '1' || inputs.benchmark == '1' || inputs.abi_check != '') }}
|
||||
with:
|
||||
name: osl-${{github.job}}-${{inputs.nametag}}
|
||||
path: |
|
||||
build/cmake-save
|
||||
build/compat_reports
|
||||
build/sphinx
|
||||
build/benchmarks
|
||||
build/*.cmake
|
||||
build/CMake*
|
||||
build/testsuite/*/*.*
|
||||
${{ inputs.extra_artifacts }}
|
||||
- name: Upload testsuite debugging artifacts-OLD
|
||||
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
|
||||
if: ${{ inputs.old_node == '1' && (failure() || inputs.build_docs == '1' || inputs.benchmark == '1' || inputs.abi_check != '') }}
|
||||
with:
|
||||
name: osl-${{github.job}}-${{inputs.nametag}}
|
||||
path: |
|
||||
build/cmake-save
|
||||
build/compat_reports
|
||||
build/sphinx
|
||||
build/benchmarks
|
||||
build/*.cmake
|
||||
build/CMake*
|
||||
build/testsuite/*/*.*
|
||||
${{ inputs.extra_artifacts }}
|
||||
+679
-583
File diff suppressed because it is too large
Load Diff
@@ -1,26 +0,0 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenshadingLanguage
|
||||
|
||||
|
||||
name: Publish Release Notice to ASWF Slack
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- published
|
||||
# published should cover both 'released' and 'prereleased'
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- name: Notify Slack
|
||||
id: slack
|
||||
with:
|
||||
project_name: "Open Shading Language"
|
||||
slack_bot_token: ${{ secrets.SLACK_BOT_TOKEN }}
|
||||
slack_channel: "#release-announcements"
|
||||
project_logo: "https://artwork.aswf.io/projects/open-shading-language/icon/color/open-shading-language-icon-color.png"
|
||||
uses: jmertic/slack-release-notifier@main
|
||||
@@ -1,67 +0,0 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright (c) Contributors to the Open Shading Language Project.
|
||||
|
||||
#
|
||||
# Releases are signed via https://github.com/sigstore/sigstore-python.
|
||||
# See https://docs.sigstore.dev for information about sigstore.
|
||||
#
|
||||
# This action creates a .tar.gz of the complete OSL source tree at
|
||||
# the given release tag, signs it via sigstore, and uploads the
|
||||
# .tar.gz and the associated .tar.gz.sigstore credential bundle.
|
||||
#
|
||||
# To verify a downloaded release at a given tag:
|
||||
#
|
||||
# % pip install sigstore
|
||||
# % sigstore verify github --cert-identity https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/.github/workflows/release-sign.yml@refs/tags/<tag> OSL-<tag>.tar.gz
|
||||
#
|
||||
|
||||
name: Sign Release
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Sign & upload release artifacts
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
env:
|
||||
TAG: ${{ github.ref_name }}
|
||||
permissions:
|
||||
contents: write
|
||||
id-token: write
|
||||
repository-projects: write
|
||||
|
||||
steps:
|
||||
|
||||
- name: Set Prefix
|
||||
# The tag name begins with a 'v', e.g. "v1.14.3", but the prefix
|
||||
# should omit the 'v', so the tarball "OSL-1.14.3.tar.gz"
|
||||
# extracts files into "OSL-v1.14.3/...". This matches
|
||||
# the GitHub release page autogenerated artifact conventions.
|
||||
run: |
|
||||
echo OSL_PREFIX=OSL-${TAG//v}/ >> $GITHUB_ENV
|
||||
echo OSL_TARBALL=OSL-${TAG//v}.tar.gz >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Create archive
|
||||
run: git archive --format=tar.gz -o ${OSL_TARBALL} --prefix ${OSL_PREFIX} ${TAG}
|
||||
|
||||
- name: Sign archive with Sigstore
|
||||
uses: sigstore/gh-action-sigstore-python@f514d46b907ebcd5bedc05145c03b69c1edd8b46 # v3.0.0
|
||||
with:
|
||||
inputs: ${{ env.OSL_TARBALL }}
|
||||
upload-signing-artifacts: false
|
||||
release-signing-artifacts: false
|
||||
|
||||
- name: Upload release archive
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: gh release upload ${TAG} ${OSL_TARBALL} ${OSL_TARBALL}.sigstore.json
|
||||
@@ -1,74 +0,0 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
name: Scorecards supply-chain security
|
||||
on:
|
||||
# Only the default branch is supported.
|
||||
branch_protection_rule:
|
||||
schedule:
|
||||
- cron: '44 20 * * 6'
|
||||
push:
|
||||
branches: [ "main", "scorecard" ]
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- '**.rst'
|
||||
- '**.tex'
|
||||
|
||||
# Declare default permissions as read only.
|
||||
permissions: read-all
|
||||
|
||||
# Allow subsequent pushes to the same PR or REF to cancel any previous jobs.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
|
||||
jobs:
|
||||
analysis:
|
||||
name: Scorecards analysis
|
||||
if: github.event.repository.fork == false
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
# Needed to upload the results to code-scanning dashboard.
|
||||
security-events: write
|
||||
# Used to receive a badge. (Upcoming feature)
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: "Checkout code"
|
||||
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846 # v3.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: "Run analysis"
|
||||
uses: ossf/scorecard-action@3e15ea8318eee9b333819ec77a36aca8d39df13e # v1.1.1
|
||||
with:
|
||||
results_file: results.sarif
|
||||
results_format: sarif
|
||||
# (Optional) Read-only PAT token. Uncomment the `repo_token` line below if:
|
||||
# - you want to enable the Branch-Protection check on a *public* repository, or
|
||||
# - you are installing Scorecards on a *private* repository
|
||||
# To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
|
||||
# repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
|
||||
|
||||
# Publish the results for public repositories to enable scorecard badges. For more details, see
|
||||
# https://github.com/ossf/scorecard-action#publishing-results.
|
||||
# For private repositories, `publish_results` will automatically be set to `false`, regardless
|
||||
# of the value entered here.
|
||||
publish_results: true
|
||||
|
||||
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
||||
# format to the repository Actions tab.
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
||||
with:
|
||||
name: SARIF file
|
||||
path: results.sarif
|
||||
retention-days: 5
|
||||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@5f532563584d71fdef14ee64d17bafb34f751ce5 # v1.0.26
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
-11
@@ -8,14 +8,3 @@ build
|
||||
\#*\#
|
||||
*.pyc
|
||||
*.log
|
||||
.vscode
|
||||
.envrc
|
||||
.DS_Store
|
||||
|
||||
# AI coding tool directories — generated locally by .agents/setup-agent
|
||||
.claude/
|
||||
.codex/
|
||||
.cursor/
|
||||
.opencode/
|
||||
.github/copilot-instructions.md
|
||||
/specs
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
# This file establishes email equivalences so we can resolve what look like
|
||||
# multiple authors, but actually are the same author who has used multiple
|
||||
# emails over the course of their involvement with the project.
|
||||
#
|
||||
# The format is any of the following:
|
||||
# <CANONICAL-EMAIL> <alternate-email>
|
||||
# CANONICAL-NAME <CANONICAL-EMAIL> <alternate-email>
|
||||
# CANONICAL-NAME <CANONICAL-EMAIL> alternate-name <alternate-email>
|
||||
#
|
||||
# You can check for duplicates with this command:
|
||||
# git shortlog -sne --all
|
||||
# That command (and others) will use this file to collapse the duplicates.
|
||||
#
|
||||
# If you see any duplicates we don't account for here, or if you look at your
|
||||
# own entry here and want a different name or email to be your canonical one
|
||||
# (we may not have guessed correctly and matched your preferences), please
|
||||
# file a PR with the edits to this file.
|
||||
|
||||
Adam Martinez <amartinez.cg@gmail.com> amartinez-cg <amartinez.cg@gmail.com>
|
||||
Alejandro Conty <aconty@imageworks.com> aconty <aconty@gmail.com>
|
||||
Alejandro Conty <aconty@imageworks.com> Alejandro Conty <aconty@gmail.com>
|
||||
Alex M. Wells <alex.m.wells@intel.com> <alex.m.wells@intel.com>
|
||||
Alex M. Wells <alex.m.wells@intel.com> <AlexMWells@users.noreply.github.com>
|
||||
Alex M. Wells <alex.m.wells@intel.com> <awells-np@argon.sea.pixar.com>
|
||||
Alexis Oblet <alob@mikrosimage.eu> Alexis Oblet <aoblet@users.noreply.github.com>
|
||||
Brecht Van Lommel <brecht@blender.org> <brecht@solidangle.com>
|
||||
Brecht Van Lommel <brecht@blender.org> Brecht Van Lommel <brechtvanlommel@gmail.com>
|
||||
Chris Kulla <ckulla@gmail.com> <ckulla@imageworks.com>
|
||||
Chris Kulla <ckulla@gmail.com> <fpsunflower@users.noreply.github.com>
|
||||
Chris Kulla <ckulla@gmail.com> Christopher Kulla <ckulla@gmail.com>
|
||||
Chris Kulla <ckulla@gmail.com> fpsunflower <ckulla@gmail.com>
|
||||
Clifford Stein <cstein@imageworks.com> Cliff Stein <clifford.stein@gmail.com>
|
||||
Clifford Stein <cstein@imageworks.com> cmstein <cstein@imageworks.com>
|
||||
Declan Russell <declan.russell@autodesk.com> Declan Russell <i7709212@bournemouth.ac.uk>
|
||||
Derek Haase <derekhaase@gmail.com> Derek Haase <dhaase@imageworks.com>
|
||||
Esteban Tovagliari <ramenhdr@gmail.com> est77 <ramenhdr@gmail.com>
|
||||
Henri Fousse <henri.fousse@free.fr> darkhorse64 <henri.fousse@free.fr>
|
||||
Larry Gritz <lg@imageworks.com> <larrygritz@gmail.com>
|
||||
Larry Gritz <lg@imageworks.com> <lg@larrygritz.com>
|
||||
Roman Zulak <marsupial@users.noreply.github.com> <rzulak@imageworks.com>
|
||||
Roman Zulak <marsupial@users.noreply.github.com> Frederich Munch <marsupial@users.noreply.github.com>
|
||||
Roman Zulak <marsupial@users.noreply.github.com> marsupial <marsupial@users.noreply.github.com>
|
||||
Ronan Keryell <Ronan.Keryell@amd.com> Ronan Keryell <Ronan.Keryell@silkan.com>
|
||||
Steena Monteiro <steena.monteiro@intel.com> steena.monteiro <smonteir@ortce-sklaw.jf.intel.com>
|
||||
Sven-Hendrik Haase <sh@lutzhaase.com> Sven-Hendrik Haase <svenstaro@gmail.com>
|
||||
Tim Grant <tgrant@nvidia.com> Tim Grant <87798327+tgrant-nv@users.noreply.github.com>
|
||||
Tim Grant <tgrant@nvidia.com> timgrant <timgrant@users.noreply.github.com>
|
||||
@@ -1,29 +0,0 @@
|
||||
# .readthedocs.yml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
# Set the OS, Python version and other tools you might need
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.11"
|
||||
|
||||
|
||||
# Build documentation with Sphinx
|
||||
sphinx:
|
||||
configuration: src/doc/conf.py
|
||||
|
||||
|
||||
# Optionally build your docs in additional formats such as PDF and ePub
|
||||
formats:
|
||||
- pdf
|
||||
- htmlzip
|
||||
|
||||
|
||||
# Optionally set the version of Python and requirements required to build your docs
|
||||
python:
|
||||
install:
|
||||
- requirements: src/doc/requirements.txt
|
||||
@@ -1,199 +0,0 @@
|
||||
# OSL Agent Guide
|
||||
|
||||
This file provides guidance to coding assistants when working with code in
|
||||
this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Open Shading Language (OSL) is a production shading language for VFX/animation
|
||||
renderers, maintained by the Academy Software Foundation. It compiles `.osl`
|
||||
shader source to `.oso` bytecode, then JIT-compiles via LLVM to native code at
|
||||
render time. C++17 codebase.
|
||||
|
||||
|
||||
## Repo map
|
||||
|
||||
**Core libraries**
|
||||
|
||||
- `src/liboslcomp/` — Shader compiler. Flex/Bison lexer+parser → AST → `.oso`
|
||||
bytecode. Entry point: `oslcomp.h`
|
||||
- `src/liboslexec/` — Shader execution engine. Loads `.oso`, optimizes shader
|
||||
groups, JIT-compiles to native via LLVM. Key files: `backendllvm.cpp`,
|
||||
`llvm_gen.cpp`, `llvm_ops.cpp`, `instance.cpp`. Contains `wide/`
|
||||
subdirectory for SIMD batched execution (SSE2/AVX/AVX-512)
|
||||
- `src/liboslquery/` — Query compiled shader metadata and parameters
|
||||
- `src/liboslnoise/` — Noise function implementations
|
||||
- `src/libbsdl/` — BSDF/closure library
|
||||
|
||||
**Command line tools**
|
||||
|
||||
- `src/oslc/` — Compiler CLI (`oslc`)
|
||||
- `src/oslinfo/` — Shader info query tool (`oslinfo`)
|
||||
- `src/testshade/` — Test harness that executes shaders on rectangular arrays
|
||||
of points, saves output as images.
|
||||
- `src/testrender/` — Minimal path-tracing renderer demonstrating OSL
|
||||
integration.
|
||||
- `src/osltoy/` — Qt-based GUI shader editor (optional)
|
||||
|
||||
**Public APIs/headers**
|
||||
|
||||
Headers in `src/include/OSL/`: `oslexec.h`, `oslcomp.h`, `oslquery.h`, `rendererservices.h` (abstract interface renderers must implement).
|
||||
|
||||
Namespaces:
|
||||
- `OSL` (outer), `OSL::pvt` (private implementation of internal-only utilities)
|
||||
- Versioned inner namespace: `v{MAJOR}_{MINOR}`
|
||||
|
||||
|
||||
## Build and verification
|
||||
|
||||
Common build commands via the Makefile convenience wrapper:
|
||||
```bash
|
||||
make # configure, build, install (Release)
|
||||
make debug # debug build
|
||||
make clean # wipe build dir (needed when switching branches/modes)
|
||||
make clang-format # format all source files
|
||||
make test # full testsuite
|
||||
make test TEST=<pattern> # subset matching regex
|
||||
```
|
||||
|
||||
Or directly with cmake:
|
||||
```bash
|
||||
cmake -B build -S .
|
||||
cmake --build build --target install
|
||||
ctest --test-dir build -R <pattern> --output-on-failure
|
||||
```
|
||||
|
||||
By default, builds into `./build` and installs into `./dist`.
|
||||
|
||||
## Testsuite notes
|
||||
|
||||
- Test output lands in `build/testsuite/<testname>/`; references in
|
||||
`testsuite/<testname>/ref/`
|
||||
- Read `testsuite/TESTSUITE-README.md` before updating references or
|
||||
diagnosing failures
|
||||
- For platform-specific diffs, add a variant ref (e.g. `out-win.txt`) rather
|
||||
than overwriting
|
||||
- Be conservative loosening image diff thresholds — use the minimum needed
|
||||
- Check uploaded CI artifacts before changing references when local
|
||||
reproduction is unclear
|
||||
|
||||
## Code formatting and file conventions
|
||||
|
||||
- `clang-format` enforced (`.clang-format`); CI rejects non-conforming code —
|
||||
run `make clang-format` before committing
|
||||
- Lines ~80 cols; ASCII only in code and comments; `#pragma once` for headers
|
||||
- New files: standard copyright + SPDX notice
|
||||
- `CamelCase` classes, `snake_case` locals, `ALL_CAPS` macros, `m_foo` private
|
||||
members
|
||||
- 3 blank lines between free functions/classes; 1 between class methods; max 1
|
||||
blank line inside a function body
|
||||
- `//` for regular comments; `///` Doxygen for public API
|
||||
- If a file has a strong local style, imitate that.
|
||||
|
||||
|
||||
## C++ guidelines
|
||||
|
||||
- Error handling: prefer `bool` returns, explicit status propagation, and
|
||||
`errorfmt()`-style reporting — not exceptions — consistent with the
|
||||
surrounding subsystem
|
||||
- Preserve API, ABI, and behavior compatibility unless the task explicitly
|
||||
requires a break
|
||||
- For hot paths: no hidden allocation in inner loops or parallel regions;
|
||||
precompute outside hot paths
|
||||
|
||||
|
||||
## OIIO utility types (prefer over raw C++ equivalents)
|
||||
|
||||
The [OpenImageIO](http://github.com/AcademySoftwareFoundation/OpenImageIO) (OIIO) project is a key dependency of OSL and the two projects are co-developed. Many utilities shared by both projects live in OpenImageIO.
|
||||
|
||||
Prefer C++17 `std` and Imath types except as noted below. Avoid introducing
|
||||
new third-party dependencies without a strong reason. Rely liberally on these
|
||||
classes and headers from OIIO:
|
||||
|
||||
- `OIIO::TypeDesc` - light-weight description of simple types (aliased
|
||||
as `OSL::TypeDesc`)
|
||||
- `OIIO::ustring` and `OIIO::ustringhash` - light-weight unique string heavily
|
||||
used in OSL. (Aliased as `OSL::ustring` and `OSL::ustringhash`).
|
||||
- `OIIO::string_view` — non-owning string/`char*` (like `std::string_view`).
|
||||
Aliased as `OSL::string_view`.
|
||||
- `OIIO::span` / `OIIO::cspan` — non-owning contiguous data (like
|
||||
`std::span`); use instead of pointer+length pairs. Aliased as `OSL::span`
|
||||
and `OSL::cspan`.
|
||||
- `OpenImageIO/strutil.h` : string processing utilities
|
||||
- `OIIO::Strutil::print()` , also aliased as `OSL::print` — string
|
||||
formatting/output; **never** use `printf` or `<<` streams
|
||||
- `OpenImageIO/fmath.h` — fast/safe math, avoids NaN/Inf
|
||||
- `OIIO::Filesystem::*` in `OpenImageIO/filesystem.h` — file/directory
|
||||
utilities
|
||||
- `OpenImageIO/simd.h` — SIMD helpers
|
||||
- `OpenImageIO/parallel.h` — parallel loops, etc.
|
||||
- `OpenImageIO/unittest.h` — unit test macros
|
||||
|
||||
|
||||
## Safe programming in C++
|
||||
|
||||
- Try to avoid passing raw pointers as function arguments.
|
||||
- Use `std::unique_ptr` and `std::shared_ptr` rather than raw pointers when
|
||||
ownership must be expressed.
|
||||
- Prefer `OSL::string_view` when passing non-mutable strings or C-style
|
||||
`char*` strings.
|
||||
- Prefer `OSL::span` rather than passing raw pointers + a separate length, or
|
||||
passing a raw pointer with an implied (but not explicitly passed) length.
|
||||
`OSL::cspan` is a synonmym when the underlying data is const/non-mutable.
|
||||
`OSL::span<std::byte>` or `OSL::cspan<std::byte>` can be used to represent
|
||||
contiguous untyped data. These are our equivalent of C++ `std::span`.
|
||||
- Use these guidelines always for new code, but do not churn existing code
|
||||
just to "modernize" it.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Compilation Pipeline
|
||||
|
||||
OSL source → (Flex/Bison) → AST → (liboslcomp) → `.oso` bytecode → (liboslexec) → LLVM IR → JIT native code
|
||||
|
||||
|
||||
## Code Style
|
||||
|
||||
- clang-format config in `.clang-format` (WebKit-based, 80-char line limit, 4-space indent)
|
||||
- Run `make clang-format` before submitting changes
|
||||
|
||||
## Key Dependencies
|
||||
|
||||
- **LLVM 14+** (JIT compilation), **OpenImageIO 2.5+** (textures, image I/O, utilities), **Imath 3.1+** (math types), **Flex/Bison** (parser generation), **pybind11** (Python bindings, optional)
|
||||
|
||||
## Commits and PRs
|
||||
|
||||
- Keep PRs narrow and easy to review.
|
||||
- Prefix format: `type(subsystem): message` — subsystem is optional but helpful.
|
||||
- Valid types: `fix:`, `feat:`, `perf:`, `api:`, `int:`, `build:`, `test:`,
|
||||
`ci:`, `docs:`, `refactor:`, `style:`, `admin:`, `revert:`.
|
||||
- Add a subsystem tag when it helps, e.g. `fix(exr):` or `perf(IBA):`.
|
||||
- Write commit messages and PR descriptions that explain why the change is
|
||||
needed, what behavior changes, and any non-obvious implementation choices.
|
||||
|
||||
## Spec-driven design
|
||||
|
||||
Feature specifications live in `docs/dev/specs/` (not at the project root).
|
||||
When using speckit commands (`/speckit-specify`, `/speckit-plan`, etc.), always
|
||||
use `docs/dev/specs/` as the base directory for all spec paths, overriding any
|
||||
default of `specs/`. When creating a new spec, set `SPECIFY_FEATURE_DIRECTORY`
|
||||
to `docs/dev/specs/<NNN-feature-name>` and write that path to
|
||||
`.specify/feature.json`.
|
||||
|
||||
The speckit bash scripts expect a `specs/` directory at the project root. A
|
||||
symlink satisfies this without committing speckit infrastructure to the repo.
|
||||
This symlink is set up by the setup-agents script, and is not committed to
|
||||
the repo. All saved specs live in `docs/dev/specs`.
|
||||
|
||||
## AI policy
|
||||
|
||||
Refer to `docs/dev/AI_Policy.md`.
|
||||
|
||||
See `docs/dev/AI_Policy.md`. Key rule: if AI assistance contributed materially
|
||||
to a patch, the commit must include `Assisted-by: <TOOL> / <MODEL>`. The human
|
||||
author is responsible for understanding, testing, and defending all changes.
|
||||
|
||||
## References
|
||||
|
||||
- `CONTRIBUTING.md` : general contribution guidelines and recap of coding
|
||||
conventions.
|
||||
@@ -0,0 +1,253 @@
|
||||
# Technical Charter (the "Charter") for Open Shading Language a Series of LF Projects, LLC
|
||||
|
||||
This charter (the "Charter") sets forth the responsibilities and procedures
|
||||
for technical contribution to, and oversight of, the Open Shading Language
|
||||
project, which has been established as Open Shading Language a Series of LF
|
||||
Projects, LLC (the "Project"). LF Projects, LLC ("LF Projects") is a
|
||||
Delaware series limited liability company. All Contributors to the Project
|
||||
must comply with the terms of this Charter.
|
||||
|
||||
### 1. Mission and Scope of the Project
|
||||
|
||||
* **a.** The mission of the Project is to develop an open source project
|
||||
for programmable shading in advanced renderers and other applications,
|
||||
ideal for describing materials, lights, displacement, and pattern
|
||||
generation.
|
||||
|
||||
* **b.** The scope of the Project includes software development under an
|
||||
OSI-approved open source license supporting the mission, including
|
||||
documentation, testing, integration and the creation of other artifacts
|
||||
that aid the development, deployment, operation or adoption of the open
|
||||
source software project.
|
||||
|
||||
### 2. Technical Steering Committee
|
||||
|
||||
* **a.** The Technical Steering Committee (the "TSC") will be responsible
|
||||
for all technical oversight of the open source Project.
|
||||
|
||||
* **b.** The TSC voting members are initially the Project's Committers. At
|
||||
the inception of the project, the Committers of the Project will be as
|
||||
set forth within the "GOVERNANCE" file within the Project's code
|
||||
repository. The TSC may choose an alternative approach for determining
|
||||
the voting members of the TSC, and any such alternative approach will be
|
||||
documented in the GOVERNANCE file. Any meetings of the Technical
|
||||
Steering Committee are intended to be open to the public, and can be
|
||||
conducted electronically, via teleconference, or in person.
|
||||
|
||||
* **c.** TSC projects generally will involve Contributors and Committers.
|
||||
The TSC may adopt or modify roles so long as the roles are documented in
|
||||
the GOVERNANCE file. Unless otherwise documented:
|
||||
|
||||
- **i.** Contributors include anyone in the technical community that
|
||||
contributes code, documentation, or other technical artifacts to the
|
||||
Project;
|
||||
|
||||
- **ii.** Committers are Contributors who have earned the ability to
|
||||
modify ("commit") source code, documentation or other technical
|
||||
artifacts in a project's repository; and
|
||||
|
||||
- **iii.** A Contributor may become a Committer by a majority approval
|
||||
of the existing Committers or at the discretion of the TSC. A
|
||||
Committer may be removed by a majority approval of the other existing
|
||||
Committers, or at the discretion of the TSC.
|
||||
|
||||
* **d.** Participation in the Project through becoming a Contributor and
|
||||
Committer is open to anyone so long as they abide by the terms of this
|
||||
Charter.
|
||||
|
||||
* **e.** The TSC may (1) establish workflow procedures for the submission,
|
||||
approval, and closure/archiving of projects, (2) set requirements for
|
||||
the promotion of Contributors to Committer status, as applicable, and
|
||||
(3) amend, adjust, refine and/or eliminate the roles of Contributors,
|
||||
and Committers, and create new roles, and publicly document any TSC
|
||||
roles, as it sees fit.
|
||||
|
||||
* **f.** The TSC may elect a TSC Chair, who will preside over meetings of
|
||||
the TSC and will serve until his or her resignation or replacement by
|
||||
the TSC. The TSC Chair, or any other TSC member so designated by the
|
||||
TSC, will serve as the primary communication contact between the Project
|
||||
and the Academy Software Foundation Fund of The Linux Foundation.
|
||||
|
||||
* **g.** Responsibilities: The TSC will be responsible for all aspects of
|
||||
oversight relating to the Project, which may include:
|
||||
|
||||
- **i.** coordinating the technical direction of the Project;
|
||||
|
||||
- **ii.** approving project or system proposals (including, but not
|
||||
limited to, incubation, deprecation, and changes to a sub-project's
|
||||
scope);
|
||||
|
||||
- **iii.** organizing sub-projects and removing projects;
|
||||
|
||||
- **iv.** creating sub-committees or working groups to focus on
|
||||
cross-project technical issues and requirements;
|
||||
|
||||
- **v.** appointing representatives to work with other open source or
|
||||
open standards communities;
|
||||
|
||||
- **vi.** establishing community norms, workflows, issuing releases, and
|
||||
security issue reporting policies;
|
||||
|
||||
- **vii.** approving and implementing policies and processes for
|
||||
contributing (to be published in the CONTRIBUTING file) and
|
||||
coordinating with the Series Manager to resolve matters or concerns
|
||||
that may arise as set forth in Section 7 of this Charter;
|
||||
|
||||
- **viii.** discussions, seeking consensus, and where necessary, voting
|
||||
on technical matters relating to the code base that affect multiple
|
||||
projects; and
|
||||
|
||||
- **ix.** coordinating any marketing, events, or communications
|
||||
regarding the Project with the LF Projects Manager or their designee.
|
||||
|
||||
### 3. TSC Voting
|
||||
|
||||
* **a.** While the Project aims to operate as a consensus based community,
|
||||
if any TSC decision requires a vote to move the Project forward, the
|
||||
voting members of the TSC will vote on a one vote per voting member
|
||||
basis.
|
||||
|
||||
* **b.** At least fifty percent of all voting members of the TSC must be
|
||||
present at a TSC meeting in order to establish a quorum. The TSC may
|
||||
continue to meet if a quorum is not met, but will be prevented from
|
||||
making any decisions at such meeting.
|
||||
|
||||
* **c.** Except as provided in Section 7.c. and 8.a, decisions by vote at
|
||||
a meeting require a majority vote of those in attendance, provided
|
||||
quorum is met. Decisions made by electronic vote without a meeting
|
||||
require a majority vote of all voting members of the TSC.
|
||||
|
||||
* **d.** In the event a vote cannot be resolved by the TSC, any voting
|
||||
member of the TSC may refer the matter to the Series Manager or its
|
||||
designee for assistance in reaching a resolution.
|
||||
|
||||
### 4. Compliance with Policies
|
||||
|
||||
* **a.** This Charter is subject to the Series Agreement for the Project
|
||||
and the Operating Agreement of LF Projects. Contributors will comply
|
||||
with the policies of LF Projects as may be adopted and amended by LF
|
||||
Projects, including, without limitation the policies listed at
|
||||
https://lfprojects.org/policies/.
|
||||
|
||||
* **b.** The TSC may adopt a code of conduct ("CoC") for the Project,
|
||||
which is subject to approval by the Series Manager. Contributors to the
|
||||
Project will comply with the CoC or, in the event that a
|
||||
Project-specific CoC has not been approved, the LF Projects Code of
|
||||
Conduct listed at https://lfprojects.org/policies/.
|
||||
|
||||
* **c.** When amending or adopting any policy applicable to the Project,
|
||||
LF Projects will publish such policy, as to be amended or adopted, on
|
||||
its web site at least 30 days prior to such policy taking effect;
|
||||
provided, however, that in the case of any amendment of the Trademark
|
||||
Policy or Terms of Use of LF Projects, any such amendment is effective
|
||||
upon publication on LF Project's web site.
|
||||
|
||||
* **d.** All participants must allow open participation from any
|
||||
individual or organization meeting the requirements for contributing
|
||||
under this Charter and any policies adopted for all participants by the
|
||||
TSC, regardless of competitive interests. Put another way, the Project
|
||||
community must not seek to exclude any participant based on any
|
||||
criteria, requirement, or reason other than those that are reasonable
|
||||
and applied on a non-discriminatory basis to all participants in the
|
||||
Project community.
|
||||
|
||||
* **e.** The Project will operate in a transparent, open, collaborative,
|
||||
and ethical manner at all times. The output of all Project discussions,
|
||||
proposals, timelines, decisions, and status should be made open and
|
||||
easily visible to all. Any potential violations of this requirement
|
||||
should be reported immediately to the LF Projects Manager.
|
||||
|
||||
### 5. Community Assets
|
||||
|
||||
* **a.** LF Projects will hold title to all trade or service marks used by
|
||||
the Project ("Project Trademarks"), whether based on common law or
|
||||
registered rights. Project Trademarks will be transferred and assigned
|
||||
to LF Projects to hold on behalf of the Project. Any use of any Project
|
||||
Trademarks by participants in the Project will be in accordance with the
|
||||
license from LF Projects and inure to the benefit of LF Projects.
|
||||
|
||||
* **b.** The Project shall, as permitted and in accordance with such
|
||||
license from LF Projects, develop and own all Project GitHub and social
|
||||
media accounts, and domain name registrations created by the Project
|
||||
community.
|
||||
|
||||
* **c.** Under no circumstances will LF Projects be expected or required
|
||||
to undertake any action on behalf of the Project that is inconsistent
|
||||
with the tax-exempt status or purpose, as applicable, of LFP, Inc. or LF
|
||||
Projects, LLC.
|
||||
|
||||
### 6. General Rules and Operations.
|
||||
|
||||
* **a.** The Project will:
|
||||
|
||||
- **i.** engage in the work of the project in a professional manner
|
||||
consistent with maintaining a cohesive community, while also
|
||||
maintaining the goodwill and esteem of LF Projects, LFP, Inc. and
|
||||
other partner organizations in the open source software community; and
|
||||
|
||||
- **ii.** respect the rights of all trademark owners, including any
|
||||
branding and trademark usage guidelines.
|
||||
|
||||
### 7. Intellectual Property Policy
|
||||
|
||||
* **a.** Participants acknowledge that the copyright in all new
|
||||
contributions shall be retained by the copyright holder as independent
|
||||
works of authorship and that no contributor or copyright holder will be
|
||||
required to assign copyrights to the Project.
|
||||
|
||||
* **b.** Except as described in Section 7.c., all code contributions to
|
||||
the Project are subject to the following:
|
||||
|
||||
- **i.** All new inbound code contributions to the Project must be made
|
||||
using the BSD 3-Clause License (available here:
|
||||
https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/LICENSE.md)
|
||||
(the "Project License").
|
||||
|
||||
- **ii.** All new inbound code contributions must:
|
||||
|
||||
o **a.** be made pursuant to a binding Project Contribution License
|
||||
Agreement (the "CLA") available on the Project's web site; and
|
||||
|
||||
o **b.** be accompanied by a Developer Certificate of Origin
|
||||
(http://developercertificate.org) sign-off in the source code system
|
||||
that is submitted through a TSC-approved contribution process which
|
||||
will bind the authorized contributor and, if not self-employed,
|
||||
their employer to the applicable license;
|
||||
|
||||
- **iii.** All outbound code will be made available under the Project
|
||||
License.
|
||||
|
||||
- **iv.** Documentation will be received and made available by the
|
||||
Project under the Creative Commons Attribution 4.0 International
|
||||
License (available at http://creativecommons.org/licenses/by/4.0/).
|
||||
|
||||
- **v.** The Project may seek to integrate and contribute back to other
|
||||
open source projects ("Upstream Projects"). In such cases, the Project
|
||||
will conform to all license requirements of the Upstream Projects,
|
||||
including dependencies, leveraged by the Project. Upstream Project
|
||||
code contributions not stored within the Project's main code
|
||||
repository shall comply with the contribution process and license
|
||||
terms for the applicable Upstream Project.
|
||||
|
||||
* **c.** If an alternative inbound or outbound license is required for
|
||||
compliance with the license for a leveraged open source project or is
|
||||
otherwise required to achieve the Project's mission, the Governing Board
|
||||
of the Academy Software Foundation Fund of the Linux Foundation
|
||||
("Governing Board"), or the Governing Board's representatives designated
|
||||
for such purpose, may approve the use of an alternative license for
|
||||
specific inbound or outbound contributions on an exception basis. Any
|
||||
exceptions must be approved by a vote of the Governing Board and must be
|
||||
limited in scope to what is required for such a purpose. To request an
|
||||
exception, please describe the contribution, the alternative open source
|
||||
license(s), and the justification for using an alternative open source
|
||||
license for the Project.
|
||||
|
||||
* **d.** Contributed files should contain license information, such as
|
||||
SPDX short form identifiers, indicating the open source license or
|
||||
licenses pertaining to the file.
|
||||
|
||||
### 8. Amendments
|
||||
|
||||
* **a.** This charter may be amended by a two-thirds vote of the entire
|
||||
TSC, subject to reasonable approval by LF Projects.
|
||||
|
||||
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 59 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 121 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 92 KiB |
@@ -5,14 +5,13 @@ This is a checklist for TSC's to review as part of the intake process. The TSC s
|
||||
- Existing Project Governance
|
||||
- [X] Project License exists ( [LICENSE.md](../LICENSE.md) ) and is OSI-approved
|
||||
- [X] Any third-party components/dependencies included are listed along with their licenses ( [THIRD_PARTY.md](../THIRD_PARTY.md) )
|
||||
- [X] Governance defined, outlining community roles and how decisions are made ( [GOVERNANCE.md](../GOVERNANCE.md) )
|
||||
- [X] Governance defined, outlining community roles and how decsions are made ( [GOVERNANCE.md](../GOVERNANCE.md] )
|
||||
- Closed by https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1137
|
||||
- [X] Contribution Policy defined ( [CONTRIBUTING.md](../CONTRIBUTING.md) )
|
||||
- Closed by https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1137
|
||||
- [X] Code of Conduct defined ( existing or pull from [ASWF Sample Project](https://github.com/AcademySoftwareFoundation/aswf-sample-project/blob/master/CODE_OF_CONDUCT.md) )
|
||||
- Closed by https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1137
|
||||
- [X] Release methodology defined ( [RELEASING.md](../docs/RELEASING.md) )
|
||||
- Closed by https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1572
|
||||
- [ ] Release methodology defined ( [release.md](process/release.md) )
|
||||
- New Project Governance
|
||||
- [X] TSC members identified
|
||||
- [X] First TSC meeting held
|
||||
@@ -42,7 +41,7 @@ This is a checklist for TSC's to review as part of the intake process. The TSC s
|
||||
- [X] New project announcement done ( https://www.aswf.io/osl-joins-aswf/ )
|
||||
- [X] Project added to ASWF website and ASWF landscape
|
||||
- Graduation
|
||||
- [X] OpenSSF Best Practices Badge achieved
|
||||
- [ ] CII Badge achieved
|
||||
- [ ] Committer Diversity established
|
||||
- [ ] Commit/Contribution growth during incubation
|
||||
- [ ] Committers defined in the project ( [COMMITTERS.csv](COMMITTERS.csv) or [COMMITTERS.yml](COMMITTERS.yml) )
|
||||
@@ -51,4 +50,4 @@ This is a checklist for TSC's to review as part of the intake process. The TSC s
|
||||
- [X] License scan completed and no issues found
|
||||
- Minor issues were found but already fixed in PR https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1145
|
||||
- [X] Code repository imported to ASWF GitHub organization
|
||||
- [X] Developer Certificate of Origin post commit signoff done and DCO Probot enabled.
|
||||
- [ ] Developer Certificate of Origin past commit signoff done and DCO Probot enabled.
|
||||
|
||||
+13
-1163
File diff suppressed because it is too large
Load Diff
+50
-122
@@ -2,28 +2,19 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
cmake_minimum_required (VERSION 3.19)
|
||||
|
||||
set (OSL_VERSION "1.16.0.0")
|
||||
set (OSL_VERSION_OVERRIDE "" CACHE STRING
|
||||
"Version override (use with caution)!")
|
||||
mark_as_advanced (OSL_VERSION_OVERRIDE)
|
||||
if (OSL_VERSION_OVERRIDE)
|
||||
set (OSL_VERSION ${OSL_VERSION_OVERRIDE})
|
||||
endif ()
|
||||
|
||||
project (OSL VERSION ${OSL_VERSION}
|
||||
cmake_minimum_required (VERSION 3.12)
|
||||
project (OSL VERSION 1.11.17.0
|
||||
LANGUAGES CXX C
|
||||
HOMEPAGE_URL "https://github.com/AcademySoftwareFoundation/OpenShadingLanguage")
|
||||
set (PROJ_NAME ${PROJECT_NAME}) # short name
|
||||
string (TOLOWER ${PROJ_NAME} PROJ_NAME_LOWER) # short name lower case
|
||||
string (TOUPPER ${PROJ_NAME} PROJ_NAME_UPPER) # short name upper case
|
||||
set (PROJECT_VERSION_RELEASE_TYPE "dev" CACHE STRING
|
||||
set (PROJECT_VERSION_RELEASE_TYPE "" CACHE STRING
|
||||
"Build type, for example: dev, beta2, RC1 (empty string for normal release)")
|
||||
set (${PROJECT_NAME}_VERSION_RELEASE_TYPE ${PROJECT_VERSION_RELEASE_TYPE})
|
||||
set (PROJECT_AUTHORS "Contributors to the Open Shading Language project")
|
||||
option (${PROJECT_NAME}_SUPPORTED_RELEASE
|
||||
"Set ON for supported release branch, OFF for master" OFF)
|
||||
"Set ON for supported release branch, OFF for master" ON)
|
||||
if (${PROJECT_NAME}_SUPPORTED_RELEASE)
|
||||
set (${PROJECT_NAME}_DEV_RELEASE OFF)
|
||||
else ()
|
||||
@@ -39,28 +30,6 @@ if (CMAKE_VERSION VERSION_LESS 3.21)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Set up module path for our own cmake modules and add some esential ones
|
||||
list (APPEND CMAKE_MODULE_PATH
|
||||
"${PROJECT_SOURCE_DIR}/src/cmake/modules"
|
||||
"${PROJECT_SOURCE_DIR}/src/cmake")
|
||||
|
||||
# Utilities
|
||||
include (colors)
|
||||
include (set_utils)
|
||||
include (check_is_enabled)
|
||||
include (fancy_add_executable)
|
||||
|
||||
# If the user wants to use Conan to build dependencies, they will have done
|
||||
# this prior to the cmake config:
|
||||
# cd <build area>
|
||||
# conan install <source area>
|
||||
# and that will leave a conanbuildinfo.cmake in the build area for us.
|
||||
if (EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
include (${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
message (STATUS "Using Conan for dependencies")
|
||||
conan_basic_setup()
|
||||
endif()
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set (CMAKE_BUILD_TYPE "Release")
|
||||
endif ()
|
||||
@@ -82,7 +51,6 @@ message (STATUS "Project build dir = ${CMAKE_BINARY_DIR}")
|
||||
message (STATUS "Project install prefix = ${CMAKE_INSTALL_PREFIX}")
|
||||
message (STATUS "Configuration types = ${CMAKE_CONFIGURATION_TYPES}")
|
||||
message (STATUS "Build type = ${CMAKE_BUILD_TYPE}")
|
||||
message (STATUS "Supported release = ${${PROJECT_NAME}_SUPPORTED_RELEASE}")
|
||||
|
||||
# Make the build area layout look a bit more like the final dist layout
|
||||
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
@@ -93,6 +61,7 @@ if ("${PROJECT_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
|
||||
message (FATAL_ERROR "Not allowed to run in-source build!")
|
||||
endif ()
|
||||
|
||||
|
||||
option (CMAKE_USE_FOLDERS "Use the FOLDER target property to organize targets into folders." ON)
|
||||
mark_as_advanced (CMAKE_USE_FOLDERS)
|
||||
if (CMAKE_USE_FOLDERS)
|
||||
@@ -110,11 +79,11 @@ include (GNUInstallDirs)
|
||||
|
||||
|
||||
option (VERBOSE "Print lots of messages while compiling" OFF)
|
||||
if (VERBOSE)
|
||||
set (CMAKE_MESSAGE_LOG_LEVEL "VERBOSE" CACHE STRING "CMake log level to display")
|
||||
else ()
|
||||
set (CMAKE_MESSAGE_LOG_LEVEL "STATUS" CACHE STRING "CMake log level to display")
|
||||
endif ()
|
||||
set (${PROJ_NAME}_NAMESPACE ${PROJECT_NAME} CACHE STRING
|
||||
"Customized outer namespace base name (version will be added)")
|
||||
option (${PROJ_NAME}_NAMESPACE_INCLUDE_PATCH "Should the inner namespace include the patch number" OFF)
|
||||
set (SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
|
||||
CACHE STRING "Set the SO version in the SO name of the output library")
|
||||
set (OSL_LIBNAME_SUFFIX "" CACHE STRING
|
||||
"Optional name appended to ${PROJECT_NAME} libraries that are built")
|
||||
option (OSL_BUILD_TESTS "Build the unit tests, testshade, testrender" ON)
|
||||
@@ -125,93 +94,72 @@ else ()
|
||||
endif ()
|
||||
option (OSL_BUILD_PLUGINS "Bool OSL plugins, for example OIIO plugin" ON)
|
||||
option (OSL_BUILD_SHADERS "Build shaders" ON)
|
||||
option (OSL_USE_OPTIX "Include OptiX support" OFF)
|
||||
message(STATUS "OSL_USE_OPTIX: ${OSL_USE_OPTIX}")
|
||||
option (OSL_BUILD_MATERIALX "Build MaterialX shaders" OFF)
|
||||
option (USE_OPTIX "Include OptiX support" OFF)
|
||||
set (OPTIX_EXTRA_LIBS CACHE STRING "Extra lib targets needed for OptiX")
|
||||
set (CUDA_EXTRA_LIBS CACHE STRING "Extra lib targets needed for CUDA")
|
||||
set (CUDA_TARGET_ARCH "sm_60" CACHE STRING "CUDA GPU architecture (e.g. sm_50)")
|
||||
set (CUDA_TARGET_ARCH "sm_35" CACHE STRING "CUDA GPU architecture (e.g. sm_35)")
|
||||
set (OSL_SHADER_INSTALL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/shaders"
|
||||
CACHE STRING "Directory where shaders will be installed")
|
||||
set (OSL_PTX_INSTALL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/ptx"
|
||||
CACHE STRING "Directory where OptiX PTX files will be installed")
|
||||
set (CMAKE_DEBUG_POSTFIX "" CACHE STRING "Library naming postfix for Debug builds (e.g., '_debug')")
|
||||
option (OSL_USTRINGREP_IS_HASH "Always use ustringhash for strings" OFF)
|
||||
|
||||
|
||||
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
|
||||
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
|
||||
add_compile_definitions (OSL_NO_DEFAULT_TEXTURESYSTEM=1)
|
||||
add_definitions ("-DOSL_NO_DEFAULT_TEXTURESYSTEM=1")
|
||||
endif ()
|
||||
|
||||
option (USE_FAST_MATH "Use fast math approximations (if no, then use system math library)" ON)
|
||||
if (USE_FAST_MATH)
|
||||
add_compile_definitions (OSL_FAST_MATH=1)
|
||||
add_definitions ("-DOSL_FAST_MATH=1")
|
||||
else ()
|
||||
add_compile_definitions (OSL_FAST_MATH=0)
|
||||
add_definitions ("-DOSL_FAST_MATH=0")
|
||||
endif ()
|
||||
|
||||
option (OIIO_FMATH_SIMD_FRIENDLY "Make sure OIIO fmath functions are SIMD-friendly" OFF)
|
||||
if (OIIO_FMATH_SIMD_FRIENDLY)
|
||||
add_compile_definitions (OIIO_FMATH_SIMD_FRIENDLY=1)
|
||||
add_definitions (-DOIIO_FMATH_SIMD_FRIENDLY=1)
|
||||
endif ()
|
||||
|
||||
# Define OSL_INTERNAL symbol only when building OSL itself, will not be
|
||||
# defined for downstream projects using OSL.
|
||||
add_compile_definitions (OSL_INTERNAL=1)
|
||||
|
||||
# To make sure we aren't relying on deprecated OIIO features, we define
|
||||
# OIIO_DISABLE_DEPRECATED before including any OIIO headers.
|
||||
add_compile_definitions (OIIO_DISABLE_DEPRECATED=900000)
|
||||
|
||||
# Namespace settings
|
||||
#
|
||||
# The "outer namespace" defaults to the project name, but it can be overridden
|
||||
# to allow custom builds that put everything inside a unique namespace that
|
||||
# can't conflict with default builds.
|
||||
set (${PROJ_NAME}_OUTER_NAMESPACE ${PROJECT_NAME} CACHE STRING
|
||||
"Customized outer namespace")
|
||||
set (PROJ_NAMESPACE "${${PROJ_NAME}_OUTER_NAMESPACE}") # synonym
|
||||
if (NOT ${PROJ_NAME}_OUTER_NAMESPACE STREQUAL ${PROJECT_NAME})
|
||||
set (${PROJ_NAME}_CUSTOM_OUTER_NAMESPACE 1)
|
||||
if (USE_OPTIX)
|
||||
add_definitions ("-DOSL_USE_OPTIX=1")
|
||||
endif ()
|
||||
# There is also an inner namespace that is either vMAJ_MIN or vMAJ_MIN_PATCH,
|
||||
# depending on the setting of ${PROJ_NAME}_INNER_NAMESPACE_INCLUDE_PATCH.
|
||||
option (${PROJ_NAME}_INNER_NAMESPACE_INCLUDE_PATCH
|
||||
"Should the inner namespace include the patch number" ${${PROJECT_NAME}_DEV_RELEASE})
|
||||
if (${PROJ_NAME}_INNER_NAMESPACE_INCLUDE_PATCH)
|
||||
set (PROJ_VERSION_NAMESPACE "v${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}")
|
||||
else ()
|
||||
set (PROJ_VERSION_NAMESPACE "v${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}")
|
||||
|
||||
|
||||
# Set the default namespace. For symbol hiding reasons, it's important that
|
||||
# the project name is a subset of the namespace name.
|
||||
set (PROJ_NAMESPACE "${${PROJ_NAME}_NAMESPACE}")
|
||||
string(REGEX MATCH ${PROJECT_NAME} NAMESPACE_HAS_PROJECT_NAME ${PROJ_NAMESPACE})
|
||||
if (NOT NAMESPACE_HAS_PROJECT_NAME)
|
||||
set (PROJ_NAMESPACE ${PROJECT_NAME}_${PROJ_NAMESPACE})
|
||||
endif ()
|
||||
# PROJ_NAMESPACE_V combines the outer and inner namespaces into one symbol
|
||||
set (PROJ_NAMESPACE_V "${PROJ_NAMESPACE}_${PROJ_VERSION_NAMESPACE}")
|
||||
message(STATUS "Outer namespace PROJ_OUTER_NAMESPACE: ${PROJ_NAMESPACE}")
|
||||
message(STATUS "Inner namespace PROJ_VERSION_NAMESPACE: ${PROJ_VERSION_NAMESPACE}")
|
||||
message(STATUS "Joint namespace PROJ_NAMESPACE_V: ${PROJ_NAMESPACE_V}")
|
||||
set (PROJ_NAMESPACE_V "${PROJ_NAMESPACE}_v${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}")
|
||||
if (OIIO_NAMESPACE_INCLUDE_PATCH)
|
||||
set (PROJ_NAMESPACE_V "${PROJ_NAMESPACE_V}_${PROJECT_VERSION_PATCH}")
|
||||
endif ()
|
||||
message(STATUS "Setting Namespace to: ${PROJ_NAMESPACE_V}")
|
||||
|
||||
|
||||
# Define OSL_INTERNAL symbol only when building OSL itself, will not be
|
||||
# defined for downstream projects using OSL.
|
||||
add_definitions (-DOSL_INTERNAL=1)
|
||||
list (APPEND CMAKE_MODULE_PATH
|
||||
"${PROJECT_SOURCE_DIR}/src/cmake/modules"
|
||||
"${PROJECT_SOURCE_DIR}/src/cmake")
|
||||
|
||||
# To make sure we aren't relying on deprecated OIIO features, we define
|
||||
# OIIO_DISABLE_DEPRECATED before including any OIIO headers.
|
||||
add_definitions (-DOIIO_DISABLE_DEPRECATED=900000)
|
||||
# Helpful functions and macros for our project
|
||||
include (colors)
|
||||
include (check_is_enabled)
|
||||
include (checked_find_package)
|
||||
|
||||
# All the C++ and compiler related options and adjustments
|
||||
include (compiler)
|
||||
|
||||
# Dependency finding utilities and all dependency-related options
|
||||
include (dependency_utils)
|
||||
|
||||
# Utilities and options related to finding python and making python bindings
|
||||
include (pythonutils)
|
||||
|
||||
# Dependency finding utilities and all dependency-related options
|
||||
include (externalpackages)
|
||||
include (flexbison)
|
||||
include (cuda_macros)
|
||||
include (llvm_macros)
|
||||
|
||||
# Include all our testing apparatus and utils, but not if it's a subproject
|
||||
if (${PROJECT_NAME}_BUILD_TESTS AND PROJECT_IS_TOP_LEVEL)
|
||||
@@ -222,39 +170,22 @@ endif ()
|
||||
|
||||
include_directories (
|
||||
BEFORE
|
||||
"${OSL_LOCAL_DEPS_DIR}/include"
|
||||
"${CMAKE_SOURCE_DIR}/src/include"
|
||||
"${CMAKE_BINARY_DIR}/src/include"
|
||||
"${CMAKE_BINARY_DIR}/include"
|
||||
)
|
||||
|
||||
|
||||
# Make sure our math calculations are consistent,
|
||||
# especially division. Different compilers may have choose to use
|
||||
# reciprocal division losing precision causing slightly different
|
||||
# results which can lead to aliasing differences when running the testsuite
|
||||
# Disable reciprocal division
|
||||
if (CMAKE_COMPILER_IS_INTEL)
|
||||
if (MSVC)
|
||||
add_compile_options("/Qprec-div")
|
||||
else ()
|
||||
add_compile_options("-prec-div")
|
||||
endif ()
|
||||
elseif (CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_APPLECLANG OR CMAKE_COMPILER_IS_INTELCLANG)
|
||||
add_compile_options("-fno-reciprocal-math")
|
||||
endif ()
|
||||
|
||||
# Tell CMake to process the sub-directories
|
||||
add_subdirectory (src/include)
|
||||
add_subdirectory (src/liboslcomp)
|
||||
add_subdirectory (src/liboslquery)
|
||||
add_subdirectory (src/liboslexec)
|
||||
add_subdirectory (src/liboslnoise)
|
||||
add_subdirectory (src/libbsdl)
|
||||
add_subdirectory (src/oslc)
|
||||
add_subdirectory (src/oslinfo)
|
||||
|
||||
if (OSL_BUILD_TESTS AND BUILD_TESTING)
|
||||
if (OSL_BUILD_TESTS)
|
||||
add_subdirectory (src/testshade)
|
||||
add_subdirectory (src/testrender)
|
||||
endif ()
|
||||
@@ -263,12 +194,15 @@ if (OSL_BUILD_PLUGINS)
|
||||
add_subdirectory (src/osl.imageio)
|
||||
endif ()
|
||||
|
||||
if (USE_QT AND (Qt5_FOUND OR Qt6_FOUND) AND NOT DISABLE_OSLTOY)
|
||||
if (USE_QT AND Qt5_FOUND)
|
||||
add_subdirectory (src/osltoy)
|
||||
endif ()
|
||||
|
||||
if (OSL_BUILD_SHADERS)
|
||||
add_subdirectory (src/shaders)
|
||||
if (OSL_BUILD_MATERIALX)
|
||||
add_subdirectory (src/shaders/MaterialX)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
option (INSTALL_DOCS "Install documentation" ON)
|
||||
@@ -276,6 +210,11 @@ if (INSTALL_DOCS)
|
||||
add_subdirectory (src/doc)
|
||||
endif ()
|
||||
|
||||
# Last minute site-specific instructions, if they exist
|
||||
if (OSL_SITE AND EXISTS "${PROJECT_SOURCE_DIR}/site/${OSL_SITE}/cmake/sitecustom.cmake")
|
||||
include ("${PROJECT_SOURCE_DIR}/site/${OSL_SITE}/cmake/sitecustom.cmake")
|
||||
endif ()
|
||||
|
||||
# install pkgconfig files
|
||||
if ( NOT MSVC )
|
||||
configure_file(src/build-scripts/oslexec.pc.in "${CMAKE_BINARY_DIR}/oslexec.pc" @ONLY)
|
||||
@@ -324,27 +263,16 @@ configure_package_config_file ("${PROJECT_SOURCE_DIR}/src/cmake/Config.cmake.in"
|
||||
install (FILES "${OSL_PROJECT_CONFIG}" "${OSL_VERSION_CONFIG}"
|
||||
DESTINATION "${OSL_CONFIG_INSTALL_DIR}")
|
||||
|
||||
install (FILES src/cmake/llvm_macros.cmake DESTINATION cmake)
|
||||
|
||||
set (PERMISSION_FLAGS OWNER_EXECUTE OWNER_READ OWNER_WRITE
|
||||
GROUP_EXECUTE GROUP_READ
|
||||
WORLD_EXECUTE WORLD_READ)
|
||||
install (FILES src/build-scripts/serialize-bc.py
|
||||
DESTINATION build-scripts
|
||||
PERMISSIONS ${PERMISSION_FLAGS})
|
||||
|
||||
# install targets files
|
||||
install (EXPORT OSL_EXPORTED_TARGETS
|
||||
DESTINATION ${OSL_CONFIG_INSTALL_DIR}
|
||||
FILE ${OSL_TARGETS_EXPORT_NAME}
|
||||
NAMESPACE ${PROJECT_NAME}::)
|
||||
|
||||
if (PROJECT_IS_TOP_LEVEL AND BUILD_TESTING AND ${PROJECT_NAME}_BUILD_TESTS)
|
||||
if (${PROJECT_NAME}_BUILD_TESTS AND PROJECT_IS_TOP_LEVEL)
|
||||
osl_add_all_tests()
|
||||
endif ()
|
||||
|
||||
if (PROJECT_IS_TOP_LEVEL)
|
||||
include (packaging)
|
||||
endif ()
|
||||
|
||||
print_package_notfound_report ()
|
||||
|
||||
+138
-242
@@ -10,13 +10,6 @@ why it's an open source project. Please review this document to get a
|
||||
briefing on our process.
|
||||
|
||||
|
||||
General Tips for Open Source Development
|
||||
----------------------------------------
|
||||
|
||||
* GitHub's [Open Source Guides](https://opensource.guide/)
|
||||
- Especially the guide on [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
|
||||
|
||||
|
||||
Mail List and Slack
|
||||
-------------------
|
||||
|
||||
@@ -24,12 +17,13 @@ Contributors should be reading the osl-dev mail list:
|
||||
|
||||
* [osl-dev](https://lists.aswf.io/g/osl-dev)
|
||||
|
||||
You can sign up for the mail list on your own using the link above.
|
||||
You can sign up for the mail list on your own using the link above.
|
||||
|
||||
* The [ASWF Slack](https://slack.aswf.io/) has an `openshadinglanguage`
|
||||
channel. Sign up for the Slack on your own, then under "channels", select
|
||||
"browse channels" and you should see the openshadinglanguage channel (among
|
||||
those of the other projects and working groups).
|
||||
We also have an `openshadinglanguage` channel on the
|
||||
[ASWF Slack](https://slack.aswf.io/). But note that the Slack channel is
|
||||
not archived, so while it's ok for fleeting comments, it is unreliable as
|
||||
a permanent repository of useful information. Serious discussions that are
|
||||
we would want to refer to over time should be sent to the mail list instead.
|
||||
|
||||
|
||||
Bug Reports and Issue Tracking
|
||||
@@ -41,116 +35,52 @@ https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/issues
|
||||
|
||||
**If you are merely asking a question ("how do I...")**, please do not file an
|
||||
issue, but instead ask the question on the [OSL developer mail
|
||||
list](https://lists.aswf.io/g/osl-dev) or on the Slack channel.
|
||||
list](https://lists.aswf.io/g/osl-dev).
|
||||
|
||||
If you are submitting a bug report, please be sure to note which version of
|
||||
OSL you are using, on what platform (OS/version, which compiler you used,
|
||||
and any special build flags or other unusual environmental issues). Please
|
||||
give a specific, as-detailed-as-possible account of
|
||||
give an account of
|
||||
|
||||
* what you tried (command line, source code example)
|
||||
* what you expected to happen
|
||||
* what actually happened (crash? error message? ran but didn't give the
|
||||
correct result?)
|
||||
* what you tried
|
||||
* what happened
|
||||
* what you expected to happen instead
|
||||
|
||||
with enough detail that others can easily reproduce the problem just by
|
||||
following your instructions. Please quote the exact error message you
|
||||
received. If you are having trouble building, please post the full cmake
|
||||
output of a fresh VERBOSE=1 build.
|
||||
|
||||
Suspected security vulnerabilities should be reported by the same process.
|
||||
If confidentiality precludes a public question or issue for any reason, you
|
||||
may contact us privately at [security@openshadinglanguage.org](mailto:security@openshadinglanguage.org).
|
||||
|
||||
|
||||
Policy on AI Tools
|
||||
------------------
|
||||
|
||||
Please read our [Policy on AI Coding Assistants](docs/dev/AI_Policy.md)
|
||||
before contributing or participating in the project in any way mediated by
|
||||
"AI" assistants.
|
||||
|
||||
High-level summary:
|
||||
- Human must always be in the loop, and is the responsible party for
|
||||
the contents of a PR (including fully understanding and being able
|
||||
to explain, defend, and modify it in response to review comments).
|
||||
- Interact with the project and community yourself, not by agent.
|
||||
- Disclose what tools you used and how. At a minimum, we require an
|
||||
"Assisted-by: TOOL/MODEL" line in the commit comments and PR description.
|
||||
- Don't waste maintainer's time with low quality PRs.
|
||||
|
||||
Please do read the whole [Policy on AI Coding Assistants](docs/dev/AI_Policy.md)
|
||||
for all the details.
|
||||
|
||||
The repository includes configuration for several AI coding assistants
|
||||
(Claude Code, Cursor, GitHub Copilot, OpenAI Codex, Opencode). Much of this
|
||||
uses symbolic links to keep a single source of truth in `AGENTS.md`. **Windows
|
||||
users** must enable symlink support before cloning or the agent integrations
|
||||
will silently malfunction:
|
||||
|
||||
1. Enable [Windows Developer Mode](https://learn.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development)
|
||||
2. `git config --global core.symlinks true`
|
||||
3. Then clone (or re-clone) the repository.
|
||||
|
||||
The repository supports several AI coding assistants (Claude Code, Cursor,
|
||||
GitHub Copilot, OpenAI Codex, Opencode). After cloning, run the setup script
|
||||
for whichever tool(s) you use:
|
||||
|
||||
```
|
||||
.agents/setup-agent claude # or: cursor, codex, opencode, copilot, all
|
||||
```
|
||||
|
||||
See [docs/dev/Agentic_Coding.md](docs/dev/Agentic_Coding.md) for details.
|
||||
with enough detail that others can reproduce the problem.
|
||||
|
||||
|
||||
Contributor License Agreement (CLA) and Intellectual Property
|
||||
-------------------------------------------------------------
|
||||
|
||||
To protect the project -- and the contributors! -- we do require a Contributor
|
||||
License Agreement (CLA) for anybody submitting changes. This is for your own
|
||||
safety, as it prevents any possible future disputes between code authors and
|
||||
their employers or anyone else who might think they might own the IP output of
|
||||
the author.
|
||||
To protect the project -- and the contributors! -- we do require a
|
||||
Contributor License Agreement (CLA) for anybody submitting changes.
|
||||
|
||||
* [Corporate CLA](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/ASWF/CLA-corporate.md) :
|
||||
* [Corporate CLA](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/ASWF/OSL-CLA-corporate.md)
|
||||
If you are writing the code as part of your job, or if there is any
|
||||
possibility that your employers might think they own any intellectual
|
||||
property you create. This needs to be executed by someone who has
|
||||
signatory power for the company.
|
||||
|
||||
* [Individual CLA](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/ASWF/CLA-individual.md) :
|
||||
If you are an individual writing the code on your own time, using your own
|
||||
equipment, and you're SURE you are the sole owner of any intellectual
|
||||
property you contribute.
|
||||
|
||||
Please note that it is extremely common (nearly ubiquitous in the US and
|
||||
Canada, and maybe other places) for full-time employees of technology and
|
||||
entertainment companies to have IP clauses in their employment agreement (in
|
||||
that pile of paperwork you sign on your first day of work and then promptly
|
||||
forget about) that give the company rights to any code you write, even on your
|
||||
own time. The Open Shading Language project expects you to know and follow the
|
||||
rules of your employer and to have them sign a corporate CLA if necessary.
|
||||
|
||||
The easiest way to sign CLAs is digitally [using
|
||||
EasyCLA](https://corporate.v1.easycla.lfx.linuxfoundation.org). There are
|
||||
detailed step-by-step instructions about using the EasyCLA system for
|
||||
[corporate CLAs](https://docs.linuxfoundation.org/lfx/easycla/v2-current/contributors/corporate-contributor)
|
||||
and [individual CLAs](https://docs.linuxfoundation.org/lfx/easycla/v2-current/contributors/individual-contributor#github).
|
||||
* [Individual]((https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/ASWF/OSL-CLA-individual.md)).
|
||||
If you are an individual writing the code on your own time and you're SURE
|
||||
you are the sole owner of any intellectual property you contribute.
|
||||
|
||||
The easiest way to sign CLAs is digitally [using EasyCLA](https://corporate.v1.easycla.lfx.linuxfoundation.org).
|
||||
Companies who prefer not to use the online tools may sign, scan, and email
|
||||
the executed copy to manager@lfprojects.org.
|
||||
|
||||
The corporate CLA allows a company to name a "CLA Manager" (who does not need
|
||||
signatory power) who has the ability to use the online system to add or delete
|
||||
individual employees of the company who are authorized to submit pull
|
||||
requests, without needing to get an executive to amend and sign the agreement
|
||||
each time.
|
||||
The CLA allows a company to name a "CLA Manager" (who does not need
|
||||
signatory power) who has the ability to use the online system to add or
|
||||
delete individual employees of the company who are authorized to submit pull
|
||||
requests, without needing to get an executive to amend and sign the
|
||||
agreement each time.
|
||||
|
||||
Please note that these CLAs are based on the Apache 2.0 CLAs, and differ
|
||||
minimally, only as much as was required to correctly describe the EasyCLA
|
||||
process and our use of a CLA manager.
|
||||
|
||||
**Contribution sign off**
|
||||
|
||||
** Contribution sign off
|
||||
|
||||
ASWF requires the use of the [Developer’s Certificate of Origin 1.1
|
||||
(DCO)](https://developercertificate.org/), which is the same mechanism that
|
||||
@@ -164,90 +94,14 @@ as a part of the commit message.
|
||||
Here is an example Signed-off-by line, which indicates that the submitter
|
||||
accepts the DCO:
|
||||
|
||||
Signed-off-by: John Doe <john.doe@example.com>
|
||||
`Signed-off-by: John Doe <john.doe@example.com>`
|
||||
|
||||
You can include this automatically when you commit a change to your local
|
||||
git repository using `git commit -s`. You might also want to
|
||||
git repository using <code>git commit -s</code>. You might also want to
|
||||
leverage this [command line tool](https://github.com/coderanger/dco) for
|
||||
automatically adding the signoff message on commits.
|
||||
|
||||
|
||||
Commit messages
|
||||
---------------
|
||||
|
||||
### Summary heuristic
|
||||
|
||||
Look at the commit history of the project to get a sense of the style and
|
||||
level of detail that is expected in commit messages.
|
||||
|
||||
### General guidelines and expectations
|
||||
|
||||
The first line of the commit message should be a short (less than 80
|
||||
characters) summary of the change, prefixed with the general nature of the
|
||||
change (see below).
|
||||
|
||||
The rest of the commit message should be a more detailed explanation of the
|
||||
changes. Some commits are self-explanatory and don't need more than the
|
||||
summary line. Others may need a more detailed explanation. Hallmarks of
|
||||
a good commit message include:
|
||||
|
||||
* An explanation of why the change is necessary and what you hope to
|
||||
accomplish with it.
|
||||
* A description of any major user- or developer-facing changes that people
|
||||
should be aware of: changes in APIs or behaviors, new features, etc.
|
||||
* An explanation of any tricky implementation details or design decisions that
|
||||
might not be immediately obvious to someone reading the code.
|
||||
* Guideposts for somebody reviewing the code to understand the rationale and
|
||||
have any supporting background information to fully understanding the code
|
||||
changes.
|
||||
|
||||
Remember that at some point in the future, a developer unfamiliar with your
|
||||
change (maybe you, long after you've forgotten the details) might need to
|
||||
understand or fix your patch. Keep that person in mind as your audience and
|
||||
strive to write a commit message that explains the context in a way that saves
|
||||
them time and effort. Be the hero in the story of their future debugging
|
||||
effort!
|
||||
|
||||
### Using "conventional commits" prefixes
|
||||
|
||||
We strive to follow the recommendations known as [conventional
|
||||
commits](https://www.conventionalcommits.org/), which means that we would like
|
||||
merged commit messages to have their first line start with one of the
|
||||
following prefixes:
|
||||
|
||||
- `feat:` new features
|
||||
- `fix:` bug fixes
|
||||
- `perf:` performance improvements
|
||||
- `api:` changes to the public APIs
|
||||
- `int:` changes to code internals that don't affect the public API
|
||||
- `build:` changes to the build system
|
||||
- `test:` changes to the test suite or unit tests
|
||||
- `ci:` changes to the CI system
|
||||
- `docs:` changes to the documentation
|
||||
- `refactor:` code refactoring
|
||||
- `style:` formatting or other stylistic non-functional changes to the code
|
||||
- `admin:` project administration or policy changes
|
||||
- `revert:` reverting a previous commit
|
||||
|
||||
Obviously, some (if not most) PRs may qualify for more than one of these
|
||||
categories (for example, a new feature may also introduce a new API call, add
|
||||
tests, and include new documentation). If that is the case, use your best
|
||||
judgment to pick the category that best captures the essence or most important
|
||||
aspect of the change. When ambiguous, consider the list above to be a priority
|
||||
ranking (e.g., a change that fixes a bug and adds a new test should be listed
|
||||
under `fix:`, because that appears first in the list).
|
||||
|
||||
It is also encouraged, when it makes sense to do so, to put a subcategory in
|
||||
parenthesis after the prefix, like `fix(optix):` or `feat(oslc):`. If there
|
||||
is no clear single format or class that is the man focus of the patch, then
|
||||
you can omit the subcategory.
|
||||
|
||||
API or ABI-breaking changes should additionally be marked with an exclamation
|
||||
point at the end of the prefix, like `feat!:` or `api!:` to make it easily
|
||||
identifiable as a breaking change from the first line of the commit message.
|
||||
|
||||
|
||||
|
||||
Pull Requests and Code Review
|
||||
-----------------------------
|
||||
|
||||
@@ -261,9 +115,7 @@ repository. The protocol is like this:
|
||||
own repository on GitHub, and then clone it to get a repository on your
|
||||
local machine.
|
||||
|
||||
2. Edit, compile, and test your changes. Run clang-format (see the
|
||||
instructions on coding style below). Our current formatting standard,
|
||||
as checked by our CI, uses clang-format 17.0.
|
||||
2. Edit, compile, and test your changes.
|
||||
|
||||
3. Push your changes to your fork (each unrelated pull request to a separate
|
||||
"topic branch", please).
|
||||
@@ -275,29 +127,30 @@ component that deserves extended discussion or debate among the wider OSL
|
||||
community, then it may be prudent to email osl-dev pointing everybody to
|
||||
the pull request URL and discussing any issues you think are important.
|
||||
|
||||
6. All pull requests automatically launch CI jobs on GitHub Actions to
|
||||
ensure that the build completes and that the tests suite runs correctly, for
|
||||
a variety of platform, compiler, library, and flag combinations. The status
|
||||
of the CI tests for your PR will be displayed on the GitHub PR page. We will
|
||||
not accept PRs that don't build cleanly or pass the existing testsuite.
|
||||
|
||||
7. The reviewer will look over the code and critique on the "comments" area,
|
||||
6. The reviewer will look over the code and critique on the "comments" area,
|
||||
or discuss in email. Reviewers may ask for changes, explain problems they
|
||||
found, congratulate the author on a clever solution, etc. But until somebody
|
||||
says "LGTM" (looks good to me), the code should not be committed. Sometimes
|
||||
this takes a few rounds of give and take. Please don't take it hard if your
|
||||
first try is not accepted. It happens to all of us.
|
||||
|
||||
8. After approval, one of the senior developers (with commit approval to the
|
||||
official main repository) will merge your fixes into the main branch.
|
||||
|
||||
Please see the [Code Review](docs/dev/CodeReview.md) document for more
|
||||
explanaton of the code review process.
|
||||
7. After approval, one of the senior developers (with commit approval to the
|
||||
official main repository) will merge your fixes into the master branch.
|
||||
|
||||
|
||||
Coding Style
|
||||
------------
|
||||
|
||||
There are two overarching rules:
|
||||
|
||||
1. When making changes, conform to the style and conventions of the surrounding code.
|
||||
|
||||
2. Strive for clarity, even if that means occasionally breaking the
|
||||
guidelines. Use your head and ask for advice if your common sense seems to
|
||||
disagree with the conventions.
|
||||
|
||||
Below we try to enumerate the guidelines embodied in the code.
|
||||
|
||||
#### File conventions
|
||||
|
||||
C++ implementation should be named `*.cpp`. Headers should be named `.h`.
|
||||
@@ -305,84 +158,124 @@ All headers should contain
|
||||
|
||||
#pragma once
|
||||
|
||||
All source files should begin with these three lines:
|
||||
|
||||
// Copyright Contributors to the Open Shading Language project.
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
// https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
All source files should begin with the copyright and license, which can be
|
||||
found in the [LICENSE](LICENSE) file (or cut and pasted from any other other source
|
||||
file). Two notes on this:
|
||||
|
||||
as a comment in the syntax of whatever source code is used in that file (for
|
||||
example, for python or shell files, use `#` rather than `//`).
|
||||
* For NEW source files, please change the copyright year to the present. DO
|
||||
NOT edit existing files only to update the copyright year, it just creates
|
||||
pointless deltas and offers no increased protection.
|
||||
|
||||
Occasionally a file may contain substantial code from another project and will
|
||||
also list its original copyright and license information. Do NOT alter that
|
||||
notice or copy it to any new files, it really only applies to the particular
|
||||
file in which it appears.
|
||||
* Occasionally a file contains substantial code from another project
|
||||
and will also list its copyright. Do NOT copy that notice to any new files,
|
||||
it really only applies to the particular file in which it appears.
|
||||
|
||||
#### Formatting
|
||||
|
||||
We use [clang-format](https://clang.llvm.org/docs/ClangFormat.html) v17
|
||||
to uniformly format our source code prior to PR submission. Make sure that
|
||||
clang-format is installed on your local machine, and just run
|
||||
NEVER alter somebody else's code to reformat just because you found
|
||||
something that violates the rules. Let the group/author/leader know, and
|
||||
resist the temptation to change it yourself.
|
||||
|
||||
make clang-format
|
||||
Each line of text in your code should be at most 80 characters long.
|
||||
Exceptions are allowed for those rare cases where letting a line be longer
|
||||
(and wrapping on an 80-character window) is actually a better and clearer
|
||||
alternative than trying to split it into two lines. Sometimes this happens,
|
||||
but it's extremely rare.
|
||||
|
||||
and it will automatically reformat your code according to the configuration
|
||||
file found in the `.clang-format` file at the root directory of the OSL
|
||||
source code checkout.
|
||||
Indent 4 spaces at a time, and use actual spaces, not tabs. For files that
|
||||
must use tabs for some reason, tabs should always be on 8's. Most editors
|
||||
have a setting that forces indentations to be spaces. With emacs, you can do
|
||||
this:
|
||||
|
||||
One of the CI test matrix entries runs clang-format and fails if any
|
||||
diffs were generated (that is, if any of your code did not 100% conform to
|
||||
the `.clang-format` formatting configuration). If it fails, clicking on that
|
||||
test log will show you the diffs generated, so that you can easily correct
|
||||
it on your end and update the PR with the formatting fixes.
|
||||
(setq c-default-style "bsd")
|
||||
(setq-default indent-tabs-mode nil)
|
||||
|
||||
If you don't have clang-format set up on your machine, and your patch is not
|
||||
very long, you may find that it's more convenient to just submit it and hope
|
||||
for the best, and if it doesn't pass the CI test, look at the diffs in the log
|
||||
for the "clang-format" CI run and make the corrections by hand and then submit
|
||||
an update to the patch (i.e. relying on CI to run clang-format for you).
|
||||
Opening brace on the same line as the condition or loop.
|
||||
|
||||
Because the basic formatting is automated by clang-format, we won't
|
||||
enumerate the rules here.
|
||||
One statement per line, except in rare cases where violating this rule makes
|
||||
the code more clear.
|
||||
|
||||
For the occasional non-clang-format regions of code, NEVER alter somebody
|
||||
else's code to reformat just because you found something that violates the
|
||||
rules. Let the group/author/leader know, and resist the temptation to change
|
||||
it yourself.
|
||||
Three (3) consecutive empty lines between function or class method
|
||||
implementations, one blank line between method declarations within a class
|
||||
definition. Put a single blank line within a function if it helps to
|
||||
visually separate different sequential tasks. Don't put multiple blank lines
|
||||
in a row within a function, or blank lines right after an opening brace or
|
||||
right before a closing brace. The goal is to use just enough white space to
|
||||
help developers visually parse the code (for example, spotting at a glance
|
||||
where new functions begin), but not so much as to spread it out or be
|
||||
confusing.
|
||||
|
||||
Each line of text in your code, including comments, should be at most 80
|
||||
characters long. Exceptions are allowed for those rare cases where letting a
|
||||
line be longer (and wrapping on an 80-character window) is actually a better
|
||||
and clearer alternative than trying to split it into two lines. Sometimes this
|
||||
happens, but it's extremely rare.
|
||||
For if, for, while, etc., put a space before the paren, but NOT inside the parens. For example:
|
||||
|
||||
We prefer three (3) consecutive empty lines between freestanding functions or
|
||||
class definitions, one blank line between method declarations within a class
|
||||
definition. Put a single blank line within a function if it helps to visually
|
||||
separate different sequential tasks, but don't put multiple blank lines in a
|
||||
row within a function, or blank lines right after an opening brace or right
|
||||
before a closing brace. The goal is to use just enough white space to help
|
||||
developers visually parse the code (for example, spotting at a glance where
|
||||
new functions begin), but not so much as to spread it out or be confusing.
|
||||
if (foo) // Yes
|
||||
|
||||
if(foo) // No
|
||||
if ( foo ) // No
|
||||
|
||||
Function calls should have a space between the function name and the opening
|
||||
parenthesis, NO space inside the parenthesis, except for a single blank
|
||||
space between each argument. For example:
|
||||
|
||||
x = foo (a, b); // Yes, this is always ok
|
||||
|
||||
x = foo ( a, b ); // No
|
||||
x = foo (a,b); // No
|
||||
x = foo(a, b); // No
|
||||
x = foo(a); // Occasionally, this just looks better, when the function name is short,
|
||||
// and there's just one very short argument. What can I say, I do it too.
|
||||
|
||||
Function declarations: function names should begin at column 0 for a full
|
||||
function definition. (It's ok to violate this rule for very short inline
|
||||
functions within class definitions.)
|
||||
|
||||
|
||||
Here is a short code fragment that shows some of these rules in action:
|
||||
|
||||
static int
|
||||
function (int a, int b)
|
||||
{
|
||||
int x = a + b;
|
||||
if (a == 0 || b == 0) {
|
||||
x += 1;
|
||||
x *= 4;
|
||||
} else {
|
||||
x -= 3;
|
||||
}
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
x += a * i;
|
||||
x *= foo (i); // function call
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
Don't ever reformat, re-indent, change whitespace, or make any other such
|
||||
changes to working code. If you're adding just a few lines or fixing a bug
|
||||
in existing code, stick to the style of the surrounding code. In very rare
|
||||
circumstances, and with consensus of the group, reformatting is sometimes
|
||||
helpful to improve code readability, but it should be done as a separate
|
||||
formatting-only checkin.
|
||||
|
||||
#### Identifiers
|
||||
|
||||
In general, classes and templates should start with upper case and
|
||||
capitalize new words: `class CustomerList;` In general, local variables
|
||||
should start with lower case. Macros should be `ALL_CAPS`, if used at all.
|
||||
In general, classes and templates should start with upper case and capitalize new words:
|
||||
|
||||
class CustomerList;
|
||||
|
||||
In general, local variables should start with lower case.
|
||||
|
||||
If your class is extremely similar to, or modeled after, something in the
|
||||
standard library, or something else we interoperate with, it's ok to
|
||||
standard library, Boost, or something else we interoperate with, it's ok to
|
||||
use their naming conventions. For example, very general utility classes and
|
||||
templates (the kind of thing you would normally find in std) should
|
||||
templates (the kind of thing you would normally find in std or boost) should
|
||||
be lower case with underscores separating words, as they would be if they
|
||||
were standards.
|
||||
|
||||
template <class T> shared_ptr;
|
||||
class scoped_mutex;
|
||||
|
||||
Macros should be ALL_CAPS, if used at all.
|
||||
|
||||
Names of data should generally be nouns. Functions/methods are trickier: a
|
||||
the name of a function that returns a value but has no side effects should
|
||||
be a noun, but a procedure that performs an action should be a verb.
|
||||
@@ -409,11 +302,11 @@ Namespaces: yes, use them!
|
||||
|
||||
#### Third-party libraries
|
||||
|
||||
Prefer C++17 `std` rather than other third party libraries, where
|
||||
Prefer C++11 `std` rather than Boost or other third party libraries, where
|
||||
both can do the same task.
|
||||
|
||||
If you see a third party library already used as a dependency (such as OIIO,
|
||||
Imath, or LLVM), feel free to any of its public features in OSL
|
||||
Boost, Ilmbase, or LLVM), feel free to any of its public features in OSL
|
||||
internals (provided those features are present in the minimum version of
|
||||
that library that we support).
|
||||
|
||||
@@ -437,6 +330,9 @@ protected members of classes), please use Doxygen-style comments. They looks
|
||||
like this:
|
||||
|
||||
/// Explanation of a class. Note THREE slashes!
|
||||
/// Also, you need at least two lines like this. If you don't have enough
|
||||
/// for two lines, make one line blank like this:
|
||||
///
|
||||
class myclass {
|
||||
....
|
||||
float foo; ///< Doxygen comments on same line look like this
|
||||
|
||||
+12
-22
@@ -20,24 +20,21 @@ guidance.
|
||||
The OSL project grows and thrives from assistance from Contributors.
|
||||
Contributors include anyone in the community who contributes code,
|
||||
documentation, or other technical artifacts that have been incorporated into
|
||||
the project repository.
|
||||
the projects repository.
|
||||
|
||||
Anyone can be a Contributor. You need no formal approval from the project,
|
||||
beyond the legal forms.
|
||||
|
||||
### How to Become a Contributor
|
||||
|
||||
* Review the coding standards and [contributing guidelines](CONTRIBUTING.md)
|
||||
to ensure your contribution is in line with the project's coding and styling
|
||||
guidelines.
|
||||
* Review the coding standards to ensure your contribution is in line
|
||||
with the project's coding and styling guidelines.
|
||||
|
||||
* Sign the Individual CLA, or if you are employed by an organization that
|
||||
might have any claim to IP you create, have your organization sign the
|
||||
Corporate CLA.
|
||||
|
||||
* Submit your code as a PR with the appropriate DCO sign-off on each commit.
|
||||
The easiest way to do this is to ensure that you commit your code with `git
|
||||
commit -s`.
|
||||
* Submit your code as a PR with the appropriate DCO sign-off.
|
||||
|
||||
## Committers
|
||||
|
||||
@@ -78,10 +75,9 @@ request that the TSC restore them to active Committer status.
|
||||
|
||||
## Technical Steering Committee
|
||||
|
||||
The Technical Steering Committee (TSC) has final authority over this project.
|
||||
As defined in the project [technical charter](https://github.com/AcademySoftwareFoundation/foundation/blob/main/project_charters/open-shading-language_charter.md),
|
||||
in addition to committer activities, TSC responsibilities also include, but
|
||||
are not limited to:
|
||||
The Technical Steering Committee (TSC) has final authority over this
|
||||
project. As defined in the project charter, TSC responsibilities include,
|
||||
but are not limited to:
|
||||
|
||||
* Coordinating technical direction of the Project.
|
||||
|
||||
@@ -138,12 +134,11 @@ Current voting members of the TSC are:
|
||||
* Eric Enderton - NVIDIA
|
||||
* Stephen Friedman - Pixar
|
||||
* Nicolas Guiard - Isotropix
|
||||
* Thiago Ize - Autodesk
|
||||
* Lee Kerley - Apple
|
||||
* Derek Haase - DNEG
|
||||
* Adrien Herubel - Autodesk
|
||||
* Lee Kerley - Sony Pictures Imageworks
|
||||
* Mitch Prater - Laika
|
||||
* Alexey Smolenchuk - DNEG
|
||||
* Brecht Van Lommel - Blender
|
||||
* Alex Wells - Intel
|
||||
|
||||
### TSC Nomination and Succession
|
||||
|
||||
@@ -183,9 +178,6 @@ her absence. Meetings may also be streamed online where appropriate;
|
||||
connection details will be posted to the osl-dev mail list in advance of the
|
||||
scheduled meeting.
|
||||
|
||||
The biweekly TSC meetings can be found on the [ASWF Calendar](https://calendar.openshadinglanguage.org),
|
||||
just click on the OSL TSC meeting entries to get the Zoom link.
|
||||
|
||||
Items are added to the TSC agenda which are considered contentious or are
|
||||
modifications of governance, contribution policy, TSC membership, or release
|
||||
process, in addition to topics involving the high-level technical direction
|
||||
@@ -209,11 +201,9 @@ The TSC may invite additional persons to participate in a non-voting
|
||||
capacity.
|
||||
|
||||
The meeting chair is responsible for ensuring that minutes are taken and
|
||||
archived.
|
||||
archived in the project repository.
|
||||
|
||||
Due to the challenges of scheduling a global meeting with participants in
|
||||
several time zones, the TSC will seek to resolve as many agenda items as
|
||||
possible outside of meetings on the public mailing list or through GitHub
|
||||
issues, discussions, and pull requests.
|
||||
possible outside of meetings on the public mailing list.
|
||||
|
||||
Meeting notes (usually very brief) can be found at: https://docs.google.com/document/d/1yf0bG6eoE2EvKZBNZX3nskdTvu99ADTDTNOknCDJd1I
|
||||
|
||||
+51
-83
@@ -4,32 +4,27 @@
|
||||
Building OSL
|
||||
============
|
||||
|
||||
OSL currently compiles and runs cleanly on Linux (x86_64), Mac OS X (x86_64
|
||||
and aarch64), and Windows (x86_64). It may build and run on other platforms as
|
||||
well, but we don't officially support or test other than these platforms.
|
||||
|
||||
Shader execution is supported on the native architectures of those x86_64 and
|
||||
aarch64 platforms, a special batched 4-, 8- or 16-wide SIMD execution mode
|
||||
requiring x86_64 with SSE2, AVX/AVX2 or AVX-512 instructions, as well as on
|
||||
NVIDIA GPUs using Cuda+OptiX.
|
||||
OSL currently compiles and runs cleanly on Linux, Mac OS X, and Windows.
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
OSL requires the following dependencies or tools.
|
||||
NEW or CHANGED minimum dependencies since the last major release are **bold**.
|
||||
NEW or CHANGED dependencies since the last major release are **bold**.
|
||||
|
||||
* Build system: [CMake](https://cmake.org/) 3.19 or newer (tested
|
||||
through 4.2)
|
||||
* Build system: [CMake](https://cmake.org/) 3.12 or newer (tested through 3.21)
|
||||
|
||||
* A suitable C++17 compiler to build OSL itself, which may be any of:
|
||||
- GCC 9.3 or newer (tested through gcc 14)
|
||||
- Clang 5 or newer (tested through clang 22)
|
||||
- Microsoft Visual Studio 2017 or newer
|
||||
- **Intel LLVM-based icx compiler version 2022 or newer** (note: the classic `icc` compiler is no longer supported).
|
||||
* A suitable C++11 compiler to build OSL itself, which may be any of:
|
||||
- GCC 4.8.5 or newer (tested through gcc 11.2)
|
||||
- Clang 3.4 or newer (tested through clang 13)
|
||||
- Microsoft Visual Studio 2015 or newer
|
||||
- Intel C++ compiler icc version 13 (?) or newer
|
||||
|
||||
* [OpenImageIO](http://openimageio.org) 3.0 or newer (tested through 3.1
|
||||
and main)
|
||||
OSL should compile also properly with C++14 or C++17, but they are not
|
||||
required (unless you are using LLVM >= 10, in which case at least C++14
|
||||
is needed).
|
||||
|
||||
* **[OpenImageIO](http://openimageio.org) 2.0 or newer** (tested through 2.3)
|
||||
|
||||
OSL uses OIIO both for its texture mapping functionality as well as
|
||||
numerous utility classes. If you are integrating OSL into an existing
|
||||
@@ -43,36 +38,36 @@ NEW or CHANGED minimum dependencies since the last major release are **bold**.
|
||||
|
||||
After building OpenImageIO, if you don't have it installed in a
|
||||
"standard" place (like /usr/include), you should set the environment
|
||||
variable `$OpenImageIO_ROOT` to point to the compiled distribution, and
|
||||
then OSL's build scripts will be able to find it. You should also have
|
||||
$OpenImageIO_ROOT/lib to be in your LD_LIBRARY_PATH (or
|
||||
DYLD_LIBRARY_PATH on OS X).
|
||||
variable $OPENIMAGEIOHOME to point to the compiled distribution, as
|
||||
well as for $OPENIMAGEIOHOME/lib to be in your LD_LIBRARY_PATH (or
|
||||
DYLD_LIBRARY_PATH on OS X) and then OSL's build scripts will be able
|
||||
to find it.
|
||||
|
||||
* [LLVM](http://www.llvm.org) **14.0 or newer**, 15, 16, 17, 18, 19, 20, 21,
|
||||
22, including clang libraries.
|
||||
* **[LLVM](http://www.llvm.org) 7, 8, 9, 10, 11, 12, or 13**, including clang
|
||||
libraries.
|
||||
|
||||
* (optional) For GPU rendering on NVIDIA GPUs:
|
||||
* [OptiX](https://developer.nvidia.com/rtx/ray-tracing/optix) 7.0 or higher.
|
||||
* [Cuda](https://developer.nvidia.com/cuda-downloads) 9.0 or higher. It is
|
||||
recommended that you use 11.0 or higher.
|
||||
Note that LLVM 10+ is not compatible with C++11, and requires C++14 or
|
||||
later. If you *must* build OSL with C++11, you need to use an LLVM that
|
||||
is LLVM 9 or earlier.
|
||||
|
||||
* [Imath](https://github.com/AcademySoftwareFoundation/Imath) 3.1 or newer.
|
||||
* [Boost](https://www.boost.org) 1.55 or newer (tested through boost 1.76)
|
||||
* [Ilmbase or Imath](http://openexr.com/downloads.html) 2.0 or newer (tested through 3.1)
|
||||
* [Flex](https://github.com/westes/flex) 2.5.35 or newer and
|
||||
[GNU Bison](https://www.gnu.org/software/bison/) 2.7 or newer.
|
||||
Note that on some MacOS/xcode releases, the system-installed Bison is too
|
||||
old, and it's better to install a newer Bison (via Homebrew is one way to
|
||||
do this easily).
|
||||
* [PugiXML](http://pugixml.org/) >= 1.8 (we have tested through 1.15).
|
||||
* [PugiXML](http://pugixml.org/)
|
||||
* (optional) [Partio](https://www.disneyanimation.com/technology/partio.html)
|
||||
If it is not found at build time, the OSL `pointcloud` functions will not
|
||||
be operative.
|
||||
* (optional) Python: If you are building the Python bindings or running the
|
||||
testsuite:
|
||||
* **Python >= 3.9** (tested through 3.14)
|
||||
* pybind11 >= 2.7 (tested through 3.0)
|
||||
* NumPy (tested through 2.4)
|
||||
* (optional) Qt5 >= 5.6 or Qt6 (tested Qt5 through 5.15 and Qt6 through 6.10).
|
||||
If not found at build time, the `osltoy` application will be disabled.
|
||||
testsuite:
|
||||
* Python >= 2.7 (tested against 2.7, 3.6, 3.7, 3.8, 3.9)
|
||||
* pybind11 >= 2.4.2 (Tested through 2.7).
|
||||
* NumPy
|
||||
* (optional) Qt >= 5.6 (tested through 5.15). If not found at build time,
|
||||
the `osltoy` application will be disabled.
|
||||
|
||||
|
||||
|
||||
@@ -81,75 +76,48 @@ Build process
|
||||
|
||||
Here are the steps to check out, build, and test the OSL distribution:
|
||||
|
||||
1. Install and build dependencies.
|
||||
0. Install and build dependencies.
|
||||
|
||||
2. Check out a copy of the source code from the Git repository:
|
||||
1. Check out a copy of the source code from the Git repository:
|
||||
|
||||
git clone https://github.com/AcademySoftwareFoundation/OpenShadingLanguage.git osl
|
||||
|
||||
3. Change to the distribution directory and 'make'
|
||||
2. Change to the distribution directory and 'make'
|
||||
|
||||
cd osl
|
||||
make
|
||||
|
||||
Note: OSL uses 'CMake' for its cross-platform build system. But for
|
||||
simplicity, we have made a "make wrapper" around it, so that by just
|
||||
typing 'make' everything will build. Type 'make help' for other
|
||||
typing 'make' everything will build. Type 'make help' for other
|
||||
options, and note that 'make nuke' will blow everything away for the
|
||||
freshest possible compile.
|
||||
|
||||
You can also ignore the top level Makefile wrapper, and instead use
|
||||
CMake directly:
|
||||
|
||||
cmake -B build -S .
|
||||
cmake --build build --target install
|
||||
|
||||
NOTE: If the build breaks due to compiler warnings which have been elevated
|
||||
to errors, you can try "make clean" followed by "make STOP_ON_WARNING=0",
|
||||
or if using cmake directly, add `-DSTOP_ON_WARNING=0` to the cmake
|
||||
configuration command. That will create a build that will only stop for
|
||||
NOTE: If the build breaks due to compiler warnings which have been
|
||||
elevated to errors, you can try "make clean" followed by
|
||||
"make STOP_ON_WARNING=0", that create a build that will only stop for
|
||||
full errors, not warnings.
|
||||
|
||||
4. After compilation, you'll end up with a full OSL distribution in
|
||||
dist/
|
||||
3. After compilation, you'll end up with a full OSL distribution in
|
||||
dist/ARCH, where ARCH is the architecture you are building on, one of
|
||||
"linux", "linux64", "macosx", "windows", or "windows64".
|
||||
|
||||
5. Add the "dist/bin" to your `$PATH`, and "dist/lib" to your
|
||||
`$LD_LIBRARY_PATH` (or `$DYLD_LIBRARY_PATH` on MacOS), or copy the contents
|
||||
Note: The default is to make an optimized "release" build. If
|
||||
instead type 'make debug' at the top level, you will end up with
|
||||
a debug build (no optimization, full symbols) in "dist/ARCH.debug".
|
||||
|
||||
4. Add the "dist/ARCH/bin" to your $PATH, and "dist/ARCH/lib" to your
|
||||
$LD_LIBRAY_PATH (or $DYLD_LIBRARY_PATH on OS X), or copy the contents
|
||||
of those files to appropriate directories. Public include files
|
||||
(those needed when building applications that incorporate OSL)
|
||||
can be found in "dist/include", and documentation can be found
|
||||
in "dist/share/doc".
|
||||
can be found in "dist/ARCH/include", and documentation can be found
|
||||
in "dist/ARCH/share/doc".
|
||||
|
||||
6. After building (and setting your library path), you can run the
|
||||
5. After building (and setting your library path), you can run the
|
||||
test suite with:
|
||||
|
||||
make test
|
||||
|
||||
Conda Environment
|
||||
-----------------
|
||||
|
||||
To simplify installation of Python and other dependencies, you can use
|
||||
the provided Conda environment setup script located at `src/build-scripts/`
|
||||
by running:
|
||||
|
||||
source src/build-scripts/configure_conda_env.bash
|
||||
|
||||
**This script will:**
|
||||
* Check for Miniconda installation.
|
||||
* Create a Conda environment named `osl-env` if it doesn't exist.
|
||||
* Install all required dependencies into the environment.
|
||||
* Activate the environment for the current shell session.
|
||||
|
||||
After running this script, the `osl-env` environment will be created, and
|
||||
all you need to do when opening a new shell session is simply activate the
|
||||
Conda environment.
|
||||
|
||||
**When to use it:**
|
||||
Run this script after cloning the repository and before building OSL. It
|
||||
sets up a consistent development environment without manually installing
|
||||
all dependencies. If you already have all required dependencies installed,
|
||||
running it is optional.
|
||||
|
||||
|
||||
Troubleshooting
|
||||
----------------
|
||||
|
||||
|
||||
@@ -19,6 +19,18 @@
|
||||
|
||||
working_dir := ${shell pwd}
|
||||
|
||||
# Figure out which architecture we're on
|
||||
include ${working_dir}/src/make/detectplatform.mk
|
||||
|
||||
# Presence of make variables DEBUG and PROFILE cause us to make special
|
||||
# builds, which we put in their own areas.
|
||||
ifdef DEBUG
|
||||
variant +=.debug
|
||||
endif
|
||||
ifdef PROFILE
|
||||
variant +=.profile
|
||||
endif
|
||||
|
||||
MY_MAKE_FLAGS ?=
|
||||
MY_NINJA_FLAGS ?=
|
||||
MY_CMAKE_FLAGS ?=
|
||||
@@ -26,19 +38,31 @@ BUILDSENTINEL ?= Makefile
|
||||
NINJA ?= ninja
|
||||
CMAKE ?= cmake
|
||||
CMAKE_BUILD_TYPE ?= Release
|
||||
build_dir ?= build
|
||||
dist_dir ?= dist
|
||||
|
||||
# Site-specific build instructions
|
||||
OSL_SITE ?= ${shell uname -n}
|
||||
ifneq (${shell echo ${OSL_SITE} | grep imageworks.com},)
|
||||
include ${working_dir}/site/spi/Makefile-bits
|
||||
endif
|
||||
|
||||
# Set up variables holding the names of platform-dependent directories --
|
||||
# set these after evaluating site-specific instructions
|
||||
top_build_dir ?= build
|
||||
build_dir ?= ${top_build_dir}/${platform}${variant}
|
||||
top_dist_dir ?= dist
|
||||
dist_dir ?= ${top_dist_dir}/${platform}${variant}
|
||||
|
||||
INSTALL_PREFIX ?= ${working_dir}/${dist_dir}
|
||||
|
||||
VERBOSE ?= ${SHOWCOMMANDS}
|
||||
ifneq (${VERBOSE},)
|
||||
MY_MAKE_FLAGS += VERBOSE=${VERBOSE}
|
||||
MY_CMAKE_FLAGS += -DVERBOSE:BOOL=${VERBOSE} --log-level=VERBOSE
|
||||
MY_CMAKE_FLAGS += -DVERBOSE:BOOL=${VERBOSE}
|
||||
ifneq (${VERBOSE},0)
|
||||
MY_NINJA_FLAGS += -v
|
||||
TEST_FLAGS += -V
|
||||
endif
|
||||
$(info OSL_SITE = ${OSL_SITE})
|
||||
$(info dist_dir = ${dist_dir})
|
||||
$(info INSTALL_PREFIX = ${INSTALL_PREFIX})
|
||||
endif
|
||||
@@ -92,6 +116,10 @@ ifneq (${OSL_LIBNAME_SUFFIX},)
|
||||
MY_CMAKE_FLAGS += -DOSL_LIBNAME_SUFFIX:STRING=${OSL_LIBNAME_SUFFIX}
|
||||
endif
|
||||
|
||||
ifneq (${OIIO_LIBNAME_SUFFIX},)
|
||||
MY_CMAKE_FLAGS += -DOIIO_LIBNAME_SUFFIX:STRING=${OIIO_LIBNAME_SUFFIX}
|
||||
endif
|
||||
|
||||
ifneq (${OSL_BUILD_TESTS},)
|
||||
MY_CMAKE_FLAGS += -DOSL_BUILD_TESTS:BOOL=${OSL_BUILD_TESTS}
|
||||
endif
|
||||
@@ -100,6 +128,10 @@ ifneq (${OSL_BUILD_SHADERS},)
|
||||
MY_CMAKE_FLAGS += -DOSL_BUILD_SHADERS:BOOL=${OSL_BUILD_SHADERS}
|
||||
endif
|
||||
|
||||
ifneq (${OSL_BUILD_MATERIALX},)
|
||||
MY_CMAKE_FLAGS += -DOSL_BUILD_MATERIALX:BOOL=${OSL_BUILD_MATERIALX}
|
||||
endif
|
||||
|
||||
ifdef DEBUG
|
||||
CMAKE_BUILD_TYPE=Debug
|
||||
endif
|
||||
@@ -139,10 +171,6 @@ ifneq (${USE_SIMD},)
|
||||
MY_CMAKE_FLAGS += -DUSE_SIMD:STRING="${USE_SIMD}"
|
||||
endif
|
||||
|
||||
ifneq (${VEC_REPORT},)
|
||||
MY_CMAKE_FLAGS += -DVEC_REPORT:BOOL="${VEC_REPORT}"
|
||||
endif
|
||||
|
||||
ifneq (${TEST},)
|
||||
TEST_FLAGS += -R ${TEST}
|
||||
endif
|
||||
@@ -192,10 +220,7 @@ ifneq (${BUILD_MISSING_DEPS},)
|
||||
endif
|
||||
|
||||
ifneq (${USE_OPTIX},)
|
||||
MY_CMAKE_FLAGS += -DOSL_USE_OPTIX:BOOL=${USE_OPTIX}
|
||||
endif
|
||||
ifneq (${OSL_USE_OPTIX},)
|
||||
MY_CMAKE_FLAGS += -DOSL_USE_OPTIX:BOOL=${OSL_USE_OPTIX}
|
||||
MY_CMAKE_FLAGS += -DUSE_OPTIX:BOOL=${USE_OPTIX}
|
||||
endif
|
||||
|
||||
ifneq (${USE_PYTHON},)
|
||||
@@ -206,6 +231,14 @@ ifneq (${PYTHON_VERSION},)
|
||||
MY_CMAKE_FLAGS += -DPYTHON_VERSION:STRING=${PYTHON_VERSION}
|
||||
endif
|
||||
|
||||
ifneq (${PYLIB_LIB_PREFIX},)
|
||||
MY_CMAKE_FLAGS += -DPYLIB_LIB_PREFIX:BOOL=${PYLIB_LIB_PREFIX}
|
||||
endif
|
||||
|
||||
ifneq (${PYLIB_INCLUDE_SONAME},)
|
||||
MY_CMAKE_FLAGS += -DPYLIB_INCLUDE_SONAME:BOOL=${PYLIB_INCLUDE_SONAME}
|
||||
endif
|
||||
|
||||
|
||||
#$(info MY_CMAKE_FLAGS = ${MY_CMAKE_FLAGS})
|
||||
#$(info MY_MAKE_FLAGS = ${MY_MAKE_FLAGS})
|
||||
@@ -218,7 +251,7 @@ endif
|
||||
#########################################################################
|
||||
# Top-level documented targets
|
||||
|
||||
all: install
|
||||
all: dist
|
||||
|
||||
# 'make debug' is implemented via recursive make setting DEBUG
|
||||
debug:
|
||||
@@ -238,7 +271,7 @@ config:
|
||||
cd ${build_dir} ; \
|
||||
${CMAKE} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} \
|
||||
-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} \
|
||||
${MY_CMAKE_FLAGS} ${working_dir} ; \
|
||||
${MY_CMAKE_FLAGS} ../.. ; \
|
||||
fi)
|
||||
|
||||
|
||||
@@ -276,7 +309,7 @@ clang-format: config
|
||||
)
|
||||
|
||||
|
||||
# DEPRECATED: 'make dist' is just a synonym for 'make install'
|
||||
# 'make dist' is just a synonym for 'make install'
|
||||
dist : install
|
||||
|
||||
TEST_FLAGS += --force-new-ctest-process --output-on-failure
|
||||
@@ -308,10 +341,10 @@ clean:
|
||||
realclean: clean
|
||||
${CMAKE} -E remove_directory ${dist_dir}
|
||||
|
||||
# DEPRECATED: use 'make realclean'
|
||||
# 'make nuke' blows away the build and dist areas for all platforms
|
||||
nuke:
|
||||
${CMAKE} -E remove_directory ${build_dir}
|
||||
${CMAKE} -E remove_directory ${dist_dir}
|
||||
${CMAKE} -E remove_directory ${top_build_dir}
|
||||
${CMAKE} -E remove_directory ${top_dist_dir}
|
||||
|
||||
#########################################################################
|
||||
|
||||
@@ -328,6 +361,7 @@ help:
|
||||
@echo " make profile Build and install for profiling"
|
||||
@echo " make clean Remove the temporary files in ${build_dir}"
|
||||
@echo " make realclean Remove both ${build_dir} AND ${dist_dir}"
|
||||
@echo " make nuke Remove ALL of build and dist (not just ${platform})"
|
||||
@echo " make test Run tests"
|
||||
@echo " make testall Run all tests, even broken ones"
|
||||
@echo " make clang-format Run clang-format on all the source files"
|
||||
@@ -336,8 +370,9 @@ help:
|
||||
@echo " C++ compiler and build process:"
|
||||
@echo " VERBOSE=1 Show all compilation commands"
|
||||
@echo " STOP_ON_WARNING=0 Do not stop building if compiler warns"
|
||||
@echo " OSL_SITE=xx Use custom site build mods"
|
||||
@echo " MYCC=xx MYCXX=yy Use custom compilers"
|
||||
@echo " CMAKE_CXX_STANDARD=17 C++ standard to build with (default is 17)"
|
||||
@echo " CMAKE_CXX_STANDARD=14 Compile in C++14 mode (default is C++11)"
|
||||
@echo " USE_LIBCPLUSPLUS=1 For clang, use libc++"
|
||||
@echo " GLIBCXX_USE_CXX11_ABI=1 For gcc, use the new string ABI"
|
||||
@echo " EXTRA_CPP_ARGS= Additional args to the C++ command"
|
||||
@@ -357,9 +392,10 @@ help:
|
||||
@echo " if found. And you can hint where to find it with Foo_ROOT=path"
|
||||
@echo " Note that it is case sensitive!"
|
||||
@echo " Finding and Using Dependencies:"
|
||||
@echo " BOOST_ROOT=path Custom Boost installation"
|
||||
@echo " USE_QT=0 Skip anything that needs Qt"
|
||||
@echo " LLVM-related options:"
|
||||
@echo " LLVM_VERSION=19.0 Specify which LLVM version to use"
|
||||
@echo " LLVM_VERSION=7.0 Specify which LLVM version to use"
|
||||
@echo " LLVM_DIRECTORY=xx Specify where LLVM lives"
|
||||
@echo " LLVM_NAMESPACE=xx Specify custom LLVM namespace"
|
||||
@echo " LLVM_STATIC=1 Use static LLVM libraries"
|
||||
@@ -370,15 +406,11 @@ help:
|
||||
@echo " USE_FAST_MATH=1 Use faster, but less accurate math (set to 0 for libm defaults)"
|
||||
@echo " OSL_BUILD_TESTS=0 Don't build unit tests, testshade, testrender"
|
||||
@echo " OSL_BUILD_SHADERS=0 Don't build any shaders"
|
||||
@echo " OSL_BUILD_MATERIALX=1 Build MaterialX shaders"
|
||||
@echo " USE_SIMD=arch Build with SIMD support (comma-separated choices:"
|
||||
@echo " 0, sse2, sse3, ssse3, sse4.1, sse4.2, f16c,"
|
||||
@echo " avx, avx2, avx512f)"
|
||||
@echo " OSL_USE_OPTIX=1 Build the OptiX test renderer"
|
||||
@echo " USE_BATCHED=targets Build batched SIMD execution of shaders for (comma-separated choices:"
|
||||
@echo " 0, b4_SSE2, b8_AVX, b8_AVX2, b8_AVX2_noFMA,"
|
||||
@echo " b8_AVX512, b8_AVX512_noFMA,"
|
||||
@echo " b16_AVX512, b16_AVX512_noFMA)"
|
||||
@echo " VEC_REPORT=0 Generate compiler vectorization reports"
|
||||
@echo " USE_OPTIX=1 Build the OptiX test renderer"
|
||||
@echo " make test, extra options:"
|
||||
@echo " TEST=regex Run only tests matching the regex"
|
||||
@echo ""
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<div align="center">
|
||||
<img src="ASWF/logos/openshadinglanguage-stacked-Shaded.png">
|
||||
<img src="https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/src/doc/Figures/osl-short.png" width=256 height=128>
|
||||
|
||||
<!-- <H1>Open Shading Language</H1> -->
|
||||
<H1>Open Shading Language</H1>
|
||||
</div>
|
||||
|
||||
[](https://www.youtube.com/watch?v=nmwMz1YnGPA "Open Shading Language Reel 2020")
|
||||
|
||||
[](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/actions)
|
||||
[](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/LICENSE.md)
|
||||
[](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/LICENSE.md)
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/3061)
|
||||
[](https://open-shading-language.readthedocs.io/en/main/?badge=main)
|
||||
|
||||
|
||||
|
||||
Introduction
|
||||
@@ -219,15 +219,14 @@ inferred from public sources, or that we've been told is ok to list here. If
|
||||
an OSL-using project is missing and it's not a secret, just email the OSL
|
||||
project leader or submit a PR with edits to this file.*
|
||||
|
||||
### Renderers and other production tools with OSL support
|
||||
|
||||
(In approximate order of adding OSL support)
|
||||
|
||||
* [Sony Pictures Imageworks: in-house "Arnold" renderer](https://dl.acm.org/doi/10.1145/3180495)
|
||||
Renderers and other tools with OSL support (in approximate order of
|
||||
adding OSL support):
|
||||
* Sony Pictures Imageworks: in-house "Arnold" renderer
|
||||
* [Blender/Cycles](https://docs.blender.org/manual/en/dev/render/shader_nodes/osl.html)
|
||||
* [Chaos Group: V-Ray](https://www.chaosgroup.com/)
|
||||
* [Pixar: PhotoRealistic RenderMan RIS](https://renderman.pixar.com)
|
||||
* Isotropix: [Clarisse iFX](https://www.isotropix.com/products/clarisse/ifx) / [Clarisse BUiLDER](https://www.isotropix.com/products/clarisse/builder) / [Angie](https://www.isotropix.com/products/angie)
|
||||
* [Isotropix: Clarisse](http://www.isotropix.com/clarisse)
|
||||
* [Isotropix: Angie](http://www.isotropix.com/angie)
|
||||
* [Autodesk Beast](http://www.autodesk.com/products/beast/overview)
|
||||
* [Appleseed](http://appleseedhq.net)
|
||||
* [Animal Logic: Glimpse renderer](https://www.fxguide.com/featured/a-glimpse-at-animal-logic/)
|
||||
@@ -236,15 +235,8 @@ project leader or submit a PR with edits to this file.*
|
||||
* Ubisoft motion picture group's proprietary renderer
|
||||
* [Autodesk/SolidAngle: Arnold](https://www.solidangle.com/arnold/)
|
||||
* [Autodesk: 3DS Max 2019](https://help.autodesk.com/view/3DSMAX/2019/ENU/?guid=__developer_3ds_max_sdk_features_rendering_osl_html)
|
||||
* [Maxon: Redshift](https://www.maxon.net/en/redshift)
|
||||
|
||||
### Significant work using OSL, grouped by year of release date:
|
||||
|
||||
(Here we are considering "significant work" to mean a feature film released
|
||||
theatrically or on a major streaming platform, TV/streaming series heavily
|
||||
featuring visual effects or animation, or short films that have won or been
|
||||
nominated for major awards.)
|
||||
|
||||
Films using OSL (grouped by year of release date):
|
||||
* **(2012)**
|
||||
Men in Black 3, The Amazing Spider-Man, Hotel Transylvania
|
||||
* **(2013)**
|
||||
@@ -279,7 +271,6 @@ nominated for major awards.)
|
||||
Ghostbusters,
|
||||
Star Trek Beyond,
|
||||
Suicide Squad,
|
||||
Kubo and the Two Strings,
|
||||
Kingsglaive: Final Fantasy XV,
|
||||
Storks,
|
||||
Miss Peregrine's Home for Peculiar Children,
|
||||
@@ -314,7 +305,7 @@ nominated for major awards.)
|
||||
* **(2018)**
|
||||
Peter Rabbit,
|
||||
Black Panther,
|
||||
Annihilation,
|
||||
Annnihilation,
|
||||
Red Sparrow,
|
||||
Pacific Rim Uprising,
|
||||
Avengers Infinity War,
|
||||
@@ -362,8 +353,7 @@ nominated for major awards.)
|
||||
Richard Jewell,
|
||||
Game of Thrones (S8),
|
||||
Lost in Space (S1),
|
||||
Togo,
|
||||
Missing Link
|
||||
Togo
|
||||
* **(2020)**
|
||||
Underwater,
|
||||
Birds of Prey,
|
||||
@@ -379,9 +369,7 @@ nominated for major awards.)
|
||||
Over the Moon,
|
||||
Wonder Woman 1984,
|
||||
Soul,
|
||||
The Mandalorian (S2),
|
||||
The Boys (S2),
|
||||
Umbrella Academy (S2)
|
||||
The Mandalorian (S2)
|
||||
* **(2021)**
|
||||
Chaos Walking,
|
||||
Peter Rabbit 2: The Runaway,
|
||||
@@ -394,7 +382,6 @@ nominated for major awards.)
|
||||
F9,
|
||||
Vivo,
|
||||
Jungle Cruise,
|
||||
Cinderella,
|
||||
Dune,
|
||||
No Time To Die,
|
||||
Ron's Gone Wrong,
|
||||
@@ -402,156 +389,69 @@ nominated for major awards.)
|
||||
Last Night in Soho,
|
||||
Ghostbusters: Afterlife,
|
||||
Spider-Man 3: No Way Home,
|
||||
Matrix Resurrections,
|
||||
Sing 2
|
||||
* **(2022)**
|
||||
Matrix Resurrections
|
||||
* **(2022 / upcoming)**
|
||||
Hotel Transylvania 4: Transformania,
|
||||
Death on the Nile,
|
||||
Uncharted,
|
||||
Turning Red,
|
||||
The Adam Project,
|
||||
Doctor Strange in the Multiverse of Madness,
|
||||
Love, Death, and Robots: In Vaulted Halls Entombed,
|
||||
Jurassic World: Dominion,
|
||||
Lightyear,
|
||||
Thor: Love and Thunder,
|
||||
The Sea Beast,
|
||||
DC League of Super Pets,
|
||||
Minions: Rise of Gru,
|
||||
Bullet Train,
|
||||
Slumberland,
|
||||
Glass Onion,
|
||||
Puss in Boots: The Last Wish,
|
||||
Archive 81 (series),
|
||||
Moon Night (series),
|
||||
Obi-Wan Kenobi (series),
|
||||
The Boys (S3),
|
||||
Andor (S1),
|
||||
Troll,
|
||||
She-Hulk (series)
|
||||
* **(2023)**
|
||||
Ant-Man and the Wasp: Quantumania,
|
||||
The Mandalorian S3,
|
||||
The Magician's Elephant,
|
||||
Super Mario Bros Film,
|
||||
Guardians of the Galaxy 3,
|
||||
Spider-Man: Across the Spider-Verse,
|
||||
Elemental,
|
||||
Indiana Jones and the Dial of Destiny,
|
||||
Nimona,
|
||||
The Marvels,
|
||||
Leo,
|
||||
The Boys (S4),
|
||||
The Moon,
|
||||
Migration,
|
||||
* **(2024)**
|
||||
Ghostbusters: Frozen Empire,
|
||||
The Garfield Movie,
|
||||
Inside Out 2,
|
||||
Red One,
|
||||
Dream Productions (series),
|
||||
The Lord of the Rings: The Rings of Power (S2),
|
||||
* **(2025)**
|
||||
Win or Lose (series),
|
||||
A Minecraft Movie,
|
||||
K-Pop Demon Hunters,
|
||||
Fountain of Youth,
|
||||
Elio,
|
||||
Fantastic Four: First Steps,
|
||||
Heads of State,
|
||||
Bad Guys 2,
|
||||
In Your Dreams,
|
||||
The Last of Us (S2),
|
||||
Murderbot (S1),
|
||||
* **(2026 / upcoming)**
|
||||
GOAT,
|
||||
Hoppers,
|
||||
Project Hail Mary,
|
||||
...
|
||||
|
||||
|
||||
👷 Building and Installation
|
||||
----------------------------
|
||||
Building and Installation
|
||||
-------------------------
|
||||
|
||||
Please read the [INSTALL.md](INSTALL.md) file for detailed instructions on
|
||||
how to build and install OSL.
|
||||
|
||||
|
||||
💁 Documentation
|
||||
----------------
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
The OSL language specification can be found at [OSL Documentation on ReadTheDocs](https://docs.openshadinglanguage.org)
|
||||
There is also a [PDF version](https://readthedocs.org/projects/open-shading-language/downloads/pdf/stable/).
|
||||
|
||||
For those interested in learning to program OSL shaders there is the
|
||||
[Siggraph 2024 Course](https://dl.acm.org/doi/proceedings/10.1145/3664475),
|
||||
[Shader Writing in Open Shading Language](https://dl.acm.org/doi/10.1145/3664475.3664534)
|
||||
and its companion
|
||||
[Supplementary Materials](https://github.com/LaikaStudios/OSLShaderWriting),
|
||||
which use RenderMan<sup>®</sup> in the examples but which are primarily about writing OSL shaders.
|
||||
|
||||
There is also the [Shader Writing in Open Shading Language book](https://www.routledge.com/Shader-Writing-in-Open-Shading-Language-with-RenderManr-Examples/Prater/p/book/9781032421100).
|
||||
This covers all the material from the Siggraph course but in far greater detail. It also includes much more information about how OSL operates and covers a much broader range of shader examples.
|
||||
The OSL language specification can be found at
|
||||
[src/doc/osl-languagespec.pdf](src/doc/osl-languagespec.pdf) (in a source
|
||||
distribution) or in the share/doc/OSL/osl-languagespec.pdf file of an
|
||||
installed binary distribution.
|
||||
|
||||
|
||||
🚑 Contact & reporting problems
|
||||
-------------------------------
|
||||
Contact & reporting problems
|
||||
----------------------------
|
||||
|
||||
Simple "how do I...", "I'm having trouble", or "is this a bug" questions are
|
||||
best asked on the [osl-dev developer mail list](https://lists.aswf.io/g/osl-dev).
|
||||
best asked on the [osl-dev developer mail
|
||||
list](https://lists.aswf.io/g/osl-dev).
|
||||
That's where the most people will see it and potentially be able to answer
|
||||
your question quickly (more so than a GH "issue"). For quick questions, you
|
||||
could also try the [ASWF Slack](https://slack.aswf.io) `#openshadinglanguage`
|
||||
channel.
|
||||
your question quickly (more so than a GH "issue").
|
||||
|
||||
A bug or build problem that you are relatively certain is a legit problem in
|
||||
the code, and **for which you can give clear instructions for how to
|
||||
reproduce**, should be [reported as
|
||||
Bugs, build problems, and discovered vulnerabilities that you are relatively
|
||||
certain is a legit problem in the code, and for which you can give clear
|
||||
instructions for how to reproduce, should be [reported as
|
||||
issues](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/issues).
|
||||
|
||||
To report a security vulnerability that is serious enough that it should not
|
||||
be discussed publicly until a patch is ready, please file a GitHub [security
|
||||
advisory](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/security/advisories/new).
|
||||
|
||||
If any other issue requires confidentiality that precludes a public question
|
||||
or issue, you may contact the project administrator privately at
|
||||
[lg@larrygritz.com](lg@larrygritz.com).
|
||||
If confidentiality precludes a public question or issue, you may contact the
|
||||
project administrator privately at [lg@imageworks.com](lg@imageworks.com),
|
||||
including for security-related issues.
|
||||
|
||||
|
||||
🔧 Contributing and developer documentation
|
||||
-------------------------------------------
|
||||
Contributing
|
||||
------------
|
||||
|
||||
OSL welcomes code contributions, and nearly 50 people have done so over the
|
||||
years. We take code contributions via the usual GitHub pull request (PR)
|
||||
mechanism.
|
||||
|
||||
* [CONTRIBUTING](CONTRIBUTING.md) has detailed instructions about the
|
||||
development process.
|
||||
* [AI Policy](docs/dev/AI_Policy.md) decribes our policies on AI coding
|
||||
assistance tools.
|
||||
* [RELEASING](docs/dev/RELEASING.md) explains our policies and procedures for
|
||||
making releases. We have a major, possibly-compatibility-breaking, release
|
||||
annually in September/October, and minor bug fix and safe feature addition
|
||||
release at the beginning of every month.
|
||||
* Other developer documentation is in the [docs/dev](docs/dev) directory.
|
||||
* You may also have luck learning a bit about the organization and
|
||||
architecture of the project by reading the [DeepWiki Analysis of
|
||||
OpenShadingLanguage](https://deepwiki.com/AcademySoftwareFoundation/OpenShadingLanguage).
|
||||
But take it with a grain of salt -- like any LLM-generated summary, there
|
||||
may be inaccuracies lurking.
|
||||
mechanism. Please see [CONTRIBUTING](CONTRIBUTING.md) for detailed
|
||||
instructions.
|
||||
|
||||
|
||||
☎️ Communications channels and additional resources
|
||||
---------------------------------------------------
|
||||
Contacts, Links, and References
|
||||
-------------------------------
|
||||
|
||||
* [OSL home page](http://openshadinglanguage.org)
|
||||
* [OSL GitHub page](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage)
|
||||
* [OSL Documentation on ReadTheDocs](https://docs.openshadinglanguage.org)
|
||||
* [Developer mail list](https://lists.aswf.io/g/osl-dev)
|
||||
* [ASWF Slack](https://slack.aswf.io) (look for the `#openshadinglanguage` channel)
|
||||
* Biweekly Technical Steering Committee (TSC) Zoom meetings are on the [ASWF
|
||||
Calendar](https://calendar.openshadinglanguage.org) (click on the OSL
|
||||
meeting entries, every second Monday, to get the Zoom link, anyone may join)
|
||||
[OSL GitHub page](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage)
|
||||
|
||||
[Read or subscribe to the OSL development mail list](https://lists.aswf.io/g/osl-dev)
|
||||
|
||||
[Most recent PDF of the OSL language specification](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/blob/main/src/doc/osl-languagespec.pdf
|
||||
)
|
||||
|
||||
[OSL home page](http://openshadinglanguage.org)
|
||||
|
||||
[Sony Pictures Imageworks main open source page](http://opensource.imageworks.com)
|
||||
|
||||
|
||||
|
||||
@@ -563,24 +463,19 @@ The current project leadership is documented in the
|
||||
|
||||
Many people have contributed features, bug fixes, and other changes to OSL
|
||||
over the years: Steve Agland, Shane Ambler, Martijn Berger, Farchad
|
||||
Bidgolirad, Alexandru Biscoveanu, Nicholas Bishop, Curtis Black, Rasmus
|
||||
Bonnedal, Solomon Boulos, Stefan Bruens, Stefan Büttner, Matthaus G. Chajdas,
|
||||
Clark Chen, Mehdi Chinoune, Alejandro Conty, Damien Courtois, Dieter De Baets,
|
||||
Thomas Dinges, Daniel Dresser, Mads Drøschler, Peter Ellerington, Luke Emrose,
|
||||
Louis Feng, Mark Final, Henri Fousse, Stephen Friedman, Syoyo Fujita, Alex
|
||||
Fuller, Tim Grant, Larry Gritz, Nicolas Guiard, Euan Haahr, Derek Haase,
|
||||
Sven-Hendrik Haase, John Haddon, Niklas Harrysson, Daniel Heckenberg, Chris
|
||||
Hellmuth, Christian Heusel, Adrien Herubel, Dan Horák, Thiago Ize, Matt
|
||||
Johnson, Ronan Keryell, Chris Kulla, Elvic Liang, Max Liani, Sv. Lockal, Silvia Lopez,
|
||||
Adam Martinez, John Mertic, Bastien Montagne, Steena Monteiro, Patrick Mours,
|
||||
Alexis Oblet, Erich Ocean, Mikko Ohtamaa, Jean-Francois Panisset, Jino Park,
|
||||
Alexei Pawlow, Mitch Prater, Jay Reynolds, Declan Russell, Benoit Ruiz,
|
||||
Patrick Scheibe, Alex Schworer, Jonathan Scruggs, Sergey Sharybin, Mark
|
||||
Sisson, Sandip Shukla, Alexey Smolenchuk, Cliff Stein, Stephan Steinbach, Taraash, Luya
|
||||
Tshimbalanga, Esteban Tovagliari, Brecht Van Lommel, Thibault Vergne,
|
||||
Alexander von Knorring, Aidan Welch, Alex Wells, Roman Zulak. (Listed
|
||||
alphabetically; if we've left anybody out, it is inadvertent, please let us
|
||||
know.)
|
||||
Bidgolirad, Nicholas Bishop, Solomon Boulos, Stefan Bruens, Stefan Büttner,
|
||||
Matthaus G. Chajdas, Clark Chen, Alejandro Conty, Thomas Dinges, Mads
|
||||
Drøschler, Luke Emrose, Louis Feng, Mark Final, Henri Fousse, Syoyo Fujita,
|
||||
Tim Grant, Larry Gritz, Nicolas Guiard, Euan Haahr, Derek Haase, Sven-Hendrik
|
||||
Haase, John Haddon, Niklas Harrysson, Daniel Heckenberg, Thiago Ize, Matt
|
||||
Johnson, Ronan Keryell, Chris Kulla, Elvic Liang, Max Liani, Adam Martinez,
|
||||
John Mertic, Bastien Montagne, Steena Monteiro, Alexis Oblet, Erich Ocean,
|
||||
Mikko Ohtamaa, Jino Park, Alexei Pawlow, Jay Reynolds, Benoit Ruiz, Declan
|
||||
Russell, Patrick Scheibe, Alex Schworer, Jonathan Scruggs, Sergey Sharybin,
|
||||
Sandip Shukla, Cliff Stein, Stephan Steinbach, Luya Tshimbalanga, Esteban
|
||||
Tovagliari, Brecht Van Lommel, Alexander von Knorring, Alex Wells, Roman
|
||||
Zulak. (Listed alphabetically; if we've left anybody out, it is inadvertent,
|
||||
please let us know.)
|
||||
|
||||
We cannot possibly express sufficient gratitude to the managers at Sony
|
||||
Pictures Imageworks who allowed this project to proceed, supported it
|
||||
@@ -606,6 +501,7 @@ The OSL implementation depends upon several other open source packages,
|
||||
all with compatible licenses:
|
||||
|
||||
* [OpenImageIO](http://www.openimageio.org)
|
||||
* [Boost](http://www.boost.org)
|
||||
* [IlmBase](http://www.openexr.com)
|
||||
* [LLVM Compiler Infrastructure](http://llvm.org)
|
||||
|
||||
|
||||
-74
@@ -1,74 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
This gives guidance about which branches are supported with patches to
|
||||
security vulnerabilities.
|
||||
|
||||
| Version / branch | Supported |
|
||||
| --------- | ---------------------------------------------------- |
|
||||
| main | :white_check_mark: :construction: ALL fixes immediately, but this is a branch under development with a frequently unstable ABI and occasionally unstable API. |
|
||||
| 1.15.x | :white_check_mark: All fixes that can be backported without breaking ABI compatibility. New tagged releases monthly. |
|
||||
| 1.14.x | :warning: Only the most critical fixes, only if they can be easily backported. |
|
||||
| <= 1.13.x | :x: No longer receiving patches of any kind. |
|
||||
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you think you've found a potential vulnerability in OSL, please
|
||||
report it to the maintainers. Include detailed steps to reproduce the issue,
|
||||
and any other information that could aid an investigation.
|
||||
|
||||
The best way to report a vulnerability is to file a GitHub [security
|
||||
advisory](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/security/advisories/new).
|
||||
If that is not possible, it is also fine to email your report to
|
||||
security@openshadinglanguage.org. Only the project administrators have access
|
||||
to these reports.
|
||||
|
||||
Our policy is to respond to vulnerability reports within 14 days, and to
|
||||
address critical security vulnerabilities rapidly and post patches as quickly
|
||||
as possible.
|
||||
|
||||
|
||||
## What do we consider a vulnerability?
|
||||
|
||||
We only consider a situation to be a security vulnerability if an untrusted
|
||||
party can plausibly trigger the flaw through normal product inputs (for
|
||||
example, a maliciously crafted oso file that might compromise a renderer when
|
||||
loaded). We do not support requesting a CVE for API-only or caller-controlled
|
||||
failures with no realistic adversarial path.
|
||||
|
||||
The OSL project adopts the same security stance as many other language
|
||||
compilers: we believe that shaders that will be JITed and executed are by
|
||||
definition *trusted inputs*, and should not be accepted from untrusted
|
||||
sources. A shader that causes damage when it faithfully executes is not a
|
||||
vulnerability per se. In rare circumstances, we might consider it a
|
||||
vulnerability if a maliciously crafted shader can cause the renderer or OSL
|
||||
library to do something damaging that is different from what the shader text
|
||||
implies.
|
||||
|
||||
Flaws whose root cause lies in a dependency should be reported and fixed
|
||||
upstream; the upstream project owns the CVE when one is warranted.
|
||||
|
||||
|
||||
## Other security features
|
||||
|
||||
### Signed tags
|
||||
|
||||
Starting with OSL 1.14.3.0, we cryptographically sign release tags.
|
||||
To verify a tag, you can use the `git tag -v` command, which will check
|
||||
the signature against the public key that is included in the repository.
|
||||
For example,
|
||||
|
||||
```bash
|
||||
git tag -v v1.14.3.0
|
||||
```
|
||||
|
||||
## Outstanding Security Issues
|
||||
|
||||
None known
|
||||
|
||||
|
||||
## History of CVE Fixes
|
||||
|
||||
None to date
|
||||
+7
-209
@@ -12,6 +12,12 @@ In no particular order:
|
||||
BSD 3-Clause License
|
||||
SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
* OpenImageIO Copyright (c) Larry Gritz, et al.
|
||||
https://github.com/OpenImageIO/oiio
|
||||
|
||||
Many bits of code flow back and forth between OIIO and OSL, especially
|
||||
parts of the CMake build system.
|
||||
|
||||
* OpenEXR, Copyright (c) Contributors to the OpenEXR Project.
|
||||
https://github.com/AcademySoftwareFoundation/OpenEXR
|
||||
|
||||
@@ -103,213 +109,5 @@ Public domain
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
Apache 2.0 License.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
* OpenImageIO Copyright (c) Contributors to the OpenImageIO Project.
|
||||
https://github.com/AcademySoftwareFoundation/OpenImageIO
|
||||
|
||||
Many bits of code flow back and forth between OIIO and OSL, especially
|
||||
parts of the CMake build system.
|
||||
|
||||
* ninjatracing.py utility for build profiling is Apache-2.0 licensed
|
||||
and comes from https://github.com/nico/ninjatracing.
|
||||
Copyright 2018 Nico Weber.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
Modified Apache 2.0 License
|
||||
|
||||
Universal Scene Description
|
||||
Copyright Pixar.
|
||||
|
||||
Portions of the build_osl.py were derived from scripts distributed with USD.
|
||||
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor
|
||||
and its affiliates, except as required to comply with Section 4(c) of
|
||||
the License and to reproduce the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
If we have left anything out, it is unintentional. Please let us know.
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
# Documentation
|
||||
|
||||
The OSL Documentation Project is a work in progress.
|
||||
|
||||
The plan is to adopt the OCIO Documentation Project's methodology for maintaining and building documentation of various kinds as it becomes the blueprint for the ASWF.
|
||||
|
||||
There is much work to be done here.
|
||||
|
||||
Of particular interest are these topics. Please consider adding any information you might have about any of these to the repo:
|
||||
|
||||
* Any material at all for people learning to write OSL shaders (beyond the formal language spec, which is not intended to be a tutorial or cookbook for writing shaders).
|
||||
* Example .osl code and/or .h files that are:
|
||||
1. Generally useful, but do not warrant inclusion into the OSL source itself.
|
||||
2. Tutorial in nature.
|
||||
* Robust installation or build instructions for Windows and macOS.
|
||||
* Guide for how to integrate OSL into an application such as a renderer.
|
||||
|
||||
If you have some relevant content and you'd like to discuss its inclusion, please use the OSL Documentation discussion:
|
||||
|
||||
[OSL Documentation](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/discussions/1324)
|
||||
|
||||
or alternatively, you may post to:
|
||||
|
||||
https://lists.aswf.io/g/osl-dev/topics<br>
|
||||
osl-dev@lists.aswf.io
|
||||
|
||||
You may also simply submit a PR.
|
||||
@@ -1,112 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
<!-- Copyright Contributors to the Open Shading Language Project. -->
|
||||
|
||||
Inlining Options for OptiX and CUDA
|
||||
===================================
|
||||
|
||||
When compiling shaders for OptiX and CUDA (and in general), there is a tradeoff
|
||||
between compile speed and shade-time performance. The LLVM optimizer generally
|
||||
does a good job of balancing these concerns, but there might be cases where a
|
||||
renderer can give additional hints to the optimizer to tip the balance one way
|
||||
or the other.
|
||||
|
||||
Aggressive inlining can increase the run-time performance, but can negatively
|
||||
impact the compile speed. Inlining can be very helpful with small functions
|
||||
where the function call overhead tends to dwarf the useful instructions, so it
|
||||
is important to inline such functions when possible.
|
||||
|
||||
Choosing to __not__ inline certain functions (e.g., very large noise functions)
|
||||
allows them to be excluded from the module prior to running the LLVM optimizer
|
||||
and JIT engine, which can greatly improve the compile time. This is particularly
|
||||
beneficial when a function is not likely to be inlined anyway; removing such
|
||||
large functions from the module prior to optimization can speed up compilation
|
||||
considerably without affecting the generated PTX.
|
||||
|
||||
ShadingSystem Attributes
|
||||
------------------------
|
||||
|
||||
There are a number of `ShadingSystem` attributes to help control the inlining
|
||||
behavior. The default settings should work well in most circumstances, but they
|
||||
can be adjusted to favor compile speed over shade-time performance, or vice
|
||||
versa.
|
||||
|
||||
* `optix_no_inline_thresh`: Don't inline functions greater-than or equal-to the
|
||||
threshold. This allows them to be excluded from the module prior to
|
||||
optimization, which reduces the size of module and can greatly speed up the
|
||||
optimization and JIT stages.
|
||||
|
||||
* `optix_force_inline_thresh`: Force inline functions less-than or equal-to the
|
||||
threshold. This tends to be most helpful with relatively low values, < 30.
|
||||
|
||||
* `optix_no_inline`: Don't inline any functions. Offers the best compile times
|
||||
at the expense of shade-time performance. This option is not recommended, but is
|
||||
included for benchmarking and tuning purposes.
|
||||
|
||||
* `optix_no_inline_layer_funcs`: Don't inline the shader layer functions. This
|
||||
can moderately improve compile times at the expense of shade-time performance.
|
||||
|
||||
* `optix_merge_layer_funcs`: Allow layer functions that are only called once to
|
||||
be merged into their caller, even if `optix_no_inline_layer_funcs` is set. This
|
||||
can help restore some of the shade-time performance lost by enabling
|
||||
`optix_no_inline_layer_funcs`.
|
||||
|
||||
* `optix_no_inline_rend_lib`: Don't inline any functions defined in the
|
||||
renderer-supplied `rend_lib` module. As an alternative, the renderer can simply
|
||||
not supply the LLVM bitcode for the `rend_lib` module to the `ShadingSystem`.
|
||||
|
||||
Inline/Noinline Function Registration
|
||||
-------------------------------------
|
||||
|
||||
In addition to the `ShadingSystem` attributes, individual functions can be
|
||||
registered with the `ShadingSystem` as `inline` or `noinline`. Functions can
|
||||
be unregistered to restore the default inlining behavior. This registration
|
||||
takes precedence over the `ShadingSystem` inlining attributes, which allows
|
||||
very fine-grained control when needed.
|
||||
|
||||
```C++
|
||||
// Register
|
||||
shadingsys->register_inline_function(ustring("osl_abs_ff"));
|
||||
shadingsys->register_noinline_function(ustring("osl_gabornoise_dfdfdf"));
|
||||
|
||||
// Unregister
|
||||
shadingsys->unregister_inline_function(ustring("osl_abs_ff"));
|
||||
shadingsys->unregister_noinline_function(ustring("osl_gabornoise_dfdfdf"));
|
||||
```
|
||||
|
||||
It might be best to prefer the `ShadingSystem` attributes to control the inlining
|
||||
behavior, and to strategically register functions when it is known to be
|
||||
beneficial through benchmarking and profiling.
|
||||
|
||||
Tuning and Analysis
|
||||
-------------------
|
||||
|
||||
We have added a Python script (`src/build-scripts/analyze-ptx.py`) to help
|
||||
identify functions that might be good candidates for inlining/noinling. This
|
||||
script will generate a summary of the functions in the input PTX file, with a
|
||||
list of all functions and their sizes in CSV format. It will also generate a
|
||||
graphical reprensentation of the callgraph in DOT and PDF format.
|
||||
|
||||
An example tuning workflow might include the following steps:
|
||||
|
||||
1. Run `analyze-ptx.py` on the "shadeops" and "rend_lib" PTX files to generate
|
||||
a list of the functions contained in those modules.
|
||||
|
||||
```bash
|
||||
$ analyze_ptx.py shadeop_cuda.ptx
|
||||
$ analyze_ptx.py rend_lib_myrender.ptx
|
||||
```
|
||||
|
||||
2. Run `analyze-ptx.py` on the generated PTX for a representative shader:
|
||||
|
||||
```bash
|
||||
$ analyze_ptx.py myshader.ptx
|
||||
```
|
||||
|
||||
3. View the summary file (`myshader-summary.txt`) and the callgraph
|
||||
(`myshader-callgraph.gv`) to deterimine which library functions were _not_
|
||||
inlined. They will appear as boxes with a dashed outline in the callgraph.
|
||||
|
||||
In particular, be on the lookout for trivial functions (e.g., `osl_floor_ff`)
|
||||
which have not been inlined. If such functions appear, that might be a sign
|
||||
that the inline thresholds need to be adjusted, or that it might be
|
||||
beneficial to register specific functions.
|
||||
@@ -1,3 +0,0 @@
|
||||
# Application Integration
|
||||
|
||||
Contains content related to integrating OSL into a renderer, or any application for that matter, using the C API.
|
||||
@@ -1,21 +0,0 @@
|
||||
# Build and Install Instructions
|
||||
|
||||
---
|
||||
|
||||
#### Copyright Contributors to the Open Shading Language project.
|
||||
|
||||
#### SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
---
|
||||
|
||||
Contains information about building and installing OSL.
|
||||
|
||||
## Windows
|
||||
|
||||
Method #1:
|
||||
https://github.com/debaetsd/OSL_build
|
||||
|
||||
Method #2:
|
||||
Go through `docs/build_install/windows/Readme.md` and using batch files to install OSL cleanly!
|
||||
|
||||
## macOS
|
||||
@@ -1,311 +0,0 @@
|
||||
## **Building, Using and Debugging OSL in Windows**
|
||||
|
||||
---
|
||||
|
||||
#### Copyright Contributors to the Open Shading Language project.
|
||||
|
||||
#### SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
---
|
||||
|
||||
### **Contents**
|
||||
|
||||
1. Introduction
|
||||
- Experimental
|
||||
- My Setup
|
||||
- Inspiration
|
||||
2. Preparing Environment
|
||||
- Cleaning Up the PATH
|
||||
- Set-Up needed Environment Variables
|
||||
- Set Flags based on your needs
|
||||
3. Building (Release, Debug)
|
||||
- Running the code based on your config
|
||||
- Be Patient
|
||||
- Errors
|
||||
4. Running
|
||||
5. Development in Windows
|
||||
|
||||
---
|
||||
|
||||
### **1. Introduction**
|
||||
|
||||
This document is prepared for those who have problem in building OSL in Windows OS, this is completely custom setup. And it is developing to make it compatible with all situations.
|
||||
|
||||
(`Disclaimer:` This Process is completely Experimental and it worked on my system, maybe you get error with changing some configs, during this process).
|
||||
|
||||
At a first glance it seems to be complicated, but it is very easy to do, bare with me.
|
||||
So it would be great to share our experiences to reach to best way of building in Windows (and of course other Operating Systems) to save our time and energy to focus on OSL development and OSL Shader writing.
|
||||
|
||||
### **1.1 Experimental**
|
||||
|
||||
After a lot of efforts on manual building OSL on Windows, Finally I found a clean way to do that, I explained every steps I did, I hope it works for you too. This method is stricktly related to Environment Variables you create and Flags you set to the command and need patient and hard disk.
|
||||
|
||||
I've built OSL with minimal needed packages, for extra packages, they should be set as flag (**script is under development**)
|
||||
|
||||
### **1.2 My Setup**
|
||||
|
||||
This is my setup I have on my PC for building OSL, so you need to install some software before start.
|
||||
|
||||
My System and Setup Configuration:
|
||||
|
||||
**OS:** Windows 10 Home
|
||||
|
||||
**Compiler:** Microsoft Visual Studio 2019
|
||||
|
||||
**Git:** 2.28.0
|
||||
|
||||
**Python:** 3.7 tip: disable python App Installer in Manage `App Execution Aliases (Windows 10)`
|
||||
|
||||
**Cmake:** 3.18.4
|
||||
|
||||
**Qt:** 5.15.0
|
||||
|
||||
**NASM:** 2.15.05 for JPEG
|
||||
|
||||
**OpenShadingLanguage:** cloned from latest master branch
|
||||
|
||||
**LLVM:** 11.0.0 C++ is set on C++14
|
||||
|
||||
**CLANG:** 11.0.0 C++ is set on C++14
|
||||
|
||||
**WinFlexBison:** 2.5.22
|
||||
|
||||
**Zlib:** 1.2.11
|
||||
|
||||
**JPEG:** 2.0.5
|
||||
|
||||
**TIFF:** 4.1.0
|
||||
|
||||
**PNG:** 1.6.35
|
||||
|
||||
**PyBind11:** 2.6.0
|
||||
|
||||
**LibRaw:** 0.20.2
|
||||
|
||||
**OpenImageIO:** 2.1.20
|
||||
|
||||
**OpenColorIO:** 1.1.0
|
||||
|
||||
**OpenEXR/**IlmBase: 2.5.3
|
||||
|
||||
**GLUT:** 3.2.1 freeglut on windows (this is needed for partio) (unfortunately Partio didn't build, it has a problem) (I’ve created a PR for it in Disney github repo)
|
||||
|
||||
**Disney Partio:** latest from master (zip file) (Skip this for now) (I didn't build OSL with Partio)
|
||||
|
||||
**PugiXML:** 1.10
|
||||
|
||||
---
|
||||
|
||||
### **1.3 Inspiration**
|
||||
|
||||
After lots of manual building dependencies one by one and fix errors and things I got inspired by `PIXAR USD INSTALLATION METHOD` and borrowed its structure to build OSL.
|
||||
|
||||
so I studied its python build script and found we can use same logic for installing OSL, fortunately after changing and adding OSL needed packages and some custom setup it worked fine
|
||||
It still needs some other works to make it complete for all dependencies (optional).
|
||||
|
||||
We will keep Pixar name on it as inspiration code (or we can keep their copyright)
|
||||
You can Run the installer from: `yourpath/OpenShadingLanguage/docs/build_install/windows/build_osl.bat`
|
||||
|
||||
---
|
||||
|
||||
### **21. Preparing Environment**
|
||||
|
||||
There are bunch od prerequisites for building OSL that I explained in following sections.
|
||||
|
||||
### **2.1 Cleaning Up the PATH**
|
||||
|
||||
Be sure you don't have any custom item added to PATH in your global Environment Variables of Windows
|
||||
|
||||
You can do it:
|
||||
|
||||
`Start Menu > Edit the system environmment variables > Environment Variables > User Variables/System Variables`
|
||||
|
||||
so you should not have any path that refer to previous osl installation folders
|
||||
|
||||
Recommendation: remove added path for cmake, git, python, Qt, llvm
|
||||
|
||||
it should be clean now.
|
||||
|
||||
### **2.2 Set-Up needed Environment Variables**
|
||||
|
||||
For running batch scripts without any problem I recommend to create some base environment variables.
|
||||
|
||||
**Needed Environment Variables: (Key/Value based on my installation folder)**
|
||||
|
||||
| Env Var | Path Example |
|
||||
| --------------- | ---------------------------------------------------------------------------------- |
|
||||
| BASE_LOCATION | D:\madoodia\sdks |
|
||||
| PYTHON_LOCATION | D:\madoodia\sdks |
|
||||
| QT_LOCATION | C:\Qt\5.15.0\msvc2019_64 |
|
||||
| NASM_LOCATION | C:\NASM |
|
||||
| GIT_LOCATION | "C:\Program Files\Git" |
|
||||
| CMAKE_LOCATION | "C:\Program Files\CMake" |
|
||||
| VCVARS_LOCATION | "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build" |
|
||||
|
||||
|
|
||||
|
||||
Open `docs/build_install/windows/osl_env_vars_setup.bat` in your editor and edit paths' values based on your installation folders.
|
||||
|
||||
### **2.3 Set Flags based on your needs**
|
||||
|
||||
The main build launcher is here `docs/build_install/windows/build_osl.bat`
|
||||
|
||||
For now we can not assign pre-installed llvm so we have to build all together at once and put all of them in one directory.
|
||||
|
||||
I am working on it to see how we can use external llvm installation without error.
|
||||
|
||||
**Table of flags we can assign to the command**
|
||||
|
||||
| Flag | State | Can Use |
|
||||
| ------------- | --------------- | ------- |
|
||||
| --osl | Implemented | Yes |
|
||||
| --python | Implemented | Yes |
|
||||
| --zlib | Implemented | Yes |
|
||||
| --llvm | Implemented | Yes |
|
||||
| --clang | Implemented | Yes |
|
||||
| --pugixml | Implemented | Yes |
|
||||
| --openexr | Implemented | Yes |
|
||||
| --tiff | Implemented | Yes |
|
||||
| --jpeg | Implemented | Yes |
|
||||
| --png | Implemented | Yes |
|
||||
| --flex | Implemented | Yes |
|
||||
| --bison | Implemented | Yes |
|
||||
| --opencolorio | Implemented | Yes |
|
||||
| --openimageio | Implemented | Yes |
|
||||
| --libraw | Implemented | Yes |
|
||||
| --pybind11 | Implemented | Yes |
|
||||
| --Ptex | Implemented | No |
|
||||
| --openvdb | Implemented | No |
|
||||
| --partio | Implemented | No |
|
||||
| --ffmpeg | Not-Implemented | No |
|
||||
| --field3d | Not-Implemented | No |
|
||||
| --opencv | Not-Implemented | No |
|
||||
| --gif | Not-Implemented | No |
|
||||
| --heif | Not-Implemented | No |
|
||||
| --squish | Not-Implemented | No |
|
||||
| --dcmtk | Not-Implemented | No |
|
||||
| --webp | Not-Implemented | No |
|
||||
|
||||
---
|
||||
|
||||
### **3. Building (Release, Debug)**
|
||||
|
||||
We Prepared some batch files to do it for you automatically.
|
||||
Based on Environment Variables you set in previous sections you can just call them and wait for it to be built and installed.
|
||||
|
||||
**My Method:**
|
||||
|
||||
- Open Powershell
|
||||
- Go to: yourPath/OpenShadingLanguage/docs/build_install/windows
|
||||
- Run build_osl.bat release
|
||||
|
||||
### **3.1 Running the code based on your config**
|
||||
|
||||
Based on the config (`Release` or `Debug`) that you send for installer it will create directory in `BASE_LOCATION` for you
|
||||
|
||||
`BASE_LOCATION/osl_release` for Release mode
|
||||
|
||||
`BASE_LOCATION/osl_debug` for Debug mode
|
||||
|
||||
**IMPORTANT:** `Good to know you can not have Release and Debug files in one directory at the same time, it makes conflict and give you weired errors. So keep them separate.`
|
||||
|
||||
### **3.2 Be Patient**
|
||||
|
||||
You should be patient because the whole process (based on your PC config) takes time between 30 minutes to 1 hour
|
||||
|
||||
And it takes:
|
||||
|
||||
**Release:** `~8Gb` of your hard disk (after installation) (Download size is `~350Mb`)
|
||||
|
||||
**Debug:** `~90Gb` of your hard disk (after installation) (Download size is `~400Mb`)
|
||||
|
||||
so please set a location to `BASE_LOCATION` that have enough space.
|
||||
|
||||
### **3.4 Errors**
|
||||
|
||||
If you got any error in any step of building process, you can remove the related package's build directory from `BASE_LOCATION/build` and run the installer again.
|
||||
|
||||
If you got any error please report to the forum of OSL.
|
||||
|
||||
---
|
||||
|
||||
### **4. Running**
|
||||
|
||||
We Prepared some batch files to do it for you automatically. Based on Environment Variables you set in previous sections you can just call it.
|
||||
|
||||
**Recommendation:** use `Powershell`
|
||||
|
||||
**TIP:** If you add your osl installation folders (both release and debug) in global Windows Environment Variable, you will get error.
|
||||
|
||||
So you can add release path or debug path in your global environment variables. Or create and use batch scripts.
|
||||
For adding path you should add these two paths to your global env variables:
|
||||
|
||||
• PATH : `<osl install dir>\bin`;
|
||||
|
||||
• PATH : `<osl install dir>\lib`;
|
||||
|
||||
For example, you can open osltoy in releae mode with running `osltoy_release_launcher.bat`
|
||||
|
||||
if you have question, feel free to ask.
|
||||
|
||||
---
|
||||
|
||||
### **5. Development in Windows**
|
||||
|
||||
After editing your code, when you want to see your changes you should build osl again. But this time, it is so faster than before, (if you keep build folders) So just need to rebuild it in release mode.
|
||||
|
||||
**Release mode**:
|
||||
|
||||
- open powershell
|
||||
- cd OpenShadingLanguage repo
|
||||
- cd build_script
|
||||
- run build_osl.bat release
|
||||
- run osl_release_sln.bat
|
||||
- example: set osltoy as default project
|
||||
- run it in release x64 mode
|
||||
|
||||
**Debug mode**:
|
||||
|
||||
- open powershell
|
||||
- cd OpenShadingLanguage repo
|
||||
- cd build_script
|
||||
- run build_osl.bat debug
|
||||
- run osl_debug_sln.bat
|
||||
- example: set osltoy as default project
|
||||
- run it in debug x64 mode
|
||||
|
||||
If you open Visual Studio solution (sln) from release or debug, you can build it from inside it after your code editing
|
||||
|
||||
I recommend using: (in **powershell**)
|
||||
|
||||
- **osl_release_sln.bat** or **osl_debug_sln.bat**
|
||||
|
||||
now you can use Visual Studio for debugging.
|
||||
|
||||
---
|
||||
|
||||
**TIP about OSLToy:**
|
||||
|
||||
If you load a shader in `osltoy` and when hit Recompile, it is crashed and closed, probabely your output color attribute name is not `Cout`
|
||||
|
||||
It is mandatory to have at least one `Cout` output Variable in any shader, Otherwise osltoy will crash.
|
||||
|
||||
That's it
|
||||
|
||||
TIP: this process is getting better, I will update the document soon
|
||||
|
||||
**Conclusion:**
|
||||
For easy installation you just need to setup your Environment Variables in `yourPath/OpenShadingLanguage/docs/build_install/windows/osl_env_vars_setup.bat` based on your paths
|
||||
|
||||
It is a custom setup, for example all dependencies are built before osl, because I had lots of issues on using external installation (like llvm)
|
||||
and I tried this method on llvm 7, 8 and 9, all with error, so my current build setup is on llvm 11 and C++14, it can be changed in code. (I am trying to make it easy to use for changing configs with arguments)
|
||||
|
||||
Please take a look at docs and let me know my mistakes.
|
||||
|
||||
This method worked fine for me for release, debug and debugging in visual studio.
|
||||
|
||||
I am trying to build OSL on `Linux` with same method. If it worked fine I will Update the build system.
|
||||
|
||||
---
|
||||
|
||||

|
||||
@@ -1,48 +0,0 @@
|
||||
@REM /* --------------------- */
|
||||
@REM Copyright Contributors to the Open Shading Language project.
|
||||
@REM SPDX-License-Identifier: BSD-3-Clause
|
||||
@REM /* --------------------- */
|
||||
|
||||
@REM Main batch file for installing OSL
|
||||
|
||||
@echo off
|
||||
|
||||
|
||||
call osl_env_vars_setup.bat
|
||||
|
||||
cls
|
||||
|
||||
set OSL_INPUT_CONFIG=%1
|
||||
|
||||
if "%OSL_INPUT_CONFIG%" equ "debug" (
|
||||
set OSL_LOCATION_DIR=osl_debug
|
||||
set OSL_BUILD_CONFIG=--debug
|
||||
goto RUN
|
||||
)
|
||||
if "%OSL_INPUT_CONFIG%" equ "release" (
|
||||
set OSL_LOCATION_DIR=osl_release
|
||||
set OSL_BUILD_CONFIG=
|
||||
goto RUN
|
||||
)
|
||||
if "%OSL_INPUT_CONFIG%" equ "" (
|
||||
echo --= Enter debug or release as argument
|
||||
exit
|
||||
)
|
||||
@REM if argument is not debug or release
|
||||
if "%OSL_INPUT_CONFIG%" neq "" (
|
||||
echo --= Enter debug or release as argument
|
||||
exit
|
||||
)
|
||||
|
||||
:RUN
|
||||
|
||||
set PATH=%CMAKE_LOCATION%/bin;GIT_LOCATION/cmd;%PYTHON_LOCATION%;%PYTHON_LOCATION%/Scripts;%QT_LOCATION%/bin;%QT_LOCATION%/lib;%NASM_LOCATION%;%PATH%
|
||||
set PYTHONPATH=%PYTHON_LOCATION%/Lib/site-packages;
|
||||
set Qt5_ROOT=%QT_LOCATION%/lib/cmake
|
||||
|
||||
call %VCVARS_LOCATION%/vcvarsall.bat x64
|
||||
|
||||
cls
|
||||
|
||||
python build_osl.py --generator "Visual Studio 16 2019" --osl --python %OSL_BUILD_CONFIG% --zlib --llvm --clang --pugixml --openexr --tiff --jpeg --png --flex --bison --opencolorio --openimageio --libraw --pybind11 %BASE_LOCATION%/%OSL_LOCATION_DIR%
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 100 KiB |
@@ -1,19 +0,0 @@
|
||||
@REM /* --------------------- */
|
||||
@REM Copyright Contributors to the Open Shading Language project.
|
||||
@REM SPDX-License-Identifier: BSD-3-Clause
|
||||
@REM /* --------------------- */
|
||||
|
||||
@REM Running Visual Studio 2019 in debug mode for editing and debugging OSL
|
||||
|
||||
@echo off
|
||||
|
||||
|
||||
|
||||
call osl_env_vars_setup.bat
|
||||
|
||||
cls
|
||||
|
||||
set PATH=%PYTHON_LOCATION%;%PYTHON_LOCATION%/Scripts;%QT_LOCATION%/bin;%QT_LOCATION%/lib;%BASE_LOCATION%/osl_debug/bin;%BASE_LOCATION%/osl_debug/lib;%PATH%
|
||||
set PYTHONPATH=%PYTHON_LOCATION%/Lib/site-packages;
|
||||
|
||||
%BASE_LOCATION%\osl_debug\build\OpenShadingLanguage\OSL.sln
|
||||
@@ -1,33 +0,0 @@
|
||||
@REM /* --------------------- */
|
||||
@REM Copyright Contributors to the Open Shading Language project.
|
||||
@REM SPDX-License-Identifier: BSD-3-Clause
|
||||
@REM /* --------------------- */
|
||||
|
||||
@REM Running Visual Studio 2019 in release mode for running OSL or editing code
|
||||
|
||||
@echo off
|
||||
|
||||
@REM TIP:
|
||||
@REM for modifying env vars based on your paths
|
||||
@REM if your path has space in it, put whole path between
|
||||
@REM double quotation
|
||||
|
||||
|
||||
set BASE_LOCATION=D:/madoodia/sdks
|
||||
set PYTHON_LOCATION=C:/Python37
|
||||
set QT_LOCATION=C:/Qt/5.15.0/msvc2019_64
|
||||
set NASM_LOCATION=C:/NASM
|
||||
set GIT_LOCATION="C:/Program Files/Git"
|
||||
set CMAKE_LOCATION="C:/Program Files/CMake"
|
||||
set VCVARS_LOCATION="C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Auxiliary/Build"
|
||||
|
||||
echo --= -------------------------------------------- =--
|
||||
echo --= Environmment Variables created successfully! =--
|
||||
echo BASE_LOCATION : %BASE_LOCATION%
|
||||
echo PYTHON_LOCATION : %PYTHON_LOCATION%
|
||||
echo QT_LOCATION : %QT_LOCATION%
|
||||
echo NASM_LOCATION : %NASM_LOCATION%
|
||||
echo GIT_LOCATION : %GIT_LOCATION%
|
||||
echo CMAKE_LOCATION : %CMAKE_LOCATION%
|
||||
echo VCVARS_LOCATION : %VCVARS_LOCATION%
|
||||
echo --= -------------------------------------------- =--
|
||||
@@ -1,18 +0,0 @@
|
||||
@REM /* --------------------- */
|
||||
@REM Copyright Contributors to the Open Shading Language project.
|
||||
@REM SPDX-License-Identifier: BSD-3-Clause
|
||||
@REM /* --------------------- */
|
||||
|
||||
@REM Main batch file for installing OSL
|
||||
|
||||
@echo off
|
||||
|
||||
|
||||
call osl_env_vars_setup.bat
|
||||
|
||||
cls
|
||||
|
||||
set PATH=%PYTHON_LOCATION%;%PYTHON_LOCATION%/Scripts;%QT_LOCATION%/bin;%QT_LOCATION%/lib;%BASE_LOCATION%/osl_release/bin;%BASE_LOCATION%/osl_release/lib;%PATH%
|
||||
set PYTHONPATH=%PYTHON_LOCATION%/Lib/site-packages;
|
||||
|
||||
%BASE_LOCATION%\osl_release\build\OpenShadingLanguage\OSL.sln
|
||||
@@ -1,18 +0,0 @@
|
||||
@REM /* --------------------- */
|
||||
@REM Copyright Contributors to the Open Shading Language project.
|
||||
@REM SPDX-License-Identifier: BSD-3-Clause
|
||||
@REM /* --------------------- */
|
||||
|
||||
@REM Running OSLToy in debug mode
|
||||
|
||||
@echo off
|
||||
|
||||
|
||||
call osl_env_vars_setup.bat
|
||||
|
||||
cls
|
||||
|
||||
set PATH=%PYTHON_LOCATION%;%PYTHON_LOCATION%/Scripts;%QT_LOCATION%/bin;%QT_LOCATION%/lib;%BASE_LOCATION%/osl_debug/bin;%BASE_LOCATION%/osl_debug/lib;%PATH%
|
||||
set PYTHONPATH=%PYTHON_LOCATION%/Lib/site-packages;
|
||||
|
||||
osltoy
|
||||
@@ -1,18 +0,0 @@
|
||||
@REM /* --------------------- */
|
||||
@REM Copyright Contributors to the Open Shading Language project.
|
||||
@REM SPDX-License-Identifier: BSD-3-Clause
|
||||
@REM /* --------------------- */
|
||||
|
||||
@REM Running OSLToy in release mode
|
||||
|
||||
@echo off
|
||||
|
||||
|
||||
call osl_env_vars_setup.bat
|
||||
|
||||
cls
|
||||
|
||||
set PATH=%PYTHON_LOCATION%;%PYTHON_LOCATION%/Scripts;%QT_LOCATION%/bin;%QT_LOCATION%/lib;%BASE_LOCATION%/osl_release/bin;%BASE_LOCATION%/osl_release/lib;%PATH%
|
||||
set PYTHONPATH=%PYTHON_LOCATION%/Lib/site-packages;
|
||||
|
||||
osltoy
|
||||
@@ -1,13 +0,0 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Ignore temporary specs that may be ephemeral or local to an individual
|
||||
# developer, to prevent cluttering the output of `git status` and prevent
|
||||
# people from accidentally checking in specs that are only meant for them.
|
||||
specs/*
|
||||
|
||||
# But don't ignore the ones that belong to this project and are checked in. As
|
||||
# we add specs that we intend to commit and make available to all project
|
||||
# developers, they must be individually added here.
|
||||
!specs/002-backend-cpp
|
||||
@@ -1,170 +0,0 @@
|
||||
Policy on AI Coding Assistants
|
||||
==============================
|
||||
|
||||
- Initial policy merged 23-Mar-2026
|
||||
|
||||
|
||||
Use of "AI coding assistants" is permitted on this project, with the following
|
||||
guidelines and principles.
|
||||
|
||||
Summary of our core values:
|
||||
- Human must always be in the loop, and is the responsible party for
|
||||
the contents of a PR (including fully understanding and being able
|
||||
to explain, defend, and modify it in response to review comments).
|
||||
- Interact with the project and community yourself, not by agent.
|
||||
- Disclose what tools you used and how. At a minimum, we require an
|
||||
"Assisted-by: TOOL/MODEL" line in the commit comments and PR description.
|
||||
- Don't waste maintainer's time with low quality PRs.
|
||||
|
||||
The long version:
|
||||
|
||||
### Human authorship and interaction with the project
|
||||
|
||||
**The human making a PR is considered the author** and is fully responsible
|
||||
for the code they submit.
|
||||
|
||||
**No PRs should be submitted, reviewed/merged, or deployed without a human
|
||||
fully in the loop.** You may use agents locally to help you write code (and
|
||||
docs, tests, etc.), but you may not use agents to autonomously interact with
|
||||
the project community. Submit your own PRs, write your own discussion
|
||||
comments, respond to community members in your own words, approve or reject
|
||||
code in review using your own brain.
|
||||
|
||||
Code autonomously submitted without an identifiable human author and
|
||||
responsible party will be immediately closed, and the account associated with
|
||||
the submission may be banned from future project participation.
|
||||
|
||||
**DO NOT "vibe code."** This term refers to a pure prompt-to-behavior cycle
|
||||
where the human accepts un-inspected code based on the program behavior alone.
|
||||
We don't want this. Code that must be maintained by the project should be
|
||||
truly understood. Project code is ideally the result of discussion / pair
|
||||
programming between the author and assistant, but even if the machine is doing
|
||||
most of the work, all code should be approved and fully understood by the
|
||||
author prior to PR submission.
|
||||
|
||||
### Professionalism and quality
|
||||
|
||||
**The usual high quality level of PRs should be maintained regardless of tools
|
||||
used.** This includes not only code, but also the design, testing, PR
|
||||
preparation, and the author's ability to explain and defend the code and
|
||||
respond to questions and requests for changes. We never want to hear "but the
|
||||
AI..." as an excuse for anything.
|
||||
|
||||
**PRs should always be [reviewed](CodeReview.md) and approved by someone other
|
||||
than their author if at all possible.** This is especially true of code with
|
||||
machine-generated components, because of the additional risk that the
|
||||
submitter/operator may not fully understand what they did not write
|
||||
themselves. This is part of the reason for AI tool disclosure -- to ensure
|
||||
that another pair of eyes is on it. AI code review may be requested for
|
||||
additional input, but the AI cannot give "approval", nor merge code itself.
|
||||
|
||||
Even when using a coding assistant to write the code, you are strongly
|
||||
encouraged to write your own PR description, in your own words, if for no
|
||||
other reason than to force yourself to understand the code well enough to
|
||||
describe it to others.
|
||||
|
||||
### Disclosure
|
||||
|
||||
**Disclosure is required.** Patches that were written with the aid of AI
|
||||
coding assistants must have, at a minimum, the following line in the commit
|
||||
comment and PR description body:
|
||||
|
||||
Assisted-by: TOOL / MODEL
|
||||
|
||||
Ideally, to the extent practical, the PR description should also have a brief
|
||||
description of how the tool was used, including the gist of key prompts or
|
||||
summarizing the direction of the dialog. A full log is not necessary; a short
|
||||
summary will do.
|
||||
|
||||
There are several reasons for this disclosure/documentation, even though it
|
||||
will sometimes be inconvenient:
|
||||
- Reproducibility: We want even automated work to be reproducible by others in
|
||||
principle, just like a scientific paper.
|
||||
- Education: We want to actively teach each other what tools, prompts, or
|
||||
methods are successful at making high quality results for the project.
|
||||
- Metrics: We would like the ability to look back and compare assisted vs
|
||||
non-assisted code for things like defect rate (how often were new bugs
|
||||
introduced or commits needed to be reverted), whether people are more likely
|
||||
to write comprehensive tests when using assistants, etc.
|
||||
- Compliance: Many key users and developers are in companies where they need
|
||||
to disclose how AI tools were used in their work, and in other software that
|
||||
they use. Let's make it easy for them.
|
||||
- Insurance: Should future legal decisions radically change the IP status of
|
||||
AI-generated code, or if particular models are implicated in copyright
|
||||
violations, we want a way to find out which contributions might need to be
|
||||
revisited in order to bring the project back into compliance.
|
||||
|
||||
### Intellectual Property
|
||||
|
||||
Regardless of how the code came to be -- from your head alone, from a friend,
|
||||
from Stack Overflow, from a blog post, from reading other code bases, or from
|
||||
a coding assistant -- we expect the terms of the
|
||||
[DCO](https://developercertificate.org/) and CLA to apply, and for the author
|
||||
to take reasonable care that code is not copied from a source with an
|
||||
incompatible license.
|
||||
|
||||
You may find that your confidence about complying with the DCO+CLA depends on:
|
||||
|
||||
- If you provided a detailed specification and how much you edited or guided
|
||||
the results yourself.
|
||||
- Whether you are modifying or extending existing code versus writing large
|
||||
amounts of entirely new code.
|
||||
- The degree to which the generated code seems to fit into our structure and
|
||||
idiomatic style, and therefore seems unlikely to be copied from elsewhere.
|
||||
- Whether your tool has guardrails to prevent answers that are too similar to
|
||||
existing code, for example as claimed by [Claude](https://privacy.claude.com/en/articles/10023638-why-am-i-receiving-an-output-blocked-by-content-filtering-policy-error) and [Copilot](https://docs.github.com/en/copilot/how-tos/manage-your-account/).
|
||||
|
||||
### Extractive submissions
|
||||
|
||||
**Maintainer time and attention are precious commodities**, and use of coding
|
||||
assistants is not an excuse to submit poor PRs or to externalize costs onto
|
||||
maintainers/reviewers (such as responsibility for understanding, testing, or
|
||||
fixing PRs that the human author does not have a full understanding of).
|
||||
|
||||
Maintainers are free to take counter-measures against submitters of sub-par
|
||||
PRs, or other violations of this policy, up to and including banning habitual
|
||||
abusers from future participation in the project.
|
||||
|
||||
**We discourage use of AI tools to fix GitHub issues labeled as "good first
|
||||
issue" or for "Dev Days" work.** Cultivating and educating new contributors is
|
||||
important, and as such, we do not want people to swoop in and use automated
|
||||
tools to trivially solve tasks that were curated specifically for somebody to
|
||||
actually learn from. We expect each developer to implement at most one "good
|
||||
first issue" per Dev Days occasion, and we encourage you to solve the problem
|
||||
with your own brain to maximize the learning experience.
|
||||
|
||||
### Exceptions
|
||||
|
||||
This AI tool use policy is not meant to encompass cases such as:
|
||||
- "Smart auto-complete", spell-checking, grammar checking, or other uses that
|
||||
aren't really contributing substantively to authorship.
|
||||
- Use of LLMs to explain code or learn about the codebase, answer basic
|
||||
programming questions, help with background research, or audit the code
|
||||
for bugs that are subsequently confirmed and fixed by people.
|
||||
- Language translation for non-fluent English speakers or other accessibility
|
||||
accommodations.
|
||||
- Trivial or de-minimis fixes such as fixing a typo, obviously wrong variable
|
||||
use, etc.
|
||||
- Reviewing your own code for mistakes prior to submitting a PR (as long as it
|
||||
isn't making the fixes for you).
|
||||
|
||||
### Creative contributions -- out of scope
|
||||
|
||||
This project repository contains code for tools, and their documentation. We
|
||||
don't really directly host any artistically creative work here, so we have not
|
||||
addressed additional policy issues that might come up in such a context.
|
||||
|
||||
If you are representing a different project that is using this document for
|
||||
guidance or inspiration for your own policies, please be aware that you may
|
||||
have needs that are not covered by these policies but deserve well-crafted
|
||||
guidance.
|
||||
|
||||
### References and inspiration
|
||||
|
||||
Our policy has been informed and inspired by the following efforts in other communities:
|
||||
- [LLVM AI Tool Policy](https://llvm.org/docs/AIToolPolicy.html)
|
||||
- [Fedora Project policy on AI-assisted contributions](https://communityblog.fedoraproject.org/council-policy-proposal-policy-on-ai-assisted-contributions/)
|
||||
- [Linux Foundation policy on Generative AI](https://www.linuxfoundation.org/legal/generative-ai)
|
||||
- [Rust policy on rejecting burdensome PRs](https://github.com/rust-lang/compiler-team/issues/893)
|
||||
- The METR paper [Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity](https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/)
|
||||
- [GitHub Blog: Rethinking open source mentorship in the AI era](https://github.blog/open-source/maintainers/rethinking-open-source-mentorship-in-the-ai-era/)
|
||||
@@ -1,57 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
<!-- Copyright Contributors to the OpenImageIO Project. -->
|
||||
|
||||
# Agentic coding / coding assistants
|
||||
|
||||
Please start by reading [our policy on using "AI" coding
|
||||
assistsants](AI_Policy.md).
|
||||
|
||||
|
||||
## Multi-tool setup
|
||||
|
||||
We aim to allow people to use whatever agentic or coding assistant tools they
|
||||
want. The repository ships with a setup script that configures tool-specific
|
||||
files locally for whichever assistant(s) you use.
|
||||
|
||||
### Generic: `AGENTS.md` and `.agents/`
|
||||
|
||||
As much as possible, we use identical instructions and files across all coding
|
||||
assistants.
|
||||
|
||||
`AGENTS.md` is the main file providing overall repo-specific instructions and
|
||||
context to agents. Many coding agents already read this file directly; for
|
||||
those that don't, the setup script creates the necessary links or wrappers.
|
||||
|
||||
`.agents/skills/` is where shared skill files live. Many tools find skills
|
||||
here automatically; for those that need them elsewhere, the setup script
|
||||
creates the appropriate links.
|
||||
|
||||
### Running the setup script
|
||||
|
||||
After cloning, run `.agents/setup-agent <tool>` for the tool(s) you use:
|
||||
|
||||
```
|
||||
.agents/setup-agent claude # Claude Code
|
||||
.agents/setup-agent cursor # Cursor
|
||||
.agents/setup-agent codex # OpenAI Codex
|
||||
.agents/setup-agent opencode # Opencode
|
||||
.agents/setup-agent copilot # GitHub Copilot
|
||||
.agents/setup-agent all # all of the above
|
||||
```
|
||||
|
||||
The script is idempotent — running it multiple times is safe. To undo:
|
||||
|
||||
```
|
||||
.agents/setup-agent clear # remove all tool setup
|
||||
.agents/setup-agent clear claude # remove setup for one tool
|
||||
```
|
||||
|
||||
Tool-specific directories (`.claude/`, `.cursor/`, `.codex/`, `.opencode/`,
|
||||
`.github/copilot-instructions.md`) are created locally only and are listed in
|
||||
`.gitignore`. Each developer runs the script for the tool they use; nothing
|
||||
tool-specific is committed to the repository.
|
||||
|
||||
The script header contains per-tool documentation (what each tool reads
|
||||
natively, what requires setup, and links to relevant docs) — consult it when
|
||||
adding support for a new tool or updating the strategy for an existing one.
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
<!-- Copyright Contributors to the Open Shading Language Project. -->
|
||||
|
||||
# Build profiling
|
||||
|
||||
These are instructions for profiling the build process of OSL --
|
||||
useful for figuring out where the build process is spending its time, and
|
||||
where it might be optimized.
|
||||
|
||||
## Profiling module compilation with clang -ftime-trace
|
||||
|
||||
These instructions are based on the following references:
|
||||
|
||||
- general instructions: https://www.superfunc.zone/posts/001-speeding-up-c-builds/
|
||||
- ninjatracing.py script: https://github.com/nico/ninjatracing
|
||||
- Background info: https://aras-p.info/blog/2019/01/16/time-trace-timeline-flame-chart-profiler-for-Clang/
|
||||
|
||||
The steps are as follows, and they require the use of clang, ninja, and
|
||||
the chrome browser:
|
||||
|
||||
1. Build with clang using the `-ftime-trace`, flag which is set when you use
|
||||
the OSL build option -DOSL_BUILD_PROFILE=1. You MUST use clang, as this
|
||||
is a clang-specific feature, and you must use the ninja builder (use CMake
|
||||
arguments `-G ninja`). This must be a *fresh* build, not an incremental
|
||||
build (or the results will only reflect the incrementally build parts).
|
||||
|
||||
This will result in a file, build/.ninja_log, containing timings from
|
||||
the build process.
|
||||
|
||||
2. Prepare the output using the `ninjatracing.py` script as follows:
|
||||
|
||||
```
|
||||
python3 src/build-scripts/ninjatracing.py -a build/.ninja_log > top_level.json
|
||||
```
|
||||
|
||||
3. Running the Chrome browser, visit the URL `chrome://tracing`, and LOAD that
|
||||
json file created in the previous step. This will display a timeline of the
|
||||
build process, showing which thread, in what order, and how long each
|
||||
module took to compile.
|
||||
|
||||
4. For even more detail on what's happening within the compilation of each
|
||||
module, you can use the `-e` flag to expand the output:
|
||||
|
||||
```
|
||||
python3 src/build-scripts/ninjatracing.py -a -e -g 50000 build/.ninja_log > expanded.json
|
||||
```
|
||||
|
||||
Loading this in Chrome's tracing view, as above, will show a full flame
|
||||
chart of the build process, showing the time spent in the different
|
||||
functional parts of the compiler and which functions of OSL it is
|
||||
compiling or which templates are being instantiated.
|
||||
@@ -1,32 +0,0 @@
|
||||
Release 1.14.0 (Fall 2024) -- compared to 1.13
|
||||
-------------------------------------------------
|
||||
|
||||
### New minimum dependencies and compatibility changes:
|
||||
* *Blah*: Raise minimum to 1.2...
|
||||
|
||||
### OSL Language, standard library, and oslc compiler (for shader writers):
|
||||
* *New feature*: item
|
||||
|
||||
### ⛰️ API changes and new ShadingSystem features (for renderer writers):
|
||||
|
||||
### 🚀 SIMD batched shading mode
|
||||
|
||||
### 🚀 OptiX GPU rendering
|
||||
|
||||
### 🐛/🔧 Internals: fixes, improvements, and developer concerns
|
||||
|
||||
|
||||
### 🏗 Build/test/CI and platform ports
|
||||
* CMake build system and scripts:
|
||||
- item
|
||||
* Testing and Continuous integration (CI) systems:
|
||||
- *test*: item
|
||||
- *ci*: item
|
||||
* Platform support:
|
||||
- *win*: item
|
||||
|
||||
### 📚 Documentation
|
||||
- *docs*: item
|
||||
|
||||
### 🏢 Project Administration
|
||||
- *admin*: item
|
||||
@@ -1,4 +0,0 @@
|
||||
Release 1.2.3.4 (Month DD, YYYY) -- compared to 1.2.3.3
|
||||
-------------------------------------------------------
|
||||
- *category*: Description [#1234](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1234) (by someuser)
|
||||
|
||||
@@ -1,196 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
<!-- Copyright Contributors to the Open Shading Language Project. -->
|
||||
|
||||
|
||||
Code Review Procedures
|
||||
======================
|
||||
|
||||
### Why do we code review?
|
||||
|
||||
Code review is a process where someone other than the author of a patch
|
||||
examines the proposed changes and approves or critiques them. The main
|
||||
benefits are to:
|
||||
|
||||
- Encourage submitters to ensure that their changes are well thought out,
|
||||
tested, and documented so that their intent and wisdom will be clear to
|
||||
others.
|
||||
- Directly find shortcomings in or suggest improvements to the proposed
|
||||
changes, and ensure that the changes are consistent with the project's best
|
||||
practices.
|
||||
- Minimize the amount of the code base that has only been seen or is only
|
||||
understood by one person.
|
||||
- Improve security and robustness of the code base by assuring that at least
|
||||
two people (submitter and reviewer) agree that every patch is reasonable and
|
||||
safe.
|
||||
|
||||
### Reviewer guidelines -- what you should be looking for
|
||||
|
||||
Code review is not difficult, and it doesn't require you to be a senior
|
||||
developer or a domain expert. Even if you don't particularly understand that
|
||||
region of the code and are not a domain expert in the feature being changed,
|
||||
you can still provide a helpful second pair of eyes to look for obvious red
|
||||
flags and give an adequate review:
|
||||
|
||||
- This may seem too obvious to say explicitly, but a big part of review is
|
||||
just looking at the PR and seeing that it doesn't appear to deface,
|
||||
purposely/obviously break, or introduce malware into the project.
|
||||
- Does the explanation of the PR make logical sense and appear to match (as
|
||||
near as you can tell) the changes in the code? Does it seem sensible, even
|
||||
if you don't understand all the details?
|
||||
- Does the test pass all of our existing CI tests? (If it does, at least we
|
||||
are reasonably sure it doesn't break commonly used features.)
|
||||
- Is there any evidence that the changes have been tested? Ideally, something
|
||||
already in, or added to the testsuite by this PR, exercises the new or
|
||||
altered code. (Though sometimes a patch addresses an edge case that's very
|
||||
hard to reproduce in the testsuite, and you have to rely on the submitter's
|
||||
word and the sensibility of their explanation.)
|
||||
- Not required, but nice if we can get it: You're an expert in the part of
|
||||
the code being changed, and you agree that this is the best way to achieve
|
||||
an improvement.
|
||||
- Any objections should be explained in detail and invite counter-arguments
|
||||
from the author or other onlookers. A reviewer should never close a PR
|
||||
unless it fails to conform to even the basic requirements of any submitted
|
||||
PR, or if enough time has passed that it's clear that the PR has been
|
||||
abandoned by its author. It's ok to ultimately say "no" to a PR that can't
|
||||
be salvaged, but that should be the result of a dialogue.
|
||||
|
||||
Obviously, you also want any review comments you give to be constructive and
|
||||
helpful. If you don't understand something, ask for clarification. If you
|
||||
think something is wrong, suggest a fix if you know how to fix it. If you
|
||||
think something is missing, suggest what you think should be added. Follow the
|
||||
expected kind and constructive tone of the project's community.
|
||||
|
||||
### Submitter guidelines -- how to encourage good reviews and timely merges
|
||||
|
||||
A few tips for submitters to help ensure that your PRs get reviewed and merged
|
||||
in a timely manner and are respectful of the reviewers' time and effort:
|
||||
|
||||
- Aim for small PRs that do a specific thing in a clear way. It is better to
|
||||
implement a large change with a series of PRs that each take a small,
|
||||
obvious step forward, than to have one huge PR that makes changes so
|
||||
extensive that nobody quite knows how to evaluate it.
|
||||
- Make sure your PR commit summary message clearly explains the why and how of
|
||||
your changes. You want someone to read that and judge whether it's a
|
||||
sensible approach, know what to look for in the code, and have their
|
||||
examination of the code make them say "yes, I see, of course, great, just as
|
||||
I expected!"
|
||||
- Make sure your PR includes a test (if not covered by existing tests).
|
||||
- Make sure your PR fully passes our CI tests.
|
||||
- Make sure your PR modifies the documentation as necessary if it adds new
|
||||
features, changes any public APIs, or alters behavior of existing features.
|
||||
- If your PR alters public C++ APIs for which there are also Python bindings,
|
||||
make sure that the changes are also reflected in the Python bindings and any
|
||||
other language bindings we support.
|
||||
- If you are adding new language features or behaviors, make sure they are
|
||||
implemented and tested in all of the back-ends: single point shading,
|
||||
batch shading, GPU/OptiX.
|
||||
|
||||
### Code review procedures -- in the ideal case
|
||||
|
||||
In the best of circumstances, the code review process should be as follows for
|
||||
**EVERY** pull request:
|
||||
|
||||
- At least one reviewer critiques and eventually (possibly after changes are
|
||||
made) approves the pull request. Reviewers, by definition, are not the same
|
||||
person as the author.
|
||||
- Reviewers should indicate their approval by clicking the "Approve" button in
|
||||
GitHub, or by adding a comment that says "LGTM" (looks good to me).
|
||||
- If possible, reviewers should have some familiarity with the code being
|
||||
changed (though for a large code base, this is not always possible).
|
||||
- At least a few work days should elapse between posting the PR and merging
|
||||
it, even if an approving review is received immediately. This is to allow
|
||||
additional reviewers or dissenting voices to get a chance to weigh in.
|
||||
- If the reviewer has suggestions for improvement, it's the original author
|
||||
who should make the changes and push them to the PR, or at the very least,
|
||||
the author should okay any changes made by the reviewer before a merge
|
||||
occurs (if at all practical).
|
||||
|
||||
Not all patches need the highest level of scrutiny. Reviews can be cursory and
|
||||
quick, and merges performed without additional delay, in some common low-risk
|
||||
circumstances:
|
||||
|
||||
- The patch fixes broken CI, taking the project from a verifiably broken state
|
||||
to passing all of our CI builds and tests.
|
||||
- The changes are only to documentation, comments, or other non-code files,
|
||||
and so cannot break the build or introduce new bugs.
|
||||
- The code changes are trivial and are obviously correct. (This is a judgment
|
||||
call, but if the author or reviewer or both are among the project's senior
|
||||
developers, they don't need to performatively pretend that they aren't sure
|
||||
it's a good patch.)
|
||||
- The changes are to *localized* and *low risk* code, that even if wrong,
|
||||
would only have the potential to break individual non-critical features or
|
||||
rarely-used code paths.
|
||||
|
||||
Conversely, some patches are so important or risky that if possible, they
|
||||
should be reviewed by multiple people, preferably from different stakeholder
|
||||
institutions than the author, and ensure that the approval is made with a
|
||||
detailed understanding of the issues. In these cases, it may also be worth
|
||||
bringing up the issue up at a TSC meeting to ensure the attention of many
|
||||
stakeholders. These include:
|
||||
|
||||
- *New directions*: Addition of major new features, new strategic initiatives,
|
||||
or changes to APIs that introduce new idioms or usage patterns should give
|
||||
ample time for all stakeholders to provide feedback. In such cases, it may
|
||||
be worth having the PR open for comments for weeks, not just days.
|
||||
- *Risky changes*: Changes to core classes or code that could subtly break
|
||||
many things if not done right, or introduce performance regressions to
|
||||
critical cases.
|
||||
- *Compatibility breaks*: changes that propose to break backward API
|
||||
compatibility with existing code or data files, or that change the required
|
||||
toolchain or dependencies needed to build the project.
|
||||
- *Security*: Changes that could introduce security vulnerabilities, or that
|
||||
fix tricky security issues where the best fix is not obvious.
|
||||
|
||||
### Code review compromises -- because things are rarely ideal
|
||||
|
||||
We would love to have many senior reviewers constantly watching for PRs, doing
|
||||
thorough reviews immediately, and following the above guidelines without
|
||||
exception. Wouldn't that be great! But in reality, we have to compromise,
|
||||
hurry, or cut corners, or nothing would ever get done. Some of these
|
||||
compromises are understandable and acceptable if they aren't happening too
|
||||
often.
|
||||
|
||||
- Lack of reviews: If no reviews are forthcoming after a couple days, a "are
|
||||
there any objections?" comment may be added to the PR, and if no objections
|
||||
are raised within another few days, the PR may be merged by the author if
|
||||
they are a senior developer on the project. This is a fact of life, but
|
||||
should be minimized (with a rigor proportional to where the patch falls on
|
||||
the "low risk / high risk" scale described above). If this is done, you
|
||||
should leave an additional comment explaining why it was merged without
|
||||
review and inviting people to submit post-merge comments if they
|
||||
subsequently spot something that can be improved.
|
||||
- Time-critical patches: urgent security fixes, broken CI or builds, critical
|
||||
bugs affecting major stakeholders who are waiting for a repaired release,
|
||||
fixes that are blocking other work or preventing other PRs from advancing.
|
||||
In such cases, it is understandable for senior developers to try to speed up
|
||||
the process of getting the changes integrated (though the very nature of
|
||||
their criticality also indicates that it's worth getting a review if at all
|
||||
possible).
|
||||
- Failing tests: Sometimes a PR must be merged despite failing CI tests.
|
||||
Usually this is for one of two reasons: (1) spurious CI failures are known
|
||||
to be occurring at that time and are unrelated to the PR; (2) the PR is part
|
||||
of a series of patches that are only expected to fully pass CI when the last
|
||||
piece is completed.
|
||||
|
||||
These changes are understandable, but we still are striving to reduce their
|
||||
frequency. It is the responsibility of the senior developers, TSC members, and
|
||||
major stakeholders to be monitoring the incoming PRs and helping with reviews
|
||||
as much as possible, to ensure that review exceptions are rare.
|
||||
|
||||
### Code review pathologies -- things to avoid
|
||||
|
||||
These are anti-patterns that generally are indications of an unhealthy open
|
||||
source project:
|
||||
|
||||
* An author merging their own PR without any review comments that indicate
|
||||
meaningful scrutiny or approval from another party, and without giving
|
||||
adequate warning that a merge will occur if no reviews are received.
|
||||
* PRs languishing for weeks or months without any review or merge.
|
||||
* PRs that don't adequately test their changes (basically crossing your
|
||||
fingers and hoping it works).
|
||||
* PRs that are merged despite failing CI that might be related or, if
|
||||
unrelated, that might be masking problems with the PR being evaluated.
|
||||
|
||||
Again, sometimes these things happen out of necessity to keep the project
|
||||
moving forward under constrained development resources. But we strive as much
|
||||
as possible to ensure that they are rare exceptions.
|
||||
@@ -1,449 +0,0 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
<!-- Copyright Contributors to the Open Shading Language Project. -->
|
||||
|
||||
# Release Procedures for Open Shading Language
|
||||
|
||||
## Version nomenclature and release cadence
|
||||
|
||||
### The meaning of the version parts
|
||||
|
||||
Our release numbers are of the form `MAJOR.MINOR.PATCH.TWEAK`, and we follow
|
||||
an almost-semantic-versioning scheme.
|
||||
|
||||
MAJOR releases are those that break backward-compatibility of the public APIs,
|
||||
requiring existing application code to change their source code where it calls
|
||||
OSL API functions in order to compile and work correctly.
|
||||
|
||||
MINOR releases guarantee API backward-compatibility with prior releases that
|
||||
have the same major number, but can introduce ABI or link incompatibilities.
|
||||
Applications using OSL need to be recompiled to move to a new minor release,
|
||||
but should not need to change their source code (except, of course, to take
|
||||
advantage of new features). Minor releases are allowed to drop support for
|
||||
sufficiently old compilers and dependencies.
|
||||
|
||||
PATCH releases guarantee both API and ABI/link backward-compatibility with
|
||||
prior releases that have the same minor number. Features and new public API
|
||||
calls may be added (thus deviating from strict semantic versioning), but only
|
||||
if they preserve ABI/link compatibility. This means that standalone functions
|
||||
or static methods may be added, but existing functions will not change their
|
||||
parameters, and no new virtual methods or struct data layouts change for patch
|
||||
releases (for classes in public header files). Application code can be
|
||||
re-linked to a new patch release without needing to be recompiled. We also
|
||||
guarantee that any compilers or dependencies supported for the first release
|
||||
of a minor series will continue to be supported for all patches to that minor
|
||||
series.
|
||||
|
||||
TWEAK releases are restricted to critical bug fixes or build breaks that do
|
||||
not alter public APIs in any way.
|
||||
|
||||
### Cadence of releases
|
||||
|
||||
Major (arbitrarily incompatible) releases happen rarely, usually with multiple
|
||||
years between them.
|
||||
|
||||
Minor (API backward-compatible) releases are scheduled annually, targeted at
|
||||
late summer (SIGGRAPH time) to be in beta, and early autumn for a full
|
||||
release.
|
||||
|
||||
Patch (API and ABI backward-compatible) releases are scheduled monthly,
|
||||
usually aiming for the first day of each month.
|
||||
|
||||
Tweak (fully forward and backward compatible) releases are not regularly
|
||||
scheduled, and only happen sporadically, when a critical fix is needed in
|
||||
between scheduled patch releases.
|
||||
|
||||
### Things are different in "main"
|
||||
|
||||
The "main" branch is where ongoing development occurs without any
|
||||
compatibility guarantees. We don't always know if the next year's release from
|
||||
main will turn out to be major (API breaking) or minor (only ABI breaking).
|
||||
|
||||
Some studios or products need the most up-to-date enhancements, and thus tend
|
||||
to build OSL from the "main" branch rather than using tagged releases. For
|
||||
these users, we try to set version numbers and occasionally tag in main, to
|
||||
send a signal about which points in main seem safe to rely on various
|
||||
compatibility levels. However, the rules are slightly different than we use
|
||||
for releases.
|
||||
|
||||
In the "main" branch:
|
||||
|
||||
- TWEAK tags within "main" only guarantee ABI back-compatibility, but may
|
||||
have additions or non-bug-fix behavior changes (akin to patch releases
|
||||
within a release branch).
|
||||
- PATCH tags within "main" are allowed to break ABI or API (changes that
|
||||
would require minor or major releases, if they were not in "main").
|
||||
- Beware of unmarked breaks in compatibility of commits in main that are
|
||||
in between developer preview tags.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Branch and tag names
|
||||
|
||||
**Branches** are places where commits containing new development may be added
|
||||
(and thus the branch markers will move over time). Branch names obey the
|
||||
following conventions:
|
||||
|
||||
- `main` is the area for arbitrary changes intended for the next year's
|
||||
major or minor release.
|
||||
- `dev-1.2` are the areas for staging additions that will become the next
|
||||
tweak or patch release for the minor version series.
|
||||
- `release` is a special branch marker that is always set to the latest tag of
|
||||
the currently supported, stable release family. People can count on
|
||||
"release" always being the latest stable release, whatever that may be at
|
||||
the time.
|
||||
|
||||
**Tags** indicate releases or developer previews, and once a commit is
|
||||
tagged, it is permanent and will never be moved. Tag names obey the following
|
||||
conventions:
|
||||
|
||||
- `v1.2.3.4` is a specific public stable release, corresponding to official
|
||||
major, minor, public, or tweak releases.
|
||||
- `v1.2.3.4-alpha`, `v1.2.3.4-beta`, or `v1.2.3.4-RC1` are pre-releases for an
|
||||
upcoming public stable release, at the alpha, beta, or release candidate
|
||||
stages, respectively.
|
||||
- `v1.2.3.4-dev` is a "developer preview" within "main." It is not an official
|
||||
supported release, and while the numbering may indicate compatibility versus
|
||||
other recent developer previews, they should not be assumed to be compatible
|
||||
with any prior official stable releases.
|
||||
|
||||
*Very* occasionally, other branch or tag names (with custom suffixes or
|
||||
different naming schemes) may be used for special purposes by particular
|
||||
developers or users, but should not be considered reliable or permanent, and
|
||||
in general should be ignored by anyone who didn't make the tag or branch.
|
||||
|
||||
---
|
||||
|
||||
## Release Procedures
|
||||
|
||||
### Soft freeze for monthly tweak releases:
|
||||
|
||||
We freely backport *safe*, non-ABI-breaking changes by cherry-picking them
|
||||
from main to the supported branch continually throughout most of the month.
|
||||
|
||||
In the seven days before the new month, we do a "soft freeze" where only
|
||||
important bug fixes are backported. Hold on to any other patches you wish to
|
||||
backport until after the monthly patch release (i.e., save them for the next
|
||||
month's release so you never have a release that contains changes that are
|
||||
only a few days old, and therefore not as well tested). You may, of course,
|
||||
continue to backport fixes to documentation or other non-code parts of the
|
||||
project during this soft freeze.
|
||||
|
||||
### Branching for annual major/minor releases
|
||||
|
||||
By mid-June (about 1-2 months before the beta of a new annual big release),
|
||||
you should branch and mark it as an alpha.
|
||||
|
||||
At the tip of "main", create a new branch named `dev-MAJOR.MINOR` that will
|
||||
be the staging area for the next release.
|
||||
|
||||
Customarily, at that point we add a commit to main (but not to the new
|
||||
dev-MAJ.MIN branch) that bumps main's version to the next minor level, to
|
||||
avoid any confusion between builds from main versus what will be the next
|
||||
release branch. This starts the divergence between main and the release
|
||||
branch, and henceforth, any big or compatibility-breaking changes will only be
|
||||
committed to main and not backported to the release branch. (Though we are
|
||||
loose about this rule during the alpha period and allow continued breaking
|
||||
changes in the alpha, but by the time we call it beta, we allow no more
|
||||
breaking changes.) Also at this stage, the main branch's CHANGES.md should
|
||||
have a heading added at the top for the *next* version.
|
||||
|
||||
|
||||
### Prior to a release
|
||||
|
||||
1. Update CI dependencies: Ensure that the "latest" CI test specifies the
|
||||
current releases of the dependencies and compilers (check their home
|
||||
pages), and that the [INSTALL.md](../INSTALL.md) file correctly documents
|
||||
the version ranges that we expect to work and that we actively test.
|
||||
|
||||
2. Release notes: [CHANGES.md](../CHANGES.md) should be updated to reflect
|
||||
all the new features and fixes. Looking at the notes from older releases
|
||||
should provide a good example of what we're aiming for.
|
||||
|
||||
- Patch and tweak releases can be brief one-line descriptions (often the
|
||||
first line of the commit messages involved), presented in a single
|
||||
section in either chronological or any other order that seems right.
|
||||
- Minor or major releases have a much more extensive, prose-based
|
||||
description of all changes since the last minor release, broken into
|
||||
sections (dependency changes, major new features, enhancements and fixes,
|
||||
internals and developer goodies, testing/CI/ports, etc.) and ordered for
|
||||
readability and relevance.
|
||||
|
||||
3. Ensure docs are up to date:
|
||||
|
||||
- [README.md](README.md): Actually read it! Make sure it all seems
|
||||
accurate and up to date.
|
||||
- [INSTALL.md](INSTALL.md): Be sure that it accurately reflects the
|
||||
current minimum and latest-tested versions of each dependency.
|
||||
- [CREDITS.md](CREDITS.md): Check against the recent repo history to be
|
||||
sure new contributors are listed.
|
||||
- [SECURITY.md](SECURITY.md): Make sure it accurately reflects the
|
||||
status of which branches get updates.
|
||||
- Skim the [user documentation](https://docs.openshadinglanguage.org) to
|
||||
ensure it's building correctly and doesn't have any obvious errors,
|
||||
especially the parts that describe new features.
|
||||
|
||||
4. Make sure the the top-level CMakeLists.txt file is updated:
|
||||
|
||||
- The version on the `project()` call should be correct.
|
||||
- The `PROJECT_VERSION_RELEASE_TYPE` variable should be set to "alpha" or
|
||||
"beta" if appropriate, "RC" for release candidate, or empty string `""`
|
||||
for most supported releases, and "dev" only for the main branch or
|
||||
developer previews.
|
||||
- The `${PROJECT_NAME}_SUPPORTED_RELEASE` variable should be `ON` for any
|
||||
release branch, `OFF` for main.
|
||||
|
||||
5. Make sure everything passes the usual CI workflow. Also check the daily or
|
||||
weekly "analysis" workflows to make sure there aren't any important
|
||||
warnings that should be fixed.
|
||||
|
||||
|
||||
### Staging alpha / beta / release candidate (annual minor/major releases only)
|
||||
|
||||
For monthly patch releases, we don't have any formal alpha/beta/RC stages.
|
||||
|
||||
For the annual minor or major releases we have a staged release:
|
||||
|
||||
- `alpha` is everything after we have branched, in which we think all the big
|
||||
new features have been added, and while we will make continued changes and
|
||||
fixes, we are aiming for increased stability and to minimize additional
|
||||
breaking changes prior to the release.
|
||||
- `beta` should be about one month prior to the final release date. We create
|
||||
a tag `v1.2.3.4-beta` and announce the beta (see below "Making the
|
||||
release"). Once we tag a beta, we try very hard not to allow any further
|
||||
changes that change the API or are not ABI-compatible (i.e., safe fixes
|
||||
only).
|
||||
- `RC` or release candidates around one week prior to the final release date.
|
||||
This is a trial run, hopefully identical to the final release (except for
|
||||
removing the RC label and making a new tag). The only changes allowed after
|
||||
RC are fixes to the most critical bugs or build breaks that would be bad for
|
||||
users to encounter. If critical problems are found with RC1, they should be
|
||||
fixed and immediately re-tagged as RC2, etc. All other fixes should be
|
||||
postponed until the next month's patch release.
|
||||
|
||||
### Making the release
|
||||
|
||||
A final release is made on the scheduled date, provided the latest RC has
|
||||
survived for at least a few days of testing without finding any critical
|
||||
problems. Don't make the release final until you are sure there are no
|
||||
truly critical bugs or build breaks that users will encounter.
|
||||
|
||||
The following are the steps for making the release:
|
||||
|
||||
1. Double check the top-level CMakeLists.txt to ensure the right version
|
||||
number and type of version designation (i.e.,
|
||||
`PROJECT_VERSION_RELEASE_TYPE` should be set appropriately).
|
||||
|
||||
2. Edit CHANGES.md to reflect the correct date of the release and ensure it
|
||||
includes any last-minute changes that were made during beta or release
|
||||
candidate stages. Please see the section "Generating release notes" below.
|
||||
|
||||
3. Push it to **your** GitHub fork, make sure it passes CI.
|
||||
|
||||
4. Tag the release with a signed tag:
|
||||
|
||||
$ git tag -s v1.2.3.4 # add a signed tag
|
||||
$ git tag -v v1.2.3.4 # verify the tag
|
||||
|
||||
Be sure that the tag also reflects if it's an alpha (v1.2.3.4-alpha),
|
||||
beta (v1.2.3.4-beta), release candidate (v1.2.3.4-RC1), or developer
|
||||
preview (v1.2.3.4-dev). If it's a final release, just use the plain
|
||||
version number (v1.2.3.4).
|
||||
|
||||
Note that the tag signing requires you to have a GPG key set up and
|
||||
associated with your GitHub account. Please see [GitHub's signed tagging instructions](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-tags) for more information.
|
||||
|
||||
If you get errors messages "gpg: signing failed: Inappropriate ioctl for device", then the solution is to first:
|
||||
|
||||
$ export GPG_TTY=$(tty)
|
||||
|
||||
5. If this will now be the recommended stable release, move the `release`
|
||||
branch marker to the same position.
|
||||
|
||||
6. Push it to GitHub: `git push aswf release --tags`
|
||||
|
||||
(This example assumes "aswf" is the name of the remote for the GitHub
|
||||
`AcademySoftwareFoundation/OpenShadingLanguage` repo.)
|
||||
|
||||
7. Draft a release on GitHub: On
|
||||
https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/releases
|
||||
select "Draft a new release." Choose the new tag you just pushed. Make the
|
||||
release title "Open Shading Language v1.2.3.4" (and beta, etc., designation
|
||||
if applicable). In the description, paste the release notes for this
|
||||
release (from CHANGES.md). If this is a beta or release candidate, check
|
||||
"this is a pre-release" box at the bottom.
|
||||
|
||||
8. Announce the release on the [osl-dev mail list](https://lists.aswf.io/g/osl-dev)
|
||||
with the subject "Release: OSL v1.2.3.4" and using one of these templates
|
||||
for the body of the email.
|
||||
|
||||
For a monthly patch release:
|
||||
|
||||
> We have tagged v1.2.3.4 as the latest production release and moved the
|
||||
> "release" branch marker to that point. This is guaranteed to be API,
|
||||
> ABI, and link back-compatible with prior 1.2 releases. Release notes
|
||||
> are below.
|
||||
>
|
||||
> (Paste the full set of 1.2 changes here, just copy the appropriate
|
||||
> part of CHANGES.md)
|
||||
|
||||
For an annual major/minor release:
|
||||
|
||||
> OSL version 1.2 has been released! Officially tagged as "v1.2.3.4", we
|
||||
> have also moved the "release" branch tag to this position. Henceforth,
|
||||
> 1.2 is the supported production release family. The API is now frozen --
|
||||
> we promise that subsequent 1.2.x releases (which should happen monthly)
|
||||
> will not break back-compatibility of API, ABI, or linkage, compared to
|
||||
> this release. Please note that this release is *not* ABI or link
|
||||
> compatible with 1.1 or older releases.
|
||||
>
|
||||
> Release notes for 1.2 outlining all the changes since last year's
|
||||
> release are below.
|
||||
>
|
||||
> Please note that a few of the build and runtime dependencies have
|
||||
> changed their minimum supported versions. (List here any important
|
||||
> changes to dependencies, compilers, or C++ standard that users should be
|
||||
> aware of.)
|
||||
>
|
||||
> (List here anything else that people should know about this release
|
||||
> family that may be surprising if they haven't followed the last year of
|
||||
> development closely, or that they must know even if they are too lazy to
|
||||
> read the release notes. If this is a major release that is not
|
||||
> backward-compatible with prior versions, warn about that here.)
|
||||
>
|
||||
> Enjoy, and please report any problems. We will continue to make patch
|
||||
> releases to the 1.2 family roughly monthly, which will contain bug fixes
|
||||
> and non-breaking enhancements.
|
||||
>
|
||||
> The older 1.1 series of releases is now considered obsolete. We will
|
||||
> continue for now to make 1.1 patch releases, but over time, these will
|
||||
> become less frequent and be reserved for only the most critical bug
|
||||
> fixes.
|
||||
>
|
||||
> The "main" branch is now progressing toward an eventual 1.3 release next
|
||||
> summer. As usual, you are welcome to use main for real work, but we do
|
||||
> not make any compatibility guarantees and don't guarantee continuing API
|
||||
> compatibility in main.
|
||||
>
|
||||
> (Paste the full set of 1.2 changes here, just copy the appropriate
|
||||
> part of CHANGES.md)
|
||||
|
||||
For a beta leading up to the annual major/minor release:
|
||||
|
||||
> OSL version 1.2 is now in beta, tagged as "v1.2.3.4-beta". We
|
||||
> will try very hard not to make any further API or ABI changes between
|
||||
> now and the final release (unless it is absolutely necessary to fix
|
||||
> an important problem identified during beta testing). The final 1.2
|
||||
> release is scheduled for [DATE GOES HERE], so please try building and
|
||||
> testing the beta so we are sure to find any problems.
|
||||
>
|
||||
> Release notes for 1.2 outlining all the changes since last year's
|
||||
> release are below.
|
||||
>
|
||||
> (Paste the full set of 1.2 changes here, just copy the appropriate
|
||||
> part of CHANGES.md)
|
||||
|
||||
|
||||
### After the release
|
||||
|
||||
Odds and ends to do after the tag is pushed and the announcements are sent:
|
||||
|
||||
- Re-read RELEASING.md and ensure that the instructions match what you
|
||||
have done. Update as necessary.
|
||||
|
||||
- Go to [OSL's docs hosted on readthedocs.org](https://docs.openshadinglanguage.org),
|
||||
and ensure that the new release is built, visible, and is the default
|
||||
release shown (specified in the Admin section). I tend to keep the latest
|
||||
patch of each minor release available for reference indefinitely, but hide
|
||||
the docs for earlier patch releases within that minor release series.
|
||||
|
||||
- Edit the top-level CMakeList.txt to update the version to the *next*
|
||||
anticipated release on the branch, in order to ensure that anybody building
|
||||
from subsequent patches won't get a release number that advertises itself
|
||||
incorrectly as a prior tagged release. Also edit CHANGES.md to add a new
|
||||
(blank) heading for the next patch or release.
|
||||
|
||||
|
||||
## Generating release notes
|
||||
|
||||
We strongly encourage the use of "conventional commit" prefixes in commit
|
||||
messages. See [CONTRIBUTING.md](CONTRIBUTING.md#commit-messages) for details.
|
||||
|
||||
Many PRs are submitted (even by the author of this section you are now
|
||||
reading!) without the conventional commit prefix. The person who approves and
|
||||
merges the commit should take responsibility during the merge process to edit
|
||||
the commit message to add the appropriate prefix (and for that matter, to edit
|
||||
any part of the commit message for clarity). But at the end of the day, if we
|
||||
end up with some commits lacking a conventional commit prefix, it's no big
|
||||
deal -- we can fix it all up by hand when we make the release notes. But
|
||||
having CC prefixes in as many commit messages possible helps make the release
|
||||
notes process be simpler and more automated.
|
||||
|
||||
We have been using the [git-cliff](https://github.com/orhun/git-cliff) tool
|
||||
as the starting point for release notes. The command we use is:
|
||||
|
||||
git cliff -c src/doc/cliff.toml -d v1.2.3.4..HEAD > cliff.out.md
|
||||
|
||||
where v1.2.3.4 in this example is the tag of the last release. You could also
|
||||
use commit hashes to denote the range of changes you want to document.
|
||||
|
||||
**For monthly patch releases**
|
||||
|
||||
We have found that the git-cliff output is most of what we need for the patch
|
||||
releases, and can be copied into the CHANGES.md file with only some minor
|
||||
editing needed. The template for the patch release notes can be found in
|
||||
[Changes-skeleton-patch.md](docs/dev/Changes-skeleton-patch.md).
|
||||
|
||||
* Get rid of the headings that git-cliff generates. We don't use the headings
|
||||
for the patch releases.
|
||||
* Add prefixes to any commits that don't have them (they will be marked as
|
||||
"uncategorized" by git-cliff), and feel free to change any of the existing
|
||||
prefixes that you think are wrong or could be improved for clarity.
|
||||
* Rearrange the order of the entries to be logical and readable. I prefer the
|
||||
order: feature enhancements, bug fixes, build system fixes that might impact
|
||||
users, internal changes, test improvements, documentation and administrative
|
||||
changes.
|
||||
* For patch releases, feel free to omit any entries that you think are not
|
||||
user-facing and are too minor to be worth mentioning in the release notes.
|
||||
|
||||
Strive to keep the release notes just long enough for users to know if the
|
||||
patch contains any fixes relevant to them, but short enough to be read at a
|
||||
glance and without extraneous detail.
|
||||
|
||||
Here is an example of well-constructed monthly patch release notes:
|
||||
https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/releases/tag/v1.13.12.0
|
||||
|
||||
**For annual major/minor releases**
|
||||
|
||||
For major releases, the git-cliff output is just a starting point and need
|
||||
significant editing to get the detail and quality level we expect for our
|
||||
major releases. A simple bullet list of commits is not sufficient -- we aim
|
||||
for a prose-based description of important changes that "tell the story" of
|
||||
the year's work and will be thoroughly understood by our stakeholders who need
|
||||
to understand what has changed.
|
||||
|
||||
* Copy all the headings from [Changes-skeleton-major.md](docs/dev/Changes-skeleton-major.md)
|
||||
or the previous year's release notes to get the skeleton of the major and
|
||||
minor headers that you fit everything into. Note that it mostly corresponds
|
||||
to sections of the git-cliff output, but with a more carefully constructed
|
||||
hierarchy of categories.
|
||||
* Add prefixes to any commits that don't have them (they will be marked as
|
||||
"uncategorized" by git-cliff), and feel free to change any of the existing
|
||||
prefixes that you think are wrong or could be improved for clarity.
|
||||
* Rearrange the git-cliff output into the hierarchy of our preferred major
|
||||
release notes organization. Within each section and subsection, group
|
||||
similar changes together. The chronological order of the commits isn't as
|
||||
important as clearly explaining what changed over the course of the year.
|
||||
* The git-cliff output is a good starting point for populating the notes with
|
||||
every PR, plus automatically adding a reference and link to the PR and the
|
||||
name of the author of the patch.
|
||||
* Look with a skeptical eye at the one-line bullet points from git-cliff (i.e,
|
||||
from the first line of each PR's commit message). Often, they are too terse
|
||||
or tend to [bury the lede](https://www.dictionary.com/e/slang/bury-the-lede/).
|
||||
Expand into as much explanation is necessary for users who need to know
|
||||
about the change or feature to know whether it is relevant and have some
|
||||
idea what to do or that they should look at the relevant PRs for more
|
||||
detail.
|
||||
|
||||
Here is an example of well-constructed annual major release notes:
|
||||
https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/releases/tag/v1.14.3.0
|
||||
@@ -1,3 +0,0 @@
|
||||
# Shader Writing in OSL
|
||||
|
||||
Contains OSL shader writing content.
|
||||
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
# Web Site
|
||||
|
||||
Contains OSL web site content.
|
||||
@@ -0,0 +1,516 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# SPI-specific settings
|
||||
ifneq (${VERBOSE},)
|
||||
$(info Including spi/Makefile-bits)
|
||||
endif
|
||||
|
||||
# For SpComp2 builds, do:
|
||||
#
|
||||
# make OSL_SPCOMP2=1 spcomp2_install
|
||||
# or
|
||||
# make OSL_SPCOMP2=1 SPCOMP2_LOCAL_PATH=/test/path spcomp2_install_local
|
||||
#
|
||||
# For Arnold builds, do:
|
||||
#
|
||||
# make OSL_ARNOLD=1
|
||||
#
|
||||
# For a Rez-bound build, do:
|
||||
#
|
||||
# make OSL_SPIREZ=1
|
||||
#
|
||||
# (Options: OSL_REZ_NAME=blah REZ_PACKAGE_ROOT=path)
|
||||
#
|
||||
# Otherwise a default 'make' will make a fully generic OSL build.
|
||||
|
||||
OSL_SPCOMP2 ?= 0
|
||||
OSL_ARNOLD ?= 0
|
||||
OSL_SPIREZ ?= 0
|
||||
OSL_REZ_NAME ?= OSL
|
||||
OSL_VERS = $(shell grep "OSL VERSION" CMakeLists.txt | egrep -o "[0-9.]+")
|
||||
ONEVERS = $(shell site/spi/format_version.py ${OSL_VERS})
|
||||
OSL_SPCOMP2_VERSION ?= ${ONEVERS}
|
||||
|
||||
ifeq (${OSL_SPCOMP2},1)
|
||||
$(info Building for SpComp2)
|
||||
OSL_ARNOLD := 0
|
||||
NAMESPACE ?= 'OSL_SpComp2'
|
||||
SOVERSION ?= ${OSL_SPCOMP2_VERSION}
|
||||
PYLIB_LIB_PREFIX ?= 1
|
||||
PYLIB_INCLUDE_SONAME ?= 1
|
||||
OPENIMAGEIO_SPCOMP2_VERSION ?= 20103
|
||||
OPENEXR_VERSION ?= 2.2.0
|
||||
else ifeq (${OSL_ARNOLD},1)
|
||||
$(info Building for Arnold)
|
||||
NAMESPACE ?= 'OSL_Arnold'
|
||||
PYLIB_LIB_PREFIX ?= 0
|
||||
PYLIB_INCLUDE_SONAME ?= 0
|
||||
OPENEXR_VERSION ?= 2.4.0
|
||||
else ifeq (${OSL_SPIREZ},1)
|
||||
$(info Building for Rez distribution)
|
||||
NAMESPACE ?= 'OSL'
|
||||
PYLIB_LIB_PREFIX ?= 0
|
||||
PYLIB_INCLUDE_SONAME ?= 0
|
||||
MY_CMAKE_FLAGS += -DOSL_SPIREZ=1 -DOSL_REZ_PACKAGE_NAME=${OSL_REZ_NAME}
|
||||
MY_CMAKE_FLAGS += -DCMAKE_DEBUG_POSTFIX=_d
|
||||
OPENIMAGEIO_VERSION ?= 2.2.0.0
|
||||
OPENEXR_VERSION ?= 2.4.0
|
||||
$(info Building against OpenImageIO ${OPENIMAGEIO_VERSION})
|
||||
else
|
||||
$(info Building generic OSL)
|
||||
NAMESPACE ?= 'OSL'
|
||||
PYLIB_LIB_PREFIX ?= 0
|
||||
PYLIB_INCLUDE_SONAME ?= 0
|
||||
endif
|
||||
#$(info MAKECMDGOALS = $(MAKECMDGOALS))
|
||||
|
||||
|
||||
## Detect which SPI platform and set $platform, $COMPILER, $SPCOMP2_COMPILER,
|
||||
## and PYTHON_VERSION. Lots of other decisions are based on these.
|
||||
ifeq (${SP_OS}, rhel7)
|
||||
# Rhel7 (current)
|
||||
platform := rhel7
|
||||
SPI_COMPILER_PLATFORM ?= gcc-6.3
|
||||
ifeq (${SPI_COMPILER_PLATFORM},gcc-4.8)
|
||||
SPCOMP2_COMPILER ?= gcc48m64
|
||||
CMAKE_CXX_STANDARD ?= 11
|
||||
else
|
||||
SPCOMP2_COMPILER ?= gcc63
|
||||
CMAKE_CXX_STANDARD ?= 14
|
||||
endif
|
||||
SP_PLATFORM ?= linux
|
||||
SP_PROC ?= x86_64
|
||||
SP_REZ_OS ?= CentOS-7
|
||||
else ifeq (${platform}, macosx)
|
||||
# Generic OSX machines (including LG's laptop)
|
||||
COMPILER ?= clang
|
||||
SPCOMP2_COMPILER ?= clang
|
||||
SP_OS ?= macosx
|
||||
SP_PLATFORM ?= macosx
|
||||
SP_PROC ?= x86_64
|
||||
SP_REZ_OS ?= MacOS
|
||||
else
|
||||
$(error Unknown SP_OS=${SP_OS} platform=${platform})
|
||||
endif # endif ${SP_OS}
|
||||
|
||||
MY_CMAKE_FLAGS += -DSP_OS=${SP_OS} -DSP_PLATFORM=${SP_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DSP_PROC=${SP_PROC} -DSP_REZ_OS=${SP_REZ_OS}
|
||||
MY_CMAKE_FLAGS += -DSPI_COMPILER_PLATFORM=${SPI_COMPILER_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DEXTRA_CPP_ARGS:STRING="-DOSL_SPI=1" -DOSL_SITE:STRING=spi
|
||||
MY_CMAKE_FLAGS += -DSPI_TESTS=1
|
||||
MY_CMAKE_FLAGS += -DOSL_NAMESPACE_INCLUDE_PATCH=1
|
||||
REZ_PACKAGE_ROOT ?= /shots/spi/home/software/packages
|
||||
SPCOMP2_ROOT ?= /shots/spi/home/lib/SpComp2
|
||||
|
||||
|
||||
## Rhel7 (current)
|
||||
ifeq (${SP_OS}, rhel7)
|
||||
PYTHON_VERSION ?= 2.7
|
||||
USE_SIMD ?= sse4.1,aes
|
||||
CMAKE ?= cmake
|
||||
USE_NINJA ?= 1
|
||||
NINJA ?= ninja
|
||||
ifeq ($(USE_NINJA),1)
|
||||
MY_CMAKE_FLAGS += -DCMAKE_MAKE_PROGRAM=${NINJA}
|
||||
endif
|
||||
export CCACHE_CPP2 ?= 1
|
||||
# Override lib64 and use SPI convention of lib
|
||||
MY_CMAKE_FLAGS += -DCMAKE_INSTALL_LIBDIR="${INSTALL_PREFIX}/lib"
|
||||
ifeq (${OSL_SPCOMP2},1)
|
||||
MY_CMAKE_FLAGS += -DPYTHON_SITE_DIR="${INSTALL_PREFIX}/python"
|
||||
else ifeq (${OSL_SPIREZ},1)
|
||||
MY_CMAKE_FLAGS += -DPYTHON_SITE_DIR="${INSTALL_PREFIX}/python"
|
||||
else ifeq (${OSL_ARNOLD},1)
|
||||
OIIO_LIBNAME_SUFFIX ?= _Arnold
|
||||
OSL_LIBNAME_SUFFIX ?= _Arnold
|
||||
endif
|
||||
|
||||
#
|
||||
# Compilers:
|
||||
#
|
||||
# A variety of tags can be used to try specific versions of gcc or
|
||||
# clang from the site-specific places we have installed them.
|
||||
LLVM_DIRECTORY ?= /shots/spi/home/lib/arnold/rhel7/llvm_8.0.0
|
||||
ifeq (${COMPILER},clang6)
|
||||
LLVM_DIRECTORY := /shots/spi/home/lib/arnold/rhel7/llvm_6.0.1
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang7)
|
||||
LLVM_DIRECTORY := /shots/spi/home/lib/arnold/rhel7/llvm_7.0.1
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang8)
|
||||
LLVM_DIRECTORY := /shots/spi/home/lib/arnold/rhel7/llvm_8.0.0
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang9)
|
||||
LLVM_DIRECTORY := /shots/spi/home/software/packages/llvm/9.0.1-1/${SPI_COMPILER_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang10)
|
||||
LLVM_DIRECTORY := /shots/spi/home/software/packages/llvm/10.0.0-1/${SPI_COMPILER_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang11)
|
||||
LLVM_DIRECTORY := /shots/spi/home/software/packages/llvm/11.0.0-rc1/${SPI_COMPILER_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang)
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
||||
else ifeq (${COMPILER}, gcc6)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=/opt/rh/devtoolset-6/root/usr/bin/gcc \
|
||||
-DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-6/root/usr/bin/g++
|
||||
else ifeq (${COMPILER},gcc)
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
|
||||
else ifeq (${COMPILER},)
|
||||
# default compiler is clang, taken from the LLVM directory
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
endif
|
||||
ifeq (${SPI_COMPILER_PLATFORM},gcc-4.8)
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_FLAGS="--gcc-toolchain=/usr" \
|
||||
-DCMAKE_CXX_FLAGS="--gcc-toolchain=/usr" \
|
||||
-DTOOLCHAIN_FLAGS="--gcc-toolchain=/usr"
|
||||
endif
|
||||
|
||||
MY_CMAKE_FLAGS +=
|
||||
-DLLVM_STATIC=1 \
|
||||
-DLLVM_VERSION=${LLVM_VERSION} \
|
||||
-DLLVM_DIRECTORY=${LLVM_DIRECTORY}
|
||||
|
||||
#
|
||||
# Boost
|
||||
#
|
||||
BOOSTVERS ?= 1.70
|
||||
BOOSTSPSUFFIX ?=
|
||||
BOOSTVERSSP=${BOOSTVERS}${BOOSTSPSUFFIX}
|
||||
MY_CMAKE_FLAGS += -DBOOST_VERS_SP=${BOOSTVERSSP}
|
||||
# $(info BOOSTVERSSP ${BOOSTVERSSP})
|
||||
ifeq (${BOOSTVERS},1.55)
|
||||
SPBOOST_INC_DIR ?= /usr/include/boost_${BOOSTVERSSP}
|
||||
SPBOOST_LIB_DIR ?= /usr/lib64/boost_${BOOSTVERSSP}
|
||||
ifeq (${BOOSTSPSUFFIX}, sp)
|
||||
SPBOOST_LIBNAMESTART ?= lib${BOOSTSPSUFFIX}boost_${shell echo ${BOOSTVERS} | sed "s/\\./_/"}_0
|
||||
else
|
||||
SPBOOST_LIBNAMESTART ?= lib${BOOSTSPSUFFIX}boost
|
||||
endif
|
||||
SPBOOST_LIBNAMEEND ?= -gcc48-mt-${shell echo ${BOOSTVERS} | sed "s/\\./_/"}
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DBOOST_CUSTOM=1 \
|
||||
-DBoost_VERSION=${BOOSTVERS} \
|
||||
-DBoost_INCLUDE_DIRS=${SPBOOST_INC_DIR} \
|
||||
-DBoost_LIBRARY_DIRS=${SPBOOST_LIB_DIR} \
|
||||
-DBoost_LIBRARIES:STRING="${SPBOOST_LIB_DIR}/${SPBOOST_LIBNAMESTART}_filesystem${SPBOOST_LIBNAMEEND}.so;${SPBOOST_LIB_DIR}/${SPBOOST_LIBNAMESTART}_regex${SPBOOST_LIBNAMEEND}.so;${SPBOOST_LIB_DIR}/${SPBOOST_LIBNAMESTART}_system${SPBOOST_LIBNAMEEND}.so;${SPBOOST_LIB_DIR}/${SPBOOST_LIBNAMESTART}_thread${SPBOOST_LIBNAMEEND}.so"
|
||||
else
|
||||
# Our Boost >= 1.61 setup is MUCH simpler and more standard
|
||||
SPBOOST_INC_DIR := /usr/include/boostroot/boost${BOOSTVERSSP}.0
|
||||
SPBOOST_LIB_DIR := /usr/lib64/boostroot/boost${BOOSTVERSSP}.0
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DBOOST_INCLUDEDIR=${SPBOOST_INC_DIR} \
|
||||
-DBOOST_LIBRARYDIR=${SPBOOST_LIB_DIR}
|
||||
endif
|
||||
|
||||
#
|
||||
# Python
|
||||
#
|
||||
Python_INCLUDE_DIR ?= /usr/include/python${PYTHON_VERSION}
|
||||
PYTHON_LIBRARY_DIR ?= /usr/lib64
|
||||
Python_LIBRARY ?= ${PYTHON_LIBRARY_DIR}/libpython${PYTHON_VERSION}.so
|
||||
ifeq (${PYTHON_VERSION},3.6)
|
||||
# Special sauce for Python 3.6
|
||||
Python_INCLUDE_DIR := /usr/include/python${PYTHON_VERSION}m
|
||||
Python_LIBRARY := ${PYTHON_LIBRARY_DIR}/libpython${PYTHON_VERSION}m.so
|
||||
else ifeq (${PYTHON_VERSION},3.7)
|
||||
# Special sauce for Python 3.7
|
||||
Python_INCLUDE_DIR := /usr/include/python${PYTHON_VERSION}m
|
||||
Python_LIBRARY := ${PYTHON_LIBRARY_DIR}/libpython${PYTHON_VERSION}m.so
|
||||
else ifeq (${PYTHON_VERSION},2.7)
|
||||
# Special sauce for Python 2.7
|
||||
Python_INCLUDE_DIR := /usr/include/python${PYTHON_VERSION}
|
||||
Python_LIBRARY := ${PYTHON_LIBRARY_DIR}/libpython${PYTHON_VERSION}.so
|
||||
endif
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DPython_INCLUDE_DIR:STRING=${Python_INCLUDE_DIR} \
|
||||
-DPython_LIBRARY:STRING=${Python_LIBRARY} \
|
||||
-Dpybind11_ROOT:STRING=${REZ_PACKAGE_ROOT}/pybind11/2.4.3/python-${PYTHON_VERSION}
|
||||
|
||||
|
||||
# Set our preferred OpenEXR path, but allow env variable to override
|
||||
# with custom/test version.
|
||||
ifneq (${OPENEXR_VERSION},)
|
||||
# If OPENEXR_VERSION is set, grab from the rez area
|
||||
OpenEXR_ROOT ?= ${REZ_PACKAGE_ROOT}/OpenEXR/${OPENEXR_VERSION}/${SPI_COMPILER_PLATFORM}/python-${PYTHON_VERSION}
|
||||
MY_CMAKE_FLAGS += -DOpenEXR_ROOT=${OpenEXR_ROOT}
|
||||
else ifeq (${OpenEXR_ROOT},)
|
||||
# If not getting from rez, get from the system install
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DOPENEXR_INCLUDE_DIR=/usr/include/OpenEXR2 \
|
||||
-DOPENEXR_LIBRARY_DIR=/usr/lib64/OpenEXR2
|
||||
endif
|
||||
|
||||
Partio_VERSION ?= 1.10.6
|
||||
partio_ROOT ?= ${REZ_PACKAGE_ROOT}/partio/${Partio_VERSION}/${SPI_COMPILER_PLATFORM}/python-${PYTHON_VERSION}/boost-${BOOSTVERSSP}
|
||||
MY_CMAKE_FLAGS += -Dpartio_ROOT="${partio_ROOT}"
|
||||
|
||||
pugixml_VERSION ?= 1.10.0
|
||||
pugixml_ROOT ?= ${REZ_PACKAGE_ROOT}/pugixml/${pugixml_VERSION}/${SPI_COMPILER_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -Dpugixml_ROOT="${pugixml_ROOT}"
|
||||
|
||||
# set up OSL distribution environment
|
||||
SPARCH=${SP_OS}-$(SPCOMP2_COMPILER)$(CPPSTDSUFFIX)-boost$(subst .,,$(BOOSTVERSSP))
|
||||
|
||||
ifeq (${OSL_SPIREZ},1)
|
||||
OpenImageIO_ROOT := ${REZ_PACKAGE_ROOT}/OpenImageIO/${OPENIMAGEIO_VERSION}/${SPI_COMPILER_PLATFORM}/python-${PYTHON_VERSION}/boost-${BOOSTVERSSP}
|
||||
$(info OpenImageIO_ROOT ${OpenImageIO_ROOT})
|
||||
|
||||
|
||||
else ifeq (${OSL_SPCOMP2},1)
|
||||
OpenImageIO_ROOT := $(SPCOMP2_ROOT)/OpenImageIO/$(SPARCH)/v$(OPENIMAGEIO_SPCOMP2_VERSION)
|
||||
else ifeq (${OSL_ARNOLD},1)
|
||||
OpenImageIO_ROOT ?= ${working_dir}/../OpenImageIO_local/dist/${platform}${variant}/
|
||||
else ifneq (${OpenImageIO_ROOT},)
|
||||
# User supplied something
|
||||
endif
|
||||
ifneq ($(OpenImageIO_ROOT),)
|
||||
MY_CMAKE_FLAGS += -DOpenImageIO_ROOT=${OpenImageIO_ROOT}
|
||||
endif
|
||||
|
||||
# Cuda/OptiX
|
||||
USE_OPTIX ?= 1
|
||||
CUDA_VERSION ?= 11.0.1
|
||||
OPTIX_VERSION ?= 7.1.0
|
||||
# CUDA_TOOLKIT_ROOT_DIR = $(shell rez-env -b cuda-${CUDA_VERSION} ${SPI_COMPILER_PLATFORM} -c "echo '$CUDA_TOOLKIT_ROOT'")
|
||||
CUDA_TOOLKIT_ROOT_DIR ?= /shots/spi/home/lib/arnold/rhel7/cuda_${CUDA_VERSION}
|
||||
CUDA_EXTRA_LIBS ?= ${CUDA_TOOLKIT_ROOT_DIR}/lib64/libnvrtc.so
|
||||
OptiX_ROOT ?= /shots/spi/home/lib/arnold/rhel7/optix_${OPTIX_VERSION}
|
||||
OPTIXHOME = ${OptiX_ROOT}
|
||||
MY_CMAKE_FLAGS += -DUSE_OPTIX=${USE_OPTIX} \
|
||||
-DCUDA_TOOLKIT_ROOT_DIR=${CUDA_TOOLKIT_ROOT_DIR} \
|
||||
-DCUDA_EXTRA_LIBS=${CUDA_EXTRA_LIBS} \
|
||||
-DOPTIXHOME=${OPTIXHOME} -DOPTIX_EXTRA_LIBS=lzma
|
||||
|
||||
# end rhel7
|
||||
|
||||
## Generic OSX machines (including LG's laptop)
|
||||
else ifeq (${platform}, macosx)
|
||||
CMAKE_CXX_STANDARD ?= 14
|
||||
USE_SIMD ?= sse4.2
|
||||
MY_CMAKE_FLAGS += -DCMAKE_BUILD_WITH_INSTALL_RPATH=1
|
||||
MY_CMAKE_FLAGS += -DCMAKE_INSTALL_NAME_DIR="${working_dir}/dist/${platform}${variant}/lib"
|
||||
|
||||
BOOSTVERSSP=${BOOSTVERS}${BOOSTSPSUFFIX}
|
||||
LLVM_DIRECTORY ?= /usr/local/opt/llvm
|
||||
|
||||
# A variety of tags can be used to try specific versions of gcc or
|
||||
# clang from the site-specific places we have installed them.
|
||||
ifeq (${COMPILER}, gcc48)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=gcc-4.8 -DCMAKE_CXX_COMPILER=g++-4.8
|
||||
USE_LIBCPLUSPLUS := 0
|
||||
else ifeq (${COMPILER}, gcc5)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=gcc-5 -DCMAKE_CXX_COMPILER=g++-5
|
||||
USE_LIBCPLUSPLUS := 0
|
||||
else ifeq (${COMPILER}, gcc6)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6
|
||||
USE_LIBCPLUSPLUS := 0
|
||||
else ifeq (${COMPILER}, gcc8)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8
|
||||
USE_LIBCPLUSPLUS := 0
|
||||
else ifeq (${COMPILER}, gcc9)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9
|
||||
USE_LIBCPLUSPLUS := 0
|
||||
else ifeq (${COMPILER},clang6)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=/usr/local/Cellar/llvm@6/6.0.1_2/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/Cellar/llvm@6/6.0.1_2/bin/clang++
|
||||
else ifeq (${COMPILER},clang7)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=/usr/local/Cellar/llvm@7/7.0.1_1/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/Cellar/llvm@7/7.0.1_1/bin/clang++
|
||||
else ifeq (${COMPILER},clang8)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=/usr/local/Cellar/llvm@8/8.0.1_1/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/Cellar/llvm/8.0.1/bin/clang++
|
||||
else ifeq (${COMPILER},clang9)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=/usr/local/Cellar/llvm@9/9.0.1/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/Cellar/llvm@9/9.0.1/bin/clang++
|
||||
else ifeq (${COMPILER},clang10)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=/usr/local/Cellar/llvm/10.0.0/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/Cellar/llvm/10.0.0/bin/clang++
|
||||
else ifeq (${COMPILER},clang)
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
||||
else ifeq (${COMPILER},gcc)
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
|
||||
else ifeq (${COMPILER},)
|
||||
# default compiler is clang, taken from the LLVM directory
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},llvm)
|
||||
# "llvm" means "use the clang from our llvm"
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
endif
|
||||
|
||||
# end generic OSX
|
||||
|
||||
else
|
||||
$(error Unknown SP_OS=${SP_OS} platform=${platform})
|
||||
endif # endif ${SP_OS}
|
||||
|
||||
|
||||
|
||||
ifeq (${OSL_SPIREZ},1)
|
||||
# Rpath touch-ups
|
||||
# NOTE: This MUST match the order and naming of the Rez variants
|
||||
# set in rez/package.py.in
|
||||
REZ_INSTALL_PATH := ${REZ_PACKAGE_ROOT}/${OSL_REZ_NAME}/${OSL_VERS}/${SPI_COMPILER_PLATFORM}/python-${PYTHON_VERSION}/boost-${BOOSTVERSSP}/cuda-${CUDA_VERSION}/optix-${OPTIX_VERSION}
|
||||
MY_CMAKE_FLAGS += -DOSL_REZ_INSTALL_PATH=${REZ_INSTALL_PATH}
|
||||
MY_CMAKE_FLAGS += -DCMAKE_INSTALL_RPATH="${REZ_INSTALL_PATH}/lib;@executable_path/../lib;${OpenImageIO_ROOT}/lib"
|
||||
INSTALL_PREFIX := ${working_dir}/dist/${platform}
|
||||
endif
|
||||
|
||||
|
||||
ifneq (${VERBOSE},)
|
||||
$(info MY_CMAKE_FLAGS: $(MY_CMAKE_FLAGS))
|
||||
endif
|
||||
|
||||
|
||||
|
||||
############################################################################
|
||||
# SpComp2 magic incantations follow. Here be dragons.
|
||||
############################################################################
|
||||
|
||||
|
||||
CPPSTDSUFFIX=
|
||||
SPCOMP2_INSTALL_ROOT ?= $(SPCOMP2_ROOT)
|
||||
BOOSTVERSSP?=${BOOSTVERS}${BOOSTSPSUFFIX}
|
||||
SPARCH=${SP_OS}-$(SPCOMP2_COMPILER)$(CPPSTDSUFFIX)-boost$(subst .,,$(BOOSTVERSSP))
|
||||
OIIO_SPCOMP2_PATH := ${SPCOMP2_INSTALL_ROOT}/OpenImageIO/${SPARCH}/v${OPENIMAGEIO_SPCOMP2_VERSION}
|
||||
# $(info New rhel7 OIIO_SPCOMP2_PATH is ${OIIO_SPCOMP2_PATH})
|
||||
|
||||
PYVERNOSPACE=${shell echo ${PYTHON_VERSION} | sed "s/\\.//"}
|
||||
SPPYARCH=$(SPARCH)-py$(PYVERNOSPACE)
|
||||
|
||||
|
||||
|
||||
all: dist
|
||||
|
||||
local: dist
|
||||
|
||||
.PHONY: spcomp2_install spcomp2_install_local clean all
|
||||
|
||||
spi: MY_CMAKE_FLAGS += -DCMAKE_DEBUG_POSTFIX=_d
|
||||
spi: debug dist
|
||||
|
||||
|
||||
|
||||
spcomp2_install_local: SPCOMP2_INSTALL_ROOT = $(SPCOMP2_LOCAL_PATH)
|
||||
spcomp2_install_local: spcomp2_install
|
||||
|
||||
comma:= ,
|
||||
empty:=
|
||||
space:= $(empty) $(empty)
|
||||
|
||||
#OSL_SPCOMP2_PATH := ${SPCOMP2_INSTALL_ROOT}/OSL/${SP_OS}-${SPCOMP2_COMPILER}$(CPPSTDSUFFIX)-boost${SPCOMP2_BOOSTVERS_SUFFIX}/v${OSL_SPCOMP2_VERSION}
|
||||
#$(info New rhel7 OSL_SPCOMP2_PATH is ${OSL_SPCOMP2_PATH})
|
||||
|
||||
#INSTALL_SPCOMP2_CURRENT = $(SPCOMP2_INSTALL_ROOT)/OSL/$(SPARCH)/v$(OSL_SPCOMP2_VERSION)
|
||||
#INSTALL_BIN_LOCATION = $(INSTALL_SPCOMP2_CURRENT)/bin
|
||||
|
||||
SPCOMP2_RPATH_OPT ?= ${OpenImageIO_ROOT}/lib:${partio_ROOT}/lib
|
||||
SPCOMP2_RPATH_DEBUG ?= ${OpenImageIO_ROOT}/lib:${partio_ROOT}/lib/debug
|
||||
#PYSPCOMP2_RPATH_OPT ?= ${SPCOMP2_RPATH_OPT}:${OSL_SPCOMP2_PATH}/lib:${PYTHON_LIBRARY_DIR}
|
||||
#PYSPCOMP2_RPATH_DEBUG ?= ${SPCOMP2_RPATH_DEBUG}:${OSL_SPCOMP2_PATH}/lib/debug:${PYTHON_LIBRARY_DIR}
|
||||
|
||||
|
||||
|
||||
spcomp2: MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_SKIP_BUILD_RPATH:BOOL=ON \
|
||||
-DCMAKE_INSTALL_RPATH=$(SPCOMP2_INSTALL_ROOT)/OSL/$(SPARCH)/v$(OSL_SPCOMP2_VERSION)/lib \
|
||||
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=ON \
|
||||
-DPYLIB_INCLUDE_SONAME:BOOL=ON \
|
||||
-DPYLIB_LIB_PREFIX:BOOL=ON \
|
||||
-DPYMODULE_SUFFIX="V${OSL_SPCOMP2_VERSION}"
|
||||
|
||||
spcomp2: dist
|
||||
|
||||
spcomp2_debug: MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_SKIP_BUILD_RPATH:BOOL=ON \
|
||||
-DCMAKE_INSTALL_RPATH=$(SPCOMP2_INSTALL_ROOT)/OSL/$(SPARCH)/v$(OSL_SPCOMP2_VERSION)/lib \
|
||||
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=ON \
|
||||
-DPYLIB_INCLUDE_SONAME:BOOL=ON \
|
||||
-DPYLIB_LIB_PREFIX:BOOL=ON \
|
||||
-DPYMODULE_SUFFIX="V${OSL_SPCOMP2_VERSION}"
|
||||
|
||||
spcomp2_debug: debug
|
||||
|
||||
spcomp2_install_fixup_rhel7: spcomp2 spcomp2_debug
|
||||
echo $(SPCOMP2_INSTALL_ROOT)
|
||||
patchelf --set-rpath ${SPCOMP2_RPATH_OPT} ${dist_dir}/lib/liboslexec${OSL_LIBNAME_SUFFIX}.so
|
||||
patchelf --set-rpath ${SPCOMP2_RPATH_DEBUG} ${dist_dir}.debug/lib/liboslexec.so
|
||||
patchelf --set-rpath ${SPCOMP2_RPATH_OPT} ${dist_dir}/lib/liboslcomp${OSL_LIBNAME_SUFFIX}.so
|
||||
patchelf --set-rpath ${SPCOMP2_RPATH_DEBUG} ${dist_dir}.debug/lib/liboslcomp.so
|
||||
patchelf --set-rpath ${SPCOMP2_RPATH_OPT} ${dist_dir}/lib/liboslquery${OSL_LIBNAME_SUFFIX}.so
|
||||
patchelf --set-rpath ${SPCOMP2_RPATH_DEBUG} ${dist_dir}.debug/lib/liboslquery.so
|
||||
# patchelf --set-rpath ${PYSPCOMP2_RPATH_OPT} ${dist_dir}/python/libPyOSL.so
|
||||
# patchelf --set-rpath ${PYSPCOMP2_RPATH_DEBUG} ${dist_dir}.debug/python/libPyOSL.so
|
||||
|
||||
# This goal can't start with 'install' because something elsewhere picks
|
||||
# it up and starts doing bad things
|
||||
spcomp2_install: spcomp2_install_fixup_${SP_OS}
|
||||
perl -I/usr/local/spi/lib/make /usr/local/spi/bin/spcomp_install.pl -m installhost \
|
||||
--project=oslexec \
|
||||
--version=$(OSL_SPCOMP2_VERSION) \
|
||||
--root=$(SPCOMP2_INSTALL_ROOT) \
|
||||
--arch=$(SPARCH) \
|
||||
--headers=$(subst $(space),$(comma),$(wildcard ${dist_dir}/include/OSL/*)) \
|
||||
--cflags= --static_lflags="$(LINK_BOOST) $(LINK_OPENEXR) -lpthread" \
|
||||
--namespace=${NAMESPACE} \
|
||||
--srcdir=${dist_dir}/lib \
|
||||
--builddir_o=${dist_dir}/lib \
|
||||
--builddir_d=${dist_dir}.debug/lib
|
||||
perl -I/usr/local/spi/lib/make /usr/local/spi/bin/spcomp_install.pl -m installhost \
|
||||
--project=oslquery \
|
||||
--version=$(OSL_SPCOMP2_VERSION) \
|
||||
--root=$(SPCOMP2_INSTALL_ROOT) \
|
||||
--arch=$(SPARCH) \
|
||||
--headers=$(subst $(space),$(comma),$(wildcard ${dist_dir}/include/OSL/*)) \
|
||||
--cflags= --static_lflags="$(LINK_BOOST) $(LINK_OPENEXR) -lpthread" \
|
||||
--namespace=${NAMESPACE} \
|
||||
--srcdir=${dist_dir}/lib \
|
||||
--builddir_o=${dist_dir}/lib \
|
||||
--builddir_d=${dist_dir}.debug/lib
|
||||
#perl -I/usr/local/spi/lib/make /usr/local/spi/bin/spcomp_install.pl -m installhost \
|
||||
# --project=oslcomp \
|
||||
# --version=$(OSL_SPCOMP2_VERSION) \
|
||||
# --root=$(SPCOMP2_INSTALL_ROOT) \
|
||||
# --arch=$(SPARCH) \
|
||||
# --headers=$(subst $(space),$(comma),$(wildcard ${dist_dir}/include/OSL/*)) \
|
||||
# --cflags= --static_lflags="$(LINK_BOOST) $(LINK_OPENEXR) -lpthread" \
|
||||
# --namespace=${NAMESPACE} \
|
||||
# --srcdir=${dist_dir}/lib \
|
||||
# --builddir_o=${dist_dir}/lib \
|
||||
# --builddir_d=${dist_dir}.debug/lib
|
||||
#perl -I/usr/local/spi/lib/make /usr/local/spi/bin/spcomp_install.pl -m installhost \
|
||||
# --project=PyOSL \
|
||||
# --version=$(OSL_SPCOMP2_VERSION) \
|
||||
# --root=$(SPCOMP2_INSTALL_ROOT) \
|
||||
# --arch=$(SPPYARCH) \
|
||||
# --cflags= --static_lflags="$(LINK_BOOST) $(LINK_OPENEXR) -lpthread"\
|
||||
# --namespace=${NAMESPACE} \
|
||||
# --srcdir=${dist_dir}/python \
|
||||
# --builddir_o=${dist_dir}/python \
|
||||
# --builddir_d=${dist_dir}.debug/python
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
<!-- Copyright Contributors to the Open Shading Language Project. -->
|
||||
|
||||
Build a variant for Rez/general use
|
||||
-----------------------------------
|
||||
|
||||
Skip this section if you are instead building for SpComp2.
|
||||
|
||||
Note: For testing or to make your own local rez package, you can customize
|
||||
either the rez package name, or the rez install location name, with make
|
||||
flags `OSL_REZ_NAME=blah REZ_PACKAGE_ROOT=/path/to/my/rez/pkgs` appended
|
||||
to the `make` commands of any of the variants listed below. For example,
|
||||
|
||||
make OSL_SPIREZ=1 OSL_REZ_NAME=oiio_test REZ_PACKAGE_ROOT=/path/to/my/rez/pkgs
|
||||
|
||||
|
||||
Variants:
|
||||
|
||||
# C++11/gcc4.8 compat, Python 2.7, Boost 1.55, OptiX 6, Cuda 10.1
|
||||
# OIIO 2.2.0.0, OpenEXR 2.2
|
||||
make nuke
|
||||
make spi OSL_SPIREZ=1 BOOSTVERS=1.55 USE_OPTIX=1 CUDA_VERSION=10.1 OPTIX_VERSION=6.0.0 OPENIMAGEIO_VERSION=2.2.0.0 OPENEXR_VERSION=2.2.0 PYTHON_VERSION=2.7
|
||||
|
||||
# C++11/gcc6.3 compat, Python 2.7, Boost 1.70, OptiX 6, Cuda 10.1
|
||||
# OIIO 2.2.0.0, OpenEXR 2.4
|
||||
make nuke
|
||||
make spi OSL_SPIREZ=1 SPI_COMPILER_PLATFORM=gcc-6.3 BOOSTVERS=1.70 USE_OPTIX=1 CUDA_VERSION=10.1 OPTIX_VERSION=6.0.0 OPENIMAGEIO_VERSION=2.2.0.0 OPENEXR_VERSION=2.4.0 PYTHON_VERSION=2.7
|
||||
|
||||
|
||||
|
||||
You can do any of these on your local machine.
|
||||
|
||||
|
||||
Rez/general release (do for each variant)
|
||||
-----------------------------------------
|
||||
|
||||
This must be done from compile42 (for correct write permissions on certain
|
||||
shared directories), even if you did the build itself locally.
|
||||
|
||||
For any of the variants that you built above:
|
||||
|
||||
( cd dist/rhel7 ; rez release --skip-repo-errors )
|
||||
|
||||
That command will release the dist to the studio.
|
||||
|
||||
|
||||
Appwrapper binary releases
|
||||
--------------------------
|
||||
|
||||
We don't currently do this.
|
||||
|
||||
<!---
|
||||
This step is for the ONE general/rez variant that we believe is the
|
||||
canonical source of command line oslc and oslinfo. After building and
|
||||
releasing as above,
|
||||
|
||||
cp dist/rhel7/OSL_*.xml /shots/spi/home/lib/app_cfg/OSL
|
||||
|
||||
That will make appcfg aware of the release.
|
||||
|
||||
To also make this release the new facility default:
|
||||
|
||||
db-any spi/home/OSL.bin highest /shots/spi/home/lib/app_cfg/OSL/OSL_A.B.C.D.xml
|
||||
|
||||
where A.B.C.D is the version.
|
||||
--->
|
||||
|
||||
|
||||
SpComp2 build and release
|
||||
-------------------------
|
||||
|
||||
Phasing out support for this.
|
||||
@@ -0,0 +1,6 @@
|
||||
<cfg>
|
||||
<version>@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@PROJECT_VERSION_TWEAK@</version>
|
||||
<appdir architecture="@SP_OS@">@OSL_REZ_INSTALL_PATH@</appdir>
|
||||
<launchprogram></launchprogram>
|
||||
<setup></setup>
|
||||
</cfg>
|
||||
@@ -0,0 +1,20 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
option (${PROJ_NAME}_SPIREZ "Enable extra bits for building for SPI Rez install" OFF)
|
||||
set (${PROJ_NAME}_REZ_PACKAGE_NAME CACHE STRING "${PROJECT_NAME}")
|
||||
|
||||
if (${PROJ_NAME}_SPIREZ)
|
||||
message (STATUS "Creating package.py from package.py.in")
|
||||
configure_file ("${PROJECT_SOURCE_DIR}/site/spi/rez/package.py.in" "${CMAKE_BINARY_DIR}/package.py")
|
||||
|
||||
set (appcfg_filename "${CMAKE_BINARY_DIR}/${PROJECT_NAME}_${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}.xml")
|
||||
configure_file ("${PROJECT_SOURCE_DIR}/site/spi/appcfg.xml.in" "${appcfg_filename}")
|
||||
|
||||
install (FILES ${CMAKE_BINARY_DIR}/package.py
|
||||
"${PROJECT_SOURCE_DIR}/site/spi/rez/CMakeLists.txt"
|
||||
${appcfg_filename}
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}
|
||||
COMPONENT developer)
|
||||
endif ()
|
||||
Executable
+21
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# This helper script takes a major.minor.patch semantic version string
|
||||
# ("2.1.1") and reformats it into the dot-less zero-padded version like
|
||||
# "20101". This is necessary to turn external release designations into
|
||||
# integer SpComp2 version numbers.
|
||||
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
|
||||
if len(sys.argv) != 2 :
|
||||
print('Need 1 argument: version number with dots')
|
||||
exit(1)
|
||||
|
||||
vers = sys.argv[1]
|
||||
parts = vers.split('.')
|
||||
print ('{:d}{:02d}{:02d}'.format(int(parts[0]), int(parts[1]), int(parts[2])))
|
||||
@@ -0,0 +1,31 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
project(OSL)
|
||||
|
||||
include(RezBuild)
|
||||
|
||||
rez_install_dirs(
|
||||
include lib share
|
||||
# python
|
||||
DESTINATION .
|
||||
)
|
||||
|
||||
# Bin specified separately so it can be marked as EXECUTABLE, otherwise it
|
||||
# installs with only read permissions.
|
||||
rez_install_dirs(
|
||||
bin
|
||||
DESTINATION .
|
||||
EXECUTABLE
|
||||
)
|
||||
|
||||
rez_install_cmake(
|
||||
DESTINATION .
|
||||
INCLUDE_DIRS include
|
||||
LIBRARY_DIRS lib
|
||||
LIBRARIES oslexec oslcomp oslquery
|
||||
oslexec_d oslcomp_d oslquery_d
|
||||
)
|
||||
@@ -0,0 +1,59 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
#
|
||||
# Documentation on packages and available attributes can be found at:
|
||||
# https://github.com/nerdvegas/rez/wiki/Package-Definition-Guide
|
||||
|
||||
|
||||
name = '@OSL_REZ_PACKAGE_NAME@'
|
||||
|
||||
version = '@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@PROJECT_VERSION_TWEAK@'
|
||||
|
||||
description = \
|
||||
"""
|
||||
Rez package of Open Shading Language (OSL)
|
||||
"""
|
||||
|
||||
authors = ['Larry Gritz <lg@imageworks.com>']
|
||||
|
||||
# Add dependencies to other Rez packages here
|
||||
requires = [
|
||||
'platform-@SP_PLATFORM@', 'arch-@SP_PROC@', 'os-@SP_REZ_OS@',
|
||||
'OpenImageIO-@OPENIMAGEIO_VERSION_MAJOR@.@OPENIMAGEIO_VERSION_MINOR@.@OPENIMAGEIO_VERSION_PATCH@'
|
||||
]
|
||||
|
||||
#build_command = 'python {root}/build.py'
|
||||
|
||||
# Rez has a limitation where it is not possible to add variants to a package that
|
||||
# does not have any: https://github.com/nerdvegas/rez/wiki/Variants#single-variants.
|
||||
# Unless you are 100% certain that your package will NEVER require any variants,
|
||||
# you should define your package with at least one variant.
|
||||
variants = [
|
||||
[
|
||||
'@SPI_COMPILER_PLATFORM@',
|
||||
'python-@PYTHON_VERSION_MAJOR@.@PYTHON_VERSION_MINOR@',
|
||||
'boost-@BOOST_VERS_SP@',
|
||||
'cuda-@CUDA_VERSION@',
|
||||
'optix-@OPTIX_VERSION@'
|
||||
],
|
||||
]
|
||||
|
||||
def commands():
|
||||
# Add import statements here, not at the top of the file!
|
||||
|
||||
# Uncomment if you have executables under bin/
|
||||
env.PATH.append("{root}/bin")
|
||||
env.LD_LIBRARY_PATH.append("{root}/lib")
|
||||
|
||||
# Uncomment if you have Python code under python/
|
||||
env.PYTHONPATH.append("{root}/python")
|
||||
|
||||
# For SpImport.Packages, append the python directory
|
||||
#env.SPIMPORT_PACKAGES.append("{root}/python")
|
||||
|
||||
if building:
|
||||
env.CMAKE_MODULE_PATH.append('{root}')
|
||||
# Add env vars or custom code you want executed only at build time
|
||||
@@ -1,25 +0,0 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright Contributors to the Open Shading Language Project.
|
||||
|
||||
sonar.host.url=https://sonarcloud.io
|
||||
|
||||
# Required metadata
|
||||
sonar.organization=academysoftwarefoundation
|
||||
sonar.projectName=OpenShadingLanguage
|
||||
sonar.projectVersion=1.12
|
||||
sonar.projectKey=AcademySoftwareFoundation_OpenShadingLanguage
|
||||
|
||||
# Project links
|
||||
sonar.links.homepage=https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
sonar.links.ci=https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/actions
|
||||
sonar.links.scm=https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
sonar.links.issue=https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/issues
|
||||
|
||||
# Source properties
|
||||
sonar.sources=src
|
||||
sonar.sourceEncoding=UTF-8
|
||||
sonar.exclusions=src/include/OSL/Imath/*.h,src/build-scripts/*
|
||||
|
||||
# C/C++ analyzer properties
|
||||
sonar.cfamily.build-wrapper-output=build/bw_output
|
||||
sonar.cfamily.gcov.reportsPath=_coverage
|
||||
@@ -0,0 +1,273 @@
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||
|
||||
PROJECT (openexr)
|
||||
|
||||
SET(OPENEXR_VERSION_MAJOR "2")
|
||||
SET(OPENEXR_VERSION_MINOR "2")
|
||||
SET(OPENEXR_VERSION_PATCH "0")
|
||||
|
||||
SET(OPENEXR_VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH})
|
||||
SET(OPENEXR_VERSION_API ${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR})
|
||||
|
||||
|
||||
# enable the tests
|
||||
ENABLE_TESTING()
|
||||
|
||||
|
||||
# distro building
|
||||
SET(CPACK_PACKAGE_VERSION_MAJOR "${OPENEXR_VERSION_MAJOR}")
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR "${OPENEXR_VERSION_MINOR}")
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH "${OPENEXR_VERSION_PATCH}")
|
||||
SET(CPACK_SOURCE_GENERATOR "TGZ")
|
||||
set(CPACK_SOURCE_PACKAGE_FILE_NAME
|
||||
"${CMAKE_PROJECT_NAME}-${OPENEXR_VERSION}"
|
||||
)
|
||||
set(CPACK_SOURCE_IGNORE_FILES
|
||||
"/.git*;/.cvs*;${CPACK_SOURCE_IGNORE_FILES}")
|
||||
INCLUDE ( CPack )
|
||||
|
||||
|
||||
|
||||
# Allow the developer to select if Dynamic or Static libraries are built
|
||||
OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" ON)
|
||||
OPTION (USE_ZLIB_WINAPI "Use ZLib Win API" OFF)
|
||||
OPTION (NAMESPACE_VERSIONING "Use Namespace Versioning" ON)
|
||||
OPTION (BUILD_UTILS "Build the binary/utility programs" ON)
|
||||
OPTION (BUILD_TESTS "Build the tests" ON)
|
||||
|
||||
# Setup osx rpathing
|
||||
SET (CMAKE_MACOSX_RPATH 1)
|
||||
SET (BUILD_WITH_INSTALL_RPATH 1)
|
||||
|
||||
ADD_DEFINITIONS ( -DHAVE_CONFIG_H -DILM_IMF_TEST_IMAGEDIR="${CMAKE_SOURCE_DIR}/IlmImfTest/" )
|
||||
|
||||
INCLUDE_DIRECTORIES (
|
||||
${CMAKE_CURRENT_BINARY_DIR}/config
|
||||
IlmImf
|
||||
IlmImfUtil
|
||||
exrmaketiled
|
||||
exrenvmap
|
||||
exrmakepreview
|
||||
exrmultiview
|
||||
IlmImfFuzzTest
|
||||
)
|
||||
|
||||
FIND_PACKAGE(ZLIB REQUIRED)
|
||||
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
|
||||
|
||||
IF (NOT WIN32)
|
||||
SET ( PTHREAD_LIB pthread )
|
||||
ENDIF()
|
||||
|
||||
INCLUDE_DIRECTORIES ( ${ILMBASE_PACKAGE_PREFIX}/include/OpenEXR )
|
||||
LINK_DIRECTORIES ( ${ILMBASE_PACKAGE_PREFIX}/lib )
|
||||
MESSAGE ( "ILMBASE_PACKAGE_PREFIX = " ${ILMBASE_PACKAGE_PREFIX})
|
||||
|
||||
SET (LIB_TYPE STATIC)
|
||||
IF (BUILD_SHARED_LIBS)
|
||||
# User wants to build Dynamic Libraries, so change the LIB_TYPE variable to CMake keyword 'SHARED'
|
||||
SET (LIB_TYPE SHARED)
|
||||
IF (WIN32)
|
||||
ADD_DEFINITIONS(-DOPENEXR_DLL)
|
||||
ENDIF ()
|
||||
ENDIF ()
|
||||
|
||||
IF (USE_ZLIB_WINAPI)
|
||||
ADD_DEFINITIONS(-DZLIB_WINAPI)
|
||||
ENDIF ()
|
||||
|
||||
# Test for GCC-style inline asm support with AVX instructions
|
||||
INCLUDE (CheckCXXSourceCompiles)
|
||||
CHECK_CXX_SOURCE_COMPILES (
|
||||
"
|
||||
int main()
|
||||
{
|
||||
#if defined(__GNUC__) && defined(__SSE2__)
|
||||
int n = 0;
|
||||
int eax = 0;
|
||||
int edx = 0;
|
||||
__asm__(
|
||||
\"xgetbv ;\"
|
||||
\"vzeroupper \"
|
||||
: \"=a\"(eax), \"=d\"(edx) : \"c\"(n) : );
|
||||
#else
|
||||
#error No GCC style inline asm supported for AVX instructions
|
||||
#endif
|
||||
}
|
||||
" HAVE_GCC_INLINE_ASM_AVX)
|
||||
|
||||
# Check if sysconf(_SC_NPROCESSORS_ONLN) can be used for CPU count
|
||||
CHECK_CXX_SOURCE_COMPILES (
|
||||
"
|
||||
#include <unistd.h>
|
||||
int main()
|
||||
{
|
||||
sysconf(_SC_NPROCESSORS_ONLN);
|
||||
}
|
||||
" HAVE_SYSCONF_NPROCESSORS_ONLN)
|
||||
|
||||
|
||||
##########################
|
||||
# OpenEXRConfig.h generation
|
||||
##########################
|
||||
IF (WIN32)
|
||||
FILE ( WRITE ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" )
|
||||
ELSEIF (APPLE)
|
||||
FILE ( WRITE ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_DARWIN 1\n" )
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" )
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#include <string.h>\n" )
|
||||
ELSE ()
|
||||
# Linux
|
||||
FILE ( WRITE ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_LINUX_PROCFS 1\n" )
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1\n" )
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_LARGE_STACK 1\n" )
|
||||
ENDIF()
|
||||
|
||||
IF (NAMESPACE_VERSIONING)
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 1\n")
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_NAMESPACE Imf\n" )
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_INTERNAL_NAMESPACE Imf_${OPENEXR_VERSION_API}\n\n" )
|
||||
ELSE ()
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 0\n")
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_NAMESPACE Imf\n" )
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_INTERNAL_NAMESPACE Imf\n\n" )
|
||||
ENDIF ()
|
||||
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_VERSION_STRING \"${OPENEXR_VERSION}\"\n" )
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_PACKAGE_STRING \"OpenEXR ${OPENEXR_VERSION}\"\n" )
|
||||
|
||||
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "
|
||||
#define OPENEXR_VERSION_MAJOR ${OPENEXR_VERSION_MAJOR}
|
||||
#define OPENEXR_VERSION_MINOR ${OPENEXR_VERSION_MINOR}
|
||||
#define OPENEXR_VERSION_PATCH ${OPENEXR_VERSION_PATCH}
|
||||
")
|
||||
|
||||
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "
|
||||
// Version as a single hex number, e.g. 0x01000300 == 1.0.3
|
||||
#define OPENEXR_VERSION_HEX ((OPENEXR_VERSION_MAJOR << 24) | \\
|
||||
(OPENEXR_VERSION_MINOR << 16) | \\
|
||||
(OPENEXR_VERSION_PATCH << 8))\n
|
||||
")
|
||||
|
||||
IF (HAVE_GCC_INLINE_ASM_AVX)
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX 1\n" )
|
||||
ENDIF()
|
||||
|
||||
IF (HAVE_SYSCONF_NPROCESSORS_ONLN)
|
||||
FILE ( APPEND ${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h "#define OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN 1\n" )
|
||||
ENDIF()
|
||||
|
||||
SET (OPENEXR_LIBSUFFIX "")
|
||||
SET (ILMBASE_LIBSUFFIX "")
|
||||
IF (NAMESPACE_VERSIONING)
|
||||
SET ( OPENEXR_LIBSUFFIX "-${OPENEXR_VERSION_API}" )
|
||||
# assume same NAMESPACE_VERSION setting for IlmBase for now
|
||||
SET ( ILMBASE_LIBSUFFIX "-${OPENEXR_VERSION_API}" )
|
||||
ENDIF ()
|
||||
|
||||
##########################
|
||||
# IlmImf library
|
||||
##########################
|
||||
ADD_SUBDIRECTORY ( IlmImf )
|
||||
|
||||
SET_TARGET_PROPERTIES ( IlmImf
|
||||
PROPERTIES
|
||||
VERSION 22.0.0
|
||||
SOVERSION 22
|
||||
OUTPUT_NAME "IlmImf${OPENEXR_LIBSUFFIX}"
|
||||
)
|
||||
|
||||
##########################
|
||||
# IlmImfUtil library
|
||||
##########################
|
||||
ADD_SUBDIRECTORY ( IlmImfUtil )
|
||||
|
||||
SET_TARGET_PROPERTIES ( IlmImfUtil
|
||||
PROPERTIES
|
||||
VERSION 22.0.0
|
||||
SOVERSION 22
|
||||
OUTPUT_NAME "IlmImfUtil${OPENEXR_LIBSUFFIX}"
|
||||
)
|
||||
|
||||
##########################
|
||||
# Example Code
|
||||
##########################
|
||||
ADD_SUBDIRECTORY ( IlmImfExamples )
|
||||
|
||||
|
||||
##########################
|
||||
# Tests
|
||||
##########################
|
||||
if (BUILD_TESTS)
|
||||
ADD_SUBDIRECTORY ( IlmImfTest )
|
||||
ADD_SUBDIRECTORY ( IlmImfUtilTest )
|
||||
ADD_SUBDIRECTORY ( IlmImfFuzzTest )
|
||||
endif ()
|
||||
|
||||
|
||||
##########################
|
||||
# Binaries / Utilities
|
||||
##########################
|
||||
if (BUILD_UTILS)
|
||||
ADD_SUBDIRECTORY ( exrheader )
|
||||
ADD_SUBDIRECTORY ( exrmaketiled )
|
||||
ADD_SUBDIRECTORY ( exrstdattr )
|
||||
ADD_SUBDIRECTORY ( exrmakepreview )
|
||||
ADD_SUBDIRECTORY ( exrenvmap )
|
||||
ADD_SUBDIRECTORY ( exrmultiview )
|
||||
ADD_SUBDIRECTORY ( exrmultipart )
|
||||
endif ()
|
||||
|
||||
|
||||
##########################
|
||||
# Installation
|
||||
##########################
|
||||
|
||||
INSTALL ( FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/config/OpenEXRConfig.h
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_PREFIX}/include/OpenEXR
|
||||
)
|
||||
|
||||
# Documentation
|
||||
INSTALL ( FILES
|
||||
doc/TechnicalIntroduction.pdf
|
||||
doc/ReadingAndWritingImageFiles.pdf
|
||||
doc/OpenEXRFileLayout.pdf
|
||||
doc/MultiViewOpenEXR.pdf
|
||||
doc/InterpretingDeepPixels.pdf
|
||||
doc/TheoryDeepPixels.pdf
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_PREFIX}/share/doc/OpenEXR-${OPENEXR_VERSION}
|
||||
)
|
||||
|
||||
# Examples
|
||||
INSTALL ( FILES
|
||||
IlmImfExamples/main.cpp
|
||||
IlmImfExamples/drawImage.cpp
|
||||
IlmImfExamples/rgbaInterfaceExamples.cpp
|
||||
IlmImfExamples/rgbaInterfaceTiledExamples.cpp
|
||||
IlmImfExamples/generalInterfaceExamples.cpp
|
||||
IlmImfExamples/lowLevelIoExamples.cpp
|
||||
IlmImfExamples/previewImageExamples.cpp
|
||||
IlmImfExamples/generalInterfaceTiledExamples.cpp
|
||||
IlmImfExamples/generalInterfaceTiledExamples.h
|
||||
IlmImfExamples/drawImage.h
|
||||
IlmImfExamples/rgbaInterfaceExamples.h
|
||||
IlmImfExamples/generalInterfaceExamples.h
|
||||
IlmImfExamples/rgbaInterfaceTiledExamples.h
|
||||
IlmImfExamples/lowLevelIoExamples.h
|
||||
IlmImfExamples/previewImageExamples.h
|
||||
IlmImfExamples/namespaceAlias.h
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_PREFIX}/share/doc/OpenEXR-${OPENEXR_VERSION}/examples
|
||||
)
|
||||
|
||||
|
||||
# LG additions
|
||||
if (DEFINED ENV{APPVEYOR})
|
||||
add_definitions ("/W0")
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /W0")
|
||||
endif ()
|
||||
@@ -0,0 +1,273 @@
|
||||
# yue.nicholas@gmail.com
|
||||
|
||||
SET(CMAKE_INCLUDE_CURRENT_DIR 1)
|
||||
|
||||
if (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h")
|
||||
ADD_EXECUTABLE ( b44ExpLogTable
|
||||
b44ExpLogTable.cpp
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES ( b44ExpLogTable
|
||||
Half
|
||||
Iex${ILMBASE_LIBSUFFIX}
|
||||
IlmThread${ILMBASE_LIBSUFFIX}
|
||||
${PTHREAD_LIB}
|
||||
)
|
||||
|
||||
ADD_CUSTOM_COMMAND (
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h
|
||||
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/b44ExpLogTable > ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h
|
||||
DEPENDS b44ExpLogTable
|
||||
)
|
||||
else ()
|
||||
message (STATUS "Skipping build of b44ExpLogTable.h")
|
||||
endif ()
|
||||
|
||||
if (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h")
|
||||
ADD_EXECUTABLE ( dwaLookups
|
||||
dwaLookups.cpp
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES ( dwaLookups
|
||||
Half
|
||||
Iex${ILMBASE_LIBSUFFIX}
|
||||
IlmThread${ILMBASE_LIBSUFFIX}
|
||||
${PTHREAD_LIB}
|
||||
)
|
||||
|
||||
ADD_CUSTOM_COMMAND (
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h
|
||||
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/dwaLookups > ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h
|
||||
DEPENDS dwaLookups
|
||||
)
|
||||
else ()
|
||||
message (STATUS "Skipping build of dwaLookups.h")
|
||||
endif ()
|
||||
|
||||
SET ( ILMIMF_SRCS
|
||||
ImfAttribute.cpp
|
||||
ImfBoxAttribute.cpp
|
||||
ImfCRgbaFile.cpp
|
||||
ImfChannelList.cpp
|
||||
ImfChannelListAttribute.cpp
|
||||
ImfFloatAttribute.cpp
|
||||
ImfFrameBuffer.cpp
|
||||
ImfHeader.cpp
|
||||
ImfIO.cpp
|
||||
ImfInputFile.cpp
|
||||
ImfIntAttribute.cpp
|
||||
ImfLineOrderAttribute.cpp
|
||||
ImfMatrixAttribute.cpp
|
||||
ImfOpaqueAttribute.cpp
|
||||
ImfOutputFile.cpp
|
||||
ImfRgbaFile.cpp
|
||||
ImfStringAttribute.cpp
|
||||
ImfVecAttribute.cpp
|
||||
ImfHuf.cpp
|
||||
ImfThreading.cpp
|
||||
ImfWav.cpp
|
||||
ImfLut.cpp
|
||||
ImfCompressor.cpp
|
||||
ImfRleCompressor.cpp
|
||||
ImfZipCompressor.cpp
|
||||
ImfPizCompressor.cpp
|
||||
ImfB44Compressor.cpp
|
||||
ImfDwaCompressor.cpp
|
||||
ImfMisc.cpp
|
||||
ImfCompressionAttribute.cpp
|
||||
ImfDoubleAttribute.cpp
|
||||
ImfConvert.cpp
|
||||
ImfPreviewImage.cpp
|
||||
ImfPreviewImageAttribute.cpp
|
||||
ImfVersion.cpp
|
||||
ImfChromaticities.cpp
|
||||
ImfChromaticitiesAttribute.cpp
|
||||
ImfKeyCode.cpp
|
||||
ImfKeyCodeAttribute.cpp
|
||||
ImfTimeCode.cpp
|
||||
ImfTimeCodeAttribute.cpp
|
||||
ImfRational.cpp
|
||||
ImfRationalAttribute.cpp
|
||||
ImfFramesPerSecond.cpp
|
||||
ImfStandardAttributes.cpp
|
||||
ImfStdIO.cpp
|
||||
ImfEnvmap.cpp
|
||||
ImfEnvmapAttribute.cpp
|
||||
ImfScanLineInputFile.cpp
|
||||
ImfTiledInputFile.cpp
|
||||
ImfTiledMisc.cpp
|
||||
ImfTiledOutputFile.cpp
|
||||
ImfTiledRgbaFile.cpp
|
||||
ImfTileDescriptionAttribute.cpp
|
||||
ImfTileOffsets.cpp
|
||||
ImfRgbaYca.cpp
|
||||
ImfPxr24Compressor.cpp
|
||||
ImfTestFile.cpp
|
||||
ImfStringVectorAttribute.cpp
|
||||
ImfMultiView.cpp
|
||||
ImfAcesFile.cpp
|
||||
ImfMultiPartOutputFile.cpp
|
||||
ImfGenericOutputFile.cpp
|
||||
ImfOutputPartData.cpp
|
||||
ImfMultiPartInputFile.cpp
|
||||
ImfGenericInputFile.cpp
|
||||
ImfPartType.cpp
|
||||
ImfInputPartData.cpp
|
||||
ImfOutputPart.cpp
|
||||
ImfTiledOutputPart.cpp
|
||||
ImfInputPart.cpp
|
||||
ImfTiledInputPart.cpp
|
||||
ImfDeepScanLineInputPart.cpp
|
||||
ImfDeepScanLineOutputPart.cpp
|
||||
ImfDeepScanLineInputFile.cpp
|
||||
ImfDeepScanLineOutputFile.cpp
|
||||
ImfDeepTiledInputPart.cpp
|
||||
ImfDeepTiledOutputPart.cpp
|
||||
ImfDeepTiledInputFile.cpp
|
||||
ImfDeepTiledOutputFile.cpp
|
||||
ImfDeepFrameBuffer.cpp
|
||||
ImfDeepCompositing.cpp
|
||||
ImfCompositeDeepScanLine.cpp
|
||||
ImfDeepImageStateAttribute.cpp
|
||||
ImfFastHuf.cpp
|
||||
ImfFloatVectorAttribute.cpp
|
||||
ImfRle.cpp
|
||||
ImfSystemSpecific.cpp
|
||||
ImfZip.cpp
|
||||
)
|
||||
|
||||
IF (BUILD_SHARED_LIBS)
|
||||
ADD_DEFINITIONS(-DILMIMF_EXPORTS)
|
||||
ENDIF()
|
||||
|
||||
ADD_LIBRARY ( IlmImf ${LIB_TYPE}
|
||||
${ILMIMF_SRCS}
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES ( IlmImf
|
||||
Half
|
||||
Iex${ILMBASE_LIBSUFFIX}
|
||||
Imath${ILMBASE_LIBSUFFIX}
|
||||
IlmThread${ILMBASE_LIBSUFFIX}
|
||||
${PTHREAD_LIB} ${ZLIB_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
ADD_DEPENDENCIES ( IlmImf b44ExpLogTable )
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES (
|
||||
ImfB44Compressor.cpp
|
||||
PROPERTIES
|
||||
OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/b44ExpLogTable.h
|
||||
)
|
||||
|
||||
|
||||
ADD_DEPENDENCIES ( IlmImf dwaLookups )
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES (
|
||||
ImfDwaCompressor.cpp
|
||||
PROPERTIES
|
||||
OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/dwaLookups.h
|
||||
)
|
||||
|
||||
# Libraries
|
||||
|
||||
INSTALL ( TARGETS
|
||||
IlmImf
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_PREFIX}/lib
|
||||
)
|
||||
|
||||
# Headers
|
||||
INSTALL ( FILES
|
||||
ImfForward.h
|
||||
ImfExport.h
|
||||
ImfAttribute.h
|
||||
ImfBoxAttribute.h
|
||||
ImfCRgbaFile.h
|
||||
ImfChannelList.h
|
||||
ImfChannelListAttribute.h
|
||||
ImfCompressionAttribute.h
|
||||
ImfDoubleAttribute.h
|
||||
ImfFloatAttribute.h
|
||||
ImfFrameBuffer.h
|
||||
ImfHeader.h
|
||||
ImfIO.h
|
||||
ImfInputFile.h
|
||||
ImfIntAttribute.h
|
||||
ImfLineOrderAttribute.h
|
||||
ImfMatrixAttribute.h
|
||||
ImfOpaqueAttribute.h
|
||||
ImfOutputFile.h
|
||||
ImfRgbaFile.h
|
||||
ImfStringAttribute.h
|
||||
ImfVecAttribute.h
|
||||
ImfHuf.h
|
||||
ImfWav.h
|
||||
ImfLut.h
|
||||
ImfArray.h
|
||||
ImfCompression.h
|
||||
ImfLineOrder.h
|
||||
ImfName.h
|
||||
ImfPixelType.h
|
||||
ImfVersion.h
|
||||
ImfXdr.h
|
||||
ImfConvert.h
|
||||
ImfPreviewImage.h
|
||||
ImfPreviewImageAttribute.h
|
||||
ImfChromaticities.h
|
||||
ImfChromaticitiesAttribute.h
|
||||
ImfKeyCode.h
|
||||
ImfKeyCodeAttribute.h
|
||||
ImfTimeCode.h
|
||||
ImfTimeCodeAttribute.h
|
||||
ImfRational.h
|
||||
ImfRationalAttribute.h
|
||||
ImfFramesPerSecond.h
|
||||
ImfStandardAttributes.h
|
||||
ImfEnvmap.h
|
||||
ImfEnvmapAttribute.h
|
||||
ImfInt64.h
|
||||
ImfRgba.h
|
||||
ImfTileDescription.h
|
||||
ImfTileDescriptionAttribute.h
|
||||
ImfTiledInputFile.h
|
||||
ImfTiledOutputFile.h
|
||||
ImfTiledRgbaFile.h
|
||||
ImfRgbaYca.h
|
||||
ImfTestFile.h
|
||||
ImfThreading.h
|
||||
ImfB44Compressor.h
|
||||
ImfStringVectorAttribute.h
|
||||
ImfMultiView.h
|
||||
ImfAcesFile.h
|
||||
ImfMultiPartOutputFile.h
|
||||
ImfGenericOutputFile.h
|
||||
ImfMultiPartInputFile.h
|
||||
ImfGenericInputFile.h
|
||||
ImfPartType.h
|
||||
ImfPartHelper.h
|
||||
ImfOutputPart.h
|
||||
ImfTiledOutputPart.h
|
||||
ImfInputPart.h
|
||||
ImfTiledInputPart.h
|
||||
ImfDeepScanLineOutputFile.h
|
||||
ImfDeepScanLineOutputPart.h
|
||||
ImfDeepScanLineInputFile.h
|
||||
ImfDeepScanLineInputPart.h
|
||||
ImfDeepTiledInputFile.h
|
||||
ImfDeepTiledInputPart.h
|
||||
ImfDeepTiledOutputFile.h
|
||||
ImfDeepTiledOutputPart.h
|
||||
ImfDeepFrameBuffer.h
|
||||
ImfDeepCompositing.h
|
||||
ImfCompositeDeepScanLine.h
|
||||
ImfNamespace.h
|
||||
ImfMisc.h
|
||||
ImfDeepImageState.h
|
||||
ImfDeepImageStateAttribute.h
|
||||
ImfFloatVectorAttribute.h
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_PREFIX}/include/OpenEXR
|
||||
)
|
||||
|
||||
@@ -1,413 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
|
||||
import getopt
|
||||
import graphviz
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
from collections import OrderedDict
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# PTX parsing helpers
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# pre-compile some regex patterns to speed up parsing
|
||||
call_ptn = re.compile(r"^\s*(call\.uni).*$")
|
||||
dec_ptn = re.compile(r"^\s*(\.pragma|\.extern|\.visible|\.func|\.local|\.global|\.reg|\.param|LBB[0-9_]+\:)(.*)$")
|
||||
fn_ptn = re.compile(r"^(\.visible \.func|\.visible \.entry|\.weak \.func|\.func).*[\s]+([a-zA-Z0-9_]+)[\(\)]*$")
|
||||
inst_ptn = re.compile(r"^\s*([@!%p0-9 ]*)([a-zA-Z0-9\.]+)\s*([a-zA-Z0-9\$\.,% _\[\]{}+-]+);.*$")
|
||||
mem_ptn = re.compile(r"^\s*(st|ld).*;$")
|
||||
ret_ptn = re.compile(r"^\s*(ret);.*$")
|
||||
|
||||
def get_func_name(line):
|
||||
match = fn_ptn.match(line)
|
||||
if match:
|
||||
return match.group(2)
|
||||
else:
|
||||
return ""
|
||||
|
||||
def is_func_or_decl(line):
|
||||
match = fn_ptn.match(line)
|
||||
if match:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def is_call_start(line):
|
||||
if line.find("call.uni") != -1:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def is_instruction(line):
|
||||
match = call_ptn.match(line)
|
||||
if match:
|
||||
return True
|
||||
if len(line) < 4:
|
||||
return False
|
||||
if not line.endswith(';'):
|
||||
return False
|
||||
|
||||
match = dec_ptn.match(line)
|
||||
if not match:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def is_mem_inst(line):
|
||||
match = mem_ptn.match(line)
|
||||
if match:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def parse_inst(line):
|
||||
if not is_instruction(line):
|
||||
return "", "", ""
|
||||
match = call_ptn.match(line)
|
||||
if match:
|
||||
return "", "call.uni", ""
|
||||
match = ret_ptn.match(line)
|
||||
if match:
|
||||
return "", "ret", ""
|
||||
match = inst_ptn.match(line)
|
||||
if match:
|
||||
return match.group(1), match.group(2), match.group(3)
|
||||
else:
|
||||
return "", "", ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
@dataclass
|
||||
class FuncStats:
|
||||
func_name: str = ""
|
||||
inst_count: int = 0
|
||||
call_count: int = 0
|
||||
mem_count: int = 0
|
||||
call_dict: Dict[str, int] = field(default_factory=dict) # func name, count
|
||||
inst_dict: Dict[str, int] = field(default_factory=dict) # inst, count
|
||||
|
||||
@dataclass
|
||||
class FileStats:
|
||||
total_funcs: int = 0
|
||||
total_insts: int = 0
|
||||
total_mem_insts: int = 0
|
||||
total_calls: int = 0
|
||||
extern_funcs: Dict[str, int] = field(default_factory=dict) # func name, count
|
||||
func_calls: Dict[str, int] = field(default_factory=dict) # func name, count
|
||||
summary_dict: Dict[str, str] = field(default_factory=dict) # func name, summary
|
||||
inst_dict: Dict[str, int] = field(default_factory=dict) # inst, count
|
||||
largest_function: str = ""
|
||||
largest_size: int = 0
|
||||
csv_string: str = ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
def parse_ptx(ptx_filename):
|
||||
# read the raw PTX into a string
|
||||
raw_ptx = ""
|
||||
with open(ptx_filename, 'r') as ptx_file:
|
||||
raw_ptx = ptx_file.read()
|
||||
|
||||
# variables to keep track of the parsing state
|
||||
begin_func_or_decl = False
|
||||
begin_call = False
|
||||
in_func = False
|
||||
brace_count = 0
|
||||
|
||||
func_stats = FuncStats()
|
||||
func_dict = {}
|
||||
|
||||
for line in raw_ptx.splitlines():
|
||||
# strip off comments
|
||||
if line.find("//") != -1:
|
||||
line = line[:line.find("//")]
|
||||
|
||||
# trim whitespace and trailing commas
|
||||
line = line.strip(" \t\n\r,")
|
||||
|
||||
# keep track of when we hit a function declaration or definition
|
||||
if is_func_or_decl(line):
|
||||
begin_func_or_decl = True
|
||||
func_stats.func_name = get_func_name(line)
|
||||
|
||||
# keep track of braces so we can have some picture of nesting
|
||||
brace_count = brace_count + line.count('{')
|
||||
brace_count = brace_count - line.count('}')
|
||||
|
||||
# if we hit a call.uni, we need to look for the name of the callee
|
||||
# on the next pass
|
||||
if is_call_start(line):
|
||||
begin_call = True
|
||||
func_stats.call_count = func_stats.call_count + 1
|
||||
elif begin_call:
|
||||
begin_call = False
|
||||
func_stats.call_dict[line] = func_stats.call_dict.get(line, 0) + 1
|
||||
|
||||
pred, opcode, args = parse_inst(line)
|
||||
if in_func and opcode != "":
|
||||
func_stats.inst_count = func_stats.inst_count + 1
|
||||
func_stats.mem_count = func_stats.mem_count + is_mem_inst(line)
|
||||
inst = opcode
|
||||
func_stats.inst_dict[inst] = func_stats.inst_dict.get((inst), 0) + 1
|
||||
|
||||
if begin_func_or_decl and brace_count == 1:
|
||||
in_func = True
|
||||
begin_func_or_decl = False
|
||||
|
||||
# exiting the function -- save off the stats
|
||||
if in_func and brace_count == 0:
|
||||
func_dict[func_stats.func_name] = func_stats
|
||||
|
||||
# prepare for the next iteration
|
||||
func_stats = FuncStats()
|
||||
begin_func_or_decl = False
|
||||
begin_call = False
|
||||
in_func = False
|
||||
brace_count = 0
|
||||
|
||||
return func_dict
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
def gather_file_stats(func_dict):
|
||||
file_stats = FileStats()
|
||||
file_stats.total_funcs = len(func_dict)
|
||||
file_stats.csv_string = "Function Name, Total Instructions, Memory Instructions, Function Calls\n"
|
||||
|
||||
# print the function statistics
|
||||
for key, entry in sorted(func_dict.items()):
|
||||
func_name = entry.func_name
|
||||
file_stats.total_insts += entry.inst_count
|
||||
file_stats.total_mem_insts += entry.mem_count
|
||||
file_stats.total_calls += entry.call_count
|
||||
|
||||
# keep track of the largest function
|
||||
if entry.inst_count > file_stats.largest_size:
|
||||
file_stats.largest_function = func_name
|
||||
file_stats.largest_size = entry.inst_count
|
||||
|
||||
# clamp the counts to prevent divide-by-zero
|
||||
inst_count = max(1, entry.inst_count)
|
||||
mem_count = max(1, entry.mem_count)
|
||||
call_count = max(1, entry.call_count)
|
||||
|
||||
summary_string = ""
|
||||
summary_string += " Function: {}\n".format(func_name)
|
||||
summary_string += " Total Instructions: {}\n".format(inst_count)
|
||||
summary_string += " Memory Instructions: {} ({:.2f}%)\n".format(mem_count, 100 * float(mem_count)/inst_count)
|
||||
summary_string += " Total Calls: {}\n".format(entry.call_count)
|
||||
|
||||
summary_string += "\n"
|
||||
summary_string += "Top 10 Function Calls (name, count, %):\n"
|
||||
for name, count in itertools.islice(sorted(entry.call_dict.items(), key=lambda item: -item[1]), 0, 11):
|
||||
summary_string += " {}, {}, {:.2f}%\n".format(name, count, 100 * float(count)/max(1,file_stats.total_calls))
|
||||
|
||||
# print the instruction mix
|
||||
summary_string += "\n"
|
||||
summary_string += "Instruction Mix (name, count, %):\n"
|
||||
for inst, count in sorted(entry.inst_dict.items()):
|
||||
summary_string += " {}, {}, {:.2f}%\n".format(inst, count, 100 * float(count)/inst_count)
|
||||
file_stats.inst_dict[inst] = file_stats.inst_dict.get((inst), 0) + count
|
||||
|
||||
# print the call mix
|
||||
summary_string += "\n"
|
||||
summary_string += "Function Calls (name, count, %):\n"
|
||||
for name, count in sorted(entry.call_dict.items()):
|
||||
file_stats.func_calls[name] = file_stats.func_calls.get((name), 0) + count
|
||||
summary_string += " {}, {}, {:.2f}%\n".format(name, count, 100 * float(count)/call_count)
|
||||
if not name in func_dict:
|
||||
file_stats.extern_funcs[name] = 1
|
||||
|
||||
file_stats.summary_dict[func_name] = summary_string
|
||||
|
||||
file_stats.csv_string += "{},{},{},{}\n".format(func_name, entry.inst_count, entry.mem_count, entry.call_count)
|
||||
|
||||
return file_stats
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
def generate_summary(func_dict, file_stats, out_name):
|
||||
summary_string = "Overall Stats\n"
|
||||
summary_string += " Total Functions: {}\n".format(file_stats.total_funcs)
|
||||
summary_string += " Total Instructions: {}\n".format(file_stats.total_insts)
|
||||
summary_string += " Memory Instructions: {} ({:.2f}%)\n".format(file_stats.total_mem_insts, 100 * float(file_stats.total_mem_insts)/max(1, file_stats.total_insts))
|
||||
summary_string += " Total Calls: {}\n".format(file_stats.total_calls)
|
||||
summary_string += " Biggest Function: {} ({} instructions)\n".format(file_stats.largest_function, file_stats.largest_size)
|
||||
|
||||
summary_string += "\n"
|
||||
summary_string += "Top 10 Function Calls (name, count, %):\n"
|
||||
for name, count in itertools.islice(sorted(file_stats.func_calls.items(), key=lambda item: -item[1]), 0, 11):
|
||||
summary_string += " {}, {}, {:.2f}%\n".format(name, count, 100 * float(count)/max(1,file_stats.total_calls))
|
||||
|
||||
summary_string += "\n"
|
||||
summary_string += "Function Call Counts (name, count, %):\n"
|
||||
for name, count in sorted(file_stats.func_calls.items()):
|
||||
summary_string += " {}, {}, {:.2f}%\n".format(name, count, 100 * float(count)/max(1,file_stats.total_calls))
|
||||
|
||||
summary_string += "\n"
|
||||
summary_string += "Instruction Mix (name, count, %):\n"
|
||||
for name, count in sorted(file_stats.inst_dict.items()):
|
||||
summary_string += " {}, {}, {:.2f}%\n".format(name, count, 100 * float(count)/max(1,file_stats.total_insts))
|
||||
|
||||
summary_string += "\n"
|
||||
summary_string += "Uncalled Functions:\n"
|
||||
for name, count in sorted(func_dict.items()):
|
||||
if not name in file_stats.func_calls:
|
||||
summary_string += " {}\n".format(name)
|
||||
|
||||
summary_string += "\n"
|
||||
summary_string += "Extern Functions:\n"
|
||||
for name, val in sorted(file_stats.extern_funcs.items()):
|
||||
summary_string += " {}\n".format(name)
|
||||
|
||||
with open("{}-summary.txt".format(out_name), "w") as summary_file:
|
||||
summary_file.write(summary_string)
|
||||
for func_name, summary in sorted(file_stats.summary_dict.items()):
|
||||
summary_file.write("\n#---------------------------------------\n")
|
||||
summary_file.write(summary)
|
||||
|
||||
with open("{}.csv".format(out_name), "w") as csv_file:
|
||||
csv_file.write(file_stats.csv_string)
|
||||
|
||||
return summary_string
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
def wrap_name(name):
|
||||
wrapped_name = ""
|
||||
cur_line = ""
|
||||
last_char = ''
|
||||
wrap_len = 20
|
||||
split_pos = 0
|
||||
line_pos = 0
|
||||
|
||||
for cur_char in name:
|
||||
cur_line = cur_line + cur_char
|
||||
line_pos = line_pos + 1
|
||||
|
||||
if not cur_char.isalpha():
|
||||
# prefer to split at non-alphabetic characters
|
||||
split_pos = line_pos
|
||||
elif last_char.isupper() and not cur_char.isupper():
|
||||
# otherwise, prefer to split at the first capitalized letter
|
||||
# of some group
|
||||
split_pos = line_pos - 2
|
||||
|
||||
if line_pos == wrap_len:
|
||||
wrapped_name = wrapped_name + cur_line[:split_pos] + '\n'
|
||||
cur_line = cur_line[split_pos:]
|
||||
line_pos = len(cur_line)
|
||||
|
||||
last_char = cur_char
|
||||
|
||||
wrapped_name = wrapped_name + cur_line + '\n'
|
||||
return wrapped_name.strip(" \t\n\r,")
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
def generate_callgraph(func_dict, file_stats, out_name):
|
||||
callgraph = graphviz.Digraph("{} Call Graph".format(out_name),
|
||||
filename="{}-callgraph.gv".format(out_name),
|
||||
engine="dot")
|
||||
|
||||
callgraph.attr("graph", rankdir="TB")
|
||||
callgraph.attr("graph", splines="true")
|
||||
callgraph.attr("graph", concentrate="false")
|
||||
callgraph.attr("graph", clusterrank="none")
|
||||
callgraph.attr("node", fontname="Courier New")
|
||||
callgraph.attr("node", shape="square")
|
||||
callgraph.attr("node", nojustify="true")
|
||||
callgraph.attr("node", width="2.5")
|
||||
callgraph.attr("node", height="2.5")
|
||||
callgraph.attr("edge", penwidth="3")
|
||||
callgraph.attr("edge", constrain="false")
|
||||
|
||||
# create a summary node
|
||||
with callgraph.subgraph(name="Summary") as c:
|
||||
c.attr("graph", rankdir="TB")
|
||||
c.attr("graph", splines="true")
|
||||
c.attr("graph", concentrate="false")
|
||||
c.attr("graph", clusterrank="none")
|
||||
c.attr("node", fontname="Courier New")
|
||||
c.attr("node", shape="square")
|
||||
c.attr("node", nojustify="false")
|
||||
c.attr("node", width="2.5")
|
||||
c.attr("node", height="2.5")
|
||||
c.attr("edge", penwidth="3")
|
||||
c.attr("edge", constrain="false")
|
||||
c.node(name="SUMMARY",
|
||||
label="Summary\linsts: {}\lfuncs: {}\lcalls: {}\l".format
|
||||
(file_stats.total_insts, file_stats.total_funcs, file_stats.total_calls))
|
||||
|
||||
# create the nodes
|
||||
for func_name, entry in sorted(func_dict.items()):
|
||||
num_calls_to = 0
|
||||
if func_name in file_stats.func_calls:
|
||||
num_calls_to = file_stats.func_calls[func_name]
|
||||
label = "{}\n\ninsts: {}\lcalls from: {}\lcalls to: {}\l".format(
|
||||
wrap_name(func_name),
|
||||
entry.inst_count,
|
||||
entry.call_count,
|
||||
num_calls_to)
|
||||
callgraph.node(name=wrap_name(func_name), label=label)
|
||||
|
||||
# create nodes for the extern functions
|
||||
callgraph.attr("node", style="dashed")
|
||||
for key, entry in sorted(file_stats.extern_funcs.items()):
|
||||
func_name = key
|
||||
callgraph.node(wrap_name(func_name))
|
||||
|
||||
# cycle through a handful of edge colors to add a little eye candy
|
||||
color_idx = 0
|
||||
edge_colors = [ "#FF000080", # red
|
||||
"#00800F80", # green
|
||||
"#FFAF0080", # orange
|
||||
"#0000FF80", # blue
|
||||
"#40404080" ] # gray
|
||||
|
||||
# create the edges
|
||||
for key, entry in sorted(func_dict.items()):
|
||||
func_name = entry.func_name
|
||||
callgraph.attr("edge", color=edge_colors[color_idx])
|
||||
for calleeName, count in sorted(entry.call_dict.items()):
|
||||
callgraph.attr("edge", tooltip="{} -> {}".format(func_name, calleeName))
|
||||
callgraph.edge(wrap_name(func_name), wrap_name(calleeName))
|
||||
color_idx = (color_idx + 1) % len(edge_colors)
|
||||
|
||||
callgraph.render()
|
||||
|
||||
return
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 2:
|
||||
sys.exit("Wrong number of arguments\nUsage: $ parse-ptx.py <path-to-PTX-file>")
|
||||
|
||||
in_name = sys.argv[1]
|
||||
if not os.path.isfile(in_name):
|
||||
sys.exit("Unable to open PTX file")
|
||||
|
||||
out_name = os.path.splitext(os.path.basename(in_name))[0]
|
||||
func_dict = parse_ptx(in_name)
|
||||
file_stats = gather_file_stats(func_dict)
|
||||
|
||||
generate_summary(func_dict, file_stats, out_name)
|
||||
generate_callgraph(func_dict, file_stats, out_name)
|
||||
|
||||
return
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
Binary file not shown.
@@ -1,31 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build abi checking tools
|
||||
#
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Where to install the final results
|
||||
: ${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
: ${ABITOOLS_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
|
||||
mkdir -p ${LOCAL_DEPS_DIR}
|
||||
pushd ${LOCAL_DEPS_DIR}
|
||||
|
||||
git clone https://github.com/lvc/vtable-dumper
|
||||
pushd vtable-dumper ; make install prefix=${ABITOOLS_INSTALL_DIR} ; popd
|
||||
|
||||
git clone https://github.com/lvc/abi-dumper
|
||||
pushd abi-dumper ; make install prefix=${ABITOOLS_INSTALL_DIR} ; popd
|
||||
|
||||
git clone https://github.com/lvc/abi-compliance-checker
|
||||
pushd abi-compliance-checker ; make install prefix=${ABITOOLS_INSTALL_DIR} ; popd
|
||||
|
||||
popd
|
||||
|
||||
# ls -R ${LOCAL_DEPS_DIR}
|
||||
export PATH=${PATH}:${ABITOOLS_INSTALL_DIR}/bin
|
||||
@@ -12,7 +12,7 @@ set -ex
|
||||
echo "Building cmake"
|
||||
uname
|
||||
|
||||
CMAKE_VERSION=${CMAKE_VERSION:=3.31.3}
|
||||
CMAKE_VERSION=${CMAKE_VERSION:=3.12.4}
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
CMAKE_INSTALL_DIR=${CMAKE_INSTALL_DIR:=${LOCAL_DEPS_DIR}/cmake}
|
||||
|
||||
@@ -25,8 +25,8 @@ fi
|
||||
|
||||
if [[ `uname` == "Linux" && `uname -m` == "aarch64" ]] ; then
|
||||
mkdir -p ${CMAKE_INSTALL_DIR} || true
|
||||
curl --location "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-Linux-aarch64.sh" -o "cmake.sh"
|
||||
sh cmake.sh --skip-license --prefix=${CMAKE_INSTALL_DIR}
|
||||
curl --location https://anaconda.org/conda-forge/cmake/3.17.0/download/linux-aarch64/cmake-3.17.0-h28c56e5_0.tar.bz2 -o cmake-3.17.0-h28c56e5_0.tar.bz2
|
||||
tar -xjf cmake-3.17.0-h28c56e5_0.tar.bz2 -C ${CMAKE_INSTALL_DIR}
|
||||
export PATH=${CMAKE_INSTALL_DIR}/bin:$PATH
|
||||
|
||||
# In case we ever need to build from scratch:
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build libpng
|
||||
#
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of libpng to download if we don't have it yet
|
||||
LIBPNG_REPO=${LIBPNG_REPO:=https://github.com/glennrp/libpng.git}
|
||||
LIBPNG_VERSION=${LIBPNG_VERSION:=v1.6.35}
|
||||
|
||||
# Where to put libpng repo source (default to the ext area)
|
||||
LIBPNG_SRC_DIR=${LIBPNG_SRC_DIR:=${PWD}/ext/libpng}
|
||||
# Temp build area (default to a build/ subdir under source)
|
||||
LIBPNG_BUILD_DIR=${LIBPNG_BUILD_DIR:=${LIBPNG_SRC_DIR}/build}
|
||||
# Install area for libpng (default to ext/dist)
|
||||
LIBPNG_INSTALL_DIR=${LIBPNG_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
#LIBPNG_CONFIG_OPTS=${LIBPNG_CONFIG_OPTS:=}
|
||||
|
||||
pwd
|
||||
echo "libpng install dir will be: ${LIBPNG_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone libpng project from GitHub and build
|
||||
if [[ ! -e ${LIBPNG_SRC_DIR} ]] ; then
|
||||
echo "git clone ${LIBPNG_REPO} ${LIBPNG_SRC_DIR}"
|
||||
git clone ${LIBPNG_REPO} ${LIBPNG_SRC_DIR}
|
||||
fi
|
||||
cd ${LIBPNG_SRC_DIR}
|
||||
|
||||
|
||||
echo "git checkout ${LIBPNG_VERSION} --force"
|
||||
git checkout ${LIBPNG_VERSION} --force
|
||||
|
||||
if [[ -z $DEP_DOWNLOAD_ONLY ]]; then
|
||||
time cmake -S . -B ${LIBPNG_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBPNG_INSTALL_DIR} \
|
||||
-DPNG_EXECUTABLES=OFF \
|
||||
-DPNG_TESTS=OFF \
|
||||
${LIBPNG_CONFIG_OPTS}
|
||||
time cmake --build ${LIBPNG_BUILD_DIR} --config Release --target install
|
||||
fi
|
||||
|
||||
# ls -R ${LIBPNG_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export PNG_ROOT=$LIBPNG_INSTALL_DIR
|
||||
|
||||
@@ -12,36 +12,36 @@ set -ex
|
||||
echo "Building LLVM"
|
||||
uname
|
||||
|
||||
: ${LLVM_VERSION:=18.1.8}
|
||||
: ${LLVM_INSTALL_DIR:=${PWD}/llvm-install}
|
||||
mkdir -p $LLVM_INSTALL_DIR || true
|
||||
|
||||
if [[ `uname` == "Linux" ]] ; then
|
||||
: ${LLVM_DISTRO_NAME:=ubuntu-18.04}
|
||||
LLVM_VERSION=${LLVM_VERSION:=8.0.0}
|
||||
LLVM_INSTALL_DIR=${LLVM_INSTALL_DIR:=${PWD}/llvm-install}
|
||||
if [[ "$GITHUB_WORKFLOW" != "" ]] ; then
|
||||
LLVM_DISTRO_NAME=${LLVM_DISTRO_NAME:=ubuntu-18.04}
|
||||
elif [[ "$TRAVIS_DIST" == "trusty" ]] ; then
|
||||
LLVM_DISTRO_NAME=${LLVM_DISTRO_NAME:=ubuntu-14.04}
|
||||
elif [[ "$TRAVIS_DIST" == "xenial" ]] ; then
|
||||
LLVM_DISTRO_NAME=${LLVM_DISTRO_NAME:=ubuntu-16.04}
|
||||
elif [[ "$TRAVIS_DIST" == "bionic" ]] ; then
|
||||
LLVM_DISTRO_NAME=${LLVM_DISTRO_NAME:=ubuntu-18.04}
|
||||
else
|
||||
LLVM_DISTRO_NAME=${LLVM_DISTRO_NAME:=error}
|
||||
fi
|
||||
LLVMTAR=clang+llvm-${LLVM_VERSION}-x86_64-linux-gnu-${LLVM_DISTRO_NAME}.tar.xz
|
||||
echo LLVMTAR = $LLVMTAR
|
||||
curl --location https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/${LLVMTAR} -o $LLVMTAR
|
||||
if [[ "$LLVM_VERSION" == "10.0.0" ]] || [[ "$LLVM_VERSION" == "11.0.0" ]] || [[ "$LLVM_VERSION" == "11.1.0" ]] || [[ "$LLVM_VERSION" == "12.0.0" ]] ; then
|
||||
# new
|
||||
curl --location https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/${LLVMTAR} -o $LLVMTAR
|
||||
else
|
||||
curl --location http://releases.llvm.org/${LLVM_VERSION}/${LLVMTAR} -o $LLVMTAR
|
||||
fi
|
||||
ls -l $LLVMTAR
|
||||
tar xf $LLVMTAR
|
||||
rm -f $LLVMTAR
|
||||
echo "Installed ${LLVM_VERSION} in ${LLVM_INSTALL_DIR}"
|
||||
mkdir -p $LLVM_INSTALL_DIR && true
|
||||
mv clang+llvm*/* $LLVM_INSTALL_DIR
|
||||
elif [[ `uname -s` == "Windows" || "${RUNNER_OS}" == "Windows" ]] ; then
|
||||
echo "Installing Windows LLVM"
|
||||
: ${LLVM_DISTRO_NAME:=ubuntu-18.04}
|
||||
LLVMTAR=clang+llvm-${LLVM_VERSION}-x86_64-pc-windows-msvc.tar.xz
|
||||
echo LLVMTAR = $LLVMTAR
|
||||
curl --location https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/${LLVMTAR} -o $LLVMTAR
|
||||
ls -l $LLVMTAR
|
||||
tar xf $LLVMTAR
|
||||
rm -f $LLVMTAR
|
||||
mv clang+llvm*/* $LLVM_INSTALL_DIR
|
||||
else
|
||||
echo Bad uname `uname`
|
||||
export LLVM_DIRECTORY=$LLVM_INSTALL_DIR
|
||||
export PATH=${LLVM_INSTALL_DIR}/bin:$PATH
|
||||
# ls -a $LLVM_DIRECTORY
|
||||
fi
|
||||
|
||||
echo "Installed LLVM ${LLVM_VERSION} in ${LLVM_INSTALL_DIR}"
|
||||
ls -a $LLVM_INSTALL_DIR || true
|
||||
ls -a $LLVM_INSTALL_DIR/* || true
|
||||
export LLVM_DIRECTORY=$LLVM_INSTALL_DIR
|
||||
export PATH=${LLVM_INSTALL_DIR}/bin:$PATH
|
||||
export LLVM_ROOT=${LLVM_INSTALL_DIR}
|
||||
|
||||
@@ -11,26 +11,21 @@ set -ex
|
||||
|
||||
# Which OCIO to retrieve, how to build it
|
||||
OPENCOLORIO_REPO=${OPENCOLORIO_REPO:=https://github.com/AcademySoftwareFoundation/OpenColorIO.git}
|
||||
OPENCOLORIO_VERSION=${OPENCOLORIO_VERSION:=v2.3.2}
|
||||
OPENCOLORIO_VERSION=${OPENCOLORIO_VERSION:=v1.1.1}
|
||||
|
||||
# Where to install the final results
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
OPENCOLORIO_SOURCE_DIR=${OPENCOLORIO_SOURCE_DIR:=${LOCAL_DEPS_DIR}/OpenColorIO}
|
||||
OPENCOLORIO_SOURCE_DIR=${OPENCOLORIO_BUILD_DIR:=${LOCAL_DEPS_DIR}/OpenColorIO}
|
||||
OPENCOLORIO_BUILD_DIR=${OPENCOLORIO_BUILD_DIR:=${LOCAL_DEPS_DIR}/OpenColorIO-build}
|
||||
OPENCOLORIO_INSTALL_DIR=${OPENCOLORIO_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
OPENCOLORIO_BUILD_TYPE=${OPENCOLORIO_BUILD_TYPE:=Release}
|
||||
OPENCOLORIO_CXX_FLAGS=${OPENCOLORIO_CXX_FLAGS:="-Wno-unused-function -Wno-deprecated-declarations -Wno-cast-qual -Wno-write-strings"}
|
||||
# Just need libs:
|
||||
OPENCOLORIO_CMAKE_FLAGS+=" -DOCIO_BUILD_APPS=OFF -DOCIO_BUILD_NUKE=OFF \
|
||||
OPENCOLORIO_BUILDOPTS="-DOCIO_BUILD_APPS=OFF -DOCIO_BUILD_NUKE=OFF \
|
||||
-DOCIO_BUILD_DOCS=OFF -DOCIO_BUILD_TESTS=OFF \
|
||||
-DOCIO_BUILD_GPU_TESTS=OFF \
|
||||
-DOCIO_BUILD_PYTHON=OFF -DOCIO_BUILD_PYGLUE=OFF \
|
||||
-DOCIO_BUILD_JAVA=OFF \
|
||||
-DBUILD_SHARED_LIBS=${OPENCOLORIO_BUILD_SHARED_LIBS:=ON}"
|
||||
|
||||
# Fix yaml-cpp which breaks against cmake 4.0 because of too-old cmake min.
|
||||
# Remove when yaml-cpp is fixed to declare its own minimum high enough.
|
||||
export CMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||
|
||||
-DOCIO_BUILD_STATIC=${OCIO_BUILD_STATIC:=OFF}"
|
||||
BASEDIR=`pwd`
|
||||
pwd
|
||||
echo "OpenColorIO install dir will be: ${OPENCOLORIO_INSTALL_DIR}"
|
||||
@@ -39,21 +34,21 @@ mkdir -p ${LOCAL_DEPS_DIR}
|
||||
pushd ${LOCAL_DEPS_DIR}
|
||||
|
||||
# Clone OpenColorIO project from GitHub and build
|
||||
if [[ ! -e ${OPENCOLORIO_SOURCE_DIR} ]] ; then
|
||||
echo "git clone ${OPENCOLORIO_REPO} ${OPENCOLORIO_SOURCE_DIR}"
|
||||
git clone ${OPENCOLORIO_REPO} ${OPENCOLORIO_SOURCE_DIR}
|
||||
if [[ ! -e OpenColorIO ]] ; then
|
||||
echo "git clone ${OPENCOLORIO_REPO} OpenColorIO"
|
||||
git clone ${OPENCOLORIO_REPO} OpenColorIO
|
||||
fi
|
||||
cd ${OPENCOLORIO_SOURCE_DIR}
|
||||
cd OpenColorIO
|
||||
|
||||
echo "git checkout ${OPENCOLORIO_VERSION} --force"
|
||||
git checkout ${OPENCOLORIO_VERSION} --force
|
||||
echo "Building OpenColorIO from commit" `git rev-parse --short HEAD`
|
||||
|
||||
cmake -S ${OPENCOLORIO_SOURCE_DIR} -B ${OPENCOLORIO_BUILD_DIR} \
|
||||
-DCMAKE_BUILD_TYPE=${OPENCOLORIO_BUILD_TYPE} \
|
||||
mkdir -p build
|
||||
cd build
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${OPENCOLORIO_INSTALL_DIR} \
|
||||
${OPENCOLORIO_CMAKE_FLAGS}
|
||||
time cmake --build ${OPENCOLORIO_BUILD_DIR} --target install --config ${OPENCOLORIO_BUILD_TYPE}
|
||||
-DCMAKE_CXX_FLAGS="${OPENCOLORIO_CXX_FLAGS}" \
|
||||
${OPENCOLORIO_BUILDOPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
popd
|
||||
|
||||
# ls -R ${OPENCOLORIO_INSTALL_DIR}
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build OpenEXR & Imath
|
||||
|
||||
# Utility script to download and build OpenEXR & IlmBase
|
||||
#
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Which OpenEXR to retrieve, how to build it
|
||||
OPENEXR_REPO=${OPENEXR_REPO:=https://github.com/AcademySoftwareFoundation/openexr.git}
|
||||
OPENEXR_VERSION=${OPENEXR_VERSION:=v3.2.4}
|
||||
OPENEXR_REPO=${OPENEXR_REPO:=https://github.com/openexr/openexr.git}
|
||||
OPENEXR_VERSION=${OPENEXR_VERSION:=v2.4.1}
|
||||
|
||||
# Where to install the final results
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
@@ -19,6 +20,7 @@ OPENEXR_SOURCE_DIR=${OPENEXR_SOURCE_DIR:=${LOCAL_DEPS_DIR}/openexr}
|
||||
OPENEXR_BUILD_DIR=${OPENEXR_BUILD_DIR:=${LOCAL_DEPS_DIR}/openexr-build}
|
||||
OPENEXR_INSTALL_DIR=${OPENEXR_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
OPENEXR_BUILD_TYPE=${OPENEXR_BUILD_TYPE:=Release}
|
||||
CMAKE_GENERATOR=${CMAKE_GENERATOR:="Unix Makefiles"}
|
||||
OPENEXR_CMAKE_FLAGS=${OPENEXR_CMAKE_FLAGS:=""}
|
||||
OPENEXR_CXX_FLAGS=${OPENEXR_CXX_FLAGS:=""}
|
||||
BASEDIR=$PWD
|
||||
@@ -27,34 +29,76 @@ pwd
|
||||
echo "Building OpenEXR ${OPENEXR_VERSION}"
|
||||
echo "OpenEXR build dir will be: ${OPENEXR_BUILD_DIR}"
|
||||
echo "OpenEXR install dir will be: ${OPENEXR_INSTALL_DIR}"
|
||||
echo "OpenEXR build type is ${OPENEXR_BUILD_TYPE}"
|
||||
echo "CMAKE_PREFIX_PATH is ${CMAKE_PREFIX_PATH}"
|
||||
echo "OpenEXR Build type is ${OPENEXR_BUILD_TYPE}"
|
||||
|
||||
# Clone OpenEXR project (including Imath) from GitHub and build
|
||||
if [[ "$CMAKE_GENERATOR" == "" ]] ; then
|
||||
OPENEXR_GENERATOR_CMD="-G \"$CMAKE_GENERATOR\""
|
||||
fi
|
||||
|
||||
# Clone OpenEXR project (including IlmBase) from GitHub and build
|
||||
if [[ ! -e ${OPENEXR_SOURCE_DIR} ]] ; then
|
||||
echo "git clone ${OPENEXR_REPO} ${OPENEXR_SOURCE_DIR}"
|
||||
git clone ${OPENEXR_REPO} ${OPENEXR_SOURCE_DIR}
|
||||
fi
|
||||
|
||||
mkdir -p ${OPENEXR_INSTALL_DIR} && true
|
||||
mkdir -p ${OPENEXR_BUILD_DIR} && true
|
||||
|
||||
pushd ${OPENEXR_SOURCE_DIR}
|
||||
git checkout ${OPENEXR_VERSION} --force
|
||||
echo "Building OpenEXR from commit" `git rev-parse --short HEAD`
|
||||
|
||||
cmake -S ${OPENEXR_SOURCE_DIR} -B ${OPENEXR_BUILD_DIR} \
|
||||
-DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
|
||||
-DBUILD_SHARED_LIBS=${OpenEXR_LOCAL_BUILD_SHARED_LIBS:=ON} \
|
||||
-DOPENEXR_BUILD_TOOLS=0 \
|
||||
-DBUILD_TESTING=0 \
|
||||
-DOPENEXR_VIEWERS_ENABLE=0 \
|
||||
-DINSTALL_OPENEXR_EXAMPLES=0 \
|
||||
-DOPENEXR_INSTALL_EXAMPLES=0 \
|
||||
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
|
||||
${OPENEXR_CMAKE_FLAGS}
|
||||
time cmake --build ${OPENEXR_BUILD_DIR} --target install --config ${OPENEXR_BUILD_TYPE}
|
||||
if [[ ${OPENEXR_VERSION} == "v2.2.0" ]] || [[ ${OPENEXR_VERSION} == "v2.2.1" ]] \
|
||||
|| [[ ${OPENEXR_VERSION} == "v2.2.2" ]] ; then
|
||||
mkdir -p ${OPENEXR_BUILD_DIR}/IlmBase && true
|
||||
mkdir -p ${OPENEXR_BUILD_DIR}/OpenEXR && true
|
||||
cd ${OPENEXR_BUILD_DIR}/IlmBase
|
||||
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} ${OPENEXR_GENERATOR_CMD} \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
|
||||
-DCMAKE_CXX_STANDARD=11 \
|
||||
${OPENEXR_CMAKE_FLAGS} ${OPENEXR_SOURCE_DIR}/IlmBase
|
||||
time cmake --build . --target install --config ${OPENEXR_BUILD_TYPE}
|
||||
cd ${OPENEXR_BUILD_DIR}/OpenEXR
|
||||
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} ${OPENEXR_GENERATOR_CMD} \
|
||||
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DILMBASE_PACKAGE_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DBUILD_UTILS=0 -DBUILD_TESTS=0 \
|
||||
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
|
||||
${OPENEXR_CMAKE_FLAGS} ${OPENEXR_SOURCE_DIR}/OpenEXR
|
||||
time cmake --build . --target install --config ${OPENEXR_BUILD_TYPE}
|
||||
elif [[ ${OPENEXR_VERSION} == "v2.3.0" ]] ; then
|
||||
# Simplified setup for 2.3+
|
||||
cd ${OPENEXR_BUILD_DIR}
|
||||
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} -G "$CMAKE_GENERATOR" \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
|
||||
-DILMBASE_PACKAGE_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DOPENEXR_BUILD_UTILS=0 \
|
||||
-DOPENEXR_BUILD_TESTS=0 \
|
||||
-DOPENEXR_BUILD_PYTHON_LIBS=0 \
|
||||
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
|
||||
${OPENEXR_CMAKE_FLAGS} ${OPENEXR_SOURCE_DIR}
|
||||
time cmake --build . --target install --config ${OPENEXR_BUILD_TYPE}
|
||||
else
|
||||
# Simplified setup for 2.4+
|
||||
cd ${OPENEXR_BUILD_DIR}
|
||||
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} -G "$CMAKE_GENERATOR" \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
|
||||
-DILMBASE_PACKAGE_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DOPENEXR_BUILD_UTILS=0 \
|
||||
-DBUILD_TESTING=0 \
|
||||
-DPYILMBASE_ENABLE=0 \
|
||||
-DOPENEXR_VIEWERS_ENABLE=0 \
|
||||
-DINSTALL_OPENEXR_EXAMPLES=0 \
|
||||
-DOPENEXR_INSTALL_EXAMPLES=0 \
|
||||
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
|
||||
${OPENEXR_CMAKE_FLAGS} ${OPENEXR_SOURCE_DIR}
|
||||
time cmake --build . --target install --config ${OPENEXR_BUILD_TYPE}
|
||||
fi
|
||||
|
||||
popd
|
||||
|
||||
@@ -62,12 +106,11 @@ popd
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export OpenEXR_ROOT=$OPENEXR_INSTALL_DIR
|
||||
# Environment variables are case insensitive on Windows, don't set
|
||||
# it a second time with different case. This seems to trigger a bug
|
||||
# where the next cmake command fails to find the compiler.
|
||||
if [[ $(uname -s) != "Windows" && "${RUNNER_OS}" != "Windows" ]]; then
|
||||
export OPENEXR_ROOT=$OPENEXR_INSTALL_DIR
|
||||
fi
|
||||
export LD_LIBRARY_PATH=$OpenEXR_ROOT/lib:$LD_LIBRARY_PATH
|
||||
export ILMBASE_ROOT=$OPENEXR_INSTALL_DIR
|
||||
export OPENEXR_ROOT=$OPENEXR_INSTALL_DIR
|
||||
export ILMBASE_LIBRARY_DIR=$OPENEXR_INSTALL_DIR/lib
|
||||
export OPENEXR_LIBRARY_DIR=$OPENEXR_INSTALL_DIR/lib
|
||||
export LD_LIBRARY_PATH=$OPENEXR_ROOT/lib:$LD_LIBRARY_PATH
|
||||
|
||||
export ILMBASE_ROOT_DIR=$OPENEXR_INSTALL_DIR
|
||||
export OPENEXR_ROOT_DIR=$OPENEXR_INSTALL_DIR
|
||||
|
||||
@@ -9,56 +9,54 @@
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
OPENIMAGEIO_REPO=${OPENIMAGEIO_REPO:=AcademySoftwareFoundation/OpenImageIO}
|
||||
OPENIMAGEIO_VERSION=${OPENIMAGEIO_VERSION:=release}
|
||||
|
||||
OPENIMAGEIO_REPO=${OPENIMAGEIO_REPO:=OpenImageIO/oiio}
|
||||
OPENIMAGEIO_VERSION=${OPENIMAGEIO_VERSION:=master}
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
OPENIMAGEIO_SOURCE_DIR=${OPENIMAGEIO_SOURCE_DIR:=${LOCAL_DEPS_DIR}/OpenImageIO}
|
||||
OPENIMAGEIO_BUILD_DIR=${OPENIMAGEIO_BUILD_DIR:=${OPENIMAGEIO_SOURCE_DIR}/build}
|
||||
OPENIMAGEIO_INSTALL_DIR=${OPENIMAGEIO_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
OPENIMAGEIO_BUILD_TYPE=${OPENIMAGEIO_BUILD_TYPE:=Release}
|
||||
OPENIMAGEIO_SRCDIR=${OPENIMAGEIO_SRCDIR:=${LOCAL_DEPS_DIR}/OpenImageIO}
|
||||
OPENIMAGEIO_BUILD_DIR=${OPENIMAGEIO_BUILD_DIR:=${OPENIMAGEIO_SRCDIR}/build/$PLATFORM}
|
||||
OPENIMAGEIO_INSTALLDIR=${OPENIMAGEIO_INSTALLDIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
OPENIMAGEIO_CMAKE_FLAGS=${OPENIMAGEIO_CMAKE_FLAGS:=""}
|
||||
OPENIMAGEIO_BUILD_TYPE=${OPENIMAGEIO_BUILD_TYPE:=Release}
|
||||
OPENIMAGEIO_CXXFLAGS=${OPENIMAGEIO_CXXFLAGS:=""}
|
||||
BASEDIR=$PWD
|
||||
CMAKE_GENERATOR=${CMAKE_GENERATOR:="Unix Makefiles"}
|
||||
|
||||
pwd
|
||||
echo "OpenImageIO build dir will be: ${OPENIMAGEIO_BUILD_DIR}"
|
||||
echo "OpenImageIO install dir will be: ${OPENIMAGEIO_INSTALL_DIR}"
|
||||
echo "OpenImageIO Build type is ${OPENIMAGEIO_BUILD_TYPE}"
|
||||
echo "CXX: '${CXX}'"
|
||||
echo "CC: '${CC}'"
|
||||
echo "CMAKE_CXX_COMPILER: '${CMAKE_CXX_COMPILER}'"
|
||||
|
||||
if [ ! -e $OPENIMAGEIO_SOURCE_DIR ] ; then
|
||||
git clone https://github.com/${OPENIMAGEIO_REPO} $OPENIMAGEIO_SOURCE_DIR
|
||||
if [ ! -e $OPENIMAGEIO_SRCDIR ] ; then
|
||||
git clone https://github.com/${OPENIMAGEIO_REPO} $OPENIMAGEIO_SRCDIR
|
||||
fi
|
||||
mkdir -p ${OPENIMAGEIO_INSTALL_DIR} && true
|
||||
|
||||
|
||||
mkdir -p ${OPENIMAGEIO_INSTALLDIR} && true
|
||||
mkdir -p ${OPENIMAGEIO_BUILD_DIR} && true
|
||||
|
||||
pushd $OPENIMAGEIO_SOURCE_DIR
|
||||
pushd $OPENIMAGEIO_SRCDIR
|
||||
git fetch --all -p
|
||||
git checkout $OPENIMAGEIO_VERSION --force
|
||||
echo "Building OpenImageIO from ${OPENIMAGEIO_REPO} / ${OPENIMAGEIO_VERSION} @ commit" `git rev-parse --short HEAD`
|
||||
|
||||
if [[ "$USE_SIMD" != "" ]] ; then
|
||||
OPENIMAGEIO_CMAKE_FLAGS+=" -DUSE_SIMD=$USE_SIMD"
|
||||
OPENIMAGEIO_CMAKE_FLAGS="$OPENIMAGEIO_CMAKE_FLAGS -DUSE_SIMD=$USE_SIMD"
|
||||
fi
|
||||
if [[ "$DEBUG" == "1" ]] ; then
|
||||
OPENIMAGEIO_CMAKE_FLAGS="$OPENIMAGEIO_CMAKE_FLAGS -DCMAKE_BUILD_TYPE=Debug"
|
||||
fi
|
||||
|
||||
|
||||
cmake -S ${OPENIMAGEIO_SOURCE_DIR} -B ${OPENIMAGEIO_BUILD_DIR} \
|
||||
-DCMAKE_BUILD_TYPE="${OPENIMAGEIO_BUILD_TYPE}" \
|
||||
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENIMAGEIO_INSTALL_DIR}" \
|
||||
-DPYTHON_VERSION="${PYTHON_VERSION}" \
|
||||
-DCMAKE_INSTALL_LIBDIR="${OPENIMAGEIO_INSTALL_DIR}/lib" \
|
||||
-DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD}" \
|
||||
${OPENIMAGEIO_CMAKE_FLAGS} -DVERBOSE=1
|
||||
# if [[ "$ARCH" == "windows64" ]] ; then
|
||||
pushd ${OPENIMAGEIO_BUILD_DIR}
|
||||
cmake ../.. -G "$CMAKE_GENERATOR" \
|
||||
-DCMAKE_BUILD_TYPE="$OPENIMAGEIO_BUILD_TYPE" \
|
||||
-DCMAKE_INSTALL_PREFIX="$OPENIMAGEIO_INSTALLDIR" \
|
||||
-DPYTHON_VERSION="$PYTHON_VERSION" \
|
||||
-DCMAKE_INSTALL_LIBDIR="$OPENIMAGEIO_INSTALLDIR/lib" \
|
||||
-DCMAKE_CXX_STANDARD="$CMAKE_CXX_STANDARD" \
|
||||
$OPENIMAGEIO_CMAKE_FLAGS -DVERBOSE=1
|
||||
echo "Parallel build $CMAKE_BUILD_PARALLEL_LEVEL"
|
||||
time cmake --build ${OPENIMAGEIO_BUILD_DIR} --target install --config ${OPENIMAGEIO_BUILD_TYPE}
|
||||
time cmake --build . --target install --config ${OPENIMAGEIO_BUILD_TYPE}
|
||||
popd
|
||||
|
||||
popd
|
||||
|
||||
export OpenImageIO_ROOT=$OPENIMAGEIO_INSTALL_DIR
|
||||
export OpenImageIO_ROOT=$OPENIMAGEIO_INSTALLDIR
|
||||
export PATH=$OpenImageIO_ROOT/bin:$PATH
|
||||
export DYLD_LIBRARY_PATH=$OpenImageIO_ROOT/lib:$DYLD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=$OpenImageIO_ROOT/lib:$LD_LIBRARY_PATH
|
||||
export PYTHONPATH=$OpenImageIO_ROOT/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
|
||||
|
||||
@@ -11,43 +11,40 @@ set -ex
|
||||
|
||||
# Repo and branch/tag/commit of pugixml to download if we don't have it yet
|
||||
PUGIXML_REPO=${PUGIXML_REPO:=https://github.com/zeux/pugixml.git}
|
||||
PUGIXML_VERSION=${PUGIXML_VERSION:=v1.11.4}
|
||||
PUGIXML_VERSION=${PUGIXML_VERSION:=v1.10}
|
||||
|
||||
# Where to put pugixml repo source (default to the ext area)
|
||||
PUGIXML_SRC_DIR=${PUGIXML_SRC_DIR:=${PWD}/ext/pugixml}
|
||||
# Temp build area (default to a build/ subdir under source)
|
||||
PUGIXML_BUILD_DIR=${PUGIXML_BUILD_DIR:=${PUGIXML_SRC_DIR}/build}
|
||||
# Install area for pugixml (default to ext/dist)
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
PUGIXML_SOURCE_DIR=${PUGIXML_SOURCE_DIR:=${LOCAL_DEPS_DIR}/pugixml}
|
||||
PUGIXML_BUILD_DIR=${PUGIXML_BUILD_DIR:=${PUGIXML_SOURCE_DIR}/build}
|
||||
PUGIXML_INSTALL_DIR=${PUGIXML_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
PUGIXML_BUILD_TYPE=${PUGIXML_BUILD_TYPE:=Release}
|
||||
#PUGIXML_BUILD_OPTS=${PUGIXML_BUILD_OPTS:=}
|
||||
|
||||
pwd
|
||||
echo "Building Pugixml ${PUGIXML_VERSION}"
|
||||
echo "Pugixml source dir will be: ${PUGIXML_SOURCE_DIR}"
|
||||
echo "Pugixml build dir will be: ${PUGIXML_BUILD_DIR}"
|
||||
echo "Pugixml install dir will be: ${PUGIXML_INSTALL_DIR}"
|
||||
echo "Pugixml build type is ${PUGIXML_BUILD_TYPE}"
|
||||
echo "CMAKE_PREFIX_PATH is ${CMAKE_PREFIX_PATH}"
|
||||
echo "pugixml install dir will be: ${PUGIXML_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone pugixml project from GitHub and build
|
||||
if [[ ! -e ${PUGIXML_SOURCE_DIR} ]] ; then
|
||||
echo "git clone ${PUGIXML_REPO} ${PUGIXML_SOURCE_DIR}"
|
||||
git clone ${PUGIXML_REPO} ${PUGIXML_SOURCE_DIR}
|
||||
if [[ ! -e ${PUGIXML_SRC_DIR} ]] ; then
|
||||
echo "git clone ${PUGIXML_REPO} ${PUGIXML_SRC_DIR}"
|
||||
git clone ${PUGIXML_REPO} ${PUGIXML_SRC_DIR}
|
||||
fi
|
||||
mkdir -p ${PUGIXML_INSTALL_DIR} && true
|
||||
|
||||
pushd ${PUGIXML_SOURCE_DIR}
|
||||
cd ${PUGIXML_SRC_DIR}
|
||||
echo "git checkout ${PUGIXML_VERSION} --force"
|
||||
git checkout ${PUGIXML_VERSION} --force
|
||||
echo "Building pugixml from commit" `git rev-parse --short HEAD`
|
||||
|
||||
if [[ -z $DEP_DOWNLOAD_ONLY ]]; then
|
||||
time cmake -S ${PUGIXML_SOURCE_DIR} -B ${PUGIXML_BUILD_DIR} \
|
||||
-DCMAKE_BUILD_TYPE=${PUGIXML_BUILD_TYPE} \
|
||||
-DCMAKE_INSTALL_PREFIX=${PUGIXML_INSTALL_DIR} \
|
||||
-DBUILD_SHARED_LIBS=${PUGIXML_LOCAL_BUILD_SHARED_LIBS:=ON} \
|
||||
-DBUILD_TESTS=OFF \
|
||||
${PUGIXML_CMAKE_FLAGS}
|
||||
time cmake --build ${PUGIXML_BUILD_DIR} --target install --config ${PUGIXML_BUILD_TYPE}
|
||||
fi
|
||||
mkdir -p ${PUGIXML_BUILD_DIR}
|
||||
cd ${PUGIXML_BUILD_DIR}
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${PUGIXML_INSTALL_DIR} \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_TESTS=OFF \
|
||||
${PUGIXML_BUILD_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
# ls -R ${PUGIXML_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build pybind11
|
||||
#
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Utility script to download and build pybind11
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of pybind11 to download if we don't have it yet
|
||||
PYBIND11_REPO=${PYBIND11_REPO:=https://github.com/pybind/pybind11.git}
|
||||
PYBIND11_VERSION=${PYBIND11_VERSION:=v3.0.0}
|
||||
PYBIND11_VERSION=${PYBIND11_VERSION:=v2.4.3}
|
||||
|
||||
# Where to put pybind11 repo source (default to the ext area)
|
||||
PYBIND11_SRC_DIR=${PYBIND11_SRC_DIR:=${PWD}/ext/pybind11}
|
||||
@@ -20,11 +20,7 @@ PYBIND11_BUILD_DIR=${PYBIND11_BUILD_DIR:=${PYBIND11_SRC_DIR}/build}
|
||||
# Install area for pybind11 (default to ext/dist)
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
PYBIND11_INSTALL_DIR=${PYBIND11_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
#PYBIND11_BUILD_OPTS=${PYBIND11_BUILD_OPTS:=}
|
||||
|
||||
# Fix for pybind11 breaking against cmake 4.0 because of too-old cmake min.
|
||||
# Remove when pybind11 is fixed to declare its own minimum high enough.
|
||||
export CMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||
PYBIND11_BUILD_OPTS=${PYBIND11_BUILD_OPTS:=}
|
||||
|
||||
if [[ "${PYTHON_VERSION}" != "" ]] ; then
|
||||
PYBIND11_BUILD_OPTS+=" -DPYBIND11_PYTHON_VERSION=${PYTHON_VERSION}"
|
||||
@@ -42,18 +38,16 @@ if [[ ! -e ${PYBIND11_SRC_DIR} ]] ; then
|
||||
git clone ${PYBIND11_REPO} ${PYBIND11_SRC_DIR}
|
||||
fi
|
||||
cd ${PYBIND11_SRC_DIR}
|
||||
|
||||
echo "git checkout ${PYBIND11_VERSION} --force"
|
||||
git checkout ${PYBIND11_VERSION} --force
|
||||
echo "Building pybind11 from commit" `git rev-parse --short HEAD`
|
||||
|
||||
if [[ -z $DEP_DOWNLOAD_ONLY ]]; then
|
||||
time cmake -S . -B ${PYBIND11_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${PYBIND11_INSTALL_DIR} \
|
||||
-DPYBIND11_TEST=OFF \
|
||||
${PYBIND11_BUILD_OPTS}
|
||||
time cmake --build ${PYBIND11_BUILD_DIR} --config Release --target install
|
||||
fi
|
||||
mkdir -p ${PYBIND11_BUILD_DIR}
|
||||
cd ${PYBIND11_BUILD_DIR}
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${PYBIND11_INSTALL_DIR} \
|
||||
-DPYBIND11_TEST=OFF \
|
||||
${PYBIND11_BUILD_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
# ls -R ${PYBIND11_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build zlib
|
||||
#
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# https://github.com/AcademySoftwareFoundation/OpenImageIO
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of zlib to download if we don't have it yet
|
||||
ZLIB_REPO=${ZLIB_REPO:=https://github.com/madler/zlib.git}
|
||||
ZLIB_VERSION=${ZLIB_VERSION:=v1.2.11}
|
||||
|
||||
# Where to put zlib repo source (default to the ext area)
|
||||
ZLIB_SRC_DIR=${ZLIB_SRC_DIR:=${PWD}/ext/zlib}
|
||||
# Temp build area (default to a build/ subdir under source)
|
||||
ZLIB_BUILD_DIR=${ZLIB_BUILD_DIR:=${ZLIB_SRC_DIR}/build}
|
||||
# Install area for zlib (default to ext/dist)
|
||||
ZLIB_INSTALL_DIR=${ZLIB_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
#ZLIB_CONFIG_OPTS=${ZLIB_CONFIG_OPTS:=}
|
||||
|
||||
# Fix zlib which breaks against cmake 4.0 because of too-old cmake min.
|
||||
# Remove when zlib is fixed to declare its own minimum high enough.
|
||||
export CMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||
|
||||
pwd
|
||||
echo "zlib install dir will be: ${ZLIB_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone zlib project from GitHub and build
|
||||
if [[ ! -e ${ZLIB_SRC_DIR} ]] ; then
|
||||
echo "git clone ${ZLIB_REPO} ${ZLIB_SRC_DIR}"
|
||||
git clone ${ZLIB_REPO} ${ZLIB_SRC_DIR}
|
||||
fi
|
||||
cd ${ZLIB_SRC_DIR}
|
||||
|
||||
echo "git checkout ${ZLIB_VERSION} --force"
|
||||
git checkout ${ZLIB_VERSION} --force
|
||||
|
||||
if [[ -z $DEP_DOWNLOAD_ONLY ]]; then
|
||||
time cmake -S . -B ${ZLIB_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${ZLIB_INSTALL_DIR} \
|
||||
${ZLIB_CONFIG_OPTS}
|
||||
time cmake --build ${ZLIB_BUILD_DIR} --config Release --target install
|
||||
fi
|
||||
|
||||
# ls -R ${ZLIB_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export ZLIB_ROOT=$ZLIB_INSTALL_DIR
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Important: set -ex causes this whole script to terminate with error if
|
||||
# any command in it fails. This is crucial for CI tests.
|
||||
set -e
|
||||
|
||||
# Arguments to this script are:
|
||||
# BUILDDIR_NEW BUILDDIR_OLD LIBRARIES...
|
||||
|
||||
BUILDDIR_NEW=$1
|
||||
shift
|
||||
BUILDDIR_OLD=$1
|
||||
shift
|
||||
LIBS=$*
|
||||
|
||||
#
|
||||
# First, create ABI dumps from both builds
|
||||
#
|
||||
ABI_ARGS="-bin-only -skip-cxx -public-headers $PWD/dist/include/OSL "
|
||||
echo "ABI_CHECK: PWD=${PWD} "
|
||||
ls -l $BUILDDIR_NEW
|
||||
ls -l $BUILDDIR_OLD
|
||||
for dir in $BUILDDIR_NEW $BUILDDIR_OLD ; do
|
||||
for lib in $LIBS ; do
|
||||
abi-dumper $ABI_ARGS ${dir}/lib/${lib}.so -o ${dir}/abi-${lib}.dump
|
||||
done
|
||||
done
|
||||
echo "Saved ABI dumps"
|
||||
|
||||
#
|
||||
# Run the ABI compliance checker, saving the outputs to files
|
||||
#
|
||||
for lib in $LIBS ; do
|
||||
abi-compliance-checker -l $lib -old $BUILDDIR_OLD/abi-$lib.dump -new $BUILDDIR_NEW/abi-$lib.dump | tee ${lib}-abi-results.txt || true
|
||||
echo -e "\x1b[33;1m"
|
||||
echo -e "$lib"
|
||||
fgrep "Binary compatibility:" ${lib}-abi-results.txt
|
||||
echo -e "\x1b[33;0m"
|
||||
done
|
||||
|
||||
#
|
||||
# If the "Binary compatibility" summary results say anything other than 100%,
|
||||
# we fail!
|
||||
#
|
||||
for lib in $LIBS ; do
|
||||
if [[ `fgrep "Binary compatibility:" ${lib}-abi-results.txt | grep -v 100\%` != "" ]] ; then
|
||||
cp -r compat_reports ${BUILDDIR_NEW}/compat_reports
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
@@ -8,41 +8,22 @@
|
||||
# any command in it fails. This is crucial for CI tests.
|
||||
set -ex
|
||||
|
||||
OSL_CMAKE_FLAGS="$MY_CMAKE_FLAGS $OSL_CMAKE_FLAGS"
|
||||
export OSL_SRC_DIR=${OSL_SRC_DIR:=$PWD}
|
||||
export OSL_BUILD_DIR=${OSL_BUILD_DIR:=${OSL_SRC_DIR}/build}
|
||||
export OSL_INSTALL_DIR=${OSL_INSTALL_DIR:=${OSL_SRC_DIR}/dist}
|
||||
export OSL_CMAKE_BUILD_TYPE=${OSL_CMAKE_BUILD_TYPE:=${CMAKE_BUILD_TYPE:=Release}}
|
||||
|
||||
if [[ "$USE_SIMD" != "" ]] ; then
|
||||
OSL_CMAKE_FLAGS="$OSL_CMAKE_FLAGS -DUSE_SIMD=$USE_SIMD"
|
||||
fi
|
||||
|
||||
if [[ -n "$CODECOV" ]] ; then
|
||||
OSL_CMAKE_FLAGS="$OSL_CMAKE_FLAGS -DCODECOV=${CODECOV}"
|
||||
fi
|
||||
|
||||
cmake -S ${OSL_SRC_DIR} -B ${OSL_BUILD_DIR} -G "$CMAKE_GENERATOR" \
|
||||
-DCMAKE_BUILD_TYPE="${OSL_CMAKE_BUILD_TYPE}" \
|
||||
pushd build/$PLATFORM
|
||||
cmake ../.. -G "$CMAKE_GENERATOR" \
|
||||
-DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" \
|
||||
-DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH" \
|
||||
-DCMAKE_INSTALL_PREFIX="$OSL_ROOT" \
|
||||
-DUSE_PYTHON="${USE_PYTHON:=1}" \
|
||||
-DPYTHON_VERSION="$PYTHON_VERSION" \
|
||||
-DUSE_BATCHED="${USE_BATCHED:=0}" \
|
||||
-DCMAKE_INSTALL_LIBDIR="$OSL_ROOT/lib" \
|
||||
-DCMAKE_CXX_STANDARD="$CMAKE_CXX_STANDARD" \
|
||||
$OSL_CMAKE_FLAGS -DVERBOSE=1
|
||||
|
||||
# Save a copy of the generated files for debugging broken CI builds.
|
||||
mkdir ${OSL_BUILD_DIR}/cmake-save || true
|
||||
cp -r ${OSL_BUILD_DIR}/CMake* ${OSL_BUILD_DIR}/*.cmake ${OSL_BUILD_DIR}/cmake-save
|
||||
|
||||
: ${BUILDTARGET:=install}
|
||||
if [[ "$BUILDTARGET" != "none" ]] ; then
|
||||
echo "Parallel build ${CMAKE_BUILD_PARALLEL_LEVEL} of target ${BUILDTARGET}"
|
||||
time ${OSL_CMAKE_BUILD_WRAPPER} cmake --build ${OSL_BUILD_DIR} --target ${BUILDTARGET} --config ${OSL_CMAKE_BUILD_TYPE}
|
||||
ccache --show-stats || true
|
||||
fi
|
||||
time cmake --build . --target ${BUILDTARGET:=install} --config ${CMAKE_BUILD_TYPE}
|
||||
popd
|
||||
|
||||
if [[ "${DEBUG_CI:=0}" != "0" ]] ; then
|
||||
echo "PATH=$PATH"
|
||||
@@ -53,7 +34,6 @@ if [[ "${DEBUG_CI:=0}" != "0" ]] ; then
|
||||
fi
|
||||
|
||||
if [[ "$BUILDTARGET" == clang-format ]] ; then
|
||||
echo "Running " `which clang-format` " version " `clang-format --version`
|
||||
git diff --color
|
||||
THEDIFF=`git diff`
|
||||
if [[ "$THEDIFF" != "" ]] ; then
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Run code coverage analysis
|
||||
# This assumes that the build occurred with CODECOV=1 andtests have already
|
||||
# fully run.
|
||||
|
||||
set -ex
|
||||
|
||||
echo "Performing code coverage analysis"
|
||||
mkdir _coverage
|
||||
pushd _coverage
|
||||
|
||||
ls -R ../build/src/
|
||||
|
||||
# Remove files or directories we want to exclude from code coverage analysis,
|
||||
# generally because we don't expect to execute any of their code during our
|
||||
# CI. (Because it's only used interactively, or is fallback code only used
|
||||
# when certain dependencies are not found.) Including these when we know we
|
||||
# won't be calling them during coverage gathering will just make our coverage
|
||||
# percentage look artifically low.
|
||||
rm -f ../build/src/osltoy/CMakeFiles/osltoy.dir/*.cpp.{gcno,gcda}
|
||||
|
||||
|
||||
# The sed command below converts from:
|
||||
# ../build/src/liboslexec/CMakeFiles/oslexec.dir/foo.gcno
|
||||
# to:
|
||||
# ../src/liboslexec/foo.cpp
|
||||
|
||||
for g in $(find ../build -name "*.gcno" -type f); do
|
||||
echo "Processing $g"
|
||||
echo "dirname $g = $(dirname $g) to " `$(echo "$g" | sed -e 's/\/build\//\//' -e 's/\.gcno/\.cpp/' -e 's/\.cpp\.cpp/\.cpp/' -e 's/\/CMakeFiles.*\.dir\//\//')`
|
||||
gcov -l -p -o $(dirname "$g") $(echo "$g" | sed -e 's/\/build\//\//' -e 's/\.gcno/\.cpp/' -e 's/\/CMakeFiles.*\.dir\//\//')
|
||||
done
|
||||
|
||||
# Remove pointless .gcov files so we don't analyze them
|
||||
rm -f "*opt*include*"
|
||||
rm -f "*usr*local*"
|
||||
|
||||
popd
|
||||
@@ -8,80 +8,73 @@
|
||||
# Since it sets many env variables needed by the caller, it should be run
|
||||
# with 'source', not in a separate shell.
|
||||
|
||||
# Figure out the platform
|
||||
if [[ $RUNNER_OS == macOS ]] ; then
|
||||
export ARCH=macosx
|
||||
elif [[ $RUNNER_OS == Linux ]] ; then
|
||||
export ARCH=linux64
|
||||
elif [[ $RUNNER_OS == Windows ]] ; then
|
||||
export ARCH=windows64
|
||||
elif [[ `uname -m` == aarch64 ]] ; then
|
||||
export ARCH=aarch64
|
||||
else
|
||||
export ARCH=unknown
|
||||
exit -1
|
||||
fi
|
||||
export PLATFORM=$ARCH
|
||||
|
||||
if [[ "${DEBUG:=0}" != "0" ]] ; then
|
||||
export PLATFORM=${PLATFORM}.debug
|
||||
fi
|
||||
|
||||
echo "Architecture is $ARCH"
|
||||
echo "Build platform name is $PLATFORM"
|
||||
|
||||
# Environment variables we always need
|
||||
export PATH=/usr/local/bin/_ccache:/usr/lib/ccache:$PATH
|
||||
export USE_CCACHE=${USE_CCACHE:=1}
|
||||
export CCACHE_CPP2=
|
||||
export CCACHE_DIR=$HOME/.ccache
|
||||
export CCACHE_COMPRESSION=yes
|
||||
if [[ "$(which ccache)" != "" ]] ; then
|
||||
# Try to coax dependency building into also using ccache
|
||||
# Wait, no, this breaks old OIIO!
|
||||
# export CMAKE_CXX_COMPILER_LAUNCHER="ccache"
|
||||
# export CMAKE_C_COMPILER_LAUNCHER="ccache"
|
||||
ccache -z
|
||||
export CCACHE_CPP2=1
|
||||
export CCACHE_DIR=/tmp/ccache
|
||||
if [[ "${RUNNER_OS}" == "macOS" ]] ; then
|
||||
export CCACHE_DIR=$HOME/.ccache
|
||||
fi
|
||||
mkdir -p $CCACHE_DIR
|
||||
|
||||
export DISTDIR=$PWD/dist
|
||||
export OSL_ROOT=$PWD/dist
|
||||
export DYLD_LIBRARY_PATH=$DISTDIR/lib:$DYLD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=$DISTDIR/lib:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=$DISTDIR/lib64:$LD_LIBRARY_PATH
|
||||
export OIIO_LIBRARY_PATH=$DISTDIR/lib
|
||||
export OPENIMAGEIO_PLUGIN_PATH=$DISTDIR/lib:${OPENIMAGEIO_PLUGIN_PATH}
|
||||
export OSL_ROOT=$PWD/dist/$PLATFORM
|
||||
export DYLD_LIBRARY_PATH=$OSL_ROOT/lib:$DYLD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=$OSL_ROOT/lib:$LD_LIBRARY_PATH
|
||||
export OIIO_LIBRARY_PATH=$OSL_ROOT/lib:${OIIO_LIBRARY_PATH}
|
||||
export LSAN_OPTIONS=suppressions=$PWD/src/build-scripts/nosanitize.txt
|
||||
export ASAN_OPTIONS=print_suppressions=0:detect_odr_violation=1
|
||||
# export UBSAN_OPTIONS=suppressions=$PWD/src/build-scripts/ubsan-suppressions.txt
|
||||
export ASAN_OPTIONS=print_suppressions=0
|
||||
|
||||
export PYTHON_VERSION=${PYTHON_VERSION:="3.7"}
|
||||
export PYTHONPATH=$DISTDIR/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
|
||||
cmake --version
|
||||
export USE_PYTHON=${USE_PYTHON:=1}
|
||||
export PYTHON_VERSION=${PYTHON_VERSION:="2.7"}
|
||||
export PYTHONPATH=/usr/local/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
|
||||
export PYTHONPATH=/usr/local/lib64/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
|
||||
export PYTHONPATH=$OSL_ROOT/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
|
||||
export BUILD_MISSING_DEPS=${BUILD_MISSING_DEPS:=1}
|
||||
export COMPILER=${COMPILER:=gcc}
|
||||
export CXX=${CXX:=g++}
|
||||
export OSL_CI=true
|
||||
export OpenImageIO_CI=true
|
||||
export USE_NINJA=${USE_NINJA:=1}
|
||||
export CMAKE_GENERATOR=${CMAKE_GENERATOR:=Ninja}
|
||||
export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:=Release}
|
||||
export CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD:=17}
|
||||
export CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD:=11}
|
||||
|
||||
export PARALLEL=${PARALLEL:=4}
|
||||
export PAR_MAKEFLAGS=-j${PARALLEL}
|
||||
export CMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL:=${PARALLEL}}
|
||||
export CTEST_PARALLEL_LEVEL=${CTEST_PARALLEL_LEVEL:=${PARALLEL}}
|
||||
|
||||
export LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=$HOME/ext}
|
||||
export PATH=${LOCAL_DEPS_DIR}/dist/bin:$PATH
|
||||
export CMAKE_PREFIX_PATH=${LOCAL_DEPS_DIR}/dist:${CMAKE_PREFIX_PATH}
|
||||
export LD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/dist/lib:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/dist/lib64:$LD_LIBRARY_PATH
|
||||
export DYLD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/dist/lib:$DYLD_LIBRARY_PATH
|
||||
|
||||
export TESTSUITE_CLEANUP_ON_SUCCESS=${TESTSUITE_CLEANUP_ON_SUCCESS:=1}
|
||||
|
||||
# For CI, default to building missing dependencies automatically
|
||||
export OpenImageIO_BUILD_MISSING_DEPS=${OpenImageIO_BUILD_MISSING_DEPS:=all}
|
||||
export OSL_BUILD_MISSING_DEPS=${OSL_BUILD_MISSING_DEPS:=all}
|
||||
|
||||
# Sonar
|
||||
export BUILD_WRAPPER_OUT_DIR="${PWD}/bw_output"
|
||||
export BW_OUTPUT_DIR="${PWD}/bw_output"
|
||||
|
||||
# Parallel builds
|
||||
if [[ `uname -s` == "Linux" ]] ; then
|
||||
echo "procs: " `nproc`
|
||||
head -40 /proc/cpuinfo
|
||||
export PARALLEL=${PARALLEL:=$((2 + `nproc`))}
|
||||
elif [[ "${RUNNER_OS}" == "macOS" ]] ; then
|
||||
echo "procs: " `sysctl -n hw.ncpu`
|
||||
sysctl machdep.cpu.features
|
||||
export PARALLEL=${PARALLEL:=$((2 + `sysctl -n hw.ncpu`))}
|
||||
elif [[ "${RUNNER_OS}" == "Windows" ]] ; then
|
||||
# Presumably Windows
|
||||
export PARALLEL=${PARALLEL:=$((2 + ${NUMBER_OF_PROCESSORS}))}
|
||||
else
|
||||
export PARALLEL=${PARALLEL:=6}
|
||||
fi
|
||||
export PAR_MAKEFLAGS=-j${PARALLEL}
|
||||
export CMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL:=${PARALLEL}}
|
||||
export CTEST_PARALLEL_LEVEL=${CTEST_PARALLEL_LEVEL:=${PARALLEL}}
|
||||
export OIIO_USE_CUDA=1
|
||||
export CUDAToolkit_ROOT=/usr/local/cuda
|
||||
|
||||
mkdir -p build dist
|
||||
mkdir -p build/$PLATFORM dist/$PLATFORM
|
||||
|
||||
echo "HOME = $HOME"
|
||||
echo "PWD = $PWD"
|
||||
@@ -95,10 +88,8 @@ ls
|
||||
env | sort
|
||||
|
||||
if [[ `uname -s` == "Linux" ]] ; then
|
||||
echo "nprocs: " `nproc`
|
||||
head -40 /proc/cpuinfo
|
||||
elif [[ "${RUNNER_OS}" == "macOS" ]] ; then
|
||||
echo "nprocs: " `sysctl -n hw.ncpu`
|
||||
elif [[ $ARCH == macosx ]] ; then
|
||||
sysctl machdep.cpu.features
|
||||
fi
|
||||
|
||||
|
||||
@@ -8,26 +8,12 @@
|
||||
# any command in it fails. This is crucial for CI tests.
|
||||
set -ex
|
||||
|
||||
: ${CTEST_EXCLUSIONS:="broken"}
|
||||
: ${CTEST_TEST_TIMEOUT:=60}
|
||||
|
||||
$OSL_ROOT/bin/testshade --help
|
||||
|
||||
echo "Parallel test ${CTEST_PARALLEL_LEVEL}"
|
||||
echo "Default timeout ${CTEST_TEST_TIMEOUT}"
|
||||
echo "Test exclusions '${CTEST_EXCLUSIONS}'"
|
||||
echo "CTEST_ARGS '${CTEST_ARGS}'"
|
||||
|
||||
pushd build
|
||||
|
||||
ctest -C ${CMAKE_BUILD_TYPE} --force-new-ctest-process --output-on-failure \
|
||||
--timeout ${CTEST_TEST_TIMEOUT} -E "${CTEST_EXCLUSIONS}" ${CTEST_ARGS} \
|
||||
|| \
|
||||
ctest -C ${CMAKE_BUILD_TYPE} --force-new-ctest-process \
|
||||
--rerun-failed --repeat until-pass:5 -R render --output-on-failure \
|
||||
--timeout ${CTEST_TEST_TIMEOUT} -E "${CTEST_EXCLUSIONS}" ${CTEST_ARGS}
|
||||
# The weird construct above allows the render-* tests to run multiple times
|
||||
|
||||
echo "Parallel test " ${CTEST_PARALLEL_LEVEL}
|
||||
pushd build/$PLATFORM
|
||||
time ctest -C ${CMAKE_BUILD_TYPE} -E broken --force-new-ctest-process \
|
||||
--output-on-failure --timeout ${CTEST_TEST_TIMEOUT:=180} ${CTEST_ARGS}
|
||||
popd
|
||||
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# --- Colors ---
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
GREEN='\033[0;32m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
|
||||
# --- Check if the script is sourced ---
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
echo -e "${YELLOW}Please run this script as:"
|
||||
echo -e " ${NC}source $(basename "${BASH_SOURCE[0]}")"
|
||||
echo -e "Otherwise, '${YELLOW}conda activate${NC}' won't persist in your current shell."
|
||||
return 0 2>/dev/null || exit 0
|
||||
fi
|
||||
|
||||
# --- Check if Miniconda exists ---
|
||||
if [ ! -f "$HOME/miniconda3/etc/profile.d/conda.sh" ]; then
|
||||
echo -e "${RED}Miniconda not found at ~/miniconda3.${NC}"
|
||||
echo -e "Please install Miniconda before running this script"
|
||||
echo -e "${YELLOW}Important:${NC} During installation, decline any PATH modifications."
|
||||
echo -e "This script activates the environment per session using 'source'."
|
||||
return 0 2>/dev/null || exit 0
|
||||
else
|
||||
# Load Conda
|
||||
source ~/miniconda3/etc/profile.d/conda.sh
|
||||
|
||||
# Create OSL environment if it doesn't exist
|
||||
if ! conda info --envs | grep -q "osl-env"; then
|
||||
echo "Creating osl-env Conda environment..."
|
||||
conda create -y -n osl-env
|
||||
|
||||
# Activate the environment
|
||||
conda activate osl-env
|
||||
|
||||
# Install dependencies
|
||||
echo "Installing dependencies in osl-env..."
|
||||
conda install -y -c conda-forge \
|
||||
cmake \
|
||||
llvmdev=20.1.8 clangdev clangxx_linux-64 libcxx \
|
||||
python=3.12 numpy pybind11 \
|
||||
openimageio=2.5 imath flex bison pugixml zlib
|
||||
else
|
||||
echo -e "${GREEN}osl-env environment already exists.${NC}"
|
||||
|
||||
# Activate the environment
|
||||
conda activate osl-env
|
||||
fi
|
||||
|
||||
fi
|
||||
@@ -1,4 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
from __future__ import print_function, absolute_import
|
||||
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
@@ -71,7 +73,7 @@
|
||||
###
|
||||
### Only one main doc region will be output by the `docdeep` program,
|
||||
### specified with the `-d` command line argument. Any other doc-regions
|
||||
### will not be included in the documentation output of that run.
|
||||
### will not be included in the documention output of that run.
|
||||
###
|
||||
### However, one doc-region may *include* the text of another doc-region
|
||||
### as follows:
|
||||
@@ -112,7 +114,7 @@
|
||||
### For pre-code comments, the contiguous comment region associated with
|
||||
### a declaration immediately precedes the declaration. Such a comment
|
||||
### set has its first line start with `///>`. For post-code comments,
|
||||
### the documentation comments follows the code declaration, and this is
|
||||
### the documentaiton comments follows the code declaration, and this is
|
||||
### designated by having its first line start with `///<`. I like to
|
||||
### just remember that the `<` or `>` points in the direction of the code
|
||||
### declaration that the comment applies to.
|
||||
|
||||
Binary file not shown.
@@ -7,224 +7,110 @@
|
||||
|
||||
set -ex
|
||||
|
||||
# Make extra space on the runners
|
||||
df -h .
|
||||
time rm -rf /usr/local/lib/android /host/root/usr/local/lib/android &
|
||||
sleep 3
|
||||
|
||||
|
||||
#
|
||||
# Install system packages when those are acceptable for dependencies.
|
||||
#
|
||||
if [[ "$ASWF_ORG" != "" ]] ; then
|
||||
# Using ASWF container
|
||||
# Using ASWF CentOS container
|
||||
|
||||
export PATH=/opt/rh/devtoolset-6/root/usr/bin:/usr/local/bin:$PATH
|
||||
|
||||
#ls /etc/yum.repos.d
|
||||
|
||||
if [[ "$ASWF_VFXPLATFORM_VERSION" == "2021" || "$ASWF_VFXPLATFORM_VERSION" == "2022" ]] ; then
|
||||
# CentOS 7 based containers need the now-nonexistant centos repo to be
|
||||
# excluded or all the subsequent yum install commands will fail.
|
||||
yum-config-manager --disable centos-sclo-rh || true
|
||||
sed -i 's,^mirrorlist=,#,; s,^#baseurl=http://mirror\.centos\.org/centos/$releasever,baseurl=https://vault.centos.org/7.9.2009,' /etc/yum.repos.d/CentOS-Base.repo
|
||||
fi
|
||||
|
||||
# sudo /usr/bin/yum install -y giflib giflib-devel || true
|
||||
# sudo /usr/bin/yum install -y ffmpeg ffmpeg-devel || true
|
||||
|
||||
if [[ "${CONAN_LLVM_VERSION}" != "" ]] ; then
|
||||
mkdir conan
|
||||
pushd conan
|
||||
# Simple way to conan install just one package:
|
||||
# conan install clang/${CONAN_LLVM_VERSION}@aswftesting/ci_common1 -g deploy -g virtualenv
|
||||
# But the below method can accommodate multiple requirements:
|
||||
echo "[imports]" >> conanfile.txt
|
||||
echo "., * -> ." >> conanfile.txt
|
||||
echo "[requires]" >> conanfile.txt
|
||||
echo "clang/${CONAN_LLVM_VERSION}@aswftesting/ci_common1" >> conanfile.txt
|
||||
time conan install .
|
||||
echo "--ls--"
|
||||
ls -R .
|
||||
export PATH=$PWD/bin:$PATH
|
||||
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
|
||||
export LLVM_ROOT=$PWD
|
||||
popd
|
||||
fi
|
||||
|
||||
if [[ "${CONAN_PACKAGES}" != "" ]] ; then
|
||||
export PATH=$PWD/conan/bin:$PATH
|
||||
export LD_LIBRARY_PATH=$PWD/conan/lib:$LD_LIBRARY_PATH
|
||||
mkdir -p conan
|
||||
pushd conan
|
||||
for pkg in ${CONAN_PACKAGES} ; do
|
||||
echo "Installing $pkg via Conan..."
|
||||
time conan install $pkg
|
||||
done
|
||||
popd
|
||||
ls -R conan
|
||||
fi
|
||||
|
||||
if [[ "$CXX" == "icpc" || "$CC" == "icc" || "$USE_ICC" != "" ]] ; then
|
||||
sudo dnf -y install https://download.rockylinux.org/pub/rocky/8.10/BaseOS/x86_64/os/Packages/c/ca-certificates-2025.2.80_v9.0.304-80.2.el8_10.noarch.rpm
|
||||
# Lock down icc to 2022.1 because newer versions hosted on the Intel
|
||||
# repo require a glibc too new for the ASWF CentOS7-based containers
|
||||
# we run CI on.
|
||||
sudo cp src/build-scripts/oneAPI.repo /etc/yum.repos.d
|
||||
sudo /usr/bin/yum install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2022.1.0.x86_64
|
||||
set +e; source /opt/intel/oneapi/setvars.sh --config oneapi_2022.1.0.cfg; set -e
|
||||
elif [[ "$CXX" == "icpc" || "$CC" == "icc" || "$USE_ICC" != "" || "$CXX" == "icpx" || "$CC" == "icx" || "$USE_ICX" != "" ]] ; then
|
||||
sudo dnf -y install https://download.rockylinux.org/pub/rocky/8.10/BaseOS/x86_64/os/Packages/c/ca-certificates-2025.2.80_v9.0.304-80.2.el8_10.noarch.rpm
|
||||
# Lock down icx to 2023.1 because newer versions hosted on the Intel
|
||||
# repo require a libstd++ too new for the ASWF containers we run CI on
|
||||
# because their default install of gcc 9 based toolchain.
|
||||
sudo cp src/build-scripts/oneAPI.repo /etc/yum.repos.d
|
||||
sudo yum install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.1.0.x86_64
|
||||
# sudo yum install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic
|
||||
set +e; source /opt/intel/oneapi/setvars.sh; set -e
|
||||
echo "Verifying installation of Intel(r) oneAPI DPC++/C++ Compiler:"
|
||||
icpx --version
|
||||
fi
|
||||
sudo yum install -y giflib giflib-devel && true
|
||||
sudo yum install -y opencv opencv-devel && true
|
||||
sudo yum install -y Field3D Field3D-devel && true
|
||||
sudo yum install -y ffmpeg ffmpeg-devel && true
|
||||
|
||||
else
|
||||
# Using native Ubuntu runner
|
||||
|
||||
if [[ "${SKIP_APT_GET_UPDATE}" != "1" ]] ; then
|
||||
time sudo apt-get update
|
||||
fi
|
||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||
time sudo apt-get update
|
||||
|
||||
if [[ "${SKIP_SYSTEM_DEPS_INSTALL}" != "1" ]] ; then
|
||||
time sudo apt-get -q install -y \
|
||||
git cmake ccache ninja-build g++ \
|
||||
libboost-dev libboost-thread-dev libboost-filesystem-dev \
|
||||
libtiff-dev libpng-dev \
|
||||
flex bison libbison-dev \
|
||||
libpugixml-dev \
|
||||
libopencolorio-dev
|
||||
fi
|
||||
|
||||
if [[ "${QT_VERSION:-5}" == "5" ]] ; then
|
||||
time sudo apt-get -q install -y qt5-default || /bin/true
|
||||
elif [[ "${QT_VERSION}" == "6" ]] ; then
|
||||
time sudo apt-get -q install -y qt6-base-dev || /bin/true
|
||||
fi
|
||||
if [[ "${EXTRA_DEP_PACKAGES}" != "" ]] ; then
|
||||
time sudo apt-get -q install -y ${EXTRA_DEP_PACKAGES}
|
||||
fi
|
||||
|
||||
if [[ "${USE_PYTHON}" != "0" ]] ; then
|
||||
time sudo apt-get -q install -y python3-numpy
|
||||
fi
|
||||
if [[ "${PIP_INSTALLS}" != "" ]] ; then
|
||||
time pip3 install ${PIP_INSTALLS}
|
||||
fi
|
||||
time sudo apt-get -q install -y \
|
||||
git cmake ninja-build ccache g++ \
|
||||
libboost-dev libboost-thread-dev \
|
||||
libboost-filesystem-dev libboost-regex-dev \
|
||||
libilmbase-dev libopenexr-dev \
|
||||
python-dev python-numpy \
|
||||
libtiff-dev libgif-dev libpng-dev \
|
||||
flex bison libbison-dev \
|
||||
libpugixml-dev \
|
||||
libopencolorio-dev \
|
||||
qt5-default
|
||||
|
||||
export CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu:$CMAKE_PREFIX_PATH
|
||||
|
||||
if [[ "$CXX" == "g++-9" ]] ; then
|
||||
if [[ "$CXX" == "g++-4.8" ]] ; then
|
||||
time sudo apt-get install -y g++-4.8
|
||||
elif [[ "$CXX" == "g++-6" ]] ; then
|
||||
time sudo apt-get install -y g++-6
|
||||
elif [[ "$CXX" == "g++-7" ]] ; then
|
||||
time sudo apt-get install -y g++-7
|
||||
elif [[ "$CXX" == "g++-8" ]] ; then
|
||||
time sudo apt-get install -y g++-8
|
||||
elif [[ "$CXX" == "g++-9" ]] ; then
|
||||
time sudo apt-get install -y g++-9
|
||||
elif [[ "$CXX" == "g++-10" ]] ; then
|
||||
time sudo apt-get install -y g++-10
|
||||
elif [[ "$CXX" == "g++-11" ]] ; then
|
||||
time sudo apt-get install -y g++-11
|
||||
elif [[ "$CXX" == "g++-12" ]] ; then
|
||||
time sudo apt-get install -y g++-12
|
||||
elif [[ "$CXX" == "g++-13" ]] ; then
|
||||
time sudo apt-get install -y g++-13
|
||||
fi
|
||||
|
||||
if [[ "$CXX" == "icpc" || "$CC" == "icc" || "$USE_ICC" != "" || "$CXX" == "icpx" || "$CC" == "icx" || "$USE_ICX" != "" ]] ; then
|
||||
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
||||
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
||||
echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
|
||||
time sudo apt-get update
|
||||
time sudo apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic=2022.1.0-3768
|
||||
# Because multiple (possibly newer) versions of oneAPI may be installed,
|
||||
# use a config file to specify compiler and tbb versions
|
||||
# NOTE: oneAPI components have independent version numbering.
|
||||
set +e; source /opt/intel/oneapi/setvars.sh --config oneapi_2022.1.0.cfg; set -e
|
||||
fi
|
||||
|
||||
if [[ "$LLVM_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_llvm.bash
|
||||
fi
|
||||
source src/build-scripts/build_llvm.bash
|
||||
fi
|
||||
|
||||
if [[ "$CMAKE_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_cmake.bash
|
||||
fi
|
||||
cmake --version
|
||||
|
||||
|
||||
if [[ "$OPTIX_VERSION" != "" ]] ; then
|
||||
OPTIXREPO=${OPTIXREPO:=https://github.com/NVIDIA/optix-dev}
|
||||
echo "Requested OPTIX_VERSION = '${OPTIX_VERSION}' from ${OPTIXREPO}"
|
||||
export OptiX_ROOT=$LOCAL_DEPS_DIR/dist/optix-dev
|
||||
git clone -b v${OPTIX_VERSION} ${OPTIXREPO} ${OptiX_ROOT}
|
||||
export PATH=$PATH:/usr/local/cuda-12/bin
|
||||
export LD_LIBRARY_PATH=/usr/local/cuda-12/lib64:$LD_LIBRARY_PATH
|
||||
find / -name "*nv*so" -print || true
|
||||
echo "Requested OPTIX_VERSION = '${OPTIX_VERSION}'"
|
||||
mkdir -p $LOCAL_DEPS_DIR/dist/include/internal
|
||||
OPTIXLOC=https://developer.download.nvidia.com/redist/optix/v${OPTIX_VERSION}
|
||||
for f in optix.h optix_device.h optix_function_table.h \
|
||||
optix_function_table_definition.h optix_host.h \
|
||||
optix_stack_size.h optix_stubs.h optix_types.h optix_7_device.h \
|
||||
optix_7_host.h optix_7_types.h \
|
||||
internal/optix_7_device_impl.h \
|
||||
internal/optix_7_device_impl_exception.h \
|
||||
internal/optix_7_device_impl_transformations.h
|
||||
do
|
||||
curl --retry 100 -m 120 --connect-timeout 30 \
|
||||
$OPTIXLOC/include/$f > $LOCAL_DEPS_DIR/dist/include/$f
|
||||
done
|
||||
export OptiX_ROOT=$LOCAL_DEPS_DIR/dist
|
||||
fi
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Packages we need to build from scratch.
|
||||
#
|
||||
|
||||
if [[ "$PYBIND11_VERSION" != "0" ]] ; then
|
||||
source src/build-scripts/build_pybind11.bash
|
||||
fi
|
||||
source src/build-scripts/build_pybind11.bash
|
||||
|
||||
if [[ "$OPENEXR_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_openexr.bash
|
||||
fi
|
||||
|
||||
if [[ "$PUGIXML_VERSION" != "0" ]] ; then
|
||||
# if [[ "$PUGIXML_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_pugixml.bash
|
||||
export MY_CMAKE_FLAGS+=" -DUSE_EXTERNAL_PUGIXML=1 "
|
||||
fi
|
||||
# fi
|
||||
|
||||
if [[ "$OPENCOLORIO_VERSION" != "" ]] ; then
|
||||
# Temporary (?) fix: GH ninja having problems, fall back to make
|
||||
CMAKE_GENERATOR="Unix Makefiles" \
|
||||
source src/build-scripts/build_opencolorio.bash
|
||||
fi
|
||||
|
||||
if [[ "$OPENIMAGEIO_VERSION" != "" ]] ; then
|
||||
|
||||
if [[ "$REMOVE_INSTALLED_OPENIMAGEIO" == "1" ]] ; then
|
||||
sudo rm -rf /usr/local/include/OpenImageIO
|
||||
sudo rm -rf /usr/local/lib*/cmake/OpenImageIO
|
||||
sudo rm -rf /usr/local/lib*/libOpenImageIO*
|
||||
sudo rm -rf /usr/local/lib*/python*/site-packages/OpenImageIO*
|
||||
fi
|
||||
|
||||
# There are many parts of OIIO we don't need to build for OSL's tests
|
||||
# There are many parts of OIIO we don't need to build
|
||||
export ENABLE_iinfo=0 ENABLE_iv=0 ENABLE_igrep=0
|
||||
export ENABLE_iconvert=0 ENABLE_testtex=0
|
||||
# For speed of compiling OIIO, disable the file formats that we don't
|
||||
# need for OSL's tests
|
||||
export ENABLE_BMP=0 ENABLE_cineon=0 ENABLE_DDS=0 ENABLE_DPX=0 ENABLE_FITS=0
|
||||
export ENABLE_ICO=0 ENABLE_iff=0 ENABLE_jpeg2000=0 ENABLE_PNM=0 ENABLE_PSD=0
|
||||
export ENABLE_RLA=0 ENABLE_SGI=0 ENABLE_SOCKET=0 ENABLE_SOFTIMAGE=0
|
||||
export ENABLE_TARGA=0 ENABLE_WEBP=0 ENABLE_jpegxl=0 ENABLE_libuhdr=0
|
||||
# We don't need to run OIIO's tests
|
||||
export OPENIMAGEIO_CMAKE_FLAGS+=" -DOIIO_BUILD_TESTING=OFF -DOIIO_BUILD_TESTS=0"
|
||||
# Don't let warnings in OIIO break OSL's CI run
|
||||
export OPENIMAGEIO_CMAKE_FLAGS+=" -DSTOP_ON_WARNING=OFF"
|
||||
export OPENIMAGEIO_CMAKE_FLAGS+=" -DUSE_OPENGL=0 -DUSE_JXL=0"
|
||||
export OPENIMAGEIO_CMAKE_FLAGS+=" -DUSE_OPENCV=0 -DUSE_FFMPEG=0 -DUSE_QT=0"
|
||||
if [[ "${OPENIMAGEIO_UNITY:-1}" != "0" ]] ; then
|
||||
# Speed up the OIIO build by doing a "unity" build. (Note: this is
|
||||
# only a savings in CI where there are only 1-2 cores available.)
|
||||
export OPENIMAGEIO_CMAKE_FLAGS+=" -DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_MODE=BATCH"
|
||||
fi
|
||||
export ENABLE_TARGA=0 ENABLE_WEBP=0
|
||||
export OPENIMAGEIO_CMAKE_FLAGS="-DOIIO_BUILD_TESTS=0 -DUSE_OPENGL=0"
|
||||
source src/build-scripts/build_openimageio.bash
|
||||
fi
|
||||
|
||||
if [[ "$ABI_CHECK" != "" ]] ; then
|
||||
source src/build-scripts/build_abi_tools.bash
|
||||
fi
|
||||
|
||||
df -h .
|
||||
df -h /host/root || true
|
||||
|
||||
# Save the env for use by other stages
|
||||
src/build-scripts/save-env.bash
|
||||
|
||||
@@ -4,34 +4,37 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
echo "gh-win-installdeps.bash"
|
||||
env | sort
|
||||
|
||||
# DEP_DIR="$PWD/ext/dist"
|
||||
DEP_DIR="$PWD/dist"
|
||||
DEP_DIR="$PWD/dist/$PLATFORM"
|
||||
mkdir -p "$DEP_DIR"
|
||||
mkdir -p ext
|
||||
INT_DIR="build/$PLATFORM"
|
||||
VCPKG_INSTALLATION_ROOT=/c/vcpkg
|
||||
|
||||
export CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH:=.}
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$DEP_DIR"
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$VCPKG_INSTALLATION_ROOT/installed/x64-windows-release"
|
||||
export PATH="$PATH:$DEP_DIR/bin:$DEP_DIR/lib:$VCPKG_INSTALLATION_ROOT/installed/x64-windows-release/bin:$PWD/ext/dist/bin:$PWD/ext/dist/lib"
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DEP_DIR/bin:$VCPKG_INSTALLATION_ROOT/installed/x64-windows-release/bin"
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DEP_DIR/lib:$VCPKG_INSTALLATION_ROOT/installed/x64-windows-release/lib"
|
||||
export BOOST_ROOT=${BOOST_ROOT_1_72_0}
|
||||
|
||||
BOOST_UNIX_PATH=$(echo "/$BOOST_ROOT" | sed -e 's/\\/\//g' -e 's/://')
|
||||
echo "BOOST_UNIX_PATH=$BOOST_UNIX_PATH"
|
||||
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$BOOST_ROOT"
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$VCPKG_INSTALLATION_ROOT/installed/x64-windows"
|
||||
export PATH="$PATH:$DEP_DIR/bin:$DEP_DIR/lib:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin:/bin"
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DEP_DIR/bin:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DEP_DIR/lib:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
|
||||
# export OSL_CMAKE_FLAGS="$OSL_CMAKE_FLAGS -DCMAKE_TOOLCHAIN_FILE=$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
|
||||
# export OPENEXR_CMAKE_FLAGS="$OPENEXR_CMAKE_FLAGS -DCMAKE_TOOLCHAIN_FILE=$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
|
||||
|
||||
#ls -l "C:/Program Files (x86)/Microsoft Visual Studio/*/Enterprise/VC/Tools/MSVC" && true
|
||||
#ls -l "C:/Program Files (x86)/Microsoft Visual Studio" && true
|
||||
|
||||
|
||||
if [[ "$PYTHON_VERSION" == "3.9" ]] ; then
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/c/hostedtoolcache/windows/Python/3.9.13/x64"
|
||||
export Python_EXECUTABLE="/c/hostedtoolcache/windows/Python/3.9.13/x64/python3.exe"
|
||||
export PYTHONPATH=$OpenImageIO_ROOT/lib/python${PYTHON_VERSION}/site-packages
|
||||
elif [[ "$PYTHON_VERSION" == "3.12" ]] ; then
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/c/hostedtoolcache/windows/Python/3.12.10/x64"
|
||||
export Python_EXECUTABLE="/c/hostedtoolcache/windows/Python/3.12.10/x64/python3.exe"
|
||||
export PYTHONPATH=$OpenImageIO_ROOT/lib/python${PYTHON_VERSION}/site-packages
|
||||
elif [[ "$PYTHON_VERSION" == "3.14" ]] ; then
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/c/hostedtoolcache/windows/Python/3.14.3/x64"
|
||||
export Python_EXECUTABLE="/c/hostedtoolcache/windows/Python/3.14.3/x64/python3.exe"
|
||||
if [[ "$PYTHON_VERSION" == "3.6" ]] ; then
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/c/hostedtoolcache/windows/Python/3.6.8/x64"
|
||||
else
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/c/hostedtoolcache/windows/Python/3.7.9/x64"
|
||||
export Python_EXECUTABLE="/c/hostedtoolcache/windows/Python/3.7.9/x64/python.exe"
|
||||
export PYTHONPATH=$OpenImageIO_ROOT/lib/python${PYTHON_VERSION}/site-packages
|
||||
fi
|
||||
pip install numpy
|
||||
@@ -47,17 +50,28 @@ vcpkg list
|
||||
echo "---------------"
|
||||
# vcpkg update
|
||||
#
|
||||
# Example of how it's done:
|
||||
# vcpkg install tiff:x64-windows-release
|
||||
# vcpkg install pugixml:x64-windows-release
|
||||
# vcpkg install opencolorio:x64-windows-release
|
||||
# vcpkg install openimageio:x64-windows-release
|
||||
# # vcpkg install zlib:x64-windows
|
||||
vcpkg install tiff:x64-windows
|
||||
vcpkg install libpng:x64-windows
|
||||
#vcpkg install giflib:x64-windows
|
||||
#vcpkg install freetype:x64-windows
|
||||
# vcpkg install openexr:x64-windows
|
||||
# vcpkg install libjpeg-turbo:x64-windows
|
||||
|
||||
# vcpkg install libraw:x64-windows
|
||||
# vcpkg install openjpeg:x64-windows
|
||||
# vcpkg install ffmpeg:x64-windows # takes FOREVER!
|
||||
# vcpkg install webp:x64-windows # No such vcpkg package?a
|
||||
|
||||
# echo "$VCPKG_INSTALLATION_ROOT"
|
||||
# ls "$VCPKG_INSTALLATION_ROOT"
|
||||
# echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows"
|
||||
# ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows"
|
||||
# echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
# ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
# echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
# ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
|
||||
#echo "$VCPKG_INSTALLATION_ROOT"
|
||||
#ls -R "$VCPKG_INSTALLATION_ROOT" || true
|
||||
#
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH:$VCPKG_INSTALLATION_ROOT/installed/x64-windows-release"
|
||||
#
|
||||
echo "All VCPkg installs:"
|
||||
vcpkg list
|
||||
#
|
||||
@@ -75,84 +89,69 @@ export ZLIB_ROOT=$PWD/ext/dist
|
||||
src/build-scripts/build_libpng.bash
|
||||
export PNG_ROOT=$PWD/ext/dist
|
||||
|
||||
# We're currently getting libtiff from vcpkg
|
||||
#src/build-scripts/build_libtiff.bash
|
||||
#export TIFF_ROOT=$PWD/ext/dist
|
||||
|
||||
# We're currently getting jpeg from vcpkg
|
||||
# LIBJPEGTURBO_CONFIG_OPTS=-DWITH_SIMD=OFF
|
||||
# # ^^ because we're too lazy to build nasm
|
||||
# src/build-scripts/build_libjpeg-turbo.bash
|
||||
# export JPEGTurbo_ROOT=$PWD/ext/dist
|
||||
|
||||
source src/build-scripts/build_pybind11.bash
|
||||
export pybind11_ROOT=$PWD/ext/dist
|
||||
#export pybind11_ROOT=$PWD/ext/dist
|
||||
|
||||
|
||||
if [[ "$OPENEXR_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_openexr.bash
|
||||
fi
|
||||
# curl --location https://ffmpeg.zeranoe.com/builds/win64/dev/ffmpeg-4.2.1-win64-dev.zip -o ffmpeg-dev.zip
|
||||
# unzip ffmpeg-dev.zip
|
||||
# FFmpeg_ROOT=$PWD/ffmpeg-4.2.1-win64-dev
|
||||
|
||||
if [[ "$PUGIXML_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_pugixml.bash
|
||||
export OSL_CMAKE_FLAGS+=" -DUSE_EXTERNAL_PUGIXML=1 "
|
||||
fi
|
||||
echo "CMAKE_PREFIX_PATH = $CMAKE_PREFIX_PATH"
|
||||
|
||||
if [[ "$OPENCOLORIO_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_opencolorio.bash
|
||||
fi
|
||||
|
||||
cp $DEP_DIR/lib/*.lib $DEP_DIR/bin || true
|
||||
cp $DEP_DIR/bin/*.dll $DEP_DIR/lib || true
|
||||
OPENEXR_CXX_FLAGS=" /W1 /EHsc /DWIN32=1 "
|
||||
#OPENEXR_BUILD_TYPE=$CMAKE_BUILD_TYPE
|
||||
OPENEXR_INSTALL_DIR=$DEP_DIR
|
||||
source src/build-scripts/build_openexr.bash
|
||||
export PATH="$OPENEXR_INSTALL_DIR/bin:$OPENEXR_INSTALL_DIR/lib:$PATH"
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PATH
|
||||
# the above line is admittedly sketchy
|
||||
|
||||
if [[ "$OPENIMAGEIO_VERSION" != "" ]] ; then
|
||||
# There are many parts of OIIO we don't need to build for OSL's tests
|
||||
export ENABLE_iinfo=0 ENABLE_iv=0 ENABLE_igrep=0
|
||||
export ENABLE_iconvert=0 ENABLE_testtex=0
|
||||
# For speed of compiling OIIO, disable the file formats that we don't
|
||||
# need for OSL's tests
|
||||
export ENABLE_BMP=0 ENABLE_cineon=0 ENABLE_DDS=0 ENABLE_DPX=0 ENABLE_FITS=0
|
||||
export ENABLE_ICO=0 ENABLE_iff=0 ENABLE_jpeg2000=0 ENABLE_PNM=0 ENABLE_PSD=0
|
||||
export ENABLE_RLA=0 ENABLE_SGI=0 ENABLE_SOCKET=0 ENABLE_SOFTIMAGE=0
|
||||
export ENABLE_TARGA=0 ENABLE_WEBP=0 ENABLE_jpegxl=0 ENABLE_libuhdr=0
|
||||
# We don't need to run OIIO's tests
|
||||
export OPENIMAGEIO_CMAKE_FLAGS+=" -DOIIO_BUILD_TESTING=OFF -DOIIO_BUILD_TESTS=0"
|
||||
# Don't let warnings in OIIO break OSL's CI run
|
||||
export OPENIMAGEIO_CMAKE_FLAGS+=" -DSTOP_ON_WARNING=OFF"
|
||||
# export OPENIMAGEIO_CMAKE_FLAGS+=" -DUSE_OPENGL=0"
|
||||
export USE_QT=0 USE_OPENCV=0 USE_FFMPEG=0 USE_QT=0
|
||||
if [[ "${OPENIMAGEIO_UNITY:-1}" != "0" ]] ; then
|
||||
# Speed up the OIIO build by doing a "unity" build. (Note: this is
|
||||
# only a savings in CI where there are only 1-2 cores available.)
|
||||
export OPENIMAGEIO_CMAKE_FLAGS+=" -DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_MODE=BATCH"
|
||||
fi
|
||||
source src/build-scripts/build_openimageio.bash
|
||||
fi
|
||||
cp $DEP_DIR/lib/*.lib $DEP_DIR/bin
|
||||
cp $DEP_DIR/bin/*.dll $DEP_DIR/lib
|
||||
|
||||
cp $DEP_DIR/lib/*.lib $DEP_DIR/bin || true
|
||||
cp $DEP_DIR/bin/*.dll $DEP_DIR/lib || true
|
||||
echo "DEP_DIR $DEP_DIR :"
|
||||
|
||||
#OPENIMAGEIO_BRANCH=lg-cmake312
|
||||
OPENIMAGEIO_INSTALLDIR=$DEP_DIR
|
||||
OPENIMAGEIO_CMAKE_FLAGS+=" -DOIIO_BUILD_TESTS=0 -DOIIO_BUILD_TOOLS=0"
|
||||
OPENIMAGEIO_CMAKE_FLAGS+=" -DUSE_OPENGL=0 -DUSE_GENERATED_EXPORT_HEADER=1"
|
||||
OPENIMAGEIO_CMAKE_FLAGS+=" -DENABLE_DPX=0 -DENABLE_CINEON=0 -DENABLE_DDS=0"
|
||||
OPENIMAGEIO_CMAKE_FLAGS+=" -DENABLE_IFF=0 -DENABLE_ICO=0 -DENABLE_PSD=0"
|
||||
OPENIMAGEIO_CMAKE_FLAGS+=" -DENABLE_PNM=0 -DENABLE_ZFILE=0 -DENABLE_SOFTIMAGE=0"
|
||||
OPENIMAGEIO_CMAKE_FLAGS+=" -DLINKSTATIC=1 -DBUILD_SHARED_LIBS=0"
|
||||
export OPENIMAGEIO_CMAKE_FLAGS
|
||||
source src/build-scripts/build_openimageio.bash
|
||||
|
||||
|
||||
cp $DEP_DIR/lib/*.lib $DEP_DIR/bin
|
||||
cp $DEP_DIR/bin/*.dll $DEP_DIR/lib
|
||||
echo "after OIIO install, DEP_DIR $DEP_DIR :"
|
||||
ls -R -l "$DEP_DIR"
|
||||
|
||||
if [[ "$LLVM_VERSION" != "" ]] ; then
|
||||
echo "Running llvm_build.bash"
|
||||
source src/build-scripts/build_llvm.bash
|
||||
elif [[ "$LLVM_GOOGLE_DRIVE_ID" != "" ]] then
|
||||
echo "Installing LLVM from google drive"
|
||||
mkdir -p $HOME/llvm
|
||||
pushd $HOME/llvm
|
||||
#LLVM_GOOGLE_DRIVE_ID="1uy7PNVlTQ-H56unXGOS6siRWtNcdS1J7"
|
||||
LLVM_ZIP_FILENAME=llvm-build.zip
|
||||
time curl --insecure -L "https://drive.usercontent.google.com/download?id=${LLVM_GOOGLE_DRIVE_ID}&confirm=xxx" -o $LLVM_ZIP_FILENAME
|
||||
unzip $LLVM_ZIP_FILENAME > /dev/null
|
||||
export LLVM_ROOT=$PWD/llvm-build
|
||||
popd
|
||||
else
|
||||
export LLVM_ROOT=$LLVM_PATH
|
||||
fi
|
||||
echo "LLVM_ROOT = $LLVM_ROOT"
|
||||
|
||||
# export PATH="$PATH:$DEP_DIR/bin:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
export PATH="$DEP_DIR/lib:$DEP_DIR/bin:$PATH:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib:$DEP_DIR/lib:$DEP_DIR/bin"
|
||||
|
||||
|
||||
mkdir -p winflexbison
|
||||
pushd winflexbison
|
||||
WFBZIP=win_flex_bison-2.5.25.zip
|
||||
curl --location https://github.com/lexxmark/winflexbison/releases/download/v2.5.25/$WFBZIP -o $WFBZIP
|
||||
unzip $WFBZIP
|
||||
export FLEX_ROOT=$PWD
|
||||
export BISON_ROOT=$PWD
|
||||
ls .
|
||||
popd
|
||||
# source src/build-scripts/build_openexr.bash
|
||||
# export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$ILMBASE_ROOT;$OPENEXR_ROOT"
|
||||
# source src/build-scripts/build_opencolorio.bash
|
||||
|
||||
|
||||
# For CI on Windows, prefer to pick up static libs where possible
|
||||
OSL_CMAKE_FLAGS="$OSL_CMAKE_FLAGS -DLINKSTATIC=1 -DBUILD_SHARED_LIBS=0"
|
||||
|
||||
# Save the env for use by other stages
|
||||
src/build-scripts/save-env.bash
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
global: *OSL*; *osl*imageio*; *osl_input_extensions; PyInit*;
|
||||
global: *OSL*; test_shade; *osl*imageio*; *osl_input_extensions;
|
||||
local: osl_*; *pvt*; *;
|
||||
};
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# This script, which assumes it is running on a Mac OSX with Homebrew
|
||||
# This script, which assumes it is runnign on a Mac OSX with Homebrew
|
||||
# installed, does a "brew install" in all packages reasonably needed by
|
||||
# OSL and its dependencies.
|
||||
|
||||
@@ -19,68 +19,48 @@ if [[ `which brew` == "" ]] ; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# set -ex
|
||||
|
||||
if [[ "${DO_BREW_UPDATE:=0}" != "0" ]] ; then
|
||||
brew update >/dev/null
|
||||
fi
|
||||
#brew update >/dev/null
|
||||
echo ""
|
||||
echo "Before my brew installs:"
|
||||
brew list --versions
|
||||
|
||||
if [[ "$OSL_BREW_INSTALL_PACKAGES" == "" ]] ; then
|
||||
OSL_BREW_INSTALL_PACKAGES=" \
|
||||
bison \
|
||||
ccache \
|
||||
expat \
|
||||
flex \
|
||||
fmt \
|
||||
imath \
|
||||
llvm${LLVMBREWVER} \
|
||||
ninja \
|
||||
numpy \
|
||||
opencolorio \
|
||||
openexr \
|
||||
partio \
|
||||
ptex \
|
||||
pugixml \
|
||||
pybind11 \
|
||||
robin-map \
|
||||
tbb \
|
||||
"
|
||||
if [[ "${USE_OPENVDB:=1}" != "0" ]] && [[ "${INSTALL_OPENVDB:=1}" != "0" ]] ; then
|
||||
OSL_BREW_INSTALL_PACKAGES+=" openvdb"
|
||||
fi
|
||||
if [[ "${USE_QT:=1}" != "0" ]] && [[ "${INSTALL_QT:=1}" != "0" ]] ; then
|
||||
OSL_BREW_INSTALL_PACKAGES+=" qt${QT_VERSION}"
|
||||
fi
|
||||
if [[ "${EXTRA_BREW_PACKAGES}" != "" ]] ; then
|
||||
brew install --display-times -q ${EXTRA_BREW_PACKAGES}
|
||||
fi
|
||||
fi
|
||||
brew install --display-times -q $OSL_BREW_INSTALL_PACKAGES $OSL_BREW_EXTRA_INSTALL_PACKAGES || true
|
||||
brew install --display-times -q gcc ccache cmake ninja boost || true
|
||||
brew link --overwrite gcc
|
||||
brew unlink python@2.7 || true
|
||||
brew unlink python@3.9 || true
|
||||
brew unlink python@3.8 || true
|
||||
brew link --overwrite --force python@${PYTHON_VERSION} || true
|
||||
brew upgrade --display-times -q cmake || true
|
||||
brew install --display-times -q libtiff ilmbase openexr
|
||||
brew install --display-times -q libpng giflib webp jpeg-turbo freetype
|
||||
brew install --display-times -q opencolorio partio pugixml
|
||||
brew install --display-times -q pybind11 numpy || true
|
||||
brew install --display-times -q tbb || true
|
||||
brew install --display-times -q flex bison
|
||||
brew install --display-times -q llvm${LLVMBREWVER}
|
||||
brew install --display-times -q qt
|
||||
|
||||
echo ""
|
||||
echo "After brew installs:"
|
||||
brew list --versions
|
||||
|
||||
# Needed on some systems
|
||||
pip${PYTHON_VERSION} install numpy || true
|
||||
if [[ $PYTHON_VERSION != "2.7" ]] ; then
|
||||
pip3 install numpy
|
||||
else
|
||||
pip install numpy
|
||||
fi
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export PATH=${HOMEBREW_PREFIX}/opt/qt5/bin:$PATH
|
||||
export PATH=${HOMEBREW_PREFIX}/opt/python/libexec/bin:$PATH
|
||||
export PYTHONPATH=${HOMEBREW_PREFIX}/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
|
||||
echo "PYTHONPATH=$PYTHONPATH"
|
||||
ls ${HOMEBREW_PREFIX}/lib/python${PYTHON_VERSION}
|
||||
# export PATH=${HOMEBREW_PREFIX}/opt/llvm${LLVMBREWVER}/bin:$PATH
|
||||
export LLVM_DIRECTORY=${HOMEBREW_PREFIX}/opt/llvm${LLVMBREWVER}
|
||||
export LLVM_ROOT=${HOMEBREW_PREFIX}/opt/llvm${LLVMBREWVER}
|
||||
export PATH=$LLVM_ROOT/bin:$PATH
|
||||
echo LLVM_ROOT=${LLVM_ROOT}
|
||||
# ls $LLVM_ROOT
|
||||
export PATH=${HOMEBREW_PREFIX}/opt/flex/bin:${HOMEBREW_PREFIX}/opt/bison/bin:$PATH
|
||||
export PATH=/usr/local/opt/qt5/bin:$PATH
|
||||
export PATH=/usr/local/opt/python/libexec/bin:$PATH
|
||||
export PYTHONPATH=/usr/local/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
|
||||
export PATH=/usr/local/opt/llvm${LLVMBREWVER}/bin:$PATH
|
||||
export LLVM_DIRECTORY=/usr/local/opt/llvm${LLVMBREWVER}
|
||||
export LLVM_ROOT=/usr/local/opt/llvm${LLVMBREWVER}
|
||||
export PATH=/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH
|
||||
|
||||
# Save the env for use by other stages
|
||||
src/build-scripts/save-env.bash
|
||||
|
||||
@@ -1,190 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2018 Nico Weber
|
||||
#
|
||||
# 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.
|
||||
|
||||
"""Converts one (or several) .ninja_log files into chrome's about:tracing format.
|
||||
|
||||
If clang -ftime-trace .json files are found adjacent to generated files they
|
||||
are embedded.
|
||||
|
||||
Usage:
|
||||
ninja -C $BUILDDIR
|
||||
ninjatracing $BUILDDIR/.ninja_log > trace.json
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import optparse
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
class Target:
|
||||
"""Represents a single line read for a .ninja_log file. Start and end times
|
||||
are milliseconds."""
|
||||
def __init__(self, start, end):
|
||||
self.start = int(start)
|
||||
self.end = int(end)
|
||||
self.targets = []
|
||||
|
||||
|
||||
def read_targets(log, show_all):
|
||||
"""Reads all targets from .ninja_log file |log_file|, sorted by start
|
||||
time"""
|
||||
header = log.readline()
|
||||
m = re.search(r'^# ninja log v(\d+)\n$', header)
|
||||
assert m, "unrecognized ninja log version %r" % header
|
||||
version = int(m.group(1))
|
||||
assert 5 <= version <= 6, "unsupported ninja log version %d" % version
|
||||
if version == 6:
|
||||
# Skip header line
|
||||
next(log)
|
||||
|
||||
targets = {}
|
||||
last_end_seen = 0
|
||||
for line in log:
|
||||
if line.startswith('#'):
|
||||
continue
|
||||
start, end, _, name, cmdhash = line.strip().split('\t') # Ignore restat.
|
||||
if not show_all and int(end) < last_end_seen:
|
||||
# An earlier time stamp means that this step is the first in a new
|
||||
# build, possibly an incremental build. Throw away the previous data
|
||||
# so that this new build will be displayed independently.
|
||||
targets = {}
|
||||
last_end_seen = int(end)
|
||||
targets.setdefault(cmdhash, Target(start, end)).targets.append(name)
|
||||
return sorted(targets.values(), key=lambda job: job.end, reverse=True)
|
||||
|
||||
|
||||
class Threads:
|
||||
"""Tries to reconstruct the parallelism from a .ninja_log"""
|
||||
def __init__(self):
|
||||
self.workers = [] # Maps thread id to time that thread is occupied for.
|
||||
|
||||
def alloc(self, target):
|
||||
"""Places target in an available thread, or adds a new thread."""
|
||||
for worker in range(len(self.workers)):
|
||||
if self.workers[worker] >= target.end:
|
||||
self.workers[worker] = target.start
|
||||
return worker
|
||||
self.workers.append(target.start)
|
||||
return len(self.workers) - 1
|
||||
|
||||
|
||||
def read_events(trace, options):
|
||||
"""Reads all events from time-trace json file |trace|."""
|
||||
trace_data = json.load(trace)
|
||||
|
||||
def include_event(event, options):
|
||||
"""Only include events if they are complete events, are longer than
|
||||
granularity, and are not totals."""
|
||||
return ((event['ph'] == 'X') and
|
||||
(event['dur'] >= options['granularity']) and
|
||||
(not event['name'].startswith('Total')))
|
||||
|
||||
return [x for x in trace_data['traceEvents'] if include_event(x, options)]
|
||||
|
||||
|
||||
def trace_to_dicts(target, trace, options, pid, tid):
|
||||
"""Read a file-like object |trace| containing -ftime-trace data and yields
|
||||
about:tracing dict per eligible event in that log."""
|
||||
ninja_time = (target.end - target.start) * 1000
|
||||
for event in read_events(trace, options):
|
||||
# Check if any event duration is greater than the duration from ninja.
|
||||
if event['dur'] > ninja_time:
|
||||
print("Inconsistent timing found (clang time > ninja time). Please"
|
||||
" ensure that timings are from consistent builds.")
|
||||
sys.exit(1)
|
||||
|
||||
# Set tid and pid from ninja log.
|
||||
event['pid'] = pid
|
||||
event['tid'] = tid
|
||||
|
||||
# Offset trace time stamp by ninja start time.
|
||||
event['ts'] += (target.start * 1000)
|
||||
|
||||
yield event
|
||||
|
||||
|
||||
def embed_time_trace(ninja_log_dir, target, pid, tid, options):
|
||||
"""Produce time trace output for the specified ninja target. Expects
|
||||
time-trace file to be in .json file named based on .o file."""
|
||||
for t in target.targets:
|
||||
o_path = os.path.join(ninja_log_dir, t)
|
||||
json_trace_path = os.path.splitext(o_path)[0] + '.json'
|
||||
try:
|
||||
with open(json_trace_path, 'r') as trace:
|
||||
for time_trace_event in trace_to_dicts(target, trace, options,
|
||||
pid, tid):
|
||||
yield time_trace_event
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
|
||||
def log_to_dicts(log, pid, options):
|
||||
"""Reads a file-like object |log| containing a .ninja_log, and yields one
|
||||
about:tracing dict per command found in the log."""
|
||||
threads = Threads()
|
||||
for target in read_targets(log, options['showall']):
|
||||
tid = threads.alloc(target)
|
||||
|
||||
yield {
|
||||
'name': '%0s' % ', '.join(target.targets), 'cat': 'targets',
|
||||
'ph': 'X', 'ts': (target.start * 1000),
|
||||
'dur': ((target.end - target.start) * 1000),
|
||||
'pid': pid, 'tid': tid, 'args': {},
|
||||
}
|
||||
if options.get('embed_time_trace', False):
|
||||
# Add time-trace information into the ninja trace.
|
||||
try:
|
||||
ninja_log_dir = os.path.dirname(log.name)
|
||||
except AttributeError:
|
||||
continue
|
||||
for time_trace in embed_time_trace(ninja_log_dir, target, pid,
|
||||
tid, options):
|
||||
yield time_trace
|
||||
|
||||
|
||||
def main(argv):
|
||||
usage = __doc__
|
||||
parser = optparse.OptionParser(usage)
|
||||
parser.add_option('-a', '--showall', action='store_true', dest='showall',
|
||||
default=False,
|
||||
help='report on last build step for all outputs. Default '
|
||||
'is to report just on the last (possibly incremental) '
|
||||
'build')
|
||||
parser.add_option('-g', '--granularity', type='int', default=50000,
|
||||
dest='granularity',
|
||||
help='minimum length time-trace event to embed in '
|
||||
'microseconds. Default: %default')
|
||||
parser.add_option('-e', '--embed-time-trace', action='store_true',
|
||||
default=False, dest='embed_time_trace',
|
||||
help='embed clang -ftime-trace json file found adjacent '
|
||||
'to a target file')
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
if len(args) == 0:
|
||||
print('Must specify at least one .ninja_log file')
|
||||
parser.print_help()
|
||||
return 1
|
||||
|
||||
entries = []
|
||||
for pid, log_file in enumerate(args):
|
||||
with open(log_file, 'r') as log:
|
||||
entries += list(log_to_dicts(log, pid, vars(options)))
|
||||
json.dump(entries, sys.stdout)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(sys.argv[1:]))
|
||||
@@ -1,4 +1,5 @@
|
||||
# Small leaks that make CI fail, suppress until cause is identified.
|
||||
leak:__cxa_thread_atexit
|
||||
leak:std::string::_Rep::_S_create
|
||||
leak:tsl::detail_robin_hash::robin_hash
|
||||
leak:Imf_2_2
|
||||
leak:Imf_2_3
|
||||
leak:Imf_2_4
|
||||
leak:libIlmImf
|
||||
leak:oslgram.y
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
[oneAPI]
|
||||
name=Intel® oneAPI repository
|
||||
baseurl=https://yum.repos.intel.com/oneapi
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
repo_gpgcheck=1
|
||||
gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
|
||||
@@ -1,3 +0,0 @@
|
||||
default=exclude
|
||||
compiler=2022.1.0
|
||||
tbb=2021.6.0
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Open a PTX file and:
|
||||
# * add the `.visible` directive to all functions
|
||||
# * add the `.visible` directive to global/constant variables
|
||||
|
||||
import re
|
||||
import sys
|
||||
|
||||
in_name = sys.argv[1]
|
||||
out_name = sys.argv[2]
|
||||
ptx = ""
|
||||
with open(in_name, 'r') as ptx_in:
|
||||
ptx = ptx_in.read()
|
||||
ptx = re.sub(r'(?m)^(\.const .align)', ".visible .const .align", ptx)
|
||||
ptx = re.sub(r'(?m)^(\.global .align)', ".visible .global .align", ptx)
|
||||
ptx = re.sub(r'(?m)^(\.func)', ".visible .func", ptx)
|
||||
with open(out_name, 'w') as ptx_out:
|
||||
ptx_out.write(ptx)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user