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 |
@@ -4,6 +4,7 @@
|
||||
|
||||
Language: Cpp
|
||||
BasedOnStyle: WebKit
|
||||
SpaceBeforeParens: ControlStatements
|
||||
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
|
||||
@@ -6,44 +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
|
||||
90d94caecbb97141c9df63abc634be6e8394b6c3
|
||||
|
||||
@@ -15,9 +15,8 @@
|
||||
<!-- Put an 'x' in the boxes as you complete the checklist items -->
|
||||
|
||||
- [ ] 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. If I haven't
|
||||
already run clang-format v17 before submitting, I definitely will look at
|
||||
the CI test that runs clang-format and fix anything that it highlights as
|
||||
being nonconforming.
|
||||
- [ ] My code follows the prevailing code style of this project.
|
||||
|
||||
|
||||
@@ -1,134 +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
|
||||
- '*analysis*'
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- '**.rst'
|
||||
- '**.tex'
|
||||
# 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.repository == 'AcademySoftwareFoundation/OpenShadingLanguage'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- desc: sonar gcc9/C++14 llvm13 py3.9 boost1.76 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@c3f1317a9e7b1ef106c153ac8c0f00fed3ddbc0d # v3.0.4
|
||||
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,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/openshadinglanguage/Icon/Color/openshadinglanguage-Icon-Color.png"
|
||||
uses: jmertic/slack-release-notifier@main
|
||||
@@ -1,75 +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.repository == 'AcademySoftwareFoundation/OpenShadingLanguage'
|
||||
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
|
||||
@@ -8,6 +8,3 @@ build
|
||||
\#*\#
|
||||
*.pyc
|
||||
*.log
|
||||
.vscode
|
||||
.envrc
|
||||
|
||||
|
||||
@@ -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
|
||||
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 121 KiB |
|
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.
|
||||
|
||||
@@ -1,715 +1,6 @@
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
<!-- Copyright Contributors to the Open Shading Language Project. -->
|
||||
|
||||
Release 1.13.11.0 -- 1 Sep 2024 (compared to 1.13.10.0)
|
||||
---------------------------------------------------------
|
||||
- *fix/batched*: Assume BatchedRendererServices texture derivatives are in st space. [#1828](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1828) (by sfriedmapixar) (1.13.10.0)
|
||||
- *fix*: Make backfacing shadeop indicate backfacing shader-global is needed [#1827](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1827) (by sfriedmapixar) (1.13.10.0)
|
||||
- *deps*: Handle various OpenImageIO deprecations and changes in the run-up to OIIO 3.0 [#1834](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1834) [#1806](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1806) [#1838](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1838) [#1842](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1842) [#1850](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1850) (1.13.10.0)
|
||||
- *deps*: Adjust to OIIO change to IC/TS API [#1848](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1848) (1.13.10.0)
|
||||
- *deps*: Llvm 18 compat issue - include libclangAPINotes [#1812](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1812) (1.13.10.0)
|
||||
- *deps*: Make finding bison work better on Apple Silicon Macs + homebrew [#1822](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1822) (1.13.10.0)
|
||||
- *ci*: Mods to CI to deal with OIIO master raising dependency mins [#1833](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1833) (1.13.10.0)
|
||||
- *ci*: Deal with CentOS 7 EOL and disappearance of yum mirrors [#1839](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1839) (1.13.10.0)
|
||||
- *ci*: Fix GHA CI after they upgraded nodejs [#1837](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1837) (1.13.10.0)
|
||||
- *admin*: Change release notice icon to use the icon vs the normal logo so it shows up better [#1777](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1777) (by John Mertic) (1.13.10.0)
|
||||
|
||||
|
||||
Release 1.13.10.0 -- 1 June 2024 (compared to 1.13.9.0)
|
||||
--------------------------------------------------------
|
||||
- *testrender*: Implement new Oren-Nayar model from OpenPBR [#1817](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1817) (by Christopher Kulla)
|
||||
- *docs*: Fix outdated or wrong repo URLs [#1811](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1811)
|
||||
|
||||
|
||||
Release 1.13.9.0 -- 1 May 2024 (compared to 1.13.8.0)
|
||||
--------------------------------------------------------
|
||||
- *deps*: Support for LLVM-18 [#1773](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1773) (by مهدي شينون (Mehdi Chinoune) [#1803](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1803) (by Larry Gritz)
|
||||
- *fix*: Make isconnected() work with downstream renderer "connections." [#1782](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1782) (by sfriedmapixar)
|
||||
- *cleanup*: Change OSL_CONSTEXPR14 to constexpr [#1805](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1805)
|
||||
- *internals build*: Fix ifdef typo [#1804](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1804)
|
||||
- *build*: Propagate cpp version [#1797](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1797)
|
||||
- *build*: Print commit hash of locally built dependencies [#1798](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1798)
|
||||
- *ci*: Lock down to OIIO 2.5 for icc tests [#1799](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1799)
|
||||
- *ci*: Suppress leak sanitizer warnings about internals of robin_hash [#1807](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1807)
|
||||
- *docs*: More detail about supported platforms in INSTALL.md [#1796](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1796)
|
||||
|
||||
|
||||
Release 1.13.8.0 -- 1 Apr 2024 (compared to 1.13.7.0)
|
||||
--------------------------------------------------------
|
||||
* *fix(batched)*: Codegen bug for compref with varying index for batched shading [#1776](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1776) (by Alex Wells)
|
||||
* *fix*: Calculatenormal needs fliphandedness [#1783](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1783) (by sfriedmapixar)
|
||||
* *fix*: Print closure missing error message at compile time instead of run time. [#1781](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1781) (by sfriedmapixar)
|
||||
* *int*: Change long-deprecated OIIO macro to new one [#1788](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1788)
|
||||
* *ci*: Fix broken Macos-13 CI [#1780](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1780)
|
||||
|
||||
Release 1.13.7.0 -- 1 Mar 2024 (compared to 1.13.6.1)
|
||||
--------------------------------------------------------
|
||||
* *fix*: Mute partio error prints [#1774](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1774) (by olegul)
|
||||
* *ci*: Test with Mac ARM runner [#1770](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1770)
|
||||
* *docs*: Fix links to RTD docs from github landing page [#1768](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1768)
|
||||
* *admin*: Switch release announcement workflow to jmertic's awesome action [#1766](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1766)
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
Release 1.13 -- Feb 1, 2024 (compared to 1.12)
|
||||
===============================================
|
||||
- beta 1: December 20, 2023
|
||||
- release v1.13.6.1: Feb 1, 2024
|
||||
|
||||
### New minimum dependencies and compatibility changes:
|
||||
|
||||
* For GPU/OptiX mode, OptiX 6.0 support has been removed. For GPU rendering
|
||||
with OptiX, a minimum of OptiX 7.0 is required, and the Cuda minimum has
|
||||
been raised to 9.0 [#1737](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1737)
|
||||
* The minimum version OpenImageIO has been raised from 2.2 to 2.4. [#1591](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1591) [#1722](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1722)
|
||||
* The minimum CMake dependency has been raised from 3.12 to 3.15
|
||||
[#1724](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1724) (1.13.5.0)
|
||||
* The minimum Imath/OpenEXR has been raised from 2.3 to 2.4. (Note: OSL 1.13
|
||||
is probably the last major release family that will support Imath/OpenEXR
|
||||
2.x.)
|
||||
|
||||
### OSL Language and oslc compiler:
|
||||
|
||||
* There have been no substantive changes to the OSL language in this release.
|
||||
|
||||
### ⛰️ API changes, new options, new ShadingSystem features (for renderer writers):
|
||||
|
||||
* A new `shadingStateUniform` pointer field was added to ShaderGlobals for
|
||||
planned future expansion and improved GPU support. #1585 (1.13.1.0)
|
||||
* Adding relaxed type-equivalency to ReParameter() [#1639](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1639) (by cmstein) (1.13.2.1)
|
||||
* Expose llvm groupdata size as a shadergroup attribute
|
||||
[#1642](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1642) (by Chris Hellmuth) (1.13.4.0)
|
||||
* RendererServices API for letting get_texture_handle consider colorspace
|
||||
[#1641](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1641) (1.13.4.0)
|
||||
* Make "compile_report" attribute an int instead of just 0/1. Passing 1 makes
|
||||
a brief report, values >1 are more verbose. (Zero still prints no report.)
|
||||
[#1654](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1654) (1.13.4.0)
|
||||
* Switch `lockgeom` to `interpolated` and `interactive`. The `lockgeom=0`
|
||||
was confusing. Now we use `interpolated=1` to mean "don't optimize it away
|
||||
because it might be interpolated across the geometry and thus won't have
|
||||
the same value at all points being shaded," and the subtly different
|
||||
`interactive=1` to mean "don't optimize it away because although it will
|
||||
always take on the same value at all points at the same time, the user
|
||||
might want to interactively adjust the value and we don't want to have
|
||||
to recompile the shader group if that happens."
|
||||
[#1662](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1662) (1.13.4.0)
|
||||
* Add type information for needed attributes. [#1650](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1650) (by Curtis Black) (1.13.4.0)
|
||||
* Add API for building attribute getter free functions.
|
||||
[#1704](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1704) (by Curtis Black) (1.13.5.0)
|
||||
* Rs fmt specification - Journaling Algorithm for error, warning, fprintf
|
||||
[#1702](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1702) (by Steena Monteiro) [#1711](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1711) [#1715](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1715) (1.13.5.0)
|
||||
|
||||
### 🚀 SIMD batched shading mode
|
||||
|
||||
* Fix some array overruns (asymptomatic, but still potentially buggy) in
|
||||
common_ancestor_between. #1577 (1.13.0.2)
|
||||
* Fix issue with closure keyword parameters. #1620 (1.13.2.0/1.12.8.0)
|
||||
* Fix crash when adding a default initialized closure. #1624
|
||||
(1.13.2.0/1.12.8.0)
|
||||
* Fix support for closures with array types. #1630 (1.13.2.0/1.12.8.0)
|
||||
* Fix bug with masked wide llvm_gen_closure() [#1637](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1637) (by danieldresser-ie) (1.13.2.1)
|
||||
* Fix Force LLVM Boolean [#1717](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1717) (by Alex Wells)
|
||||
* Batched pointcloud if "index" is not passed [#1753](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1753) (by Alex Wells)
|
||||
|
||||
### 🚀 OptiX GPU rendering
|
||||
|
||||
* OptiX 6.0 support has been removed. For GPU rendering with OptiX, a minimum
|
||||
of OptiX 7.0 is required.
|
||||
* Big overhaul/simplification of how strings are represented on the GPU: the
|
||||
extra level of indirection to global variables is removed, and strings are
|
||||
simply represented in ordinary variables as the hash of their characters.
|
||||
#1531 (1.13.0.0) #1553 (1.13.0.1)
|
||||
* Better PTX cache hit rate by eliminating several sources of not being
|
||||
strictly deterministic in the PTX text we were generating. #1566 #1570
|
||||
(1.13.0.1)
|
||||
* Fix PTX symbol visibility issues. #1609 (1.13.2.0)
|
||||
* Hide more code that is only used for OptiX mode, when OptiX is disabled.
|
||||
#1608 (1.13.2.0)
|
||||
* Remove dependency on OptiX SDK for building core OSL with OptiX support. You
|
||||
can now build OSL with OptiX support enabled even if you don't have the
|
||||
OptiX SDK headers present at build time. But you will still need them to
|
||||
build your OptiX-based application that uses OSL for GPU rendering. #1627
|
||||
(1.13.2.0/1.12.8.0)
|
||||
* GPU/OptiX support of ReParameter [#1686](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1686) (1.13.4.0)
|
||||
* Fix userdata derivatives for interpolated params on GPU [#1685](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1685) (by Pascal Lecocq) (1.13.4.0)
|
||||
* Enable userdata derivatives for interpolated params on GPU
|
||||
[#1657](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1657) (by Chris Hellmuth) (1.13.4.0)
|
||||
* Move qualifying GroupData params onto stack for higher performance.
|
||||
[#1710](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1710) (by Chris Hellmuth) (1.13.5.0)
|
||||
* Handle mixed string casting that plagues optix codegen [#1718](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1718) (1.13.5.0)
|
||||
* Add missing members to ShaderGlobals in rend_lib.h [#1721](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1721) (by Tim Grant) (1.13.5.0)
|
||||
* OptiX direct callable API that owns groupdata buffer
|
||||
[#1683](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1683) (by Chris Hellmuth) (1.13.5.0)
|
||||
* OptiX PTX pipeline overhaul [#1680](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1680) (by Tim Grant) (1.13.5.0)
|
||||
* Perf: Don't insert redundant run layer calls inside a basic block
|
||||
[#1665](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1665) [#1669](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1669) [#1672](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1672) (by Chris Hellmuth) (1.13.4.0)
|
||||
* Fix NVPTX TargetMachine leak, etc. [#1763](https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/1763) (by Tim Grant)
|
||||
|
||||
### 🐛/🔧 Internals: fixes, improvements, and developer concerns
|
||||
|
||||
* Fix memory leak in oslc ASTvariable_declaration. #1576 (1.13.0.2)
|
||||
* Fix memory leaks in LPE code in error conditions. #1593 #1594 (1.13.0.3)
|
||||
* Fix mismatched strides when calling OCIO for transformc with derivs [#1646](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1646) (1.13.4.0)
|
||||
* Set up ray types for testrender [#1648](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1648) (1.13.4.0)
|
||||
* Fix userdata binding corner case [#1673](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1673) (by Alejandro Conty) (1.13.4.0)
|
||||
* Fix constant float values being converted to ints [#1674](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1674) (by Declan Russell) (1.13.4.0)
|
||||
* Don't try to ReParameter symbols not in the group [#1693](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1693) (by Alejandro Conty) (1.13.5.0)
|
||||
* Have ReParameter only copy data when it changes [#1698](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1698) (1.13.5.0)
|
||||
* Avoid deprecated OSLQuery ctr in test example [#1699](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1699) (1.13.5.0)
|
||||
* Zero derivs for interactive params when needed [#1700](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1700) (by Alejandro Conty) (1.13.5.0)
|
||||
* oslc bug fix: shader params whose default values involve "init ops" could be
|
||||
incorrectly initialized if their values came from instance parameters set to
|
||||
zero. #1578 (1.13.0.2)
|
||||
* oslc: Add missing `fmod()` variants [#1643](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1643) (1.13.4.0)
|
||||
* Simple constant folding of binary expressions now happen on the oslc side
|
||||
[#1653](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1653) (1.13.4.0)
|
||||
* platform.h:
|
||||
* New `OSL_ALLOCA` macro to allocate on the stack. #1589 (1.13.0.3)
|
||||
* Define OSL::bitcast utility. #1610 (1.13.2.0)
|
||||
* Make sure that std::hash is defined for ustring and ustringhash. #1599
|
||||
(1.13.1.1)
|
||||
* Deprecate LLVMUtil::internalize_module_functions. #1606 (1.13.1.0)
|
||||
* Work toward always representing strings in shaders as ustringhash rather
|
||||
than ustring: phase 1 #1603 phase2 #1612 (1.13.2.0) [#1726](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1726) (1.13.5.0)
|
||||
* Remove unnecessary setting of locale::global [#1636](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1636) (by danieldresser-ie) (1.13.2.1)
|
||||
* Fully define bitcast template [#1635](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1635) (1.13.2.1)
|
||||
* Fix for ReParameter corner case [#1670](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1670) (by cmstein) (1.13.4.0)
|
||||
* Switch deprecated oiio simd names to modern [#1679](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1679) (1.13.4.0)
|
||||
* Give ShadingSystemImpl a handy use_optix() method [#1682](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1682) (1.13.4.0)
|
||||
* Fix default fmt logic changing in latest openimageio release [#1725](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1725) (1.13.5.0)
|
||||
* The recently added SS::find_symloc can have const args [#1723](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1723) (1.13.5.0)
|
||||
* SymOverrideInfo bitfields should be the same type [#1745](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1745)
|
||||
* Fix wrong offset of MxSheen param [#1751](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1751) (by Rasmus Bonnedal)
|
||||
* Make get_texture_info robust to empty shaderglobals param [#1731](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1731)
|
||||
|
||||
### 🏗 Build/test/CI and platform ports
|
||||
|
||||
* CMake build system and scripts:
|
||||
* The version number is now a cache variable, and so can be overridden at
|
||||
build time using `-DOSL_VERSION=...`. Use with extreme caution! #1579
|
||||
(1.13.0.2) Revised again to reduce changes of user error in #1617
|
||||
(1.13.2.0/1.12.7.1)
|
||||
* Add clangSupport library as dependency to fix linker error on some
|
||||
platforms. #1613 (1.13.2.0/1.12.7.1)
|
||||
* Fix incorrect CMake variable name to control symbol visibility
|
||||
[#1681](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1681) (1.13.4.0)
|
||||
* Change cmake option `USE_OPTIX` -> `OSL_USE_OPTIX` [#1668](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1668) (1.13.4.0)
|
||||
* Fix duplicate osl lexing symbols when building as static libraries
|
||||
[#1709](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1709) (by Brecht Van Lommel) (1.13.5.0)
|
||||
* Better cmake verbose behavior [#1752](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1752)
|
||||
* Dependency version support:
|
||||
* Fix some issues that came up with the new icx 2022.0 compiler. #1601
|
||||
(1.13.1.0)
|
||||
* Test against OpenColorIO 2.2. #1616 (1.13.2.0/1.12.7.1)
|
||||
* Proper warnings about LLVM 16 [#1658](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1658) (1.13.4.0)
|
||||
* Fix cuda compilation flags for LLVM 15 [#1659](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1659) (1.13.4.0)
|
||||
* Verify that OSL can build with clang16 [#1664](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1664) (1.13.4.0)
|
||||
* Be more careful about paths to look for llvm [#1656](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1656) (1.13.4.0)
|
||||
* Qt6 compatibility [#1655](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1655) (1.13.4.0)
|
||||
* Fix warnings about Qt compilation and enums [#1661](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1661) (1.13.4.0)
|
||||
* Changes to support fmt 10.0 [#1691](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1691) (1.13.5.0)
|
||||
* Raise OpenEXR minimum to 2.4 [#1734](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1734)
|
||||
* Fix Partio build errors on pointcloud functions for MSVC [#1757](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1757) (by Alex Wells)
|
||||
* Bump Cuda minimum to 9.0 [#1737](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1737)
|
||||
* LLVM 16 and 17 support: LLVM opaque pointers support [#1728](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1728),
|
||||
LLVM new pass manager support [#1729](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1729),
|
||||
finish LLVM 16 and 17 support [#1730](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1730) (all by Brecht Van Lommel)
|
||||
* Testing and Continuous integration (CI) systems:
|
||||
* Dynamic analysis using address and leak sanitizers. #1581 (1.13.0.3)
|
||||
* `testshade --help` now prints TextureSystem options and all hardware
|
||||
information. #1584 (1.13.0.3)
|
||||
* Improvements to SonarCloud and coverage analysis. #1596 (1.13.0.3)
|
||||
#1607 (1.13.1.0)
|
||||
* Disabling the dso version of testshade for the coverage analysis test.
|
||||
#1604 (1.13.1.0)
|
||||
* Be sure to run pointcloud tests when partio is found. #1611 (1.13.2.0)
|
||||
* testshade: better testing of all closure parameter types. #1621
|
||||
(1.13.2.0/1.12.8.0)
|
||||
* Don't use the cached background map on the first bounce
|
||||
[#1649](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1649) (by Christopher Kulla) (1.13.4.0)
|
||||
* Fix builds when USE_PYTHON=OFF [#1675](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1675) (by Declan Russell) (1.13.4.0)
|
||||
* Remove SonarCloud cache setup as it is now offered by default
|
||||
[#1660](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1660) (by Massimo Paladin) (1.13.4.0)
|
||||
* *ci*: Simplify build_llvm.bash script [#1703](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1703) (1.13.5.0)
|
||||
* Test interactive parameter initialization in optix testrender [#1687](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1687) (by Chris Hellmuth) (1.13.5.0)
|
||||
* Fix GPU job not actually enabling OptiX [#1738](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1738) (by Brecht Van Lommel)
|
||||
* Fix python-oslquery test failure on macOS [#1739](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1739) (by Brecht Van Lommel)
|
||||
* Disable MacOS-11 CI [#1746](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1746)
|
||||
* Skip analysis and scorecard workflows on push if only docs changed [#1744](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1744)
|
||||
* For clarity, use the term 'runner' instead of 'os' [#1743](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1743)
|
||||
* Test ABI compliance [#1748](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1748)
|
||||
* Fix tests passing when test commands fail [#1733](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1733) (by Brecht Van Lommel)
|
||||
* *ci*: Test against LLVM 17 [#1760](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1760)
|
||||
* Platform support:
|
||||
* Include `immintrin.h` only when needed. #1605 (1.13.1.0)
|
||||
* Changed snprintf formatting to satisfy some compilers.
|
||||
[#1640](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1640) (by pellerington) (1.13.4.0)
|
||||
* Fix some windows GPU build errors [#1638](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1638) (by Declan Russell) (1.13.4.0)
|
||||
* Fix for Apple clang 14+ warnings [#1697](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1697) (1.13.5.0)
|
||||
* Fix struct align/pack for MSVC [#1754](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1754) (by Rasmus Bonnedal)
|
||||
* Refactor icc/icx specific pragma macros [#1756](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1756) (by Alex Wells)
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
* First stab at ReadTheDocs -- new [Experimental OSL Documentation on
|
||||
ReadTheDocs](https://open-shading-language.readthedocs.io/)
|
||||
is still a little rough, but eventually will be our primary documentation.
|
||||
[#1736](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1736)
|
||||
* `doc/RELEASING.md` documents our release process and versioning policies.
|
||||
#1572 (1.13.0.2)
|
||||
* Improve documentation of `trace` function [#1671](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1671) (by AidanWelch) (1.13.4.0)
|
||||
* Update CONTRIBUTING [#1689](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1689) (1.13.5.0)
|
||||
* Update logos [#1705](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1705), Move logos and add an icon-only logo [#1707](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1707) (1.13.5.0)
|
||||
|
||||
### 🏢 Project Administration
|
||||
|
||||
* Alert slack "release-announcements" channel upon OSL release [#1740](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1740) [#1749](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1749)
|
||||
* Update pull request template [#1741](https://github.com/AcademySoftwareFoundation/OpenShadingLangauge/pull/1741)
|
||||
* Account for duplicate emails in the .mailmap [#1759](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/pull/1759)
|
||||
|
||||
|
||||
---
|
||||
---
|
||||
---
|
||||
|
||||
|
||||
Release 1.12.13.0 -- 1 July 2023 (compared to 1.12.12.0)
|
||||
--------------------------------------------------------
|
||||
- *fix*: Fix constant float values being converted to ints
|
||||
[#1674](https://github.com/OpenShadingLanguage/oiio/pull/1674) (by Declan Russell)
|
||||
- *build*: Fix builds when USE_PYTHON=OFF
|
||||
[#1675](https://github.com/OpenShadingLanguage/oiio/pull/1675) (by Declan Russell)
|
||||
- *build*: Changes to support fmt 10.0
|
||||
[#1691](https://github.com/OpenShadingLanguage/oiio/pull/1691)
|
||||
- *cleanup*: Switch deprecated oiio simd names to modern
|
||||
[#1679](https://github.com/OpenShadingLanguage/oiio/pull/1679)
|
||||
- *testing*: Avoid deprecated OSLQuery ctr in test example
|
||||
[#1699](https://github.com/OpenShadingLanguage/oiio/pull/1699)
|
||||
- *ci*: Fix package name for icc
|
||||
[#1690](https://github.com/OpenShadingLanguage/oiio/pull/1690)
|
||||
- *ci*: Add VFX Platform 2023 tests using new ASWF containers
|
||||
[#1696](https://github.com/OpenShadingLanguage/oiio/pull/1696)
|
||||
- *ci*: Switch oiio obsolete branch names to immutable tags
|
||||
[#1701](https://github.com/OpenShadingLanguage/oiio/pull/1701)
|
||||
- *docs*: Improve documentation of `trace` function
|
||||
[#1671](https://github.com/OpenShadingLanguage/oiio/pull/1671) (by AidanWelch)
|
||||
- *docs*: README.md: added filmography and Siggraph OSL course info.
|
||||
[#1692](https://github.com/OpenShadingLanguage/oiio/pull/1692)
|
||||
[#1694](https://github.com/OpenShadingLanguage/oiio/pull/1694) (by Mitch Prater)
|
||||
- *docs*: Amend the filmography
|
||||
[#1695](https://github.com/OpenShadingLanguage/oiio/pull/1695)
|
||||
- *docs*: Fix incorrect links in CONTRIBUTING
|
||||
[#1688](https://github.com/OpenShadingLanguage/oiio/pull/1688)
|
||||
|
||||
Release 1.12.12.0 -- 1 May 2023 (compared to 1.12.11.0)
|
||||
--------------------------------------------------------
|
||||
* New ShadingSystem getattribute query for shader groups: "attribute_types"
|
||||
retrieves a pointer to the array of TypeDesc values describing the
|
||||
attributes retrieved by existing "attributes_needed" and "attribute_scopes".
|
||||
#1650
|
||||
* Fix a bug with binding userdata when it's used by more than one shader
|
||||
within the group and they disagree about whether derivatives are needed when
|
||||
retrieving the attribute. #1673
|
||||
|
||||
Release 1.12.11.0 -- 5 Apr 2023 (compared to 1.12.10.0)
|
||||
--------------------------------------------------------
|
||||
* Build: Add Qt 6.x compatibility (Qt is only used for `osltoy`). #1655
|
||||
* Build: more careful about paths to look for LLVM. #1656
|
||||
* Build: Fix Cuda compilation flags for LLVM 15. #1659
|
||||
* Notice: OSL does not yet build properly against the newly release LLVM 16.
|
||||
You must use LLVM 9-15. For Mac users who get their llvm from Homebrew,
|
||||
please be aware that Homebrew has changed its default llvm to 16, so you'll
|
||||
need to `brew install llvm@14` and make your OSL CMake define:
|
||||
`-DLLVM_ROOT=/usr/local/opt/llvm@14`
|
||||
|
||||
Release 1.12.10.0 -- 1 Mar 2023 (compared to 1.12.9.0)
|
||||
--------------------------------------------------------
|
||||
* feat(testrender): Modify testrender so that it correctly sets raytype to
|
||||
"camera" for camera rays, "shadow" for shadow rays, and "diffuse" for all
|
||||
secondary rays. Also rerun the shades for background shader group on the
|
||||
camera rays rather than use the cached map. This helps the MaterialX project
|
||||
use testrender for certain unit tests and verification. #1648 #1649
|
||||
* feat: Expose llvm groupdata size as a shadergroup attribute
|
||||
"llvm_groupdata_size". #1642
|
||||
* fix: Crash could result from uncaught exception in OpenColorIO when calling
|
||||
transformc with derivatives for color spaces that require OCIO. #1646
|
||||
* fix: certain uses of fmod() in shaders could fail to generate LLVM code
|
||||
correctly, due to a missing implementation for the fmod(triple,float)
|
||||
varieties. #1643
|
||||
* build: Change snprintf formatting to satisfy some compilers. #1640
|
||||
* CI: Fix broken Mac ci. #1647
|
||||
|
||||
Release 1.12.9.0 -- 1 Feb 2023 (compared to 1.12.8.0)
|
||||
-------------------------------------------------------
|
||||
* Remove unnecessary setting of locale::global. #1630
|
||||
* Batch shading: Fix bug with masked wide closure generation. #1637
|
||||
* Make sure ReParameter() has the same relaxed type checking rules as
|
||||
Parameter(). Before, it was stricter about type conversion. #1639
|
||||
* Windows: Fix some GPU build errors. #1638
|
||||
|
||||
Release 1.12.8.0 -- 3 Jan 2023 (compared to 1.12.7.1)
|
||||
-------------------------------------------------------
|
||||
* Remove dependency on OptiX SDK for building core OSL with OptiX support.
|
||||
You can now build OSL with OptiX support enabled even if you don't have the
|
||||
OptiX SDK headers present at build time. But you will still need them to
|
||||
build your OptiX-based application that uses OSL for GPU rendering. #1627
|
||||
* Batch mode: fix issue with closure keyword parameters. #1620
|
||||
* Batch mode: fix crash when adding a default initialized closure. #1624
|
||||
* Batch mode: Fix support for closures with array types. #1630
|
||||
* testshade: better testing of all closure parameter types. #1621
|
||||
* Fix various CI breaks as dependencies shifted. #1629 #1631 #1633
|
||||
|
||||
Release 1.12.7.1 -- 1 Dec 2022 (compared to 1.12.7.0)
|
||||
-------------------------------------------------------
|
||||
* Add clangSupport library as dependency to fix linker error on some
|
||||
platforms. #1613
|
||||
* Test against OpenColorIO 2.2. #1616
|
||||
* Build: Fix how version overrides work to reduce the chance of user mistakes.
|
||||
#1617
|
||||
|
||||
Release 1.12.7.0 -- 1 Nov 2022 (compared to 1.12.6.2)
|
||||
-------------------------------------------------------
|
||||
* Optix: Change naming of certain compiler-generated constants in a way that
|
||||
improves use of the PTX cache. #1570
|
||||
* Batch: Fix uninitialized members in ReadEvent internals. #1575
|
||||
* `testshade --help` now prints TextureSystem options and hardware info. #1584
|
||||
* oslc: Fix memory leak in ASTvariable_declaration. #1576
|
||||
* Fix memory leaks in light path expression code. #1593 #1594
|
||||
* Include the immintrin.h header only when needed. #1605
|
||||
* icx: Improvements to fix problems exposed by new icx 2022.2 compiler. #1601
|
||||
* Testing: CMake cache variables to control the testing timeout length. #1571
|
||||
* CI: Add a dynamic analysis test using address and leak sanitizers. #1581
|
||||
* CI: Now using SonarCloud static analysis. #1551
|
||||
* CI: Many improvements in testing code coverage #1607
|
||||
* CI: Make sure to run pointcloud tests when partio is found. #1611
|
||||
* Developers: platform.h now defines OSL_ALLOCA macro. #1589
|
||||
* Developers: platform.h now defines OSL::bitcast utility. #1610
|
||||
|
||||
Release 1.12 -- 1 Oct 2022 (compared to 1.11)
|
||||
----------------------------------------------
|
||||
Big Deal Changes:
|
||||
* **Batch shading**: A fully operational "batch shading" support when using
|
||||
CPUs supporting the Intel AVX2 or AVX512 instruction set architectures,
|
||||
allows shading 8 or 16 points at a time, accelerated by using SIMD
|
||||
instructions. (Changes contributed by Intel.)
|
||||
* **OptiX**: A reasonable subset of the OSL language can run on NVIDIA GPUs
|
||||
for Cuda or OptiX-based renderers.
|
||||
* **Standardized material closures**: Synchronize with MaterialX on a minimum
|
||||
standard set of material closures. This is reflected in both the OSL spec as
|
||||
well as reference implementations of those closures in testrender. #1533
|
||||
#1536 #1537 #1538 #1539 #1541 #1542 #1547 #1557
|
||||
|
||||
Dependency and standards requirements changes:
|
||||
* The minimum (and default) compilation mode is now C++14. C++17 and 20 are
|
||||
also supported. #1362 #1369 (1.12.2)
|
||||
* Minimum compilers are now gcc 6.1 (no more support for gcc 4.8), MSVS
|
||||
2017 or newer (no more support for 2015).
|
||||
* Minimum LLVM is now 9.0. Support for LLVM 7 and 8 have ben dropped.
|
||||
#1441 (1.12.3)
|
||||
* Minimum OpenImageIO is now 2.2: Support for OIIO 2.0 and 2.1 have been
|
||||
dropped. #1426 (1.12.3)
|
||||
* Minimum OpenEXR version is now 2.3 (raised from 2.0). #1406 (1.12.3)
|
||||
|
||||
OSL Language and oslc compiler:
|
||||
* `#pragma error "message"` and `#pragma warning "message"` can be used to
|
||||
conditionally inject a compile-time error or warning. #1300 (1.12.1)
|
||||
* Check for errors when when writing oso files (for example, disk volume
|
||||
full). #1360 (1.12.2/1.11.14)
|
||||
* A new flavor of `gettextureinfo(texturename, paramname, s, t, destination)`
|
||||
allows for querying of texture metadata about the particular UDIM tile
|
||||
that will be used for particular (s,t) texture coordinates. #1398 (1.12.3)
|
||||
* Better error detection when OSL user functions write to function parameters
|
||||
that are not marked as output. #1417 (1.12.3)
|
||||
* Detect and better error message when using a type name where a variable
|
||||
identifier should be. #1457 (1.12.4.2)
|
||||
|
||||
OSL Standard library:
|
||||
* vector2.h is updated with a mod() function for vector2. #1312 (1.12.1/1.11.12)
|
||||
* Preliminary work for adding standard MaterialX closures. 31371 (1.12.2)
|
||||
* Fix previously-broken color conversions from RGB to xyY. #1410 (1.12.3)
|
||||
* Fully removed MaterialX shaders (get those from the MaterialX project).
|
||||
#1450 (1.12.3)
|
||||
* Fix incorrect implementation of `matrix4 * vector4` in vector4.h #1513
|
||||
(1.12.5.0)
|
||||
|
||||
API changes, new options, new ShadingSystem features (for renderer writers):
|
||||
* Custom experimental llvm optimization levels 10, 11, 12, and 13. These
|
||||
are stripped down versions of 0, 1, 2, 3 (corresponding to clang's -O0,
|
||||
-O1, -O2, -O3) but we think for shaders are just as performant but with
|
||||
lower JIT time. These are currently experimental, but we are benchmarking
|
||||
to determine if they should be the new defaults. #1250 (1.12.0.0)
|
||||
* ShadingSystem attribute "searchpath:library" gives a searchpath for finding
|
||||
runtime-loadable implementation modules for ISA-optimized operations.
|
||||
#1310 (1.12.1)
|
||||
* Output variable placement -- now you can designate where shader outputs
|
||||
should go and the shader will put results there, instead of the app using
|
||||
find_symbol() and symbol_address after the shader is executed. #1328 (1.12.2)
|
||||
* Userdata input placement -- now you can designate where interpolated
|
||||
userdata should be copied from directly, rather then via callbacks to
|
||||
RendererServices::get_userdata(). #1391 (1.12.3)
|
||||
* Better hiding of the Matrix22 class, which was never actually part of the
|
||||
public APIs. #1480 (1.12.4.5)
|
||||
* Add ACES2065-1 and ACEScg as shading system color spaces (#1486) (1.12.4.6)
|
||||
* Expanded warnings (via enabling the "opt_warnings" attribute of the
|
||||
ShadingSystem) for operations that try to create new strings mid-shader, or
|
||||
that need to access the characters of strings mid-shader. These are only
|
||||
triggered for those cases that cannot be resolved by the end of the "runtime
|
||||
optimization" phase. #1497 (1.12.4.6)
|
||||
|
||||
SIMD batched shading mode:
|
||||
* Added support for masked operations to LLVMUtil. #1248 #1250 (1.12.0.0)
|
||||
* Add interface to ShadingSystem for batched execution. #1272 (1.12.0.1)
|
||||
* Add interface to batched RendererServices. #1276 (1.12.0.1)
|
||||
* Batched testshade. #1298 (1.12.1)
|
||||
* ShadingSystem plumbing to support batched execution. #1301 (1.12.1)
|
||||
* Batched analysis to figure out which symbols need to be varying or uniform,
|
||||
and which operations require masking. #1313 #1318 #1322 (1.12.1)
|
||||
* Additional infrastructure for batched analysis. #1316 (1.12.1)
|
||||
* Add implementation for BatchedBackendLLVM. #1330 (1.12.1)
|
||||
* ISA-specific modules. #1345 (1.12.2)
|
||||
* Introduction of CI testing of batched mode. #1357 #1367 (1.12.2)
|
||||
* Control flow and string ops. #1372 (1.12.2)
|
||||
* Matrix operations. #1378 (1.12.2) #1485 (1.12.4.6)
|
||||
* Batched algebraic, trig, and transcendental functions. #1385 (1.12.2)
|
||||
* Batched noise. #1394 (1.12.3)
|
||||
* Batched implementation of all color operations. #1408 (1.12.3)
|
||||
* Batched bitwise ops. #1413 (1.12.3)
|
||||
* Batched spline and spline inverse. #1422 (1.12.3)
|
||||
* Batched texture, gettextureinfo, texture3d, environment. #1436 (1.12.3)
|
||||
* Batched dictionary functionality (dict_find, etc.) #1445 (1.12.3)
|
||||
* Enable batched execution of most testsuite. #1453 (1.12.4.1)
|
||||
* Batched isnan, isinf, isfinite. #1456 (1.12.4.2)
|
||||
* Batched userdata and output placement. #1455 (1.12.4.2)
|
||||
* Batched pointcloud functions. #1464 (1.12.4.4)
|
||||
* Batched closures (#1500)
|
||||
|
||||
OptiX rendering:
|
||||
* Explicitly set the OptiX pipeline stack size. #1254 (1.12.0.0)
|
||||
* CI tests now at least compile and build with USE_OPTIX=1 (though not yet
|
||||
run the tests). #1281 (1.12.0.1)
|
||||
* A simple self-contained Cuda/OptiX example has been added as
|
||||
testsuite/example-cuda. #1280 (1.12.0.1)
|
||||
* Overhaul in how strings are communicated to the GPU side. #1309 (1.12.1)
|
||||
* Removal of runtime compilation of Cuda (libnvrtc dependency eliminated).
|
||||
#1309 (1.12.1)
|
||||
* Fix problems with unresolved symbols on GPU, particularly when multiple
|
||||
shaders call certain functions like printf. #1401 (1.12.3)
|
||||
* Changed prototype of osl_get_attribute callback to work properly on
|
||||
GPU. #1404 (1.12.3)
|
||||
* Fix missing hostdevice modifier on some matrix operators. #1409 (1.12.3)
|
||||
* Fix race conditions when compiling for OptiX 7. #1411 (1.12.3)
|
||||
* osl_get_attribute() uses device strings when compiling for OptiX.
|
||||
#1435 (1.12.3)
|
||||
* Fix issue with OptiX + clang 14 with duplicate symbols. #1561 (1.12.6.0)
|
||||
|
||||
Performance improvements:
|
||||
* Less mutex locking around use and retrieval of ColorSystem related to
|
||||
doing color transforms. #1405 (1.12.3)
|
||||
* Constant folding of `startswith()`. #1507 (1.12.5.0)
|
||||
|
||||
Bug fixes and other improvements (internals):
|
||||
* Fix derivatives of texture calls when only derivatives of the "alpha"
|
||||
value are needed. #1251 (1.12.0.0)
|
||||
* When uninitialized value detection is used, fix possible "false positive"
|
||||
related to the condition variable of do-while loops. #1252 (1.12.0.0)
|
||||
* Avoid some pointless copies of output variables from a used layer to a
|
||||
downstream layer that is known to not be used. #1253 (1.12.0.0)
|
||||
* Stats now print more information about build options and runtime hardware
|
||||
capabilities. #1258 #1259 (1.12.0.1)
|
||||
* The osl and oso parsers are now re-entrant, which allows different threads
|
||||
to concurrently compile or load shaders. #969 (1.12.0.1)
|
||||
* Fix asymptomatic potential runtime optimizer bug where certain
|
||||
multi-component values were not correctly recognized as nonzero. #1266
|
||||
(1.12.0.1/1.11.9)
|
||||
* Fix optimizer bug where an `output` parameter that is also marked as
|
||||
`[[lockgeom=0]]`, i.e., it gets a value from a userdata input, but also
|
||||
passes it to a downstream connection or a renderer output, could end up
|
||||
with an incorrect value if it was never read in the shader (including if
|
||||
the only times it was read were optimized away). #1295 (1.12.0.1)
|
||||
* Ensure that OSLCompiler::LoadMemoryCompiledShader returns false upon parse
|
||||
failure. #1302 (1.12.1/1.11.10)
|
||||
* During runtime optimization, don't merge layers that produce renderer
|
||||
outputs (the semantics of doing so are very fishy). #1296 (1.12.1)
|
||||
* Eliminate unnecessary error messages to stderr for broken point clouds.
|
||||
#1333 (1.12.1/1.11.13)
|
||||
* Fix undefined behavior that could result in crashes that resulted from
|
||||
the Symbol class having no virtual destructor. #1397 (1.12.3)
|
||||
* Fix in runtime optimizer where tracking of messages and unknown messages
|
||||
relied on uninitialized variables. #1447 (1.11.17/1.12.3)
|
||||
* Stop internally using OIIO::string_view::c_str(), which will someday be
|
||||
removed. #1458 (1.12.4.2)
|
||||
* Correctly track that the backfacing() function requires N and I shader
|
||||
globals. #1462 (1.12.4.4)
|
||||
* Print all 4 levels of version numbers in help messages. #1477 (1.12.4.4)
|
||||
* Fix GPU code generation crash. #1479 (1.12.4.4)
|
||||
* Work to transition internals to use modern std::format notation for
|
||||
formatted output. #1487 #1490 (1.12.4.6) #1504 #1506 (1.12.5.0)
|
||||
* testrender improvements:
|
||||
* Fix testrender memory error on teardown. #1499 (1.12.4.6)
|
||||
* Modernize the sampler in testrender, improving quality and performance.
|
||||
#1534 (1.12.6.0)
|
||||
* Switch to cone tracing for derivatives. #1543 (1.12.6.0)
|
||||
* Fix error that prevented correct typecheck of ternary operator. #1552
|
||||
(1.12.6.0)
|
||||
|
||||
Internals/developer concerns:
|
||||
* Use the `final` keyword in certain internal classes where applicable.
|
||||
#1260 (1.12.0.1/1.11.9)
|
||||
* Minor fixes to the internal TypeSpec and Symbol classes. #1267 (1.12.0.1)
|
||||
* Switch from deprecated call to OIIO::parallel_image to the new version.
|
||||
#1317 (1.11.11/1.12.1)
|
||||
* The "archive_groupname" handling is now careful to sanitize the filenames
|
||||
it deals with, closing some security and safety holes. #1383 (1.12.2)
|
||||
* More migration of string formatting to new std::format style. #1389 (1.12.3)
|
||||
#1469 #1470 (1.12.4.4)
|
||||
* llvm_util: Switch some uses of ptr+len to span. #1390 (1.12.3)
|
||||
* OSL no longer uses sscanf internally (which has icky locale-dependent
|
||||
behavior), and instead use locale-independent OIIO::Strutil utilities
|
||||
whenever we need to parse strings. #1432 (1.12.3)
|
||||
* Avoid use of OIIO::string_view::str() which is not corresponding to the
|
||||
official C++17 std::string_view. #1467 (1.12.4.4)
|
||||
* Prototype of "free function" approach that will someday mostly supplant
|
||||
the way we use RendererServices, and will help to unlock feature completion
|
||||
for GPU and other back ends. This experimental feature is not expected
|
||||
to be used in OSL 1.12. #1494 (1.12.5.0)
|
||||
* Work on gradually converting printf-style formatted strings to fmt /
|
||||
std::format style. #1493 (1.12.5.0)
|
||||
* LLVM_Util: allow naming of llvm symbols to help with IR debugging. #1530
|
||||
(1.12.6.0)
|
||||
* clang-format the code base. #1508 #1509 #1511 #1512 #1515 #1518 #1540
|
||||
(1.12.5.0) #1555 #1562 #1568 (1.12.6.0)
|
||||
* A round of spell-checking all the comments in the code base. #1550
|
||||
(1.12.5.0)
|
||||
|
||||
Build & test system improvements:
|
||||
* CMake build system and scripts:
|
||||
- We now use .git-blame-ignore-revs to record commits that consist
|
||||
entirely of reformatting, so that 'git blame' does not misattribute
|
||||
authorship to the trivial changes of those commits. #1244 (1.12.0.0)
|
||||
- Miscellaneous improvements to cmake scripts. #1247 (1.12.0.0)
|
||||
- Instead of defaulting to looking for Python 2.7, the OSL build now
|
||||
defaults to whatever Python is found (though a specific one can still
|
||||
be requested via the PYTHON_VERSION variable). #1249 (1.12.0.0/1.11.8)
|
||||
#1286 (1.12.0.1/1.11.9)
|
||||
- Extend checked_find_package with VERSION_MIN and VERSION_MAX. #1303
|
||||
(1.12.1/1.11.10)
|
||||
- Make the CMake build scripts more friendly to being a subproject.
|
||||
#1304 #1319 (1.11.11/1.12.1)
|
||||
- We weren't properly hiding non-public symbols. #1337 (1.12.1/1.11.12)
|
||||
- Fully split oslquery and oslnoise libraries from oslexec, no more
|
||||
redundant modules put into both. #1346 #1348 (1.12.1)
|
||||
- Support for CMake 3.20 #1354 (1.12.2/1.11.14)
|
||||
- Important change to `Makefile` wrapper: We have a 'Makefile' that just
|
||||
wraps cmake for ease of use. This has changed its practice of putting
|
||||
builds in `build/ARCH` to just `build` (and local installs from
|
||||
`dist/ARCH` to `dist`) to better match common cmake practice. So where
|
||||
your local builds end up may shift a bit. #1396 (1.12.3)
|
||||
- Be more careful about not writing over a sensitive install area
|
||||
unless CMAKE_INSTALL_PREFIX is explicitly set. #1421 (1.12.3)
|
||||
- PROJECT_VERSION_RELEASE_TYPE and OSL_SUPPORTED_RELEASE are now
|
||||
cache variables that can have build-time overrides. #1443 (1.12.3)
|
||||
- Use PROJECT_IS_TOP_LEVEL (not OSL_IS_SUBPROJECT) to confirm with
|
||||
CMake 21 conventions. #1443 (1.12.3)
|
||||
- New TIME_COMMANDS option, when enabled, can help debug performance of
|
||||
the build. #1443 (1.12.3)
|
||||
- New CMake variable `DOWNSTREAM_CXX_STANDARD` sets the downstream
|
||||
minimum C++ requirement, separately from `CMAKE_CXX_STANDARD` which sets
|
||||
what we build OSL itself with. Clarify that currently, OSL can be used
|
||||
downstream by C++14, even if it is built with C++17 or higher. #1454
|
||||
(1.12.4.1)
|
||||
- Make exported cmake configs relocatable by using relative paths. #1466
|
||||
(1.12.4.4)
|
||||
* Dependency version support:
|
||||
- Build properly against Cuda 11 and OptiX 7.1. #1232 (1.12.0.1)
|
||||
and up to OptiX 7.4 #1559 (1.12.6.0)
|
||||
- PugiXML build fixes on some systems. #1262 (1.12.0.1/1.11.8)
|
||||
- Cuda/OptiX back end: Add `__CUDADEVRT_INTERNAL__` define to bitcode
|
||||
generation, needed to avoid duplicate cudaMalloc symbols with CUDA9+
|
||||
#1271 (1.12.0.1)
|
||||
- Build against LLVM 11 #1274 (1.12.0.1), LLVM 12 #1351 (1.12.1.0)
|
||||
#1412 (1.12.3), LLVM 13 #1420 (1.12.3), LLVM 14 #1492 (1.12.4.6)
|
||||
LLVM 15 #1592 (1.12.6.2)
|
||||
- Fix build break against recent OIIO master change where m_mutex field
|
||||
was removed from ImageInput. #1281 (1.12.0.1/1.11.9)
|
||||
- Work to ensure that OIIO will build correctly against the upcoming
|
||||
Imath 3.0 and OpenEXR 3.0. #1299 (1.11.10/1.12.1) #1332 (1.11.11/1.12.1)
|
||||
#1341 (1.11.12/1.12.1) #1356 #1368 (1.11.13/1.12.2) #1489 (1.12.4.6)
|
||||
- Improved finding of llvm components when using static libraries. #1375
|
||||
(1.12.2)
|
||||
- No longer use boost regex, completely rely on std::regex now that OSL
|
||||
is C++14 minimum. #1377. (1.12.2)
|
||||
- Support for OpenImageIO 2.3 changes. #1393 (1.12.3)
|
||||
- Some rearrangement of `#include` and other trickery ensures that OSL
|
||||
always includes headers from its favored version of Imath, rather than
|
||||
the ones that OIIO prefers (in cases where OIIO and OSL were each based
|
||||
on different Imath versions). #1460 (1.12.4.2)
|
||||
- Various fixes for functionality and warnings for Intel icc and icx
|
||||
compilers. #1459 #1473 #1475. (1.12.4.4)
|
||||
- Fixes for recent OIIO TextureSystem changes that hide Imath types.
|
||||
#1476 (1.12.4.4)
|
||||
- Changes to work correctly with OpenImageIO 2.4 and its master being
|
||||
the start of 2.5. #1569 (1.12.6.0)
|
||||
* Testing and Continuous integration (CI) systems:
|
||||
- Eliminate the old Travis CI and Appveyor. #1334 #1338 (1.12.1)
|
||||
- Use ccache + GitHub 'cache' action to greatly speed up CI runs. #1335
|
||||
(1.12.1)
|
||||
- Divide the CI stages into separate steps, combine dependency-building
|
||||
scripts for CentOS and Ubuntu ito a single script. #1338 (1.12.1)
|
||||
- CI tests clang11, also batched shading with clang. #1379 (1.12.2)
|
||||
- CI speeds up OIIO builds by not building its tests. #1380 (1.12.2)
|
||||
- CI tests gcc11 #1381 (1.12.2) and gcc12 #1565 (1.12.6)
|
||||
- Deal with OpenColorIO changing its master branch to "main". #1429
|
||||
(1.12.3)
|
||||
- Fix tests for texture3d now that OIIO has dropped support for Field3D.
|
||||
#1437 (1.12.3)
|
||||
- Test against LLVM13/clang13 for the VFX Platform 2022 tests. #1434
|
||||
(1.12.3)
|
||||
- CI test against MacOS-11 #1434 (1.12.3) and MacOS-12 #1554 (1.12.6)
|
||||
#1522 (1.12.5)
|
||||
- Add testsuite coverage of environment(). #1438 (1.12.3)
|
||||
- Use a project-specific environment variable `OSL_CI` instead of the more
|
||||
generic `CI` to avoid clashes with other systems. #1446 (1.12.3)
|
||||
- Deal with OpenEXR and Imath changing its master branch to "main". #1463
|
||||
(1.12.4.4)
|
||||
- testrender fix sphere tangents, per MaterialX suggestion. #1465
|
||||
(1.12.4.4)
|
||||
- Allow testsuite tests to use oiiotool for image diffs instead of idiff.
|
||||
#1472 (1.12.4.4)
|
||||
- Allow `-Werror` to be disabled even on CI branches. #1471 (1.12.4.4)
|
||||
- CI Tests against the Intel icc and icx compilers! #1459 #1473 (1.12.4.4)
|
||||
#1501 (1.12.5.0)
|
||||
- Overhaul of GHA ci.yml to use strategy matrix. #1474 (1.12.4.4)
|
||||
- Test against clang 14 and fix new warnings. #1498 (1.12.5.0)
|
||||
- Test against clang 15 and fix new warnings. #1586 (1.12.6.2)
|
||||
- A scorecards workflow guards against a variety of security issues of
|
||||
the CI system itself. #1529 (1.12.6.0)
|
||||
- Enable SonarCloud static analysis. #1551 #1556 #1563 (1.12.6.0)
|
||||
* Platform support:
|
||||
- Various Windows compile fixes. #1263 #1285 (1.12.0.1)
|
||||
- Windows+Cuda build fixes. #1292 (1.12.0.1)
|
||||
- Fix warnings about pointer casts on Windows. #1484 (1.12.4.5)
|
||||
- Various Windows build fixes. #1502 (1.12.5.0)
|
||||
* The oso and osl lexers/parsers are now given internal symbol names that
|
||||
are fully versioned, to avoid possible clash if multiple OSL releases are
|
||||
both linked into the same application. #1255 (1.12.0.0)
|
||||
|
||||
Documentation:
|
||||
* A simple self-contained Cuda/OptiX example has been added as
|
||||
testsuite/example-cuda. #1280 (1.12.0.1)
|
||||
* Update CLAs, Charter, GOVERNANCE, particularly after acceptance of new
|
||||
CLAs and moving the repo to the ASWF GitHub account. #1308 #1240 #1314
|
||||
(1.11.11/1.12.1)
|
||||
* First steps in new documentation and scripts for building OSL on Windows.
|
||||
#1326 (1.12.1)
|
||||
* Fix missing explanation of the optional "errormessage" parameter to
|
||||
environment() and texture3d(). #1442 (1.12.3/1.11.17)
|
||||
* A SECURITY.md file explains how to confidentially report vulnerabilities.
|
||||
#1529 (1.12.6)
|
||||
* Document all the new MaterialX closures. #1564
|
||||
|
||||
|
||||
|
||||
Release 1.11.17.0 -- 7 Jan 2022 (compared to 1.11.16.0)
|
||||
-------------------------------------------------------
|
||||
* Fix in runtime optimizer where tracking of messages and unknown messages
|
||||
@@ -750,7 +41,7 @@ Release 1.11.14.1 -- 1 Jun 2021 (compared to 1.11.14.0)
|
||||
|
||||
Release 1.11.14 -- 10 May 2021 (compared to 1.11.13)
|
||||
----------------------------------------------------
|
||||
* oslc/OSLCompiler: Check for errors when when writing oso (for example,
|
||||
* oslc/OSLCompiler: Check for errors when when writing oslc (for example,
|
||||
disk volume full). #1360
|
||||
* Fix crash generating closure function calls with LLVM 11. #1361
|
||||
* Build: LLVM 12 compatibility. #1351
|
||||
@@ -1147,6 +438,8 @@ Build & test system improvements:
|
||||
llvm-config named `llvm-config-64`. #1238 (1.11.7.1)
|
||||
- Fixes for OIIO 2.2 which has eliminated use of tinyformat in favor of
|
||||
always relying on fmtlib. #1242 (1.11.7.1)
|
||||
- Address problem with LLVM 10.0.1 on Mac when installed by Homebrew.
|
||||
#1245 (1.11.7.2)
|
||||
* A new build-time CMake variable `OSL_LIBNAME_SUFFIX` lets you optionally
|
||||
add a custom suffix to the main libraries that are built. (Use with
|
||||
caution.) #970 (1.11.0)
|
||||
@@ -1174,7 +467,7 @@ Build & test system improvements:
|
||||
use clang library components for preprocessing. #1089 (1.11.3)
|
||||
* Add an optional build-time `EXTRA_WARNINGS` option (default: OFF) that
|
||||
enables even more picky than usual warnings. Fix many warnings that cropped
|
||||
up during testing, mostly related to unused function parameters. #1106 (1.11.3)
|
||||
up during testing, mostly related to unused function paramters. #1106 (1.11.3)
|
||||
* The testsuite can run in parallel, with a number of threads set by the
|
||||
environment variable `CTEST_PARALLEL_LEVEL`. #1119 (1.11.4)
|
||||
* oslconfig.h is now generated by a cmake configure_file step, from
|
||||
@@ -1184,6 +477,11 @@ Build & test system improvements:
|
||||
* Fix typo that botched the version in the .pc pkgconfig file. #1168 (1.11.6)
|
||||
* CI test against gcc9 and gcc10. #1192 (1.11.6)
|
||||
* Propagate RTTI compile options to exported cmake config. #1194 (1.11.6)
|
||||
* New file .git-blame-ignore-revs lists the hashes of commits that only
|
||||
performed bulk reformatting, so that they don't misattribute authorship
|
||||
or modification date. Everybody do this in your local repo:
|
||||
`git config blame.ignoreRevsFile .git-blame-ignore-revs`
|
||||
#1244 (1.11.7.2)
|
||||
|
||||
Documentation:
|
||||
* Make it clear that the documentation is licensed under the CC-BY-4.0
|
||||
@@ -1195,6 +493,10 @@ Documentation:
|
||||
example for others writing renderers. #1202 (1.11.6)
|
||||
* Fix incorrect descripton in `spline()` regarding the number of spline
|
||||
values required for each interpolation type. #1239 (1.11.7.1)
|
||||
* Extensive fixing of typos and misspellings in docs and comments. #1243
|
||||
(1.11.7.2)
|
||||
* Renamed "LICENSE-THIRD-PARTY.md" to "THIRD-PARTY.md" to avoid confusing
|
||||
GitHub's reporting of the project's license. (1.11.7.2)
|
||||
|
||||
|
||||
Release 1.10.13 -- 1 Aug 2020 (compared to 1.10.12)
|
||||
|
||||
@@ -2,17 +2,8 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
cmake_minimum_required (VERSION 3.15)
|
||||
|
||||
set (OSL_VERSION "1.13.11.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
|
||||
@@ -88,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)
|
||||
@@ -103,17 +94,16 @@ 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")
|
||||
@@ -133,27 +123,20 @@ if (OIIO_FMATH_SIMD_FRIENDLY)
|
||||
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_definitions (-DOSL_INTERNAL=1)
|
||||
if (USE_OPTIX)
|
||||
add_definitions ("-DOSL_USE_OPTIX=1")
|
||||
endif ()
|
||||
|
||||
# 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)
|
||||
|
||||
# Set the default namespace. For symbol hiding reasons, it's important that
|
||||
# the project name is a subset of the namespace name.
|
||||
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" ${${PROJECT_NAME}_DEV_RELEASE})
|
||||
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 ()
|
||||
set (PROJ_NAMESPACE_V "${PROJ_NAMESPACE}_v${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}")
|
||||
if (${PROJ_NAME}_NAMESPACE_INCLUDE_PATCH)
|
||||
if (OIIO_NAMESPACE_INCLUDE_PATCH)
|
||||
set (PROJ_NAMESPACE_V "${PROJ_NAMESPACE_V}_${PROJECT_VERSION_PATCH}")
|
||||
endif ()
|
||||
message(STATUS "Setting Namespace to: ${PROJ_NAMESPACE_V}")
|
||||
@@ -177,7 +160,6 @@ include (pythonutils)
|
||||
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)
|
||||
@@ -188,28 +170,12 @@ 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)
|
||||
@@ -219,7 +185,7 @@ add_subdirectory (src/liboslnoise)
|
||||
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 ()
|
||||
@@ -228,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)
|
||||
@@ -294,22 +263,13 @@ 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 ()
|
||||
|
||||
|
||||
@@ -19,10 +19,11 @@ Contributors should be reading the osl-dev mail list:
|
||||
|
||||
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
|
||||
@@ -54,16 +55,15 @@ 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.
|
||||
|
||||
* [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.
|
||||
* [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
|
||||
@@ -79,7 +79,8 @@ 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
|
||||
@@ -114,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).
|
||||
@@ -128,26 +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
|
||||
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`.
|
||||
@@ -155,73 +158,111 @@ 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, Boost, or something else we interoperate with, it's ok to
|
||||
@@ -233,6 +274,8 @@ 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.
|
||||
@@ -263,7 +306,7 @@ 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,
|
||||
Boost, 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).
|
||||
|
||||
@@ -287,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
|
||||
|
||||
@@ -134,12 +134,11 @@ Current voting members of the TSC are:
|
||||
* Eric Enderton - NVIDIA
|
||||
* Stephen Friedman - Pixar
|
||||
* Nicolas Guiard - Isotropix
|
||||
* Clint Hanson - DNEG
|
||||
* Derek Haase - DNEG
|
||||
* Adrien Herubel - Autodesk
|
||||
* Lee Kerley - Sony Pictures Imageworks
|
||||
* Mitch Prater - Laika
|
||||
* Brecht Van Lommel - Blender
|
||||
* Alex Wells - Intel
|
||||
|
||||
### TSC Nomination and Succession
|
||||
|
||||
|
||||
@@ -4,14 +4,7 @@
|
||||
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 8- or 16-wide SIMD execution mode
|
||||
requiring x86_64 with 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
|
||||
------------
|
||||
@@ -19,16 +12,19 @@ Dependencies
|
||||
OSL requires the following dependencies or tools.
|
||||
NEW or CHANGED dependencies since the last major release are **bold**.
|
||||
|
||||
* Build system: [CMake](https://cmake.org/) **3.15 or newer** (tested through 3.29)
|
||||
* Build system: [CMake](https://cmake.org/) 3.12 or newer (tested through 3.21)
|
||||
|
||||
* A suitable C++14 or C++17 compiler to build OSL itself, which may be any of:
|
||||
- GCC 6.1 or newer (tested through gcc 12.1)
|
||||
- Clang 3.4 or newer (tested through clang 18)
|
||||
- Microsoft Visual Studio 2017 or newer
|
||||
- Intel C++ compiler icc version 17 or newer or LLVM-based icx compiler
|
||||
version 2022 or newer.
|
||||
* 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) 2.4 or newer** (tested through 2.5 and master)
|
||||
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
|
||||
@@ -42,42 +38,36 @@ NEW or CHANGED 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) 9, 10, 11, 12, 13, 14, 15, 16, 17, or 18, 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.
|
||||
|
||||
* [Boost](https://www.boost.org) 1.55 or newer (tested through boost 1.85)
|
||||
* [Ilmbase or Imath](https://github.com/AcademySoftwareFoundation/Imath) 2.4
|
||||
or newer (recommended: 3.1 or higher; tested through 3.2)
|
||||
NOTE: OSL 1.13.x is the last release family that will support
|
||||
Imath/OpenEXR 2.x.
|
||||
* [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.13).
|
||||
* [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 >= 2.7 (tested against 2.7, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12)
|
||||
NOTE: OSL 1.13.x is the last release family that will support Python 2.7.
|
||||
* pybind11 >= 2.4.2 (Tested through 2.12. Note that pybind11 v2.10+ does
|
||||
not support Python < 3.6.)
|
||||
* NumPy
|
||||
* (optional) Qt5 >= 5.6 or Qt6 (tested Qt5 through 5.15 and Qt6 through 6.7).
|
||||
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.
|
||||
|
||||
|
||||
|
||||
@@ -86,13 +76,13 @@ 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
|
||||
@@ -103,29 +93,27 @@ Here are the steps to check out, build, and test the OSL distribution:
|
||||
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_LIBRAY_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
|
||||
|
||||
@@ -22,6 +22,15 @@ 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 ?=
|
||||
@@ -38,15 +47,17 @@ endif
|
||||
|
||||
# Set up variables holding the names of platform-dependent directories --
|
||||
# set these after evaluating site-specific instructions
|
||||
build_dir ?= build
|
||||
dist_dir ?= dist
|
||||
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
|
||||
@@ -105,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
|
||||
@@ -113,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
|
||||
@@ -152,14 +171,6 @@ ifneq (${USE_SIMD},)
|
||||
MY_CMAKE_FLAGS += -DUSE_SIMD:STRING="${USE_SIMD}"
|
||||
endif
|
||||
|
||||
ifneq (${USE_BATCHED},)
|
||||
MY_CMAKE_FLAGS += -DUSE_BATCHED:STRING="${USE_BATCHED}"
|
||||
endif
|
||||
|
||||
ifneq (${VEC_REPORT},)
|
||||
MY_CMAKE_FLAGS += -DVEC_REPORT:BOOL="${VEC_REPORT}"
|
||||
endif
|
||||
|
||||
ifneq (${TEST},)
|
||||
TEST_FLAGS += -R ${TEST}
|
||||
endif
|
||||
@@ -209,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},)
|
||||
@@ -243,7 +251,7 @@ endif
|
||||
#########################################################################
|
||||
# Top-level documented targets
|
||||
|
||||
all: install
|
||||
all: dist
|
||||
|
||||
# 'make debug' is implemented via recursive make setting DEBUG
|
||||
debug:
|
||||
@@ -263,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)
|
||||
|
||||
|
||||
@@ -301,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
|
||||
@@ -333,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}
|
||||
|
||||
#########################################################################
|
||||
|
||||
@@ -353,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"
|
||||
@@ -363,7 +372,7 @@ help:
|
||||
@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=14 C++ standard to build with (default is 14)"
|
||||
@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"
|
||||
@@ -386,7 +395,7 @@ help:
|
||||
@echo " BOOST_ROOT=path Custom Boost installation"
|
||||
@echo " USE_QT=0 Skip anything that needs Qt"
|
||||
@echo " LLVM-related options:"
|
||||
@echo " LLVM_VERSION=12.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"
|
||||
@@ -397,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, 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,7 +1,7 @@
|
||||
<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")
|
||||
@@ -9,7 +9,7 @@
|
||||
[](https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/actions)
|
||||
[](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,42 +389,9 @@ 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,
|
||||
Archive 81 (series),
|
||||
Moon Night (series),
|
||||
Obi-Wan Kenobi (series),
|
||||
The Boys (S3),
|
||||
Andor (S1)
|
||||
* **(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,
|
||||
The Marvels,
|
||||
Leo
|
||||
* **(2024 / upcoming)**
|
||||
Ghostbusters: Frozen Empire,
|
||||
...
|
||||
|
||||
|
||||
@@ -456,24 +410,6 @@ The OSL language specification can be found at
|
||||
distribution) or in the share/doc/OSL/osl-languagespec.pdf file of an
|
||||
installed binary distribution.
|
||||
|
||||
[Experimental OSL Documentation on ReadTheDocs](https://open-shading-language.readthedocs.io/)
|
||||
This will be the future documentation. It's probably as complete as the PDF,
|
||||
but it needs some proofreading, so the PDF is still considered the
|
||||
authoritative source for now. But some time soon, the old PDF specification
|
||||
will be deprecated in favor of
|
||||
this online documentation.
|
||||
<!-- is the best place to start if you are interested in how to use OSL,
|
||||
its APIs. -->
|
||||
There is also a [PDF
|
||||
version](https://readthedocs.org/projects/open-shading-language/downloads/pdf/latest/).
|
||||
|
||||
For those interested in learning to program shaders in OSL, there is the
|
||||
[Siggraph 2022 Educator's Forum](https://dl.acm.org/doi/proceedings/10.1145/3532724)
|
||||
[OSL Shaders for RenderMan](https://dl.acm.org/doi/abs/10.1145/3532724.3535604) course,
|
||||
which uses RenderMan in the examples and
|
||||
[Supplementary Materials](https://github.com/LaikaStudios/OSLShadersForRenderMan),
|
||||
but which is primarily about shader writing in OSL.
|
||||
|
||||
|
||||
Contact & reporting problems
|
||||
----------------------------
|
||||
@@ -489,13 +425,9 @@ 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).
|
||||
|
||||
If you think you've found a potential vulnerability in OSL, please
|
||||
confidentially report it by emailing the project administrators at
|
||||
[security@openshadinglanguage.org](security@openshadinglanguage.org).
|
||||
|
||||
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
|
||||
@@ -519,6 +451,7 @@ Contacts, Links, and References
|
||||
|
||||
[OSL home page](http://openshadinglanguage.org)
|
||||
|
||||
[Sony Pictures Imageworks main open source page](http://opensource.imageworks.com)
|
||||
|
||||
|
||||
|
||||
@@ -530,22 +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, Nicholas Bishop, Curtis Black, Rasmus Bonnedal, Solomon Boulos,
|
||||
Stefan Bruens, Stefan Büttner, Matthaus G. Chajdas, Clark Chen, 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, Tim Grant, Larry Gritz, Nicolas
|
||||
Guiard, Ole Gulbrandsen, Euan Haahr, Derek Haase, Sven-Hendrik Haase, John
|
||||
Haddon, Niklas Harrysson, Daniel Heckenberg, Chris Hellmuth, Adrien Herubel,
|
||||
Dan Horák, Thiago Ize, Matt Johnson, Ronan Keryell, Chris Kulla, Elvic Liang,
|
||||
Max Liani, Adam Martinez, John Mertic, Bastien Montagne, Steena Monteiro, John
|
||||
Mertic, Patrick Mours, Alexis Oblet, Erich Ocean, Mikko Ohtamaa, Jino Park,
|
||||
Alexei Pawlow, Jay Reynolds, Declan Russell, Benoit Ruiz, Patrick Scheibe,
|
||||
Alex Schworer, Jonathan Scruggs, Sergey Sharybin, Mark Sisson, Sandip Shukla,
|
||||
Cliff Stein, Stephan Steinbach, 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
|
||||
|
||||
@@ -1,27 +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.12.x | :white_check_mark: All fixes that can be backported without breaking ABI compatibility. New tagged releases monthly. |
|
||||
| 1.11.x | :warning: Only the most critical fixes, only if they can be easily backported. |
|
||||
| <= 1.10.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
|
||||
by emailing the project administrators at
|
||||
[security@openshadinglanguage.org](security@openshadinglanguage.org). Only the
|
||||
project administrators have access to these messages. Include detailed steps to
|
||||
reproduce the issue, and any other information that could aid an
|
||||
investigation. Our policy is to respond to vulnerability reports within 14
|
||||
days.
|
||||
|
||||
Our policy is to address critical security vulnerabilities rapidly and post
|
||||
patches as quickly as possible.
|
||||
@@ -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,209 +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.
|
||||
|
||||
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,341 +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 changes 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 changes 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. Minor releases are allowed
|
||||
to drop support for sufficiently old compilers and dependencies.
|
||||
|
||||
PATCH changes 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 changes 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 changes 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 changes 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 to the next month's patch
|
||||
release for the designated 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.)
|
||||
|
||||
|
||||
### 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:
|
||||
|
||||
- Actually read the [README.md](../README.md), [INSTALL.md](../INSTALL.md),
|
||||
and other repository docs and make sure all the information is up to
|
||||
date. Check the "contributor credits" in the README against the recent
|
||||
repo history to be sure new contributors are listed. Also check the
|
||||
list of films and make sure it includes any recent productions that are
|
||||
known to have used OSL.
|
||||
- Skim the primary user documentation to look for any obvious errors,
|
||||
especially the parts that describe new features. In the case of PDF docs
|
||||
(such as osl-languagespec.pdf), make sure that a new PDF book is built if
|
||||
the documentation source has been changed since the last release.
|
||||
- If we are using any online docs (like readthedocs), make sure it is
|
||||
building and looks correct on the web site.
|
||||
|
||||
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. Edit the top-level CMakeLists.txt to remove any RC designation
|
||||
(i.e., `PROJECT_VERSION_RELEASE_TYPE` should be set to `""`).
|
||||
|
||||
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.
|
||||
|
||||
3. Push it to **your** GitHub, make sure it passes CI.
|
||||
|
||||
4. Tag the release: `git tag v1.2.3.4` (no more beta, RC, or dev suffix).
|
||||
|
||||
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.
|
||||
|
||||
- For annual beta releases, post a short message to the "Open Shading
|
||||
Language" channel of the ASWF slack. It can be a one-line announcement and
|
||||
then just a link to the GitHub release page for this version.
|
||||
|
||||
|
||||
@@ -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 `doc/build_install/windows/Readme.md` and using batch files to install OSL cleanly!
|
||||
|
||||
## macOS
|
||||
@@ -1,314 +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
|
||||
|
||||
**Boost:** 1.70
|
||||
|
||||
**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/doc/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 `doc/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 `doc/build_install/windows/build_osl.bat`
|
||||
|
||||
For now we can not assign pre-installed llvm or boost 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 and boost 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 |
|
||||
| --boost | 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/doc/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/doc/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 --boost --llvm --clang --pugixml --openexr --tiff --jpeg --png --flex --bison --opencolorio --openimageio --libraw --pybind11 %BASE_LOCATION%/%OSL_LOCATION_DIR%
|
||||
|
||||
|
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,3 +0,0 @@
|
||||
# Shader Writing in OSL
|
||||
|
||||
Contains OSL shader writing content.
|
||||
@@ -1,3 +0,0 @@
|
||||
# Web Site
|
||||
|
||||
Contains OSL web site content.
|
||||
@@ -7,39 +7,103 @@ ifneq (${VERBOSE},)
|
||||
$(info Including spi/Makefile-bits)
|
||||
endif
|
||||
|
||||
$(info Building generic OSL)
|
||||
PYLIB_LIB_PREFIX ?= 0
|
||||
PYLIB_INCLUDE_SONAME ?= 0
|
||||
# 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,
|
||||
## 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-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
|
||||
LLVM_VERSION ?= 12.0.0
|
||||
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}
|
||||
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 += -DOSL_SITE:STRING=spi
|
||||
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
|
||||
|
||||
MY_CMAKE_FLAGS += -DOSL_EXTRA_NVCC_ARGS="--compiler-bindir=/opt/rh/devtoolset-6/root/bin/gcc"
|
||||
|
||||
## Rhel7 (current)
|
||||
ifeq (${SP_OS}, rhel7)
|
||||
@@ -54,15 +118,34 @@ ifeq (${SP_OS}, rhel7)
|
||||
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_12.0.0
|
||||
LLVM_DIRECTORY ?= /shots/spi/home/software/packages/llvm/${LLVM_VERSION}/${SPI_COMPILER_PLATFORM}
|
||||
ifeq (${COMPILER},clang9)
|
||||
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++
|
||||
@@ -71,11 +154,7 @@ ifeq (${SP_OS}, rhel7)
|
||||
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/${SPI_COMPILER_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang12)
|
||||
LLVM_DIRECTORY := /shots/spi/home/software/packages/llvm/12.0.0-final/${SPI_COMPILER_PLATFORM}
|
||||
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)
|
||||
@@ -92,6 +171,11 @@ ifeq (${SP_OS}, rhel7)
|
||||
-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 \
|
||||
@@ -102,9 +186,33 @@ ifeq (${SP_OS}, rhel7)
|
||||
# Boost
|
||||
#
|
||||
BOOSTVERS ?= 1.70
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DBOOST_INCLUDEDIR=/usr/include/boostroot/boost${BOOSTVERS}.0 \
|
||||
-DBOOST_LIBRARYDIR=/usr/lib64/boostroot/boost${BOOSTVERS}.0
|
||||
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
|
||||
@@ -112,7 +220,11 @@ ifeq (${SP_OS}, rhel7)
|
||||
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.7)
|
||||
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
|
||||
@@ -129,32 +241,54 @@ ifeq (${SP_OS}, rhel7)
|
||||
|
||||
# Set our preferred OpenEXR path, but allow env variable to override
|
||||
# with custom/test version.
|
||||
OPENEXR_VERSION ?= 2.4.1-2
|
||||
OpenEXR_ROOT ?= ${REZ_PACKAGE_ROOT}/OpenEXR/${OPENEXR_VERSION}/${SPI_COMPILER_PLATFORM}
|
||||
$(info OpenEXR_ROOT = $(OpenEXR_ROOT))
|
||||
MY_CMAKE_FLAGS += -DOpenEXR_ROOT=${OpenEXR_ROOT}
|
||||
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-${BOOSTVERS}
|
||||
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
|
||||
OSL_USE_OPTIX ?= 1
|
||||
CUDA_VERSION ?= 11.1.1
|
||||
OPTIX_VERSION ?= 7.2.0
|
||||
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 += -DOSL_USE_OPTIX=${OSL_USE_OPTIX} \
|
||||
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
|
||||
@@ -166,33 +300,53 @@ 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/lib"
|
||||
MY_CMAKE_FLAGS += -DCMAKE_INSTALL_NAME_DIR="${working_dir}/dist/${platform}${variant}/lib"
|
||||
|
||||
BOOSTVERS=${BOOSTVERS}${BOOSTSPSUFFIX}
|
||||
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}, gcc6)
|
||||
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},clang14)
|
||||
else ifeq (${COMPILER},clang6)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=/usr/local/opt/llvm@14/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@14/bin/clang++
|
||||
else ifeq (${COMPILER},clang15)
|
||||
-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/opt/llvm@15/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@15/bin/clang++
|
||||
else ifeq (${COMPILER},clang16)
|
||||
-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/opt/llvm@16/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@16/bin/clang++
|
||||
-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)
|
||||
@@ -200,22 +354,163 @@ else ifeq (${platform}, macosx)
|
||||
else ifeq (${COMPILER},)
|
||||
# default compiler is clang, taken from the LLVM directory
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=${LLVM_ROOT}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_ROOT}/bin/clang++
|
||||
-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_ROOT}/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=${LLVM_ROOT}/bin/clang++
|
||||
-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})
|
||||
$(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.
|
||||
@@ -3,7 +3,18 @@
|
||||
# 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 ()
|
||||
|
||||
@@ -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()
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
@@ -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.18.5}
|
||||
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}
|
||||
|
||||
|
||||
@@ -14,18 +14,26 @@ uname
|
||||
|
||||
|
||||
if [[ `uname` == "Linux" ]] ; then
|
||||
: ${LLVM_VERSION:=14.0.0}
|
||||
: ${LLVM_INSTALL_DIR:=${PWD}/llvm-install}
|
||||
: ${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
|
||||
if [[ "$LLVM_VERSION" == "9.0.0" ]] || [[ "$LLVM_VERSION" == "9.0.1" ]] ;
|
||||
then
|
||||
# old -- get rid of this when LLVM 10 is the newest we allow
|
||||
curl --location http://releases.llvm.org/${LLVM_VERSION}/${LLVMTAR} -o $LLVMTAR
|
||||
else
|
||||
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
|
||||
|
||||
@@ -11,15 +11,13 @@ 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.2.1}
|
||||
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=${OPENCOLORIO_CXX:=g++}
|
||||
OPENCOLORIO_CXX_FLAGS=${OPENCOLORIO_CXX_FLAGS:="-Wno-unused-function -Wno-deprecated-declarations -Wno-cast-qual -Wno-write-strings"}
|
||||
# Just need libs:
|
||||
OPENCOLORIO_BUILDOPTS="-DOCIO_BUILD_APPS=OFF -DOCIO_BUILD_NUKE=OFF \
|
||||
@@ -27,7 +25,7 @@ OPENCOLORIO_BUILDOPTS="-DOCIO_BUILD_APPS=OFF -DOCIO_BUILD_NUKE=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}"
|
||||
-DOCIO_BUILD_STATIC=${OCIO_BUILD_STATIC:=OFF}"
|
||||
BASEDIR=`pwd`
|
||||
pwd
|
||||
echo "OpenColorIO install dir will be: ${OPENCOLORIO_INSTALL_DIR}"
|
||||
@@ -36,23 +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`
|
||||
|
||||
time cmake -S . -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} \
|
||||
-DCMAKE_CXX_COMPILER=${OPENCOLORIO_CXX} \
|
||||
-DCMAKE_CXX_FLAGS="${OPENCOLORIO_CXX_FLAGS}" \
|
||||
${OPENCOLORIO_BUILDOPTS}
|
||||
time cmake --build ${OPENCOLORIO_BUILD_DIR} --config Release --target install
|
||||
${OPENCOLORIO_BUILDOPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
popd
|
||||
|
||||
# ls -R ${OPENCOLORIO_INSTALL_DIR}
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
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.1.11}
|
||||
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}
|
||||
@@ -20,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
|
||||
@@ -28,35 +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}"
|
||||
|
||||
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 . -B ${OPENEXR_BUILD_DIR} \
|
||||
-DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} \
|
||||
-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}
|
||||
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
|
||||
|
||||
@@ -70,3 +112,5 @@ 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,11 +9,11 @@
|
||||
# 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_SRCDIR=${OPENIMAGEIO_SRCDIR:=${LOCAL_DEPS_DIR}/OpenImageIO}
|
||||
OPENIMAGEIO_BUILD_DIR=${OPENIMAGEIO_BUILD_DIR:=${OPENIMAGEIO_SRCDIR}/build}
|
||||
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}
|
||||
@@ -32,7 +32,6 @@ mkdir -p ${OPENIMAGEIO_BUILD_DIR} && true
|
||||
pushd $OPENIMAGEIO_SRCDIR
|
||||
git fetch --all -p
|
||||
git checkout $OPENIMAGEIO_VERSION --force
|
||||
echo "Building OpenImageIO from commit" `git rev-parse --short HEAD`
|
||||
|
||||
if [[ "$USE_SIMD" != "" ]] ; then
|
||||
OPENIMAGEIO_CMAKE_FLAGS="$OPENIMAGEIO_CMAKE_FLAGS -DUSE_SIMD=$USE_SIMD"
|
||||
@@ -43,7 +42,7 @@ fi
|
||||
|
||||
# if [[ "$ARCH" == "windows64" ]] ; then
|
||||
pushd ${OPENIMAGEIO_BUILD_DIR}
|
||||
cmake .. -G "$CMAKE_GENERATOR" \
|
||||
cmake ../.. -G "$CMAKE_GENERATOR" \
|
||||
-DCMAKE_BUILD_TYPE="$OPENIMAGEIO_BUILD_TYPE" \
|
||||
-DCMAKE_INSTALL_PREFIX="$OPENIMAGEIO_INSTALLDIR" \
|
||||
-DPYTHON_VERSION="$PYTHON_VERSION" \
|
||||
|
||||
@@ -11,7 +11,7 @@ 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}
|
||||
@@ -34,19 +34,17 @@ if [[ ! -e ${PUGIXML_SRC_DIR} ]] ; then
|
||||
git clone ${PUGIXML_REPO} ${PUGIXML_SRC_DIR}
|
||||
fi
|
||||
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 . -B ${PUGIXML_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${PUGIXML_INSTALL_DIR} \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_TESTS=OFF \
|
||||
${PUGIXML_BUILD_OPTS} ..
|
||||
time cmake --build ${PUGIXML_BUILD_DIR} --config Release --target install
|
||||
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
|
||||
|
||||
@@ -11,7 +11,7 @@ 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:=v2.8.1}
|
||||
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,7 +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:=}
|
||||
PYBIND11_BUILD_OPTS=${PYBIND11_BUILD_OPTS:=}
|
||||
|
||||
if [[ "${PYTHON_VERSION}" != "" ]] ; then
|
||||
PYBIND11_BUILD_OPTS+=" -DPYBIND11_PYTHON_VERSION=${PYTHON_VERSION}"
|
||||
@@ -38,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,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
|
||||
@@ -12,31 +12,17 @@ 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
|
||||
|
||||
pushd build
|
||||
cmake .. -G "$CMAKE_GENERATOR" \
|
||||
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 cmake-save || /bin/true
|
||||
cp -r CMake* *.cmake 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 . --target ${BUILDTARGET} --config ${CMAKE_BUILD_TYPE}
|
||||
fi
|
||||
time cmake --build . --target ${BUILDTARGET:=install} --config ${CMAKE_BUILD_TYPE}
|
||||
popd
|
||||
|
||||
if [[ "${DEBUG_CI:=0}" != "0" ]] ; then
|
||||
|
||||
@@ -1,38 +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
|
||||
popd
|
||||
@@ -8,6 +8,28 @@
|
||||
# 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}
|
||||
@@ -18,12 +40,12 @@ if [[ "${RUNNER_OS}" == "macOS" ]] ; then
|
||||
fi
|
||||
mkdir -p $CCACHE_DIR
|
||||
|
||||
export OSL_ROOT=$PWD/dist
|
||||
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 ASAN_OPTIONS=print_suppressions=0
|
||||
|
||||
export USE_PYTHON=${USE_PYTHON:=1}
|
||||
export PYTHON_VERSION=${PYTHON_VERSION:="2.7"}
|
||||
@@ -39,6 +61,11 @@ export CMAKE_GENERATOR=${CMAKE_GENERATOR:=Ninja}
|
||||
export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:=Release}
|
||||
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 CMAKE_PREFIX_PATH=${LOCAL_DEPS_DIR}/dist:${CMAKE_PREFIX_PATH}
|
||||
export LD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/dist/lib:$LD_LIBRARY_PATH
|
||||
@@ -47,29 +74,7 @@ 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}
|
||||
|
||||
# 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}}
|
||||
|
||||
mkdir -p build dist
|
||||
mkdir -p build/$PLATFORM dist/$PLATFORM
|
||||
|
||||
echo "HOME = $HOME"
|
||||
echo "PWD = $PWD"
|
||||
@@ -84,7 +89,7 @@ env | sort
|
||||
|
||||
if [[ `uname -s` == "Linux" ]] ; then
|
||||
head -40 /proc/cpuinfo
|
||||
elif [[ ${RUNNER_OS} == "macOS" ]] ; then
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ from __future__ import print_function, absolute_import
|
||||
###
|
||||
### 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:
|
||||
@@ -114,7 +114,7 @@ from __future__ import print_function, absolute_import
|
||||
### 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.
|
||||
|
||||
@@ -12,97 +12,40 @@ set -ex
|
||||
# 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 [[ "$CXX" == "icpc" || "$CC" == "icc" || "$USE_ICC" != "" ]] ; then
|
||||
# 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
|
||||
# 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
|
||||
|
||||
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||
time sudo apt-get update
|
||||
|
||||
time sudo apt-get -q install -y \
|
||||
git cmake ninja-build ccache g++ \
|
||||
libboost-dev libboost-thread-dev libboost-filesystem-dev \
|
||||
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
|
||||
|
||||
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
|
||||
libopencolorio-dev \
|
||||
qt5-default
|
||||
|
||||
export CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu:$CMAKE_PREFIX_PATH
|
||||
|
||||
# Nonstandard python versions
|
||||
if [[ "${PYTHON_VERSION}" == "3.9" ]] ; then
|
||||
time sudo apt-get -q install -y python3.9-dev python3-numpy
|
||||
pip3 --version
|
||||
pip3 install numpy
|
||||
elif [[ "$PYTHON_VERSION" == "2.7" ]] ; then
|
||||
time sudo apt-get -q install -y python-dev python-numpy
|
||||
else
|
||||
pip3 install numpy
|
||||
fi
|
||||
|
||||
if [[ "$CXX" == "g++-6" ]] ; 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
|
||||
@@ -114,29 +57,11 @@ else
|
||||
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
|
||||
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
|
||||
|
||||
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
|
||||
@@ -158,11 +83,6 @@ if [[ "$OPTIX_VERSION" != "" ]] ; then
|
||||
fi
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Packages we need to build from scratch.
|
||||
#
|
||||
|
||||
source src/build-scripts/build_pybind11.bash
|
||||
|
||||
if [[ "$OPENEXR_VERSION" != "" ]] ; then
|
||||
@@ -175,36 +95,22 @@ 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
|
||||
# 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
|
||||
# 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 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 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
|
||||
|
||||
# Save the env for use by other stages
|
||||
src/build-scripts/save-env.bash
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# DEP_DIR="$PWD/ext/dist"
|
||||
DEP_DIR="$PWD/dist"
|
||||
DEP_DIR="$PWD/dist/$PLATFORM"
|
||||
mkdir -p "$DEP_DIR"
|
||||
INT_DIR="build"
|
||||
INT_DIR="build/$PLATFORM"
|
||||
VCPKG_INSTALLATION_ROOT=/c/vcpkg
|
||||
|
||||
export CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH:=.}
|
||||
|
||||
@@ -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,52 +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
|
||||
|
||||
brew install --display-times -q gcc ccache cmake ninja boost || true
|
||||
brew link --overwrite gcc
|
||||
brew install --display-times -q python@${PYTHON_VERSION} || true
|
||||
# brew unlink python@3.8 || true
|
||||
# brew unlink python@3.9 || true
|
||||
brew unlink python@3.10 || true
|
||||
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 imath openexr opencolorio || true
|
||||
#brew install --display-times -q freetype
|
||||
brew install --display-times -q partio pugixml || 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 openvdb || true
|
||||
brew install --display-times -q flex bison
|
||||
brew install --display-times -q fmt
|
||||
brew install --display-times -q llvm${LLVMBREWVER}
|
||||
if [[ "${USE_QT}" != "0" ]] ; then
|
||||
brew install --display-times -q qt${QT_VERSION}
|
||||
fi
|
||||
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
|
||||
# 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=${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,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,24 +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
|
||||
|
||||
from __future__ import print_function, absolute_import
|
||||
|
||||
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)
|
||||
@@ -1,9 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# Save the env for use by other stages. Exclude things that we know aren't
|
||||
# needed.
|
||||
printenv \
|
||||
|
||||
@@ -8,7 +8,7 @@ include(CMakeFindDependencyMacro)
|
||||
|
||||
# add here all the find_dependency() whenever switching to config based dependencies
|
||||
if (@OpenEXR_VERSION@ VERSION_GREATER_EQUAL 3.0)
|
||||
find_dependency(Imath @Imath_VERSION@)
|
||||
find_dependency(Imath @OpenEXR_VERSION@)
|
||||
elseif (@OpenEXR_VERSION@ VERSION_GREATER_EQUAL 2.4 AND @FOUND_OPENEXR_WITH_CONFIG@)
|
||||
find_dependency(IlmBase @OpenEXR_VERSION@)
|
||||
find_dependency(OpenEXR @OpenEXR_VERSION@)
|
||||
@@ -19,16 +19,9 @@ endif ()
|
||||
|
||||
find_dependency(OpenImageIO @OpenImageIO_VERSION@ REQUIRED)
|
||||
|
||||
# Compute the installation prefix relative to this file
|
||||
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
|
||||
|
||||
# There's no guarantee that CMAKE_INSTALL_XXXDIR is a relative path so we extract the final component to handle absolute paths
|
||||
get_filename_component(_INCLUDE_DIR_NAME "@CMAKE_INSTALL_INCLUDEDIR@" NAME)
|
||||
get_filename_component(_LIB_DIR_NAME "@CMAKE_INSTALL_LIBDIR@" NAME)
|
||||
|
||||
set_and_check (@PROJECT_NAME@_INCLUDE_DIR "${_IMPORT_PREFIX}/${_INCLUDE_DIR_NAME}")
|
||||
set_and_check (@PROJECT_NAME@_INCLUDES "${_IMPORT_PREFIX}/${_INCLUDE_DIR_NAME}")
|
||||
set_and_check (@PROJECT_NAME@_LIB_DIR "${_IMPORT_PREFIX}/${_LIB_DIR_NAME}")
|
||||
set_and_check (@PROJECT_NAME@_INCLUDE_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@")
|
||||
set_and_check (@PROJECT_NAME@_INCLUDES "@CMAKE_INSTALL_FULL_INCLUDEDIR@")
|
||||
set_and_check (@PROJECT_NAME@_LIB_DIR "@CMAKE_INSTALL_FULL_LIBDIR@")
|
||||
|
||||
#...logic to determine installedPrefix from the own location...
|
||||
#set (@PROJECT_NAME@_CONFIG_DIR "${installedPrefix}/@CONFIG_INSTALL_DIR@")
|
||||
|
||||
@@ -3,27 +3,10 @@
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
|
||||
set (REQUIRED_DEPS "" CACHE STRING
|
||||
set (REQUIED_DEPS "" CACHE STRING
|
||||
"Additional dependencies to consider required (semicolon-separated list, or ALL)")
|
||||
set (OPTIONAL_DEPS "" CACHE STRING
|
||||
"Additional dependencies to consider optional (semicolon-separated list, or ALL)")
|
||||
option (ALWAYS_PREFER_CONFIG "Prefer a dependency's exported config file if it's available" OFF)
|
||||
|
||||
|
||||
# Utility function to list the names and values of all variables matching
|
||||
# the pattern (case-insensitive)
|
||||
function (dump_matching_variables pattern)
|
||||
string (TOLOWER ${pattern} _pattern_lower)
|
||||
get_cmake_property(_allvars VARIABLES)
|
||||
list (SORT _allvars)
|
||||
foreach (_var IN LISTS _allvars)
|
||||
string (TOLOWER ${_var} _var_lower)
|
||||
if (_var_lower MATCHES ${_pattern_lower})
|
||||
message (STATUS " ${_var} = ${${_var}}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
endfunction ()
|
||||
|
||||
|
||||
|
||||
# checked_find_package(Pkgname ...) is a wrapper for find_package, with the
|
||||
@@ -37,11 +20,8 @@ endfunction ()
|
||||
# turned off explicitly from one of these sources.
|
||||
# * Print a message if the package is enabled but not found. This is based
|
||||
# on ${Pkgname}_FOUND or $PKGNAME_FOUND.
|
||||
# * Optional DEFINITIONS <string>... are passed to add_definitions if the
|
||||
# * Optional DEFINITIONS <string> are passed to add_definitions if the
|
||||
# package is found.
|
||||
# * Optional SETVARIABLES <id>... is a list of CMake variables to set to
|
||||
# TRUE if the package is found (they will not be set or changed if the
|
||||
# package is not found).
|
||||
# * Optional PRINT <list> is a list of variables that will be printed
|
||||
# if the package is found, if VERBOSE is on.
|
||||
# * Optional DEPS <list> is a list of hard dependencies; for each one, if
|
||||
@@ -62,10 +42,6 @@ endfunction ()
|
||||
# version, accepting but warning if it is below this number (even
|
||||
# if above the true minimum version accepted). The warning message
|
||||
# can give an optional explanation, passed as RECOMMEND_MIN_REASON.
|
||||
# * Optional PREFER_CONFIG, if supplied, tries to use an exported config
|
||||
# file from the package before using a FindPackage.cmake module.
|
||||
# * Optional DEBUG turns on extra debugging information related to how
|
||||
# this package is found.
|
||||
#
|
||||
# N.B. This needs to be a macro, not a function, because the find modules
|
||||
# will set(blah val PARENT_SCOPE) and we need that to be the global scope,
|
||||
@@ -73,20 +49,16 @@ endfunction ()
|
||||
macro (checked_find_package pkgname)
|
||||
cmake_parse_arguments(_pkg # prefix
|
||||
# noValueKeywords:
|
||||
"REQUIRED;PREFER_CONFIG;DEBUG"
|
||||
"REQUIRED"
|
||||
# singleValueKeywords:
|
||||
"ENABLE;ISDEPOF;VERSION_MIN;VERSION_MAX;RECOMMEND_MIN;RECOMMEND_MIN_REASON"
|
||||
# multiValueKeywords:
|
||||
"DEFINITIONS;PRINT;DEPS;SETVARIABLES"
|
||||
"DEFINITIONS;PRINT;DEPS"
|
||||
# argsToParse:
|
||||
${ARGN})
|
||||
string (TOLOWER ${pkgname} pkgname_lower)
|
||||
string (TOUPPER ${pkgname} pkgname_upper)
|
||||
set (_pkg_VERBOSE ${VERBOSE})
|
||||
if (_pkg_DEBUG)
|
||||
set (_pkg_VERBOSE ON)
|
||||
endif ()
|
||||
if (NOT _pkg_VERBOSE)
|
||||
if (NOT VERBOSE)
|
||||
set (${pkgname}_FIND_QUIETLY true)
|
||||
set (${pkgname_upper}_FIND_QUIETLY true)
|
||||
endif ()
|
||||
@@ -113,19 +85,8 @@ macro (checked_find_package pkgname)
|
||||
set (_quietskip true)
|
||||
endif ()
|
||||
endif ()
|
||||
set (_config_status "")
|
||||
if (_enable OR _pkg_REQUIRED)
|
||||
if (${pkgname}_FOUND OR ${pkgname_upper}_FOUND)
|
||||
# was already found
|
||||
elseif (_pkg_PREFER_CONFIG OR ALWAYS_PREFER_CONFIG)
|
||||
find_package (${pkgname} CONFIG ${_pkg_UNPARSED_ARGUMENTS})
|
||||
if (${pkgname}_FOUND OR ${pkgname_upper}_FOUND)
|
||||
set (_config_status "from CONFIG")
|
||||
endif ()
|
||||
endif ()
|
||||
if (NOT (${pkgname}_FOUND OR ${pkgname_upper}_FOUND))
|
||||
find_package (${pkgname} ${_pkg_UNPARSED_ARGUMENTS})
|
||||
endif()
|
||||
find_package (${pkgname} ${_pkg_UNPARSED_ARGUMENTS})
|
||||
if ((${pkgname}_FOUND OR ${pkgname_upper}_FOUND)
|
||||
AND ${pkgname}_VERSION
|
||||
AND (_pkg_VERSION_MIN OR _pkg_VERSION_MAX))
|
||||
@@ -145,11 +106,21 @@ macro (checked_find_package pkgname)
|
||||
set (${pkgname}_VERSION ${${_vervar}})
|
||||
endif ()
|
||||
endforeach ()
|
||||
message (STATUS "${ColorGreen}Found ${pkgname} ${${pkgname}_VERSION} ${_config_status}${ColorReset}")
|
||||
message (STATUS "${ColorGreen}Found ${pkgname} ${${pkgname}_VERSION} ${ColorReset}")
|
||||
if (VERBOSE)
|
||||
set (_vars_to_print ${pkgname}_INCLUDES ${pkgname_upper}_INCLUDES
|
||||
${pkgname}_INCLUDE_DIR ${pkgname_upper}_INCLUDE_DIR
|
||||
${pkgname}_INCLUDE_DIRS ${pkgname_upper}_INCLUDE_DIRS
|
||||
${pkgname}_LIBRARIES ${pkgname_upper}_LIBRARIES
|
||||
${_pkg_PRINT})
|
||||
list (REMOVE_DUPLICATES _vars_to_print)
|
||||
foreach (_v IN LISTS _vars_to_print)
|
||||
if (NOT "${${_v}}" STREQUAL "")
|
||||
message (STATUS " ${_v} = ${${_v}}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
endif ()
|
||||
add_definitions (${_pkg_DEFINITIONS})
|
||||
foreach (_v IN LISTS _pkg_SETVARIABLES)
|
||||
set (${_v} TRUE)
|
||||
endforeach ()
|
||||
if (_pkg_RECOMMEND_MIN)
|
||||
if (${${pkgname}_VERSION} VERSION_LESS ${_pkg_RECOMMEND_MIN})
|
||||
message (STATUS "${ColorYellow}Recommend ${pkgname} >= ${_pkg_RECOMMEND_MIN} ${_pkg_RECOMMEND_MIN_REASON} ${ColorReset}")
|
||||
@@ -177,22 +148,6 @@ macro (checked_find_package pkgname)
|
||||
message (FATAL_ERROR "${ColorRed}${pkgname} is required, aborting.${ColorReset}")
|
||||
endif ()
|
||||
endif()
|
||||
if (_pkg_VERBOSE AND (${pkgname}_FOUND OR ${pkgname_upper}_FOUND OR _pkg_DEBUG))
|
||||
if (_pkg_DEBUG)
|
||||
dump_matching_variables (${pkgname})
|
||||
endif ()
|
||||
set (_vars_to_print ${pkgname}_INCLUDES ${pkgname_upper}_INCLUDES
|
||||
${pkgname}_INCLUDE_DIR ${pkgname_upper}_INCLUDE_DIR
|
||||
${pkgname}_INCLUDE_DIRS ${pkgname_upper}_INCLUDE_DIRS
|
||||
${pkgname}_LIBRARIES ${pkgname_upper}_LIBRARIES
|
||||
${_pkg_PRINT})
|
||||
list (REMOVE_DUPLICATES _vars_to_print)
|
||||
foreach (_v IN LISTS _vars_to_print)
|
||||
if (NOT "${${_v}}" STREQUAL "")
|
||||
message (STATUS " ${_v} = ${${_v}}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
endif ()
|
||||
else ()
|
||||
if (NOT _quietskip)
|
||||
message (STATUS "${ColorRed}Not using ${pkgname} -- disabled ${_disablereason} ${ColorReset}")
|
||||
|
||||
@@ -15,23 +15,23 @@
|
||||
###########################################################################
|
||||
# Print some basic status about the system and compiler
|
||||
#
|
||||
message (VERBOSE "CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}")
|
||||
message (VERBOSE "CMAKE_SYSTEM_VERSION = ${CMAKE_SYSTEM_VERSION}")
|
||||
message (VERBOSE "CMAKE_SYSTEM_PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
message (STATUS "CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}")
|
||||
message (STATUS "CMAKE_CXX_COMPILER_ID = ${CMAKE_CXX_COMPILER_ID}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}")
|
||||
message (STATUS "CMAKE_SYSTEM_VERSION = ${CMAKE_SYSTEM_VERSION}")
|
||||
message (STATUS "CMAKE_SYSTEM_PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
endif ()
|
||||
message (STATUS "CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}")
|
||||
message (STATUS "CMAKE_CXX_COMPILER_ID = ${CMAKE_CXX_COMPILER_ID}")
|
||||
|
||||
|
||||
###########################################################################
|
||||
# C++ language standard
|
||||
#
|
||||
set (CMAKE_CXX_STANDARD 14 CACHE STRING
|
||||
"C++ standard to build with (14, 17, 20, etc.)")
|
||||
set (DOWNSTREAM_CXX_STANDARD 14 CACHE STRING
|
||||
"C++ minimum standard to impose on downstream clients")
|
||||
set (CMAKE_CXX_STANDARD 11 CACHE STRING
|
||||
"C++ standard to prefer (11, 14, 17, 20, etc.)")
|
||||
set (CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set (CMAKE_CXX_EXTENSIONS OFF)
|
||||
message (STATUS "Building with C++${CMAKE_CXX_STANDARD}, downstream minimum C++${DOWNSTREAM_CXX_STANDARD}")
|
||||
message (STATUS "Building for C++${CMAKE_CXX_STANDARD}")
|
||||
|
||||
|
||||
###########################################################################
|
||||
@@ -42,13 +42,14 @@ if (CMAKE_COMPILER_IS_GNUCC)
|
||||
execute_process (COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
|
||||
OUTPUT_VARIABLE GCC_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
message (VERBOSE "Using gcc ${GCC_VERSION} as the compiler")
|
||||
if (VERBOSE)
|
||||
message (STATUS "Using gcc ${GCC_VERSION} as the compiler")
|
||||
endif ()
|
||||
else ()
|
||||
set (GCC_VERSION 0)
|
||||
endif ()
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER MATCHES "[Cc]lang"
|
||||
OR CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM")
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER MATCHES "[Cc]lang")
|
||||
# If using any flavor of clang, set CMAKE_COMPILER_IS_CLANG. If it's
|
||||
# Apple's variety, set CMAKE_COMPILER_IS_APPLECLANG and
|
||||
# APPLECLANG_VERSION_STRING, otherwise for generic clang set
|
||||
@@ -59,36 +60,30 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER MATCHES "[Cc]lan
|
||||
set (CMAKE_CXX_COMPILER_ID "AppleClang")
|
||||
set (CMAKE_COMPILER_IS_APPLECLANG 1)
|
||||
string (REGEX REPLACE ".* version ([0-9]+\\.[0-9]+).*" "\\1" APPLECLANG_VERSION_STRING ${clang_full_version_string})
|
||||
set (ANY_CLANG_VERSION_STRING ${APPLECLANG_VERSION_STRING})
|
||||
message (VERBOSE "The compiler is Clang: ${CMAKE_CXX_COMPILER_ID} version ${APPLECLANG_VERSION_STRING}")
|
||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "IntelLLVM")
|
||||
set (CMAKE_COMPILER_IS_INTELCLANG 1)
|
||||
string (REGEX MATCH "[0-9]+(\\.[0-9]+)+" INTELCLANG_VERSION_STRING ${clang_full_version_string})
|
||||
set (ANY_CLANG_VERSION_STRING ${INTELCLANG_VERSION_STRING})
|
||||
message (VERBOSE "The compiler is Intel Clang: ${CMAKE_CXX_COMPILER_ID} version ${INTELCLANG_VERSION_STRING}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "The compiler is Clang: ${CMAKE_CXX_COMPILER_ID} version ${APPLECLANG_VERSION_STRING}")
|
||||
endif ()
|
||||
else ()
|
||||
set (CMAKE_COMPILER_IS_GENERICCLANG 1)
|
||||
string (REGEX REPLACE ".* version ([0-9]+\\.[0-9]+).*" "\\1" CLANG_VERSION_STRING ${clang_full_version_string})
|
||||
set (ANY_CLANG_VERSION_STRING ${CLANG_VERSION_STRING})
|
||||
message (VERBOSE "The compiler is Clang: ${CMAKE_CXX_COMPILER_ID} version ${CLANG_VERSION_STRING}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "The compiler is Clang: ${CMAKE_CXX_COMPILER_ID} version ${CLANG_VERSION_STRING}")
|
||||
endif ()
|
||||
endif ()
|
||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||
set (CMAKE_COMPILER_IS_INTEL 1)
|
||||
message (VERBOSE "Using Intel as the compiler")
|
||||
if (VERBOSE)
|
||||
message (STATUS "Using Intel as the compiler")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
|
||||
###########################################################################
|
||||
# Turn on more detailed warnings and optionally consider warnings as errors
|
||||
#
|
||||
if (NOT ${PROJECT_NAME}_SUPPORTED_RELEASE OR DEFINED ENV{${PROJECT_NAME}_CI})
|
||||
# For development branches (i.e., not a supported release), or when
|
||||
# running CI, default to treating all warnings as errors.
|
||||
option (STOP_ON_WARNING "Stop building if there are any compiler warnings" ON)
|
||||
else ()
|
||||
# For release branches not doing a CI build default to just printing
|
||||
# warnings but not letting them stop the build.
|
||||
if (${PROJECT_NAME}_SUPPORTED_RELEASE)
|
||||
option (STOP_ON_WARNING "Stop building if there are any compiler warnings" OFF)
|
||||
else ()
|
||||
option (STOP_ON_WARNING "Stop building if there are any compiler warnings" ON)
|
||||
endif()
|
||||
option (EXTRA_WARNINGS "Enable lots of extra pedantic warnings" OFF)
|
||||
if (NOT MSVC)
|
||||
@@ -96,8 +91,10 @@ if (NOT MSVC)
|
||||
if (EXTRA_WARNINGS)
|
||||
add_compile_options ("-Wextra")
|
||||
endif ()
|
||||
if (STOP_ON_WARNING)
|
||||
if (STOP_ON_WARNING OR DEFINED ENV{${PROJECT_NAME}_CI})
|
||||
add_compile_options ("-Werror")
|
||||
# N.B. Force CI builds to use -Werror, even if STOP_ON_WARNING has
|
||||
# been switched off by default, which we may do in release branches.
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
@@ -113,11 +110,11 @@ endif ()
|
||||
# give more fine-grained control for hiding symbols, because sometimes
|
||||
# dependent libraries may not be well behaved and need extra hiding.
|
||||
#
|
||||
set (CMAKE_CXX_VISIBILITY_PRESET "hidden" CACHE STRING "Symbol visibility (hidden or default")
|
||||
set (CXX_VISIBILITY_PRESET "hidden" CACHE STRING "Symbol visibility (hidden or default")
|
||||
option (VISIBILITY_INLINES_HIDDEN "Hide symbol visibility of inline functions" ON)
|
||||
set (VISIBILITY_MAP_FILE "${PROJECT_SOURCE_DIR}/src/build-scripts/hidesymbols.map" CACHE FILEPATH "Visibility map file")
|
||||
set (CMAKE_C_VISIBILITY_PRESET ${CMAKE_CXX_VISIBILITY_PRESET})
|
||||
if (${CMAKE_CXX_VISIBILITY_PRESET} STREQUAL "hidden" AND VISIBILITY_MAP_FILE AND
|
||||
set (C_VISIBILITY_PRESET ${CXX_VISIBILITY_PRESET})
|
||||
if (${CXX_VISIBILITY_PRESET} STREQUAL "hidden" AND
|
||||
(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) AND
|
||||
(CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU"))
|
||||
# Linux/FreeBSD/Hurd: also hide all the symbols of dependent libraries
|
||||
@@ -141,7 +138,6 @@ if (CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_APPLECLANG)
|
||||
add_compile_options ("-Wno-unused-private-field")
|
||||
add_compile_options ("-Wno-tautological-compare")
|
||||
add_compile_options ("-Wno-unknown-pragmas")
|
||||
add_compile_options ("-Wno-format-security")
|
||||
# disable warning about unused command line arguments
|
||||
add_compile_options ("-Qunused-arguments")
|
||||
# Don't warn if we ask it not to warn about warnings it doesn't know
|
||||
@@ -151,17 +147,9 @@ if (CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_APPLECLANG)
|
||||
add_compile_options ("-Wno-unused-local-typedefs")
|
||||
endif ()
|
||||
if (CLANG_VERSION_STRING VERSION_GREATER_EQUAL 3.9)
|
||||
# Don't warn about using unknown preprocessor symbols in `#if`
|
||||
# Don't warn about using unknown preprocessor symbols in #if'set
|
||||
add_compile_options ("-Wno-expansion-to-defined")
|
||||
endif ()
|
||||
# Suppress warnings about our strategic use of bitwise operations in place
|
||||
# of logical operators to produce branchless code in some places.
|
||||
if (CLANG_VERSION_STRING VERSION_GREATER_EQUAL 14.0
|
||||
OR APPLECLANG_VERSION_STRING VERSION_GREATER_EQUAL 14.0
|
||||
OR INTELCLANG_VERSION_STRING VERSION_GREATER_EQUAL 14.0)
|
||||
add_compile_options ("-Wno-bitwise-instead-of-logical")
|
||||
endif ()
|
||||
|
||||
# disable warning in flex-generated code
|
||||
add_compile_options ("-Wno-null-conversion")
|
||||
add_compile_options ("-Wno-error=strict-overflow")
|
||||
@@ -189,14 +177,9 @@ if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
|
||||
add_compile_options ("-fno-math-errno")
|
||||
endif ()
|
||||
|
||||
if (INTELCLANG_VERSION_STRING VERSION_GREATER_EQUAL 2022.1.0)
|
||||
# New versions of icx warn about changing certain floating point options
|
||||
add_compile_options ("-Wno-overriding-t-option")
|
||||
endif ()
|
||||
|
||||
if (MSVC)
|
||||
# Microsoft specific options
|
||||
string (REGEX REPLACE "/W[1-4]" "/W1" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
add_compile_options (/W1)
|
||||
add_definitions (-D_CRT_SECURE_NO_DEPRECATE)
|
||||
add_definitions (-D_CRT_SECURE_NO_WARNINGS)
|
||||
add_definitions (-D_CRT_NONSTDC_NO_WARNINGS)
|
||||
@@ -211,7 +194,6 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD"
|
||||
endif ()
|
||||
|
||||
|
||||
# Remember the -std flags we need will be used later for custom Cuda builds
|
||||
set (CSTD_FLAGS "")
|
||||
if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_INTEL)
|
||||
set (CSTD_FLAGS "-std=c++${CMAKE_CXX_STANDARD}")
|
||||
@@ -219,10 +201,6 @@ endif ()
|
||||
|
||||
|
||||
|
||||
# We will use this for ccache and timing
|
||||
set (MY_RULE_LAUNCH "")
|
||||
|
||||
|
||||
###########################################################################
|
||||
# Use ccache if found
|
||||
#
|
||||
@@ -306,7 +284,9 @@ if (NOT USE_SIMD STREQUAL "")
|
||||
else ()
|
||||
string (REPLACE "," ";" SIMD_FEATURE_LIST ${USE_SIMD})
|
||||
foreach (feature ${SIMD_FEATURE_LIST})
|
||||
message (VERBOSE "SIMD feature: ${feature}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "SIMD feature: ${feature}")
|
||||
endif ()
|
||||
if (MSVC OR CMAKE_COMPILER_IS_INTEL)
|
||||
set (SIMD_COMPILE_FLAGS ${SIMD_COMPILE_FLAGS} "/arch:${feature}")
|
||||
else ()
|
||||
@@ -324,33 +304,6 @@ if (NOT USE_SIMD STREQUAL "")
|
||||
add_compile_options (${SIMD_COMPILE_FLAGS})
|
||||
endif ()
|
||||
|
||||
###########################################################################
|
||||
# Batched SIMD shader execution options.
|
||||
#
|
||||
# The USE_BATCHED option may be set to indicate that support for batched
|
||||
# SIMD shader execution be compiled along with targe specific libraries
|
||||
set (USE_BATCHED "" CACHE STRING "Build batched SIMD shader execution for (0, b8_AVX, b8_AVX2, b8_AVX2_noFMA, b8_AVX512, b8_AVX512_noFMA, b16_AVX512, b16_AVX512_noFMA)")
|
||||
option (VEC_REPORT "Enable compiler's reporting system for vectorization" OFF)
|
||||
set (BATCHED_SUPPORT_DEFINES "")
|
||||
set (BATCHED_TARGET_LIBS "")
|
||||
set (OSL_BUILD_BATCHED 0)
|
||||
if (NOT USE_BATCHED STREQUAL "")
|
||||
message (STATUS "Compiling with batched SIMD targets ${USE_BATCHED}")
|
||||
if (NOT USE_BATCHED STREQUAL "0")
|
||||
set (OSL_BUILD_BATCHED 1)
|
||||
string (REPLACE "," ";" BATCHED_TARGET_LIST ${USE_BATCHED})
|
||||
foreach (batched_target ${BATCHED_TARGET_LIST})
|
||||
if (VERBOSE)
|
||||
message (STATUS "BATCHED target: ${batched_target}")
|
||||
endif ()
|
||||
list (APPEND BATCHED_SUPPORT_DEFINES "__OSL_SUPPORTS_${batched_target}")
|
||||
endforeach()
|
||||
else ()
|
||||
message (STATUS "Compiling with NO batched SIMD targets, USE_BATCHED=0")
|
||||
endif ()
|
||||
else ()
|
||||
message (STATUS "Compiling with NO batched SIMD targets, USE_BATCHED is empty")
|
||||
endif ()
|
||||
|
||||
###########################################################################
|
||||
# Preparation to test for compiler/language features
|
||||
@@ -360,6 +313,26 @@ endif ()
|
||||
include (CMakePushCheckState)
|
||||
include (CheckCXXSourceRuns)
|
||||
|
||||
###########################################################################
|
||||
# Find out if it's safe for us to use std::regex or if we need boost.regex.
|
||||
# This is primarily about gcc 4.8 having a broken regex implementation.
|
||||
# This will be obsolete once our minimum supported gcc is >= 4.9.
|
||||
#
|
||||
cmake_push_check_state ()
|
||||
check_cxx_source_runs("
|
||||
#include <regex>
|
||||
int main() {
|
||||
std::string r = std::regex_replace(std::string(\"abc\"), std::regex(\"b\"), \" \");
|
||||
return r == \"a c\" ? 0 : -1;
|
||||
}"
|
||||
USE_STD_REGEX)
|
||||
cmake_pop_check_state ()
|
||||
if (USE_STD_REGEX)
|
||||
add_definitions (-DUSE_STD_REGEX)
|
||||
else ()
|
||||
add_definitions (-DUSE_BOOST_REGEX)
|
||||
endif ()
|
||||
|
||||
|
||||
###########################################################################
|
||||
# Code coverage options
|
||||
@@ -367,9 +340,11 @@ include (CheckCXXSourceRuns)
|
||||
option (CODECOV "Build code coverage tests" OFF)
|
||||
if (CODECOV AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG))
|
||||
message (STATUS "Compiling for code coverage analysis")
|
||||
add_compile_options (-ftest-coverage -fprofile-arcs)
|
||||
add_compile_options ("-ftest-coverage -fprofile-arcs -O0")
|
||||
add_definitions ("-D${PROJ_NAME}_CODE_COVERAGE=1")
|
||||
link_libraries(gcov)
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ftest-coverage -fprofile-arcs")
|
||||
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -ftest-coverage -fprofile-arcs")
|
||||
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -ftest-coverage -fprofile-arcs")
|
||||
endif ()
|
||||
|
||||
|
||||
@@ -383,9 +358,22 @@ if (SANITIZE AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG))
|
||||
foreach (feature ${SANITIZE_FEATURE_LIST})
|
||||
message (STATUS " sanitize feature: ${feature}")
|
||||
add_compile_options (-fsanitize=${feature})
|
||||
add_link_options (-fsanitize=${feature})
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${feature}")
|
||||
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fsanitize=${feature}")
|
||||
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=${feature}")
|
||||
endforeach()
|
||||
add_compile_options (-g -fno-omit-frame-pointer)
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
set (SANITIZE_ON_LINUX 1)
|
||||
endif ()
|
||||
if (CMAKE_COMPILER_IS_GNUCC AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
add_compile_options ("-fuse-ld=gold")
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
|
||||
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=gold")
|
||||
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold")
|
||||
set (SANITIZE_LIBRARIES "asan;pthread")
|
||||
# set (SANITIZE_LIBRARIES "asan" "ubsan")
|
||||
endif()
|
||||
if (CMAKE_COMPILER_IS_GNUCC)
|
||||
# turn on glibcxx extra annotations to find vector writes past end
|
||||
add_definitions ("-D_GLIBCXX_SANITIZE_VECTOR=1")
|
||||
@@ -413,7 +401,7 @@ if (CLANG_TIDY)
|
||||
find_program(CLANG_TIDY_EXE NAMES "clang-tidy"
|
||||
DOC "Path to clang-tidy executable")
|
||||
message (STATUS "CLANG_TIDY_EXE ${CLANG_TIDY_EXE}")
|
||||
if (CLANG_TIDY_EXE)
|
||||
if (CLANG_TIDY_EXE AND NOT ${CMAKE_VERSION} VERSION_LESS 3.6)
|
||||
set (CMAKE_CXX_CLANG_TIDY
|
||||
"${CLANG_TIDY_EXE}"
|
||||
)
|
||||
@@ -451,17 +439,40 @@ endif ()
|
||||
# is being built as a subproject.
|
||||
if (PROJECT_IS_TOP_LEVEL)
|
||||
set (CLANG_FORMAT_EXE_HINT "" CACHE PATH "clang-format executable's directory (will search if not specified")
|
||||
set (CLANG_FORMAT_INCLUDES "src/*.cpp" "src/*.h" "src/*.cu"
|
||||
set (CLANG_FORMAT_INCLUDES # "src/*.h" "src/*.cpp"
|
||||
"src/include/*.h"
|
||||
"src/liboslcomp/*.cpp"
|
||||
"src/liboslcomp/*.h"
|
||||
"src/liboslquery/*.cpp"
|
||||
"src/liboslquery/*.h"
|
||||
"src/oslinfo/*.cpp"
|
||||
"src/oslc/*.cpp"
|
||||
"src/osl.imageio/*.cpp"
|
||||
"src/osltoy/*.cpp"
|
||||
"src/osltoy/*.h"
|
||||
"testsuite/*.cpp"
|
||||
CACHE STRING "Glob patterns to include for clang-format")
|
||||
set (CLANG_FORMAT_EXCLUDES
|
||||
# Files "imported and modified" that we don't want to reformat, so
|
||||
# they continue to match their upstream versions.
|
||||
"src/include/OSL/Imathx/*"
|
||||
"src/include/OSL/matrix22.h"
|
||||
# Files that are currently being modified with the SIMD batch
|
||||
# shading -- we'll reformat those only after that project work is
|
||||
# completed, to avoid nasty merge conflicts.
|
||||
"src/include/OSL/rendererservices.h"
|
||||
"src/include/OSL/*llvm*"
|
||||
"src/liboslexec/*llvm*"
|
||||
"src/liboslexec/oslexec_pvt.h"
|
||||
# Files that are currently being modified with the OptiX work --
|
||||
# we'll reformat those only after that project work is completed, to
|
||||
# avoid nasty merge conflicts.
|
||||
"src/include/OSL/device_string.h"
|
||||
"src/include/OSL/oslexec.h"
|
||||
"src/testrender/cuda/*"
|
||||
# Header files in testsuite are almost certainly osl headers, not C++
|
||||
"testsuite/*.h"
|
||||
# Header files in shaders are OSL, not C++
|
||||
"src/shaders/*.h"
|
||||
""
|
||||
CACHE STRING "Glob patterns to exclude for clang-format")
|
||||
find_program (CLANG_FORMAT_EXE
|
||||
NAMES clang-format bin/clang-format
|
||||
@@ -515,7 +526,9 @@ else ()
|
||||
set (SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
|
||||
CACHE STRING "Set the SO version for dynamic libraries")
|
||||
endif ()
|
||||
message(VERBOSE "Setting SOVERSION to: ${SOVERSION}")
|
||||
if (VERBOSE)
|
||||
message(STATUS "Setting SOVERSION to: ${SOVERSION}")
|
||||
endif ()
|
||||
|
||||
|
||||
###########################################################################
|
||||
@@ -577,7 +590,9 @@ else ()
|
||||
# add the automatically determined parts of the RPATH that
|
||||
# point to directories outside the build tree to the install RPATH
|
||||
set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
message (VERBOSE "CMAKE_INSTALL_RPATH = ${CMAKE_INSTALL_RPATH}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "CMAKE_INSTALL_RPATH = ${CMAKE_INSTALL_RPATH}")
|
||||
endif ()
|
||||
endif ()
|
||||
# OSL considerations because we run oslc in the course of building:
|
||||
# Use (i.e. don't skip) the full RPATH for the build tree
|
||||
|
||||
@@ -2,27 +2,14 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
set ($OSL_EXTRA_NVCC_ARGS "" CACHE STRING "Custom args passed to nvcc when compiling CUDA code")
|
||||
set (CUDA_OPT_FLAG_NVCC "-O3" CACHE STRING "The optimization level to use when compiling CUDA/C++ files with nvcc")
|
||||
set (CUDA_OPT_FLAG_CLANG "-O3" CACHE STRING "The optimization level to use when compiling CUDA/C++ files with clang")
|
||||
|
||||
# FTZ is enabled by default since it offers the best performance,
|
||||
# but it may be disabled to debug numerical issues, to better match
|
||||
# host behavior, etc.
|
||||
set (CUDA_NO_FTZ OFF CACHE BOOL "Do not enable force-to-zero when compiling for CUDA")
|
||||
if (CUDA_NO_FTZ)
|
||||
add_definitions ("-DOSL_CUDA_NO_FTZ=1")
|
||||
endif ()
|
||||
|
||||
# Compile a CUDA file to PTX using NVCC
|
||||
function ( NVCC_COMPILE cuda_src extra_headers ptx_generated extra_nvcc_args )
|
||||
function ( NVCC_COMPILE cuda_src ptx_generated extra_nvcc_args )
|
||||
get_filename_component ( cuda_src_we ${cuda_src} NAME_WE )
|
||||
get_filename_component ( cuda_src_dir ${cuda_src} DIRECTORY )
|
||||
set (cuda_ptx "${CMAKE_CURRENT_BINARY_DIR}/${cuda_src_we}.ptx" )
|
||||
set (${ptxlist} ${${ptxlist}} ${cuda_ptx} )
|
||||
set (${ptx_generated} ${cuda_ptx} PARENT_SCOPE)
|
||||
file ( GLOB cuda_headers "${cuda_src_dir}/*.h" )
|
||||
list (APPEND cuda_headers ${extra_headers})
|
||||
|
||||
list (TRANSFORM IMATH_INCLUDES PREPEND -I
|
||||
OUTPUT_VARIABLE ALL_IMATH_INCLUDES)
|
||||
@@ -31,10 +18,6 @@ function ( NVCC_COMPILE cuda_src extra_headers ptx_generated extra_nvcc_args )
|
||||
list (TRANSFORM OpenImageIO_INCLUDES PREPEND -I
|
||||
OUTPUT_VARIABLE ALL_OpenImageIO_INCLUDES)
|
||||
|
||||
if (NOT CUDA_NO_FTZ)
|
||||
set (NVCC_FTZ_FLAG "--ftz=true")
|
||||
endif ()
|
||||
|
||||
add_custom_command ( OUTPUT ${cuda_ptx}
|
||||
COMMAND ${CUDA_NVCC_EXECUTABLE}
|
||||
"-I${OPTIX_INCLUDES}"
|
||||
@@ -51,11 +34,8 @@ function ( NVCC_COMPILE cuda_src extra_headers ptx_generated extra_nvcc_args )
|
||||
${LLVM_COMPILE_FLAGS}
|
||||
-DOSL_USE_FAST_MATH=1
|
||||
-m64 -arch ${CUDA_TARGET_ARCH} -ptx
|
||||
--std=c++${CMAKE_CXX_STANDARD}
|
||||
-dc --use_fast_math ${CUDA_OPT_FLAG_NVCC} ${NVCC_FTZ_FLAG}
|
||||
--expt-relaxed-constexpr
|
||||
--std=c++${CMAKE_CXX_STANDARD} -dc -O3 --use_fast_math --expt-relaxed-constexpr
|
||||
${extra_nvcc_args}
|
||||
${OSL_EXTRA_NVCC_ARGS}
|
||||
${cuda_src} -o ${cuda_ptx}
|
||||
MAIN_DEPENDENCY ${cuda_src}
|
||||
DEPENDS ${cuda_src} ${cuda_headers} oslexec
|
||||
@@ -71,11 +51,13 @@ function ( MAKE_CUDA_BITCODE src suffix generated_bc extra_clang_args )
|
||||
|
||||
# Setup the compile flags
|
||||
get_property (CURRENT_DEFINITIONS DIRECTORY PROPERTY COMPILE_DEFINITIONS)
|
||||
message (VERBOSE "Current #defines are ${CURRENT_DEFINITIONS}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "Current #defines are ${CURRENT_DEFINITIONS}")
|
||||
endif ()
|
||||
foreach (def ${CURRENT_DEFINITIONS})
|
||||
set (LLVM_COMPILE_FLAGS ${LLVM_COMPILE_FLAGS} "-D${def}")
|
||||
endforeach()
|
||||
set (LLVM_COMPILE_FLAGS ${LLVM_COMPILE_FLAGS} ${CSTD_FLAGS})
|
||||
set (LLVM_COMPILE_FLAGS ${LLVM_COMPILE_FLAGS} ${SIMD_COMPILE_FLAGS} ${CSTD_FLAGS})
|
||||
|
||||
# Setup the bitcode generator
|
||||
if (NOT LLVM_BC_GENERATOR)
|
||||
@@ -90,35 +72,9 @@ function ( MAKE_CUDA_BITCODE src suffix generated_bc extra_clang_args )
|
||||
if (NOT LLVM_BC_GENERATOR)
|
||||
message (FATAL_ERROR "You must have a valid llvm bitcode generator (clang++) somewhere.")
|
||||
endif ()
|
||||
message (VERBOSE "Using LLVM_BC_GENERATOR ${LLVM_BC_GENERATOR} to generate bitcode.")
|
||||
|
||||
if (NOT LLVM_AS_TOOL)
|
||||
find_program (LLVM_AS_TOOL NAMES "llvm-as"
|
||||
PATHS "${LLVM_DIRECTORY}/bin" "${LLVM_DIRECTORY}/tools/llvm"
|
||||
NO_CMAKE_PATH NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH
|
||||
NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH)
|
||||
endif ()
|
||||
|
||||
if (NOT LLVM_LINK_TOOL)
|
||||
find_program (LLVM_LINK_TOOL NAMES "llvm-link"
|
||||
PATHS "${LLVM_DIRECTORY}/bin" "${LLVM_DIRECTORY}/tools/llvm"
|
||||
NO_CMAKE_PATH NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH
|
||||
NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH)
|
||||
endif ()
|
||||
|
||||
if (NOT LLVM_LLC_TOOL)
|
||||
find_program (LLVM_LLC_TOOL NAMES "llc"
|
||||
PATHS "${LLVM_DIRECTORY}/bin" "${LLVM_DIRECTORY}/tools/llvm"
|
||||
NO_CMAKE_PATH NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH
|
||||
NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH)
|
||||
endif ()
|
||||
|
||||
if (NOT LLVM_OPT_TOOL)
|
||||
find_program (LLVM_OPT_TOOL NAMES "opt"
|
||||
PATHS "${LLVM_DIRECTORY}/bin" "${LLVM_DIRECTORY}/tools/llvm"
|
||||
NO_CMAKE_PATH NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH
|
||||
NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH)
|
||||
endif ()
|
||||
if (VERBOSE)
|
||||
message (STATUS "Using LLVM_BC_GENERATOR ${LLVM_BC_GENERATOR} to generate bitcode.")
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
# fix compilation error when using MSVC
|
||||
@@ -130,26 +86,6 @@ function ( MAKE_CUDA_BITCODE src suffix generated_bc extra_clang_args )
|
||||
set (CLANG_MSVC_FIX "${CLANG_MSVC_FIX} -Wno-ignored-attributes -Wno-unknown-attributes")
|
||||
endif ()
|
||||
|
||||
if (NOT LLVM_OPAQUE_POINTERS AND ${LLVM_VERSION} VERSION_GREATER_EQUAL 15.0)
|
||||
# Until we fully support opaque pointers, we need to disable
|
||||
# them when using LLVM 15.
|
||||
list (APPEND LLVM_COMPILE_FLAGS -Xclang -no-opaque-pointers)
|
||||
endif ()
|
||||
|
||||
if (NOT CUDA_NO_FTZ)
|
||||
set (CLANG_FTZ_FLAG "-fcuda-flush-denormals-to-zero")
|
||||
endif ()
|
||||
|
||||
if ("${CUDA_VERSION}" VERSION_GREATER_EQUAL "12.0")
|
||||
# The textureReference API was removed in CUDA 12.0, but it's still referenced
|
||||
# in the clang headers, so compilation will fail with 12.0 and newer toolkits
|
||||
# due to the missing definitions.
|
||||
#
|
||||
# We don't actually require any of the clang CUDA texture intrinsics, so we can
|
||||
# side-step the issue by preventing them from being included by the preprocessor.
|
||||
set (CUDA_TEXREF_FIX "-D__CLANG_CUDA_TEXTURE_INTRINSICS_H__")
|
||||
endif()
|
||||
|
||||
list (TRANSFORM IMATH_INCLUDES PREPEND -I
|
||||
OUTPUT_VARIABLE ALL_IMATH_INCLUDES)
|
||||
list (TRANSFORM OPENEXR_INCLUDES PREPEND -I
|
||||
@@ -162,7 +98,6 @@ function ( MAKE_CUDA_BITCODE src suffix generated_bc extra_clang_args )
|
||||
"-I${OPTIX_INCLUDES}"
|
||||
"-I${CUDA_INCLUDES}"
|
||||
"-I${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"-I${CMAKE_SOURCE_DIR}/src/liboslexec"
|
||||
"-I${CMAKE_BINARY_DIR}/include"
|
||||
"-I${PROJECT_SOURCE_DIR}/src/include"
|
||||
"-I${PROJECT_SOURCE_DIR}/src/cuda_common"
|
||||
@@ -170,13 +105,13 @@ function ( MAKE_CUDA_BITCODE src suffix generated_bc extra_clang_args )
|
||||
${ALL_IMATH_INCLUDES}
|
||||
${ALL_OPENEXR_INCLUDES}
|
||||
"-I${Boost_INCLUDE_DIRS}"
|
||||
${LLVM_COMPILE_FLAGS} ${CUDA_LIB_FLAGS} ${CLANG_MSVC_FIX} ${CUDA_TEXREF_FIX}
|
||||
${LLVM_COMPILE_FLAGS} ${CUDA_LIB_FLAGS}
|
||||
-D__CUDACC__ -DOSL_COMPILING_TO_BITCODE=1 -DNDEBUG -DOIIO_NO_SSE -D__CUDADEVRT_INTERNAL__
|
||||
--language=cuda --cuda-device-only --cuda-gpu-arch=${CUDA_TARGET_ARCH}
|
||||
-Wno-deprecated-register -Wno-format-security
|
||||
-fno-math-errno -ffast-math ${CUDA_OPT_FLAG_CLANG} ${CLANG_FTZ_FLAG} -S -emit-llvm ${extra_clang_args}
|
||||
-O3 -fno-math-errno -ffast-math -S -emit-llvm ${extra_clang_args}
|
||||
${src} -o ${asm_cuda}
|
||||
COMMAND ${LLVM_AS_TOOL} -f -o ${bc_cuda} ${asm_cuda}
|
||||
COMMAND "${LLVM_DIRECTORY}/bin/llvm-as" -f -o ${bc_cuda} ${asm_cuda}
|
||||
DEPENDS ${exec_headers} ${PROJECT_PUBLIC_HEADERS} ${src}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
|
||||
endfunction ()
|
||||
@@ -191,51 +126,8 @@ function ( LLVM_COMPILE_CUDA llvm_src headers prefix llvm_bc_cpp_generated extra
|
||||
MAKE_CUDA_BITCODE (${llvm_src} "" llvm_bc "${extra_clang_args}")
|
||||
|
||||
add_custom_command (OUTPUT ${llvm_bc_cpp}
|
||||
COMMAND ${Python_EXECUTABLE} "${CMAKE_SOURCE_DIR}/src/build-scripts/serialize-bc.py" ${llvm_bc} ${llvm_bc_cpp} ${prefix}
|
||||
COMMAND python "${CMAKE_SOURCE_DIR}/src/liboslexec/serialize-bc.py" ${llvm_bc} ${llvm_bc_cpp} ${prefix}
|
||||
MAIN_DEPENDENCY ${llvm_src}
|
||||
DEPENDS "${CMAKE_SOURCE_DIR}/src/build-scripts/serialize-bc.py" ${llvm_src} ${headers} ${llvm_bc}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
|
||||
endfunction ()
|
||||
|
||||
function ( MAKE_EMBEDDED_CPP symbol_name output_cpp input_file )
|
||||
add_custom_command ( OUTPUT ${output_cpp}
|
||||
COMMAND ${Python_EXECUTABLE} "${CMAKE_SOURCE_DIR}/src/build-scripts/serialize-bc.py"
|
||||
${input_file} ${output_cpp} "${symbol_name}"
|
||||
|
||||
DEPENDS "${CMAKE_SOURCE_DIR}/src/build-scripts/serialize-bc.py" ${linked_bc}
|
||||
${input_file} ${exec_headers} ${PROJECT_PUBLIC_HEADERS}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
|
||||
endfunction ()
|
||||
|
||||
function ( CUDA_SHADEOPS_COMPILE prefix output_bc output_ptx input_srcs headers )
|
||||
set (linked_bc "${CMAKE_CURRENT_BINARY_DIR}/linked_${prefix}.bc")
|
||||
set (linked_ptx "${CMAKE_CURRENT_BINARY_DIR}/${prefix}.ptx")
|
||||
set (${output_bc} ${linked_bc} PARENT_SCOPE )
|
||||
set (${output_ptx} ${linked_ptx} PARENT_SCOPE )
|
||||
|
||||
foreach ( shadeops_src ${input_srcs} )
|
||||
MAKE_CUDA_BITCODE ( ${shadeops_src} "_cuda" shadeops_bc "" )
|
||||
list ( APPEND shadeops_bc_list ${shadeops_bc} )
|
||||
endforeach ()
|
||||
|
||||
if (LLVM_NEW_PASS_MANAGER)
|
||||
# There is no --nvptx-assign-valid-global-names flag for the new
|
||||
# pass manager, but it appears to run this pass by default.
|
||||
string(REPLACE "-O" "O" opt_tool_flags ${CUDA_OPT_FLAG_CLANG})
|
||||
set (opt_tool_flags -passes="default<${opt_tool_flags}>")
|
||||
else()
|
||||
set (opt_tool_flags ${CUDA_OPT_FLAG_CLANG} --nvptx-assign-valid-global-names)
|
||||
endif ()
|
||||
|
||||
# Link all of the individual LLVM bitcode files, and emit PTX for the linked bitcode
|
||||
add_custom_command ( OUTPUT ${linked_bc} ${linked_ptx}
|
||||
COMMAND ${LLVM_LINK_TOOL} ${shadeops_bc_list} -o ${linked_bc}
|
||||
COMMAND ${LLVM_OPT_TOOL} ${opt_tool_flags} ${linked_bc} -o ${linked_bc}
|
||||
COMMAND ${LLVM_LLC_TOOL} --march=nvptx64 -mcpu=${CUDA_TARGET_ARCH} ${linked_bc} -o ${linked_ptx}
|
||||
# This script converts all of the .weak functions defined in the PTX into .visible functions.
|
||||
COMMAND ${Python_EXECUTABLE} "${CMAKE_SOURCE_DIR}/src/build-scripts/process-ptx.py"
|
||||
${linked_ptx} ${linked_ptx}
|
||||
DEPENDS ${shadeops_bc_list} ${exec_headers} ${PROJECT_PUBLIC_HEADERS} ${input_srcs} ${headers}
|
||||
"${CMAKE_SOURCE_DIR}/src/build-scripts/process-ptx.py"
|
||||
DEPENDS "${CMAKE_SOURCE_DIR}/src/liboslexec/serialize-bc.py" ${llvm_src} ${headers} ${llvm_bc}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
|
||||
endfunction ()
|
||||
|
||||
@@ -49,13 +49,14 @@ if (BOOST_CUSTOM)
|
||||
# Boost_VERSION, Boost_INCLUDE_DIRS, Boost_LIBRARY_DIRS, Boost_LIBRARIES.
|
||||
else ()
|
||||
set (Boost_COMPONENTS filesystem system thread)
|
||||
if (NOT USE_STD_REGEX)
|
||||
list (APPEND Boost_COMPONENTS regex)
|
||||
endif ()
|
||||
# The FindBoost.cmake interface is broken if it uses boost's installed
|
||||
# cmake output (e.g. boost 1.70.0, cmake <= 3.14). Specifically it fails
|
||||
# to set the expected variables printed below. So until that's fixed
|
||||
# force FindBoost.cmake to use the original brute force path.
|
||||
if (NOT DEFINED Boost_NO_BOOST_CMAKE)
|
||||
set (Boost_NO_BOOST_CMAKE ON)
|
||||
endif ()
|
||||
set (Boost_NO_BOOST_CMAKE ON)
|
||||
checked_find_package (Boost REQUIRED
|
||||
VERSION_MIN 1.55
|
||||
COMPONENTS ${Boost_COMPONENTS}
|
||||
@@ -82,18 +83,22 @@ checked_find_package (ZLIB REQUIRED) # Needed by several packages
|
||||
|
||||
# IlmBase & OpenEXR
|
||||
checked_find_package (OpenEXR REQUIRED
|
||||
VERSION_MIN 2.4
|
||||
RECOMMEND_MIN 2.5
|
||||
VERSION_MIN 2.0
|
||||
RECOMMEND_MIN 2.2
|
||||
RECOMMEND_MIN_REASON
|
||||
"Even extremely critical patches are no longer supplied to < 2.5"
|
||||
"OpenEXR 2.2 is the oldest version our CI tests against, and the minimum that supports DWA compression"
|
||||
PRINT IMATH_INCLUDES
|
||||
)
|
||||
# Force Imath includes to be before everything else to ensure that we have
|
||||
# the right Imath/OpenEXR version, not some older version in the system
|
||||
# library. This shouldn't be necessary, except for the common case of people
|
||||
# library. This shoudn't be necessary, except for the common case of people
|
||||
# building against Imath/OpenEXR 3.x when there is still a system-level
|
||||
# install version of 2.x.
|
||||
include_directories(BEFORE ${IMATH_INCLUDES})
|
||||
if (CMAKE_COMPILER_IS_CLANG AND OPENEXR_VERSION VERSION_LESS 2.3)
|
||||
# clang C++ >= 11 doesn't like 'register' keyword in old exr headers
|
||||
add_compile_options (-Wno-deprecated-register)
|
||||
endif ()
|
||||
if (MSVC AND NOT LINKSTATIC)
|
||||
add_definitions (-DOPENEXR_DLL) # Is this needed for new versions?
|
||||
endif ()
|
||||
@@ -106,9 +111,15 @@ endif ()
|
||||
|
||||
|
||||
# OpenImageIO
|
||||
set (OIIO_LIBNAME_SUFFIX "" CACHE STRING
|
||||
"Optional name appended to OIIO libraries that are built")
|
||||
checked_find_package (OpenImageIO REQUIRED
|
||||
VERSION_MIN 2.4
|
||||
DEFINITIONS -DOIIO_HIDE_FORMAT=1)
|
||||
VERSION_MIN 2.0
|
||||
PRINT OIIOTOOL_BIN)
|
||||
if (OPENIMAGEIO_FOUND)
|
||||
include_directories ("${OPENIMAGEIO_INCLUDES}")
|
||||
endif ()
|
||||
|
||||
|
||||
checked_find_package (pugixml REQUIRED
|
||||
VERSION_MIN 1.8)
|
||||
@@ -116,8 +127,7 @@ checked_find_package (pugixml REQUIRED
|
||||
|
||||
# LLVM library setup
|
||||
checked_find_package (LLVM REQUIRED
|
||||
VERSION_MIN 9.0
|
||||
VERSION_MAX 18.9
|
||||
VERSION_MIN 7.0
|
||||
PRINT LLVM_SYSTEM_LIBRARIES CLANG_LIBRARIES)
|
||||
# ensure include directory is added (in case of non-standard locations
|
||||
include_directories (BEFORE SYSTEM "${LLVM_INCLUDES}")
|
||||
@@ -130,52 +140,27 @@ add_definitions (-DOSL_LLVM_FULL_VERSION="${LLVM_VERSION}")
|
||||
if (LLVM_NAMESPACE)
|
||||
add_definitions ("-DLLVM_NAMESPACE=${LLVM_NAMESPACE}")
|
||||
endif ()
|
||||
if (LLVM_VERSION VERSION_GREATER_EQUAL 10.0.0 AND
|
||||
CMAKE_CXX_STANDARD VERSION_LESS 14)
|
||||
message (FATAL_ERROR
|
||||
"LLVM 10+ requires C++14 or higher (was ${CMAKE_CXX_STANDARD}). "
|
||||
"To build against this LLVM ${LLVM_VERSION}, you need to set "
|
||||
"build option CMAKE_CXX_STANDARD=14. The minimum requirements "
|
||||
"for that are gcc >= 5.1, clang >= 3.5, Apple clang >= 7, "
|
||||
"icc >= 7, MSVS >= 2017. "
|
||||
"If you must use C++11, you need to build against LLVM 9 or earlier.")
|
||||
endif ()
|
||||
if (APPLE AND LLVM_VERSION VERSION_EQUAL 10.0.1 AND EXISTS "/usr/local/Cellar/llvm")
|
||||
message (WARNING
|
||||
"${ColorYellow}If you are using LLVM 10.0.1 installed by Homebrew, "
|
||||
"please note that a known bug in LLVM may produce a link error where "
|
||||
"it says it can't find libxml2.tbd. If you encounter this, please "
|
||||
"try upgrading to a newer LLVM: \n"
|
||||
" brew upgrade llvm \n"
|
||||
"try downgrading to LLVM 9: \n"
|
||||
" brew uninstall llvm \n"
|
||||
" brew install llvm@9 \n"
|
||||
" export LLVM_DIRECTORY=/usr/local/opt/llvm@9 "
|
||||
"${ColorReset}\n")
|
||||
endif ()
|
||||
if (LLVM_VERSION VERSION_GREATER_EQUAL 15.0 AND CMAKE_COMPILER_IS_CLANG
|
||||
AND ANY_CLANG_VERSION_STRING VERSION_LESS 15.0)
|
||||
message (WARNING
|
||||
"${ColorYellow}"
|
||||
"If you are using LLVM 15 or higher, you should also use clang version "
|
||||
"15 or higher, or you may get build errors.${ColorReset}\n")
|
||||
endif ()
|
||||
if (LLVM_VERSION VERSION_GREATER_EQUAL 16.0)
|
||||
if (CMAKE_CXX_STANDARD VERSION_LESS 17)
|
||||
message (WARNING "${ColorYellow}LLVM 16+ requires C++17 or higher. "
|
||||
"Please set CMAKE_CXX_STANDARD to 17 or higher.${ColorReset}\n")
|
||||
endif ()
|
||||
if (CMAKE_COMPILER_IS_GNUCC AND (GCC_VERSION VERSION_LESS 7.0))
|
||||
message (WARNING "${ColorYellow}LLVM 16+ requires gcc 7.0 or higher.${ColorReset}\n")
|
||||
endif ()
|
||||
if (CMAKE_COMPILER_IS_CLANG AND (CLANG_VERSION_STRING VERSION_LESS 5.0
|
||||
OR APPLE_CLANG_VERSION_STRING VERSION_LESS 5.0))
|
||||
message (WARNING "${ColorYellow}LLVM 16+ requires clang 5.0 or higher.${ColorReset}\n")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Use opaque pointers starting with LLVM 16
|
||||
if (${LLVM_VERSION} VERSION_GREATER_EQUAL 16.0)
|
||||
set(LLVM_OPAQUE_POINTERS ON)
|
||||
add_definitions (-DOSL_LLVM_OPAQUE_POINTERS)
|
||||
else()
|
||||
set(LLVM_OPAQUE_POINTERS OFF)
|
||||
endif()
|
||||
|
||||
# Enable new pass manager for LLVM 16+
|
||||
if (${LLVM_VERSION} VERSION_GREATER_EQUAL 16.0)
|
||||
set(LLVM_NEW_PASS_MANAGER ON)
|
||||
add_definitions (-DOSL_LLVM_NEW_PASS_MANAGER)
|
||||
else()
|
||||
set(LLVM_NEW_PASS_MANAGER OFF)
|
||||
endif()
|
||||
|
||||
|
||||
checked_find_package (partio)
|
||||
|
||||
@@ -185,66 +170,64 @@ find_python ()
|
||||
|
||||
|
||||
# Qt -- used for osltoy
|
||||
set (qt5_modules Core Gui Widgets)
|
||||
if (OPENGL_FOUND)
|
||||
list (APPEND qt5_modules OpenGL)
|
||||
endif ()
|
||||
option (USE_QT "Use Qt if found" ON)
|
||||
if (USE_QT)
|
||||
checked_find_package (Qt6 COMPONENTS Core Gui Widgets OpenGLWidgets)
|
||||
if (NOT Qt6_FOUND)
|
||||
checked_find_package (Qt5 COMPONENTS Core Gui Widgets OpenGL)
|
||||
endif ()
|
||||
if (NOT Qt5_FOUND AND NOT Qt6_FOUND AND APPLE)
|
||||
message (STATUS " If you think you installed qt with Homebrew and it still doesn't work,")
|
||||
message (STATUS " try: export PATH=/usr/local/opt/qt/bin:$PATH")
|
||||
endif ()
|
||||
checked_find_package (Qt5 COMPONENTS ${qt5_modules})
|
||||
if (USE_QT AND NOT Qt5_FOUND AND APPLE)
|
||||
message (STATUS " If you think you installed qt5 with Homebrew and it still doesn't work,")
|
||||
message (STATUS " try: export PATH=/usr/local/opt/qt5/bin:$PATH")
|
||||
endif ()
|
||||
|
||||
|
||||
# CUDA setup
|
||||
if (OSL_USE_OPTIX)
|
||||
if (USE_LLVM_BITCODE)
|
||||
if (NOT CUDA_TOOLKIT_ROOT_DIR AND NOT $ENV{CUDA_TOOLKIT_ROOT_DIR} STREQUAL "")
|
||||
set (CUDA_TOOLKIT_ROOT_DIR $ENV{CUDA_TOOLKIT_ROOT_DIR})
|
||||
endif ()
|
||||
if (USE_CUDA OR USE_OPTIX)
|
||||
if (NOT CUDA_TOOLKIT_ROOT_DIR AND NOT $ENV{CUDA_TOOLKIT_ROOT_DIR} STREQUAL "")
|
||||
set (CUDA_TOOLKIT_ROOT_DIR $ENV{CUDA_TOOLKIT_ROOT_DIR})
|
||||
endif ()
|
||||
|
||||
if (NOT CUDA_FIND_QUIETLY OR NOT OptiX_FIND_QUIETLY)
|
||||
message (STATUS "CUDA_TOOLKIT_ROOT_DIR = ${CUDA_TOOLKIT_ROOT_DIR}")
|
||||
endif ()
|
||||
if (NOT CUDA_FIND_QUIETLY OR NOT OptiX_FIND_QUIETLY)
|
||||
message (STATUS "CUDA_TOOLKIT_ROOT_DIR = ${CUDA_TOOLKIT_ROOT_DIR}")
|
||||
endif ()
|
||||
|
||||
checked_find_package (CUDA REQUIRED
|
||||
VERSION_MIN 9.0
|
||||
RECOMMEND_MIN 11.0
|
||||
RECOMMEND_MIN_REASON
|
||||
"We don't actively test CUDA older than 11"
|
||||
PRINT CUDA_INCLUDES)
|
||||
set (CUDA_INCLUDES ${CUDA_TOOLKIT_ROOT_DIR}/include)
|
||||
include_directories (BEFORE "${CUDA_INCLUDES}")
|
||||
checked_find_package (CUDA REQUIRED
|
||||
VERSION_MIN 8.0
|
||||
PRINT CUDA_INCLUDES)
|
||||
set (CUDA_INCLUDES ${CUDA_TOOLKIT_ROOT_DIR}/include)
|
||||
include_directories (BEFORE "${CUDA_INCLUDES}")
|
||||
|
||||
STRING (FIND ${LLVM_TARGETS} "NVPTX" nvptx_index)
|
||||
if (NOT ${nvptx_index} GREATER -1)
|
||||
message (FATAL_ERROR "NVPTX target is not available in the provided LLVM build")
|
||||
endif()
|
||||
STRING (FIND ${LLVM_TARGETS} "NVPTX" nvptx_index)
|
||||
if (NOT ${nvptx_index} GREATER -1)
|
||||
message (FATAL_ERROR "NVPTX target is not available in the provided LLVM build")
|
||||
endif()
|
||||
|
||||
set (CUDA_LIB_FLAGS "--cuda-path=${CUDA_TOOLKIT_ROOT_DIR}")
|
||||
if (${CUDA_VERSION} VERSION_GREATER 8 AND ${LLVM_VERSION} VERSION_LESS 6)
|
||||
message (FATAL_ERROR "CUDA ${CUDA_VERSION} requires LLVM 6.0 or greater")
|
||||
endif ()
|
||||
|
||||
find_library(cuda_lib NAMES cudart
|
||||
PATHS "${CUDA_TOOLKIT_ROOT_DIR}/lib64" "${CUDA_TOOLKIT_ROOT_DIR}/x64" "${CUDA_TOOLKIT_ROOT_DIR}/lib/x64"
|
||||
REQUIRED)
|
||||
set(CUDA_LIBRARIES ${cuda_lib})
|
||||
set (CUDA_LIB_FLAGS "--cuda-path=${CUDA_TOOLKIT_ROOT_DIR}")
|
||||
|
||||
# testrender & testshade need libnvrtc
|
||||
if ("${CUDA_VERSION}" VERSION_GREATER_EQUAL "10.0")
|
||||
find_library(nvrtc_lib NAMES nvrtc
|
||||
PATHS "${CUDA_TOOLKIT_ROOT_DIR}/lib64" "${CUDA_TOOLKIT_ROOT_DIR}/x64" "${CUDA_TOOLKIT_ROOT_DIR}/lib/x64"
|
||||
REQUIRED)
|
||||
set(CUDA_LIBRARIES ${CUDA_LIBRARIES} ${nvrtc_lib})
|
||||
find_library(cuda_lib NAMES cudart
|
||||
PATHS "${CUDA_TOOLKIT_ROOT_DIR}/lib64" "${CUDA_TOOLKIT_ROOT_DIR}/x64"
|
||||
REQUIRED)
|
||||
set(CUDA_LIBRARIES ${cuda_lib})
|
||||
|
||||
set(CUDA_EXTRA_LIBS ${CUDA_EXTRA_LIBS} dl)
|
||||
endif()
|
||||
# testrender & testshade need libnvrtc
|
||||
if ("${CUDA_VERSION}" VERSION_GREATER_EQUAL "10.0")
|
||||
find_library(nvrtc_lib NAMES nvrtc
|
||||
PATHS "${CUDA_TOOLKIT_ROOT_DIR}/lib64" "${CUDA_TOOLKIT_ROOT_DIR}/x64"
|
||||
REQUIRED)
|
||||
set(CUDA_LIBRARIES ${CUDA_LIBRARIES} ${nvrtc_lib})
|
||||
|
||||
set(CUDA_EXTRA_LIBS ${CUDA_EXTRA_LIBS} dl)
|
||||
endif()
|
||||
|
||||
# OptiX setup
|
||||
if (OSL_USE_OPTIX AND OSL_BUILD_TESTS)
|
||||
if (USE_OPTIX)
|
||||
checked_find_package (OptiX REQUIRED
|
||||
VERSION_MIN 7.0)
|
||||
VERSION_MIN 5.1)
|
||||
include_directories (BEFORE "${OPTIX_INCLUDES}")
|
||||
if (NOT USE_LLVM_BITCODE OR NOT USE_FAST_MATH)
|
||||
message (FATAL_ERROR "Enabling OptiX requires USE_LLVM_BITCODE=1 and USE_FAST_MATH=1")
|
||||
@@ -257,6 +240,7 @@ if (OSL_USE_OPTIX)
|
||||
target_compile_definitions (${TARGET} PRIVATE "-DPTX_PATH=\"${OSL_PTX_INSTALL_DIR}\"")
|
||||
target_link_libraries (${TARGET} PRIVATE ${CUDA_LIBRARIES} ${CUDA_EXTRA_LIBS} ${OPTIX_LIBRARIES} ${OPTIX_EXTRA_LIBS})
|
||||
endfunction()
|
||||
|
||||
else ()
|
||||
function (osl_optix_target TARGET)
|
||||
endfunction()
|
||||
|
||||
@@ -12,9 +12,6 @@
|
||||
# The executable may be disabled individually using any of the usual
|
||||
# check_is_enabled() conventions (e.g. -DENABLE_<executable>=OFF).
|
||||
#
|
||||
# If -DENABLE_INSTALL_<executable>=OFF was specified, the target will be built
|
||||
# (in the build area) but will not be installed.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# fancy_add_executable ([ NAME targetname ... ]
|
||||
@@ -45,16 +42,13 @@ macro (fancy_add_executable)
|
||||
target_include_directories (${_target_NAME} SYSTEM PRIVATE ${_target_SYSTEM_INCLUDE_DIRS})
|
||||
endif ()
|
||||
if (_target_DEFINITIONS)
|
||||
target_compile_definitions (${_target_NAME} PRIVATE ${_target_DEFINITIONS})
|
||||
target_compile_definitions (${_target_name} PRIVATE ${_target_DEFINITIONS})
|
||||
endif ()
|
||||
if (_target_LINK_LIBRARIES)
|
||||
target_link_libraries (${_target_NAME} PRIVATE ${_target_LINK_LIBRARIES})
|
||||
endif ()
|
||||
set_target_properties (${_target_NAME} PROPERTIES FOLDER "Tools")
|
||||
check_is_enabled (INSTALL_${_target_NAME} _target_NAME_INSTALL_enabled)
|
||||
if (_target_NAME_INSTALL_enabled)
|
||||
install_targets (${_target_NAME})
|
||||
endif ()
|
||||
install_targets (${_target_NAME})
|
||||
else ()
|
||||
message (STATUS "${ColorRed}Disabling ${_target_NAME} ${ColorReset}")
|
||||
endif ()
|
||||
|
||||
@@ -17,33 +17,14 @@
|
||||
# for the .y and .l files.
|
||||
|
||||
|
||||
# On Mac, prefer the Homebrew version of Bison over the older version from
|
||||
# MacOS/xcode in /usr/bin, which seems to be too old for the reentrant
|
||||
# parser directives we use. Only do this if there is no BISON_ROOT
|
||||
# specifying a particular Bison to use.
|
||||
if (APPLE AND NOT BISON_ROOT AND NOT DEFINED ENV{BISON_ROOT}
|
||||
AND (EXISTS /usr/local/opt OR EXISTS /opt/homebrew
|
||||
OR DEFINED ENV{HOMEBREW_PREFIX}))
|
||||
find_program(BISON_EXECUTABLE
|
||||
NAMES
|
||||
ENV{HOMEBREW_PREFIX}/opt/bison/bin/bison
|
||||
/opt/homebrew/opt/bison/bin/bison
|
||||
/usr/local/opt/bison/bin/bison
|
||||
DOC "path to the bison executable")
|
||||
endif()
|
||||
|
||||
checked_find_package (BISON 2.7 REQUIRED
|
||||
PRINT BISON_EXECUTABLE)
|
||||
checked_find_package (FLEX 2.3.35 REQUIRED
|
||||
PRINT FLEX_EXECUTABLE)
|
||||
checked_find_package (BISON REQUIRED)
|
||||
checked_find_package (FLEX REQUIRED)
|
||||
|
||||
if ( FLEX_EXECUTABLE AND BISON_EXECUTABLE )
|
||||
macro ( FLEX_BISON flexsrc bisonsrc prefix srclist compiler_headers )
|
||||
# mangle osoparse & oslparse symbols to avoid multiple library conflicts
|
||||
# XXX: This may be excessive now that OSL::pvt::ExtraArg is mangled into the function signature
|
||||
add_definitions(-D${prefix}parse=${PROJ_NAMESPACE_V}_${prefix}parse)
|
||||
|
||||
message (VERBOSE "FLEX_BISON flex=${flexsrc} bison=${bisonsrc} prefix=${prefix}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "FLEX_BISON flex=${flexsrc} bison=${bisonsrc} prefix=${prefix}")
|
||||
endif ()
|
||||
get_filename_component ( bisonsrc_we ${bisonsrc} NAME_WE )
|
||||
set ( bisonoutputcxx "${CMAKE_CURRENT_BINARY_DIR}/${bisonsrc_we}.cpp" )
|
||||
set ( bisonoutputh "${CMAKE_CURRENT_BINARY_DIR}/${bisonsrc_we}.h" )
|
||||
@@ -57,7 +38,9 @@ if ( FLEX_EXECUTABLE AND BISON_EXECUTABLE )
|
||||
get_filename_component ( FLEX_UP ${FLEX_EXECUTABLE} PATH )
|
||||
get_filename_component ( FLEX_UP_UP ${FLEX_UP} PATH )
|
||||
set ( FLEX_INCLUDE_DIR "${FLEX_UP_UP}/include" )
|
||||
message (VERBOSE "Flex include dir = ${FLEX_INCLUDE_DIR}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "Flex include dir = ${FLEX_INCLUDE_DIR}")
|
||||
endif ()
|
||||
include_directories ( ${FLEX_INCLUDE_DIR} )
|
||||
|
||||
# include_directories ( ${CMAKE_CURRENT_BINARY_DIR} )
|
||||
@@ -73,7 +56,7 @@ if ( FLEX_EXECUTABLE AND BISON_EXECUTABLE )
|
||||
set ( FB_WINCOMPAT )
|
||||
endif ()
|
||||
add_custom_command ( OUTPUT ${flexoutputcxx}
|
||||
COMMAND ${FLEX_EXECUTABLE} ${FB_WINCOMPAT} --prefix=${prefix} -o ${flexoutputcxx} "${CMAKE_CURRENT_SOURCE_DIR}/${flexsrc}"
|
||||
COMMAND ${FLEX_EXECUTABLE} ${FB_WINCOMPAT} -o ${flexoutputcxx} "${CMAKE_CURRENT_SOURCE_DIR}/${flexsrc}"
|
||||
MAIN_DEPENDENCY ${flexsrc}
|
||||
DEPENDS ${${compiler_headers}}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
# TODO: Use CMAKE_CURRENT_FUNCTION_LIST_DIR in cmake-3.17
|
||||
set(_THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
function ( EMBED_LLVM_BITCODE_IN_CPP src_list suffix output_name list_to_append_cpp extra_clang_args include_dirs)
|
||||
|
||||
message (VERBOSE "EMBED_LLVM_BITCODE_IN_CPP src_list=${src_list}")
|
||||
|
||||
foreach ( src ${src_list} )
|
||||
get_filename_component ( src_we ${src} NAME_WE )
|
||||
set ( src_asm "${CMAKE_CURRENT_BINARY_DIR}/${src_we}${suffix}.s" )
|
||||
set ( src_bc "${CMAKE_CURRENT_BINARY_DIR}/${src_we}${suffix}.bc" )
|
||||
message (VERBOSE "EMBED_LLVM_BITCODE_IN_CPP in=${src}")
|
||||
message (VERBOSE "EMBED_LLVM_BITCODE_IN_CPP asm=${src_asm}")
|
||||
message (VERBOSE "EMBED_LLVM_BITCODE_IN_CPP bc=${src_bc}")
|
||||
list ( APPEND src_bc_list ${src_bc} )
|
||||
|
||||
get_property (CURRENT_DEFINITIONS DIRECTORY PROPERTY COMPILE_DEFINITIONS)
|
||||
message (VERBOSE "Current #defines are ${CURRENT_DEFINITIONS}")
|
||||
foreach (def ${CURRENT_DEFINITIONS})
|
||||
set (LLVM_COMPILE_FLAGS ${LLVM_COMPILE_FLAGS} "-D${def}")
|
||||
endforeach()
|
||||
set (LLVM_COMPILE_FLAGS ${LLVM_COMPILE_FLAGS} ${SIMD_COMPILE_FLAGS} ${CSTD_FLAGS} ${TOOLCHAIN_FLAGS})
|
||||
# Avoid generating __dso_handle external global
|
||||
set (LLVM_COMPILE_FLAGS ${LLVM_COMPILE_FLAGS} "-fno-use-cxa-atexit")
|
||||
|
||||
# Figure out what program we will use to make the bitcode.
|
||||
if (NOT LLVM_BC_GENERATOR)
|
||||
find_program (LLVM_BC_GENERATOR NAMES "clang++"
|
||||
PATHS "${LLVM_DIRECTORY}/bin" "${LLVM_DIRECTORY}/tools/llvm"
|
||||
NO_CMAKE_PATH NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH
|
||||
NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH)
|
||||
endif ()
|
||||
|
||||
if (NOT LLVM_BC_GENERATOR)
|
||||
message (FATAL_ERROR "You must have a valid llvm bitcode generator (clang++) somewhere.")
|
||||
endif ()
|
||||
message (VERBOSE "Using LLVM_BC_GENERATOR ${LLVM_BC_GENERATOR} to generate bitcode.")
|
||||
|
||||
if (NOT LLVM_AS_TOOL)
|
||||
find_program (LLVM_AS_TOOL NAMES "llvm-as"
|
||||
PATHS "${LLVM_DIRECTORY}/bin" "${LLVM_DIRECTORY}/tools/llvm"
|
||||
NO_CMAKE_PATH NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH
|
||||
NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH)
|
||||
endif ()
|
||||
|
||||
if (NOT LLVM_LINK_TOOL)
|
||||
find_program (LLVM_LINK_TOOL NAMES "llvm-link"
|
||||
PATHS "${LLVM_DIRECTORY}/bin" "${LLVM_DIRECTORY}/tools/llvm"
|
||||
NO_CMAKE_PATH NO_DEFAULT_PATH NO_CMAKE_SYSTEM_PATH
|
||||
NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_ENVIRONMENT_PATH)
|
||||
endif ()
|
||||
|
||||
|
||||
# Fix specific problem I had on new Apple systems (e.g. Mavericks) with
|
||||
# LLVM/libc++ installed -- for some reason, LLVM 3.4 wasn't finding it,
|
||||
# so in that specific case, append another -I to point it in the right
|
||||
# direction.
|
||||
#if (APPLE AND ${LLVM_BC_GENERATOR} MATCHES ".*clang.*")
|
||||
# exec_program ( "${LLVM_BC_GENERATOR}" ARGS --version OUTPUT_VARIABLE MY_CLANG_VERSION )
|
||||
# string (REGEX REPLACE "clang version ([0-9][.][0-9]+).*" "\\1" MY_CLANG_VERSION "${MY_CLANG_VERSION}")
|
||||
# if ((${MY_CLANG_VERSION} VERSION_GREATER "3.3")
|
||||
# AND (EXISTS "/usr/lib/libc++.dylib")
|
||||
# AND (EXISTS "/Library/Developer/CommandLineTools/usr/lib/c++/v1"))
|
||||
# set (LLVM_COMPILE_FLAGS ${LLVM_COMPILE_FLAGS} "-I/Library/Developer/CommandLineTools/usr/lib/c++/v1")
|
||||
# endif ()
|
||||
#endif ()
|
||||
|
||||
list (TRANSFORM include_dirs PREPEND -I
|
||||
OUTPUT_VARIABLE ALL_INCLUDE_DIRS)
|
||||
|
||||
if (NOT LLVM_OPAQUE_POINTERS AND ${LLVM_VERSION} VERSION_GREATER_EQUAL 15.0)
|
||||
# Until we fully support opaque pointers, we need to disable
|
||||
# them when using LLVM 15.
|
||||
list (APPEND LLVM_COMPILE_FLAGS -Xclang -no-opaque-pointers)
|
||||
endif ()
|
||||
|
||||
# Command to turn the .cpp file into LLVM assembly language .s, into
|
||||
# LLVM bitcode .bc, then back into a C++ file with the bc embedded!
|
||||
add_custom_command ( OUTPUT ${src_bc}
|
||||
COMMAND ${LLVM_BC_GENERATOR}
|
||||
${LLVM_COMPILE_FLAGS}
|
||||
${ALL_INCLUDE_DIRS}
|
||||
-DOSL_COMPILING_TO_BITCODE=1
|
||||
-Wno-deprecated-register
|
||||
# the following 2 warnings can be restored when all 3rd parties have fixed their export macros
|
||||
# (dllimport attribute is not supported when compiling for Cuda and triggers a ton of warnings)
|
||||
-Wno-ignored-attributes -Wno-unknown-attributes
|
||||
-O3 -fno-math-errno -S -emit-llvm ${extra_clang_args}
|
||||
-o ${src_asm} ${src}
|
||||
COMMAND ${LLVM_AS_TOOL} -f -o ${src_bc} ${src_asm}
|
||||
# Do NOT setup a MAIN_DEPENDENCY because only 1 may exist
|
||||
# and we may have the several outputs dependent on the same source
|
||||
DEPENDS ${src} ${exec_headers} ${PROJECT_PUBLIC_HEADERS}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
|
||||
endforeach ()
|
||||
|
||||
message (VERBOSE "^^^^^^^^^^^^^^^^^^^^^^^^^^" )
|
||||
message (VERBOSE "src_bc_list: ${src_bc_list} ")
|
||||
message (VERBOSE "^^^^^^^^^^^^^^^^^^^^^^^^^^" )
|
||||
|
||||
# Link all of the individual LLVM bitcode files
|
||||
set ( linked_src_bc "${CMAKE_CURRENT_BINARY_DIR}/${output_name}.bc" )
|
||||
add_custom_command ( OUTPUT ${linked_src_bc}
|
||||
COMMAND ${LLVM_LINK_TOOL} -internalize ${src_bc_list} -o ${linked_src_bc}
|
||||
DEPENDS ${src_bc_list} ${exec_headers} ${PROJECT_PUBLIC_HEADERS} ${src_list}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" )
|
||||
|
||||
# Serialize the linked bitcode into a CPP file
|
||||
set ( src_bc_cpp "${CMAKE_CURRENT_BINARY_DIR}/${output_name}.bc.cpp" )
|
||||
add_custom_command ( OUTPUT ${src_bc_cpp}
|
||||
COMMAND ${Python_EXECUTABLE} "${_THIS_MODULE_BASE_DIR}/../build-scripts/serialize-bc.py"
|
||||
${linked_src_bc} ${src_bc_cpp} ${output_name}
|
||||
DEPENDS "${_THIS_MODULE_BASE_DIR}/../build-scripts/serialize-bc.py" ${linked_src_bc}
|
||||
${exec_headers} ${PROJECT_PUBLIC_HEADERS}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" )
|
||||
|
||||
# add generated .cpp with embedded bitcode to the list of sources
|
||||
set ( ${list_to_append_cpp} ${${list_to_append_cpp}} ${src_bc_cpp} PARENT_SCOPE )
|
||||
|
||||
endfunction ( )
|
||||
@@ -23,13 +23,7 @@
|
||||
|
||||
# try to find llvm-config, with a specific version if specified
|
||||
if (LLVM_DIRECTORY)
|
||||
list (APPEND LLVM_CONFIG_PATH_HINTS "${LLVM_DIRECTORY}/bin")
|
||||
endif ()
|
||||
if (LLVM_ROOT)
|
||||
list (APPEND LLVM_CONFIG_PATH_HINTS "${LLVM_ROOT}/bin")
|
||||
endif ()
|
||||
if (DEFINED ENV{LLVM_ROOT})
|
||||
list (APPEND LLVM_CONFIG_PATH_HINTS "$ENV{LLVM_ROOT}/bin")
|
||||
set (LLVM_CONFIG_PATH_HINTS "${LLVM_DIRECTORY}/bin")
|
||||
endif ()
|
||||
list (APPEND LLVM_CONFIG_PATH_HINTS
|
||||
"/usr/local/opt/llvm/${LLVM_VERSION}/bin/"
|
||||
@@ -126,9 +120,8 @@ if (LLVM_VERSION VERSION_GREATER_EQUAL 9.0 AND (LLVM_SHARED_MODE STREQUAL "share
|
||||
endif ()
|
||||
|
||||
foreach (COMPONENT clangFrontend clangDriver clangSerialization
|
||||
clangParse clangSema clangAnalysis clangAST
|
||||
clangASTMatchers clangBasic clangEdit clangLex
|
||||
clangSupport clangAPINotes)
|
||||
clangParse clangSema clangAnalysis clangAST clangBasic
|
||||
clangEdit clangLex)
|
||||
find_library ( _CLANG_${COMPONENT}_LIBRARY
|
||||
NAMES ${COMPONENT}
|
||||
PATHS ${LLVM_LIB_DIR})
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
# I'm afraid this is a mess, due to needing to support a wide range of
|
||||
# OpenEXR versions.
|
||||
#
|
||||
# For OpenEXR & Imath 3.x, this will establish the following imported
|
||||
# For OpenEXR & Imath 3.0, this will establish the following imported
|
||||
# targets:
|
||||
#
|
||||
# Imath::Imath
|
||||
@@ -24,12 +24,14 @@
|
||||
# IlmBase::IlmThread
|
||||
# OpenEXR::IlmImf
|
||||
#
|
||||
# For all version, the following CMake variables:
|
||||
# For all versions -- but for OpenEXR < 2.4 the only thing this sets --
|
||||
# are the following CMake variables:
|
||||
#
|
||||
# OPENEXR_FOUND true, if found
|
||||
# OPENEXR_INCLUDES directory where OpenEXR headers are found
|
||||
# OPENEXR_LIBRARIES libraries for OpenEXR + IlmBase
|
||||
# OPENEXR_VERSION OpenEXR version
|
||||
# OPENEXR_VERSION OpenEXR version (accurate for >= 2.0.0,
|
||||
# otherwise will just guess 1.6.1)
|
||||
# IMATH_INCLUDES directory where Imath headers are found
|
||||
# ILMBASE_INCLUDES directory where IlmBase headers are found
|
||||
# ILMBASE_LIBRARIES libraries just IlmBase
|
||||
@@ -48,7 +50,7 @@ if (TARGET OpenEXR::OpenEXR AND TARGET Imath::Imath)
|
||||
# OpenEXR 3.x if both of these targets are found
|
||||
set (FOUND_OPENEXR_WITH_CONFIG 1)
|
||||
if (NOT OpenEXR_FIND_QUIETLY)
|
||||
message (STATUS "Found CONFIG for OpenEXR 3 (OpenEXR_VERSION=${OpenEXR_VERSION})")
|
||||
message (STATUS "Found CONFIG for OpenEXR 3 (OPENEXR_VERSION=${OpenEXR_VERSION})")
|
||||
endif ()
|
||||
|
||||
# Mimic old style variables
|
||||
@@ -78,7 +80,7 @@ elseif (TARGET OpenEXR::IlmImf AND TARGET IlmBase::Imath AND
|
||||
# OpenEXR 2.4 or 2.5 with exported config
|
||||
set (FOUND_OPENEXR_WITH_CONFIG 1)
|
||||
if (NOT OpenEXR_FIND_QUIETLY)
|
||||
message (STATUS "Found CONFIG for OpenEXR 2 (OpenEXR_VERSION=${OpenEXR_VERSION})")
|
||||
message (STATUS "Found CONFIG for OpenEXR 2 (OPENEXR_VERSION=${OpenEXR_VERSION})")
|
||||
endif ()
|
||||
|
||||
# Mimic old style variables
|
||||
@@ -109,4 +111,157 @@ elseif (TARGET OpenEXR::IlmImf AND TARGET IlmBase::Imath AND
|
||||
string(REGEX REPLACE "include/OpenEXR$" "include" IMATH_INCLUDES "${IMATH_INCLUDES}")
|
||||
string(REGEX REPLACE "include/OpenEXR$" "include" OPENEXR_INCLUDES "${OPENEXR_INCLUDES}")
|
||||
|
||||
else ()
|
||||
# OpenEXR 2.x older versions without a config or whose configs we don't
|
||||
# trust.
|
||||
|
||||
set (FOUND_OPENEXR_WITH_CONFIG 0)
|
||||
|
||||
# Other standard issue macros
|
||||
include (FindPackageHandleStandardArgs)
|
||||
include (SelectLibraryConfigurations)
|
||||
|
||||
find_package (ZLIB REQUIRED)
|
||||
|
||||
# Link with pthreads if required
|
||||
find_package (Threads)
|
||||
if (CMAKE_USE_PTHREADS_INIT)
|
||||
set (ILMBASE_PTHREADS ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif ()
|
||||
|
||||
# Attempt to find OpenEXR with pkgconfig
|
||||
find_package(PkgConfig)
|
||||
if (PKG_CONFIG_FOUND)
|
||||
if (NOT Ilmbase_ROOT AND NOT ILMBASE_ROOT
|
||||
AND NOT DEFINED ENV{Ilmbase_ROOT} AND NOT DEFINED ENV{ILMBASE_ROOT})
|
||||
pkg_check_modules(_ILMBASE QUIET IlmBase>=2.0.0)
|
||||
endif ()
|
||||
if (NOT OpenEXR_ROOT AND NOT OPENEXR_ROOT
|
||||
AND NOT DEFINED ENV{OpenEXR_ROOT} AND NOT DEFINED ENV{OPENEXR_ROOT})
|
||||
pkg_check_modules(_OPENEXR QUIET OpenEXR>=2.0.0)
|
||||
endif ()
|
||||
endif (PKG_CONFIG_FOUND)
|
||||
|
||||
# List of likely places to find the headers -- note priority override of
|
||||
# ${OPENEXR_ROOT}/include.
|
||||
# ILMBASE is needed in case ilmbase an openexr are installed in separate
|
||||
# directories, like NixOS does
|
||||
set (GENERIC_INCLUDE_PATHS
|
||||
${OPENEXR_ROOT}/include
|
||||
$ENV{OPENEXR_ROOT}/include
|
||||
${ILMBASE_ROOT}/include
|
||||
$ENV{ILMBASE_ROOT}/include
|
||||
${_ILMBASE_INCLUDEDIR}
|
||||
${_OPENEXR_INCLUDEDIR}
|
||||
/usr/local/include
|
||||
/usr/include
|
||||
/usr/include/${CMAKE_LIBRARY_ARCHITECTURE}
|
||||
/sw/include
|
||||
/opt/local/include )
|
||||
|
||||
# Find the include file locations.
|
||||
find_path (ILMBASE_INCLUDE_PATH OpenEXR/IlmBaseConfig.h
|
||||
HINTS ${ILMBASE_INCLUDE_DIR} ${OPENEXR_INCLUDE_DIR}
|
||||
${GENERIC_INCLUDE_PATHS} )
|
||||
find_path (OPENEXR_INCLUDE_PATH OpenEXR/OpenEXRConfig.h
|
||||
HINTS ${OPENEXR_INCLUDE_DIR}
|
||||
${GENERIC_INCLUDE_PATHS} )
|
||||
|
||||
# Try to figure out version number
|
||||
if (DEFINED _OPENEXR_VERSION AND NOT "${_OPENEXR_VERSION}" STREQUAL "")
|
||||
set (OPENEXR_VERSION "${_OPENEXR_VERSION}")
|
||||
string (REGEX REPLACE "([0-9]+)\\.[0-9\\.]+" "\\1" OPENEXR_VERSION_MAJOR "${_OPENEXR_VERSION}")
|
||||
string (REGEX REPLACE "[0-9]+\\.([0-9]+)(\\.[0-9]+)?" "\\1" OPENEXR_VERSION_MINOR "${_OPENEXR_VERSION}")
|
||||
elseif (EXISTS "${OPENEXR_INCLUDE_PATH}/OpenEXR/ImfMultiPartInputFile.h")
|
||||
# Must be at least 2.0
|
||||
file(STRINGS "${OPENEXR_INCLUDE_PATH}/OpenEXR/OpenEXRConfig.h" TMP REGEX "^#define OPENEXR_VERSION_STRING .*$")
|
||||
string (REGEX MATCHALL "[0-9]+[.0-9]+" OPENEXR_VERSION ${TMP})
|
||||
file(STRINGS "${OPENEXR_INCLUDE_PATH}/OpenEXR/OpenEXRConfig.h" TMP REGEX "^#define OPENEXR_VERSION_MAJOR .*$")
|
||||
string (REGEX MATCHALL "[0-9]+" OPENEXR_VERSION_MAJOR ${TMP})
|
||||
file(STRINGS "${OPENEXR_INCLUDE_PATH}/OpenEXR/OpenEXRConfig.h" TMP REGEX "^#define OPENEXR_VERSION_MINOR .*$")
|
||||
string (REGEX MATCHALL "[0-9]+" OPENEXR_VERSION_MINOR ${TMP})
|
||||
else ()
|
||||
# Assume an old one, predates 2.x that had versions
|
||||
set (OPENEXR_VERSION 1.6.1)
|
||||
set (OPENEXR_MAJOR 1)
|
||||
set (OPENEXR_MINOR 6)
|
||||
endif ()
|
||||
|
||||
|
||||
# List of likely places to find the libraries -- note priority override of
|
||||
# ${OPENEXR_ROOT}/lib.
|
||||
set (GENERIC_LIBRARY_PATHS
|
||||
${OPENEXR_ROOT}/lib
|
||||
${ILMBASE_ROOT}/lib
|
||||
${OPENEXR_INCLUDE_PATH}/../lib
|
||||
${ILMBASE_INCLUDE_PATH}/../lib
|
||||
${_ILMBASE_LIBDIR}
|
||||
${_OPENEXR_LIBDIR}
|
||||
/usr/local/lib
|
||||
/usr/local/lib/${CMAKE_LIBRARY_ARCHITECTURE}
|
||||
/usr/lib
|
||||
/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
$ENV{PROGRAM_FILES}/OpenEXR/lib/static )
|
||||
|
||||
# message (STATUS "Generic lib paths: ${GENERIC_LIBRARY_PATHS}")
|
||||
|
||||
# Handle request for static libs by altering CMAKE_FIND_LIBRARY_SUFFIXES.
|
||||
# We will restore it at the end of this file.
|
||||
set (_openexr_orig_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
if (OpenEXR_USE_STATIC_LIBS)
|
||||
if (WIN32)
|
||||
set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
else ()
|
||||
set (CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Look for the libraries themselves, for all the components.
|
||||
# This is complicated because the OpenEXR libraries may or may not be
|
||||
# built with version numbers embedded.
|
||||
set (_openexr_components IlmThread IlmImf Imath Iex Half)
|
||||
foreach (COMPONENT ${_openexr_components})
|
||||
string (TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
||||
# First try with the version embedded
|
||||
find_library (OPENEXR_${UPPERCOMPONENT}_LIBRARY
|
||||
NAMES ${COMPONENT}-${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}
|
||||
${COMPONENT}
|
||||
${COMPONENT}-${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}_d
|
||||
${COMPONENT}_d
|
||||
HINTS ${OPENEXR_LIBRARY_DIR} $ENV{OPENEXR_LIBRARY_DIR}
|
||||
${GENERIC_LIBRARY_PATHS} )
|
||||
endforeach ()
|
||||
|
||||
find_package_handle_standard_args (OpenEXR
|
||||
REQUIRED_VARS ILMBASE_INCLUDE_PATH OPENEXR_INCLUDE_PATH
|
||||
OPENEXR_IMATH_LIBRARY OPENEXR_ILMIMF_LIBRARY
|
||||
OPENEXR_IEX_LIBRARY OPENEXR_HALF_LIBRARY
|
||||
)
|
||||
|
||||
if (OPENEXR_FOUND)
|
||||
set (OpenEXR_VERSION ${OPENEXR_VERSION})
|
||||
set (ILMBASE_FOUND TRUE)
|
||||
set (ILMBASE_INCLUDES ${ILMBASE_INCLUDE_PATH})
|
||||
set (IMATH_INCLUDES ${ILMBASE_INCLUDE_PATH})
|
||||
set (OPENEXR_INCLUDES ${OPENEXR_INCLUDE_PATH})
|
||||
set (ILMBASE_INCLUDE_DIR ${ILMBASE_INCLUDE_PATH})
|
||||
set (IMATH_INCLUDE_DIR ${ILMBASE_INCLUDE_PATH})
|
||||
set (OPENEXR_INCLUDE_DIR ${OPENEXR_INCLUDE_PATH})
|
||||
set (ILMBASE_LIBRARIES ${OPENEXR_IMATH_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_HALF_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ILMBASE_PTHREADS} CACHE STRING "The libraries needed to use IlmBase")
|
||||
set (OPENEXR_LIBRARIES ${OPENEXR_ILMIMF_LIBRARY} ${ILMBASE_LIBRARIES} ${ZLIB_LIBRARIES} CACHE STRING "The libraries needed to use OpenEXR")
|
||||
set (FINDOPENEXR_FALLBACK TRUE)
|
||||
endif ()
|
||||
|
||||
mark_as_advanced(
|
||||
OPENEXR_ILMIMF_LIBRARY
|
||||
OPENEXR_IMATH_LIBRARY
|
||||
OPENEXR_IEX_LIBRARY
|
||||
OPENEXR_HALF_LIBRARY
|
||||
OPENEXR_VERSION)
|
||||
|
||||
# Restore the original CMAKE_FIND_LIBRARY_SUFFIXES
|
||||
set (CMAKE_FIND_LIBRARY_SUFFIXES ${_openexr_orig_suffixes})
|
||||
|
||||
endif ()
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
###########################################################################
|
||||
# OpenImageIO https://www.openimageio.org
|
||||
# Copyright 2008-present Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
#
|
||||
# For an up-to-date version of this file, see:
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/src/cmake/Modules/FindOpenImageIO.cmake
|
||||
#
|
||||
###########################################################################
|
||||
#
|
||||
# CMake module to find OpenImageIO
|
||||
#
|
||||
# This module will set
|
||||
# OPENIMAGEIO_FOUND True, if found
|
||||
# OPENIMAGEIO_INCLUDES directory where headers are found
|
||||
# OPENIMAGEIO_LIBRARIES libraries for OIIO
|
||||
# OPENIMAGEIO_LIBRARY_DIRS library dirs for OIIO
|
||||
# OPENIMAGEIO_VERSION Version ("major.minor.patch.tweak")
|
||||
# OPENIMAGEIO_VERSION_MAJOR Version major number
|
||||
# OPENIMAGEIO_VERSION_MINOR Version minor number
|
||||
# OPENIMAGEIO_VERSION_PATCH Version minor patch
|
||||
# OPENIMAGEIO_VERSION_TWEAK Version minor tweak
|
||||
# OIIOTOOL_BIN Path to oiiotool executable
|
||||
#
|
||||
# Imported targets:
|
||||
# OpenImageIO::OpenImageIO The libOpenImageIO library.
|
||||
# OpenImageIO::oiiotool The oiiotool executable.
|
||||
#
|
||||
# Special inputs:
|
||||
# OpenImageIO_ROOT - if using CMake >= 3.12, will automatically search
|
||||
# this area for OIIO components.
|
||||
# OPENIMAGEIO_ROOT_DIR - custom "prefix" location of OIIO installation
|
||||
# (expecting bin, lib, include subdirectories)
|
||||
# This is deprecated, but will work for a while.
|
||||
# OpenImageIO_FIND_QUIETLY - if set, print minimal console output
|
||||
# OIIO_LIBNAME_SUFFIX - if set, optional nonstandard library suffix
|
||||
#
|
||||
###########################################################################
|
||||
#
|
||||
# NOTE: This file is deprecated.
|
||||
#
|
||||
# In OIIO 2.1+, we generate OpenImageIOConfig.cmake files that are now the
|
||||
# preferred way for downstream projects to find an installed OIIO. There
|
||||
# should be no need to copy this FindOpenImageIO.cmake file into downstream
|
||||
# projects, *unless* they need to work with a range of OIIO versions that
|
||||
# may include <2.1, which would lack the generated config files.
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
|
||||
# Prefer an OpenImageIO cmake config file if it can be found
|
||||
find_package(OpenImageIO CONFIG)
|
||||
if (TARGET OpenImageIO::OpenImageIO)
|
||||
set (OPENIMAGEIO_VERSION ${OpenImageIO_VERSION})
|
||||
else ()
|
||||
|
||||
# If 'OPENIMAGE_HOME' not set, use the env variable of that name if available
|
||||
if (NOT OPENIMAGEIO_ROOT_DIR AND NOT $ENV{OPENIMAGEIO_ROOT_DIR} STREQUAL "")
|
||||
set (OPENIMAGEIO_ROOT_DIR $ENV{OPENIMAGEIO_ROOT_DIR})
|
||||
endif ()
|
||||
|
||||
|
||||
find_library ( OPENIMAGEIO_LIBRARY
|
||||
NAMES OpenImageIO${OIIO_LIBNAME_SUFFIX}
|
||||
HINTS ${OPENIMAGEIO_ROOT_DIR}
|
||||
PATH_SUFFIXES lib64 lib )
|
||||
find_path ( OPENIMAGEIO_INCLUDE_DIR
|
||||
NAMES OpenImageIO/imageio.h
|
||||
HINTS ${OPENIMAGEIO_ROOT_DIR} )
|
||||
find_program ( OIIOTOOL_BIN
|
||||
NAMES oiiotool
|
||||
HINTS ${OPENIMAGEIO_ROOT_DIR} )
|
||||
|
||||
# Try to figure out version number
|
||||
set (OIIO_VERSION_HEADER "${OPENIMAGEIO_INCLUDE_DIR}/OpenImageIO/oiioversion.h")
|
||||
if (EXISTS "${OIIO_VERSION_HEADER}")
|
||||
file (STRINGS "${OIIO_VERSION_HEADER}" TMP REGEX "^#define OIIO_VERSION_MAJOR .*$")
|
||||
string (REGEX MATCHALL "[0-9]+" OPENIMAGEIO_VERSION_MAJOR ${TMP})
|
||||
file (STRINGS "${OIIO_VERSION_HEADER}" TMP REGEX "^#define OIIO_VERSION_MINOR .*$")
|
||||
string (REGEX MATCHALL "[0-9]+" OPENIMAGEIO_VERSION_MINOR ${TMP})
|
||||
file (STRINGS "${OIIO_VERSION_HEADER}" TMP REGEX "^#define OIIO_VERSION_PATCH .*$")
|
||||
string (REGEX MATCHALL "[0-9]+" OPENIMAGEIO_VERSION_PATCH ${TMP})
|
||||
file (STRINGS "${OIIO_VERSION_HEADER}" TMP REGEX "^#define OIIO_VERSION_TWEAK .*$")
|
||||
if (TMP)
|
||||
string (REGEX MATCHALL "[0-9]+" OPENIMAGEIO_VERSION_TWEAK ${TMP})
|
||||
else ()
|
||||
set (OPENIMAGEIO_VERSION_TWEAK 0)
|
||||
endif ()
|
||||
set (OPENIMAGEIO_VERSION "${OPENIMAGEIO_VERSION_MAJOR}.${OPENIMAGEIO_VERSION_MINOR}.${OPENIMAGEIO_VERSION_PATCH}.${OPENIMAGEIO_VERSION_TWEAK}")
|
||||
endif ()
|
||||
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (OpenImageIO
|
||||
FOUND_VAR OPENIMAGEIO_FOUND
|
||||
REQUIRED_VARS OPENIMAGEIO_INCLUDE_DIR OPENIMAGEIO_LIBRARY
|
||||
OPENIMAGEIO_VERSION
|
||||
VERSION_VAR OPENIMAGEIO_VERSION
|
||||
)
|
||||
|
||||
if (OPENIMAGEIO_FOUND)
|
||||
set (OpenImageIO_VERSION ${OPENIMAGEIO_VERSION})
|
||||
set (OPENIMAGEIO_INCLUDES ${OPENIMAGEIO_INCLUDE_DIR})
|
||||
set (OpenImageIO_INCLUDES ${OPENIMAGEIO_INCLUDE_DIR})
|
||||
set (OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO_LIBRARY})
|
||||
get_filename_component (OPENIMAGEIO_LIBRARY_DIRS "${OPENIMAGEIO_LIBRARY}" DIRECTORY)
|
||||
if (NOT OpenImageIO_FIND_QUIETLY)
|
||||
message ( STATUS "OpenImageIO includes = ${OPENIMAGEIO_INCLUDE_DIR}" )
|
||||
message ( STATUS "OpenImageIO libraries = ${OPENIMAGEIO_LIBRARIES}" )
|
||||
message ( STATUS "OpenImageIO library_dirs = ${OPENIMAGEIO_LIBRARY_DIRS}" )
|
||||
message ( STATUS "OpenImageIO oiiotool = ${OIIOTOOL_BIN}" )
|
||||
endif ()
|
||||
|
||||
if (NOT TARGET OpenImageIO::OpenImageIO)
|
||||
add_library(OpenImageIO::OpenImageIO UNKNOWN IMPORTED)
|
||||
set_target_properties(OpenImageIO::OpenImageIO PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OPENIMAGEIO_INCLUDES}")
|
||||
|
||||
set_property(TARGET OpenImageIO::OpenImageIO APPEND PROPERTY
|
||||
IMPORTED_LOCATION "${OPENIMAGEIO_LIBRARIES}")
|
||||
endif ()
|
||||
|
||||
if (NOT TARGET OpenImageIO::oiiotool AND EXISTS "${OIIOTOOL_BIN}")
|
||||
add_executable(OpenImageIO::oiiotool IMPORTED)
|
||||
set_target_properties(OpenImageIO::oiiotool PROPERTIES
|
||||
IMPORTED_LOCATION "${OIIOTOOL_BIN}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
mark_as_advanced (
|
||||
OPENIMAGEIO_INCLUDE_DIR
|
||||
OPENIMAGEIO_LIBRARY
|
||||
)
|
||||
|
||||
endif ()
|
||||
@@ -10,12 +10,16 @@
|
||||
# PARTIO_LIBRARIES - library to link against
|
||||
# PARTIO_FOUND - true if Partio was found.
|
||||
|
||||
# Hack! prefer a config if it can be found
|
||||
# Hack! perfer a config if it can be found
|
||||
find_package(partio CONFIG)
|
||||
if (PARTIO_FOUND OR partio_FOUND)
|
||||
message (VERBOSE "partio found via config")
|
||||
if (VERBOSE)
|
||||
message (STATUS "partio found via config")
|
||||
endif ()
|
||||
else ()
|
||||
message (VERBOSE "partio falling back to FindPartio.cmake")
|
||||
if (VERBOSE)
|
||||
message (STATUS "partio falling back to FindPartio.cmake")
|
||||
endif ()
|
||||
|
||||
|
||||
find_path (PARTIO_INCLUDE_DIR NAMES Partio.h)
|
||||
|
||||
@@ -16,7 +16,7 @@ find_package (pugixml CONFIG)
|
||||
if (TARGET pugixml::pugixml)
|
||||
# New pugixml (>= 1.11) has nice config files we can rely on and makes a
|
||||
# pugixml::pugixml target.
|
||||
message (VERBOSE "Found CONFIG for pugixml (>=1.11)")
|
||||
message (STATUS "Found CONFIG for pugixml (>=1.11)")
|
||||
|
||||
set (PUGIXML_FOUND true)
|
||||
set (pugixml_FOUND true)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# Copyright Contributors to the Open Shading Languge project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/
|
||||
|
||||
|
||||
@@ -20,9 +20,12 @@ macro (find_python)
|
||||
|
||||
# Attempt to find the desired version, but fall back to other
|
||||
# additional versions.
|
||||
set (_req REQUIRED)
|
||||
if (PYTHON_VERSION)
|
||||
list (APPEND _req EXACT)
|
||||
unset (_req)
|
||||
if (USE_PYTHON)
|
||||
set (_req REQUIRED)
|
||||
if (PYTHON_VERSION)
|
||||
list (APPEND _req EXACT)
|
||||
endif ()
|
||||
endif ()
|
||||
checked_find_package (Python ${PYTHON_VERSION}
|
||||
${_req}
|
||||
@@ -43,9 +46,11 @@ macro (find_python)
|
||||
if (NOT DEFINED PYTHON_SITE_DIR)
|
||||
set (PYTHON_SITE_DIR "${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION_FOUND}/site-packages")
|
||||
endif ()
|
||||
message (VERBOSE " Python site packages dir ${PYTHON_SITE_DIR}")
|
||||
message (VERBOSE " Python to include 'lib' prefix: ${PYLIB_LIB_PREFIX}")
|
||||
message (VERBOSE " Python to include SO version: ${PYLIB_INCLUDE_SONAME}")
|
||||
if (VERBOSE)
|
||||
message (STATUS " Python site packages dir ${PYTHON_SITE_DIR}")
|
||||
message (STATUS " Python to include 'lib' prefix: ${PYLIB_LIB_PREFIX}")
|
||||
message (STATUS " Python to include SO version: ${PYLIB_INCLUDE_SONAME}")
|
||||
endif ()
|
||||
endmacro()
|
||||
|
||||
|
||||
@@ -59,7 +64,7 @@ macro (setup_python_module)
|
||||
|
||||
set (target_name ${lib_TARGET})
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND NOT ${CMAKE_COMPILER_ID} STREQUAL "Intel")
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
# Seems to be a problem on some systems, with pybind11 and python headers
|
||||
set_property (SOURCE ${lib_SOURCES} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-macro-redefined ")
|
||||
endif ()
|
||||
@@ -72,7 +77,7 @@ macro (setup_python_module)
|
||||
PRIVATE
|
||||
pybind11::pybind11
|
||||
Python::Python
|
||||
${lib_LIBS})
|
||||
${lib_LIBS} ${SANITIZE_LIBRARIES})
|
||||
if (APPLE)
|
||||
set_target_properties (${target_name} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
|
||||
endif ()
|
||||
@@ -93,7 +98,9 @@ macro (setup_python_module)
|
||||
endif ()
|
||||
|
||||
if (PYLIB_INCLUDE_SONAME)
|
||||
message(VERBOSE "Setting Py${lib_MODULE} SOVERSION to: ${SOVERSION}")
|
||||
if (VERBOSE)
|
||||
message(STATUS "Setting Py${lib_MODULE} SOVERSION to: ${SOVERSION}")
|
||||
endif ()
|
||||
set_target_properties(${target_name} PROPERTIES
|
||||
VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
|
||||
SOVERSION ${SOVERSION} )
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright Contributors to the Open Shading Language project.
|
||||
# Copyright Contributors to the Open Shading Languge project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/
|
||||
|
||||
@@ -16,10 +16,6 @@ add_custom_command (OUTPUT "${CMAKE_BINARY_DIR}/testsuite/runtest.py"
|
||||
MAIN_DEPENDENCY "${CMAKE_SOURCE_DIR}/testsuite/runtest.py")
|
||||
add_custom_target ( CopyFiles ALL DEPENDS "${CMAKE_BINARY_DIR}/testsuite/runtest.py" )
|
||||
|
||||
|
||||
set (OSL_TEST_BIG_TIMEOUT 800 CACHE STRING "Timeout for tests that take a long time")
|
||||
|
||||
|
||||
# add_one_testsuite() - set up one testsuite entry
|
||||
#
|
||||
# Usage:
|
||||
@@ -30,12 +26,10 @@ set (OSL_TEST_BIG_TIMEOUT 800 CACHE STRING "Timeout for tests that take a long t
|
||||
# [COMMAND cmd...] - optional override of launch command
|
||||
# )
|
||||
#
|
||||
|
||||
macro (add_one_testsuite testname testsrcdir)
|
||||
cmake_parse_arguments (_tst "" "" "ENV;COMMAND" ${ARGN})
|
||||
set (testsuite "${CMAKE_SOURCE_DIR}/testsuite")
|
||||
set (testdir "${CMAKE_BINARY_DIR}/testsuite/${testname}")
|
||||
file (MAKE_DIRECTORY "${testdir}")
|
||||
if (NOT _tst_COMMAND)
|
||||
set (_tst_COMMAND ${Python_EXECUTABLE} "${testsuite}/runtest.py" ${testdir})
|
||||
if (MSVC_IDE)
|
||||
@@ -51,17 +45,7 @@ macro (add_one_testsuite testname testsrcdir)
|
||||
OSL_TESTSUITE_SRC=${testsrcdir}
|
||||
OSL_TESTSUITE_CUR=${testdir}
|
||||
)
|
||||
|
||||
# We need to suppress the leak sanitizer for "texture" tests, because of a
|
||||
# minor leak inside OIIO (140 bytes! -- inconsequential) but which we
|
||||
# can't use the suppressions list becuase the leaks come from calls made
|
||||
# inside JITed code for which there is not a good stack trace. Any real
|
||||
# leaks from OIIO or its dependencies we assume will be caught by lsan on
|
||||
# the OIIO side, where there is no JIT to complicate things.
|
||||
if (${testname} MATCHES "^texture" OR ${testname} MATCHES "gettextureinfo")
|
||||
list (APPEND _tst_ENV ASAN_OPTIONS=detect_leaks=0:$ENV{ASAN_OPTIONS})
|
||||
endif ()
|
||||
|
||||
file (MAKE_DIRECTORY "${testdir}")
|
||||
add_test ( NAME ${testname} COMMAND ${_tst_COMMAND} )
|
||||
# message ("Test -- env ${_tst_ENV} cmd ${_tst_COMMAND}")
|
||||
set_tests_properties (${testname} PROPERTIES ENVIRONMENT "${_tst_ENV}" )
|
||||
@@ -69,14 +53,10 @@ macro (add_one_testsuite testname testsrcdir)
|
||||
# from piling up together, allocate a few cores each.
|
||||
if (${testname} MATCHES "^render-")
|
||||
set_tests_properties (${testname} PROPERTIES LABELS render
|
||||
PROCESSORS 4 COST 10 TIMEOUT ${OSL_TEST_BIG_TIMEOUT})
|
||||
endif ()
|
||||
# For debug builds, render tests are very slow, so give them a longer timeout
|
||||
if (${testname} MATCHES "render-" AND ${CMAKE_BUILD_TYPE} STREQUAL Debug)
|
||||
set_tests_properties (${testname} PROPERTIES TIMEOUT ${OSL_TEST_BIG_TIMEOUT})
|
||||
PROCESSORS 4 COST 10)
|
||||
endif ()
|
||||
# Some labeling for fun
|
||||
if (${testname} MATCHES "^texture")
|
||||
if (${testname} MATCHES "^texture-")
|
||||
set_tests_properties (${testname} PROPERTIES LABELS texture
|
||||
PROCESSORS 2 COST 4)
|
||||
endif ()
|
||||
@@ -88,15 +68,9 @@ macro (add_one_testsuite testname testsrcdir)
|
||||
set_tests_properties (${testname} PROPERTIES LABELS optix)
|
||||
if ("${CUDA_VERSION}" VERSION_GREATER_EQUAL "10.0")
|
||||
# Make sure libnvrtc-builtins.so is reachable
|
||||
set_property (TEST ${testname} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CUDA_TOOLKIT_ROOT_DIR}/lib64:$ENV{LD_LIBRARY_PATH})
|
||||
set_property (TEST ${testname} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CUDA_TOOLKIT_ROOT_DIR}/lib64)
|
||||
endif()
|
||||
endif ()
|
||||
if (${testname} MATCHES "-reg")
|
||||
# These are batched shading regression tests. Some are quite
|
||||
# long, so give them a higher cost and timeout.
|
||||
set_tests_properties (${testname} PROPERTIES LABELS batchregression
|
||||
COST 15 TIMEOUT ${OSL_TEST_BIG_TIMEOUT})
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
|
||||
@@ -108,8 +82,6 @@ macro ( TESTSUITE )
|
||||
set (_ats_LABEL "broken")
|
||||
endif ()
|
||||
set (test_all_optix $ENV{TESTSUITE_OPTIX})
|
||||
set (test_all_batched $ENV{TESTSUITE_BATCHED})
|
||||
set (test_all_rs_bitcode $ENV{TESTSUITE_RS_BITCODE})
|
||||
# Add the tests if all is well.
|
||||
set (ALL_TEST_LIST "")
|
||||
set (_testsuite "${CMAKE_SOURCE_DIR}/testsuite")
|
||||
@@ -126,10 +98,9 @@ macro ( TESTSUITE )
|
||||
|
||||
# Run the test unoptimized, unless it matches a few patterns that
|
||||
# we don't test unoptimized (or has an OPTIMIZEONLY marker file).
|
||||
if (NOT _testname MATCHES "optix"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOSCALAR"
|
||||
AND NOT EXISTS "${_testsrcdir}/BATCHED_REGRESSION"
|
||||
AND NOT EXISTS "${_testsrcdir}/OPTIMIZEONLY")
|
||||
if (NOT _testname MATCHES "^getattribute-shader" AND
|
||||
NOT _testname MATCHES "optix" AND
|
||||
NOT EXISTS "${_testsrcdir}/OPTIMIZEONLY")
|
||||
add_one_testsuite ("${_testname}" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=0 )
|
||||
endif ()
|
||||
@@ -137,32 +108,18 @@ macro ( TESTSUITE )
|
||||
# optimization, triggered by setting TESTSHADE_OPT env variable.
|
||||
# Skip OptiX-only tests and those with a NOOPTIMIZE marker file.
|
||||
if (NOT _testname MATCHES "optix"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOSCALAR"
|
||||
AND NOT EXISTS "${_testsrcdir}/BATCHED_REGRESSION"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIMIZE")
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIMIZE")
|
||||
add_one_testsuite ("${_testname}.opt" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=2 )
|
||||
endif ()
|
||||
# Run the same test again with aggressive -O2 runtime
|
||||
# optimization, triggered by setting TESTSHADE_OPT env variable.
|
||||
# Skip OptiX-only tests and those with a NOOPTIMIZE marker file.
|
||||
if (NOT _testname MATCHES "optix"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOSCALAR"
|
||||
AND NOT EXISTS "${_testsrcdir}/BATCHED_REGRESSION"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIMIZE"
|
||||
AND NOT EXISTS "${_testsrcdir}/NORSBITCODE")
|
||||
add_one_testsuite ("${_testname}.opt.rs_bitcode" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=2 TESTSHADE_RS_BITCODE=1)
|
||||
endif ()
|
||||
# When building for OptiX support, also run it in OptiX mode
|
||||
# if there is an OPTIX marker file in the directory.
|
||||
# If an environment variable $TESTSUITE_OPTIX is nonzero, then
|
||||
# run all tests with OptiX, even if there's no OPTIX marker.
|
||||
if (OSL_USE_OPTIX
|
||||
if (USE_OPTIX
|
||||
AND (EXISTS "${_testsrcdir}/OPTIX" OR test_all_optix OR _testname MATCHES "optix")
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIX"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIX-FIXME"
|
||||
AND NOT EXISTS "${_testsrcdir}/BATCHED_REGRESSION")
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIX-FIXME")
|
||||
# Unoptimized
|
||||
if (NOT EXISTS "${_testsrcdir}/OPTIMIZEONLY")
|
||||
add_one_testsuite ("${_testname}.optix" "${_testsrcdir}"
|
||||
@@ -171,135 +128,52 @@ macro ( TESTSUITE )
|
||||
# and optimized
|
||||
add_one_testsuite ("${_testname}.optix.opt" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=2 TESTSHADE_OPTIX=1 )
|
||||
if (NOT EXISTS "${_testsrcdir}/NOFUSED")
|
||||
# and fused
|
||||
add_one_testsuite ("${_testname}.optix.fused" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=2 TESTSHADE_OPTIX=1 TESTSHADE_FUSED=1 )
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (OSL_BUILD_BATCHED)
|
||||
# When building for Batched support, also run it in Batched mode
|
||||
# if there is an BATCHED marker file in the directory.
|
||||
# If an environment variable $TESTSUITE_BATCHED is nonzero, then
|
||||
# run all tests in Batched mode, even if there's no BATCHED marker.
|
||||
if ((EXISTS "${_testsrcdir}/BATCHED" OR test_all_batched OR _testname MATCHES "batched")
|
||||
AND NOT EXISTS "${_testsrcdir}/BATCHED_REGRESSION"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOBATCHED"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOBATCHED-FIXME"
|
||||
AND NOT EXISTS "${_testsrcdir}/OPTIMIZEONLY")
|
||||
add_one_testsuite ("${_testname}.batched" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=0 TESTSHADE_BATCHED=1 )
|
||||
endif ()
|
||||
|
||||
if ((EXISTS "${_testsrcdir}/BATCHED" OR test_all_batched OR _testname MATCHES "batched")
|
||||
AND NOT EXISTS "${_testsrcdir}/BATCHED_REGRESSION"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOBATCHED"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOBATCHED-FIXME"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIMIZE")
|
||||
add_one_testsuite ("${_testname}.batched.opt" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=2 TESTSHADE_BATCHED=1 )
|
||||
endif ()
|
||||
|
||||
# When building for Batched support, optionally run a regression test
|
||||
# if there is an BATCHED_REGRESSION marker file in the directory.
|
||||
if ((EXISTS "${_testsrcdir}/BATCHED_REGRESSION")
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIMIZE")
|
||||
# optimized for right now
|
||||
add_one_testsuite ("${_testname}.regress.batched.opt" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=2 OSL_REGRESSION_TEST=BATCHED )
|
||||
endif ()
|
||||
if ((EXISTS "${_testsrcdir}/BATCHED_REGRESSION")
|
||||
AND EXISTS "${_testsrcdir}/NOOPTIMIZE")
|
||||
# not optimized
|
||||
add_one_testsuite ("${_testname}.regress.batched" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=0 OSL_REGRESSION_TEST=BATCHED )
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# if there is an RS_BITCODE marker file in the directory.
|
||||
if ((EXISTS "${_testsrcdir}/RS_BITCODE" OR test_all_rs_bitcode)
|
||||
AND NOT EXISTS "${_testsrcdir}/BATCHED_REGRESSION"
|
||||
AND NOT EXISTS "${_testsrcdir}/RS_BITCODE_REGRESSION"
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIMIZE")
|
||||
add_one_testsuite ("${_testname}.rsbitcode.opt" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=2 TESTSHADE_RS_BITCODE=1 )
|
||||
endif ()
|
||||
|
||||
# if there is an RS_BITCODE_REGRESSION marker file in the directory.
|
||||
if (EXISTS "${_testsrcdir}/RS_BITCODE_REGRESSION" OR (
|
||||
test_all_rs_bitcode AND EXISTS "${_testsrcdir}/BATCHED_REGRESSION")
|
||||
AND NOT EXISTS "${_testsrcdir}/NOOPTIMIZE")
|
||||
# optimized for right now
|
||||
add_one_testsuite ("${_testname}.regress.rsbitcode.opt" "${_testsrcdir}"
|
||||
ENV TESTSHADE_OPT=2 OSL_REGRESSION_TEST=RS_BITCODE )
|
||||
endif ()
|
||||
|
||||
endforeach ()
|
||||
message (VERBOSE "Added tests: ${ALL_TEST_LIST}")
|
||||
if (VERBOSE)
|
||||
message (STATUS "Added tests: ${ALL_TEST_LIST}")
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
|
||||
macro (osl_add_all_tests)
|
||||
# List all the individual testsuite tests here, except those that need
|
||||
# special installed tests.
|
||||
TESTSUITE ( aastep allowconnect-err andor-reg and-or-not-synonyms
|
||||
arithmetic area-reg arithmetic-reg
|
||||
array array-reg array-copy-reg array-derivs array-range
|
||||
array-aassign array-assign-reg array-length-reg
|
||||
bitwise-and-reg bitwise-or-reg bitwise-shl-reg bitwise-shr-reg bitwise-xor-reg
|
||||
blackbody blackbody-reg blendmath breakcont breakcont-reg
|
||||
TESTSUITE ( aastep allowconnect-err and-or-not-synonyms arithmetic
|
||||
array array-derivs array-range array-aassign
|
||||
blackbody blendmath breakcont
|
||||
bug-array-heapoffsets bug-locallifetime bug-outputinit
|
||||
bug-param-duplicate bug-peep bug-return
|
||||
calculatenormal-reg
|
||||
cellnoise closure closure-array closure-layered closure-parameters closure-zero closure-conditional
|
||||
color color-reg colorspace comparison
|
||||
complement-reg compile-buffer compassign-bool compassign-reg
|
||||
cellnoise closure closure-array color comparison
|
||||
compile-buffer
|
||||
component-range
|
||||
control-flow-reg connect-components
|
||||
connect-components
|
||||
const-array-params const-array-fill
|
||||
debugnan debug-uninit
|
||||
derivs derivs-muldiv-clobber
|
||||
draw_string
|
||||
error-dupes error-serialized
|
||||
example-deformer
|
||||
example-batched-deformer
|
||||
exit exponential
|
||||
filterwidth-reg
|
||||
for-reg format-reg fprintf
|
||||
fprintf
|
||||
function-earlyreturn function-simple function-outputelem
|
||||
function-overloads function-redef
|
||||
geomath getattribute-camera getattribute-shader getattribute-shading
|
||||
getsymbol-nonheap gettextureinfo gettextureinfo-reg
|
||||
gettextureinfo-udim gettextureinfo-udim-reg
|
||||
globals-needed
|
||||
group-outputs groupdata-opt groupstring
|
||||
geomath getattribute-camera getattribute-shader
|
||||
getsymbol-nonheap gettextureinfo
|
||||
group-outputs groupstring
|
||||
hash hashnoise hex hyperb
|
||||
ieee_fp ieee_fp-reg if if-reg incdec initlist
|
||||
initops initops-instance-clash
|
||||
intbits isconnected
|
||||
isconstant
|
||||
ieee_fp if incdec initlist initops intbits isconnected isconstant
|
||||
layers layers-Ciassign layers-entry layers-lazy layers-lazyerror
|
||||
layers-nonlazycopy layers-repeatedoutputs
|
||||
length-reg linearstep
|
||||
logic loop luminance-reg
|
||||
matrix matrix-reg matrix-arithmetic-reg
|
||||
matrix-compref-reg max-reg message message-no-closure message-reg
|
||||
linearstep
|
||||
logic loop matrix message
|
||||
mergeinstances-duplicate-entrylayers
|
||||
mergeinstances-nouserdata mergeinstances-vararray
|
||||
metadata-braces min-reg miscmath missing-shader
|
||||
mix-reg
|
||||
metadata-braces miscmath missing-shader
|
||||
named-components
|
||||
nestedloop-reg
|
||||
noise noise-cell
|
||||
noise-gabor noise-gabor2d-filter noise-gabor3d-filter
|
||||
noise-gabor-reg
|
||||
noise-generic
|
||||
noise-perlin noise-simplex
|
||||
noise-reg
|
||||
normalize-reg
|
||||
pnoise pnoise-cell pnoise-gabor
|
||||
pnoise-generic pnoise-perlin
|
||||
pnoise-reg
|
||||
pnoise pnoise-cell pnoise-gabor pnoise-perlin
|
||||
operator-overloading
|
||||
opt-warnings
|
||||
oslc-comma oslc-D oslc-M
|
||||
@@ -313,10 +187,8 @@ macro (osl_add_all_tests)
|
||||
oslc-err-outputparamvararray oslc-err-paramdefault
|
||||
oslc-err-struct-array-init oslc-err-struct-ctr
|
||||
oslc-err-struct-dup oslc-err-struct-print
|
||||
oslc-err-type-as-variable
|
||||
oslc-err-unknown-ctr
|
||||
oslc-literalfold
|
||||
oslc-pragma-warnerr
|
||||
# oslc-pragma-warnerr
|
||||
oslc-warn-commainit
|
||||
oslc-variadic-macro
|
||||
oslc-version
|
||||
@@ -325,31 +197,14 @@ macro (osl_add_all_tests)
|
||||
osl-imageio
|
||||
paramval-floatpromotion
|
||||
pragma-nowarn
|
||||
printf-reg
|
||||
printf-whole-array
|
||||
raytype raytype-reg raytype-specialized regex-reg
|
||||
reparam reparam-arrays testoptix-reparam
|
||||
raytype raytype-specialized reparam
|
||||
render-background render-bumptest
|
||||
render-cornell render-furnace-diffuse
|
||||
render-mx-furnace-burley-diffuse
|
||||
render-mx-furnace-oren-nayar
|
||||
render-mx-furnace-sheen
|
||||
render-mx-burley-diffuse
|
||||
render-mx-dielectric render-mx-dielectric-glass
|
||||
render-mx-conductor
|
||||
render-mx-generalized-schlick render-mx-generalized-schlick-glass
|
||||
render-mx-layer
|
||||
render-mx-sheen
|
||||
render-microfacet render-oren-nayar
|
||||
render-uv render-veachmis render-ward
|
||||
render-raytypes
|
||||
select select-reg shaderglobals shortcircuit
|
||||
smoothstep-reg
|
||||
spline spline-reg splineinverse splineinverse-ident
|
||||
splineinverse-knots-ascend-reg splineinverse-knots-descend-reg
|
||||
render-microfacet render-oren-nayar render-veachmis render-ward
|
||||
select shortcircuit spline splineinverse splineinverse-ident
|
||||
spline-boundarybug spline-derivbug
|
||||
split-reg
|
||||
string string-reg
|
||||
string
|
||||
struct struct-array struct-array-mixture
|
||||
struct-err struct-init-copy
|
||||
struct-isomorphic-overload struct-layers
|
||||
@@ -357,40 +212,35 @@ macro (osl_add_all_tests)
|
||||
struct-nested struct-nested-assign struct-nested-deep
|
||||
ternary
|
||||
testshade-expr
|
||||
test-fmt-arrays test-fmt-fileprint
|
||||
test-fmt-cxpf test-fmt-noise test-fmt-matrixcolor
|
||||
test-fmt-stpf test-fmt-errorwarning test-fmt-errorwarning-repeats
|
||||
texture-alpha texture-alpha-derivs
|
||||
texture-blur texture-connected-options
|
||||
texture-derivs texture-environment texture-errormsg
|
||||
texture-environment-opts-reg
|
||||
texture-derivs texture-errormsg
|
||||
texture-firstchannel texture-interp
|
||||
texture-missingalpha texture-missingcolor texture-opts-reg texture-simple
|
||||
texture-missingalpha texture-missingcolor texture-simple
|
||||
texture-smallderivs texture-swirl texture-udim
|
||||
texture-width texture-withderivs texture-wrap
|
||||
trace-reg
|
||||
trailing-commas
|
||||
transcendental-reg
|
||||
transitive-assign
|
||||
transform transform-reg transformc transformc-reg trig trig-reg
|
||||
typecast
|
||||
transform transformc trig typecast
|
||||
unknown-instruction
|
||||
userdata userdata-partial userdata-custom userdata-passthrough
|
||||
userdata userdata-passthrough
|
||||
vararray-connect vararray-default
|
||||
vararray-deserialize vararray-param
|
||||
vecctr vector vector-reg
|
||||
wavelength_color wavelength_color-reg Werror xml xml-reg )
|
||||
vecctr vector
|
||||
wavelength_color Werror xml )
|
||||
|
||||
# Only run the ocio test if the OIIO we are using has OCIO support
|
||||
if (OpenImageIO_HAS_OpenColorIO)
|
||||
TESTSUITE ( ocio )
|
||||
if (OPENIMAGEIO_VERSION VERSION_GREATER_EQUAL 2.1)
|
||||
# I'm too lazy to set this test up to work with OIIO versions too
|
||||
# old to have proper exported cmake config files. So just skip it
|
||||
# for OIIO 2.0.
|
||||
TESTSUITE (example-deformer)
|
||||
endif ()
|
||||
|
||||
# Add tests that require the Python bindings if we built them.
|
||||
# We also exclude these tests if this is a sanitizer build, because the
|
||||
# Python interpreter itself won't be linked with the right asan
|
||||
# We also exclude these tests if this is a sanitizer build on Linux,
|
||||
# because the Python interpreter itself won't be linked with the right asan
|
||||
# libraries to run correctly.
|
||||
if (USE_PYTHON AND NOT SANITIZE)
|
||||
if (USE_PYTHON AND NOT SANITIZE_ON_LINUX)
|
||||
TESTSUITE ( python-oslquery )
|
||||
endif ()
|
||||
|
||||
@@ -398,11 +248,11 @@ macro (osl_add_all_tests)
|
||||
execute_process ( COMMAND ${OpenImageIO_LIB_DIR}/../bin/oiiotool --help
|
||||
OUTPUT_VARIABLE oiiotool_help )
|
||||
if (oiiotool_help MATCHES "openvdb")
|
||||
TESTSUITE ( texture3d texture3d-opts-reg )
|
||||
TESTSUITE ( texture3d )
|
||||
endif()
|
||||
|
||||
# Only run pointcloud tests if Partio is found
|
||||
if (partio_FOUND)
|
||||
if (PARTIO_FOUND)
|
||||
TESTSUITE ( pointcloud pointcloud-fold )
|
||||
endif ()
|
||||
|
||||
@@ -411,13 +261,4 @@ macro (osl_add_all_tests)
|
||||
TESTSUITE ( testoptix testoptix-noise example-cuda)
|
||||
endif ()
|
||||
|
||||
# Some regression tests have a lot of combinations and may need more time to finish
|
||||
if (OSL_BUILD_BATCHED)
|
||||
set_tests_properties (arithmetic-reg.regress.batched.opt
|
||||
PROPERTIES TIMEOUT ${OSL_TEST_BIG_TIMEOUT})
|
||||
set_tests_properties (transform-reg.regress.batched.opt
|
||||
PROPERTIES TIMEOUT ${OSL_TEST_BIG_TIMEOUT})
|
||||
endif ()
|
||||
set_tests_properties (matrix-reg.regress.rsbitcode.opt
|
||||
PROPERTIES TIMEOUT ${OSL_TEST_BIG_TIMEOUT})
|
||||
endmacro()
|
||||
|
||||
@@ -38,7 +38,9 @@ macro (docdeep_generate)
|
||||
# ^^ syntax: prefix options one-arg-keywords multi-arg-keywords args
|
||||
set (oslfile ${_docdeep_SOURCE})
|
||||
set (mdfile "${_docdeep_NAME}.md.html")
|
||||
message (VERBOSE "docdeep will make '${mdfile}'")
|
||||
if (VERBOSE)
|
||||
message (STATUS "docdeep will make '${mdfile}'")
|
||||
endif ()
|
||||
set (docdeep_program ${CMAKE_SOURCE_DIR}/src/build-scripts/docdeep.py)
|
||||
add_custom_command (OUTPUT ${mdfile}
|
||||
COMMAND ${Python_EXECUTABLE} ${docdeep_program} -d ${_docdeep_NAME} -s docs.css
|
||||
|
||||
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 16 KiB |
@@ -30,35 +30,3 @@ clean:
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
|
||||
doxygen:
|
||||
echo "make doxygen TBD"
|
||||
doxygen Doxyfile
|
||||
touch doxygen.turd
|
||||
|
||||
doxygen.turd: doxygen
|
||||
|
||||
doxygenclean:
|
||||
cmake -E remove_directory ../../build/doxygen
|
||||
cmake -E remove doxygen.turd
|
||||
cmake -E remove_directory ../../build/sphinx
|
||||
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
SOURCEDIR = .
|
||||
SPHINXBUILDDIR = ../../build/sphinx
|
||||
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
sphinx : Makefile conf.py
|
||||
# @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(SPHINXBUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
$(SPHINXBUILD) -b html "$(SOURCEDIR)" "$(SPHINXBUILDDIR)" $(SPHINXOPTS)
|
||||
|
||||
sphinxpdf : Makefile conf.py
|
||||
# @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(SPHINXBUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
$(SPHINXBUILD) -b latex "$(SOURCEDIR)" "$(SPHINXBUILDDIR)/latex" $(SPHINXOPTS)
|
||||
$(MAKE) -C $(SPHINXBUILDDIR)/latex all-pdf
|
||||
# $(SPHINXBUILD) -b latexpdf "$(SOURCEDIR)" "$(SPHINXBUILDDIR)/latex" $(SPHINXOPTS)
|
||||
|
||||
@@ -1,307 +0,0 @@
|
||||
<!--
|
||||
Copyright Contributors to the Open Shading Language project.
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
-->
|
||||
|
||||
|
||||
(chap-bigpicture=)
|
||||
# The Big Picture
|
||||
|
||||
|
||||
This chapter attempts to lay out the major concepts of OSL,
|
||||
define key nomenclature, and sketch out how individual shaders fit
|
||||
together in the context of a renderer as a whole.
|
||||
|
||||
<!--
|
||||
Other than the background material of this chapter, the rest of this
|
||||
specification deals strictly with the language itself. In the future,
|
||||
there will be separate (shorter) documents explaining in detail the use
|
||||
of the language compiler, the renderer-side issues, the library and APIs
|
||||
for how a renderer actually causes shaders to be evaluated, and so on.
|
||||
-->
|
||||
|
||||
#### A shader is code that performs a discrete task
|
||||
|
||||
A shader is a program, with inputs and outputs, that performs a specific
|
||||
task when rendering a scene, such as determining the appearance behavior
|
||||
of a material or light. The program code is written in OSL, the
|
||||
specification of which comprises this document.
|
||||
|
||||
For example, here is a simple `gamma` shader that performs
|
||||
simple gamma correction on is `Cin` input, storing the result
|
||||
in its output `Cout`:
|
||||
|
||||
```{image} Figures/shaderschematic.png
|
||||
:width: 6.0in
|
||||
```
|
||||
|
||||
The shader's inputs and outputs are called *shader parameters*.
|
||||
Parameters have default values, specified in the shader code, but may
|
||||
also be given new values by the renderer at runtime.
|
||||
|
||||
#### Shader instances
|
||||
|
||||
A particular shader may be used many times in a scene, on different
|
||||
objects or as different layers in a shader group. Each separate use of
|
||||
a shader is called a *shader instance*. Although all instances of
|
||||
a shader are comprised of the same program code, each instance may
|
||||
override any or all of its default parameter values with its own set of
|
||||
*instance values*.
|
||||
|
||||
Below is a schematic showing a `gamma` instance with the `gam` parameter
|
||||
overridden with an instance-specific value of `2.2`.
|
||||
|
||||
```{image} Figures/instanceschematic.png
|
||||
:width: 200px
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Shader groups, layers, and connections
|
||||
|
||||
A *shader group* is an ordered sequence of individual shaders called *layers*
|
||||
that are executed in turn. Output parameters of an earlier-executed layer may
|
||||
be *connected* to an input parameter of a later-executed layer. This connected
|
||||
network of layers is sometimes called a *shader network* or a *shader DAG*
|
||||
(directed acyclic graph). Of course, it is fine for the shader group to
|
||||
consist of a single shader layer.
|
||||
|
||||
Below is a schematic showing how several shader instances may be
|
||||
connected to form a shader group.
|
||||
|
||||
|
||||
|
||||
```{image} Figures/groupschematic.png
|
||||
:width: 6.0in
|
||||
```
|
||||
|
||||
|
||||
|
||||
And here is sample pseudo-code shows how the above network may be assembled
|
||||
using an API in the renderer [^rendererapi]:
|
||||
|
||||
```
|
||||
ShaderGroupBegin ()
|
||||
Shader ("texturemap", /* shader name */
|
||||
"tex1", /* layer name */
|
||||
"string name", "rings.tx") /* instance variable */
|
||||
Shader ("texturemap", "tex2", "string name", "grain.tx")
|
||||
Shader ("gamma", "gam1", "float gam", 2.2)
|
||||
Shader ("gamma", "gam2", "float gam", 1)
|
||||
Shader ("wood", "wood1")
|
||||
ConnectShaders ("tex1", /* layer name A */
|
||||
"Cout", /* an output parameter of A */
|
||||
"gam1", /* layer name B */
|
||||
"Cin") /* Connect this layer of B to A's Cout */
|
||||
ConnectShaders ("tex2", "Cout", "gam2", "Cin")
|
||||
ConnectShaders ("gam1", "Cout", "wood1", "rings")
|
||||
ConnectShaders ("gam2", "Cout", "wood1", "grain")
|
||||
ShaderGroupEnd ()
|
||||
```
|
||||
|
||||
Or, expressed as serialized text (as detailed in Chapter [](chap-shader-groups):
|
||||
|
||||
param string name "rings.tx" ;
|
||||
shader "texturemap" "tex1" ;
|
||||
param string name "grain.tx" ;
|
||||
shader "texturemap" "tex2" ;
|
||||
param float gam 2.2 ;
|
||||
shader "gamma" "gam1" ;
|
||||
param float gam 1.0 ;
|
||||
shader "gamma" "gam2" ;
|
||||
shader "wood" "wood1" ;
|
||||
connect tex1.Cout gam1.Cin ;
|
||||
connect tex2.Cout gam2.Cin ;
|
||||
connect gam1.Cout wood1.rings ;
|
||||
connect gam2.Cout wood1.grain ;
|
||||
|
||||
The rules for which data types may be connected are generally the same as
|
||||
the rules determining which variables may be assigned to each other in OSL
|
||||
source code:
|
||||
|
||||
* `source` and `dest` are the same data type.
|
||||
* `source` and `dest` are both *triples* (`color`, `point`,
|
||||
`vector`, or `normal`), even if they are not the same kind of triple.
|
||||
* `source` is an `int` and `dest` is a `float`.
|
||||
* `source` is a `float` or `int` and `dest` is a
|
||||
*triple* (the scalar value will be replicated for all three components
|
||||
of the triple).
|
||||
* `source` is a single component of an aggregate type (e.g. one
|
||||
channel of a `color`) and `dest` is a `float` (or vice versa).
|
||||
|
||||
#### Geometric primitives
|
||||
|
||||
The *scene* consists of primarily of geometric primitives,
|
||||
light sources, and cameras.
|
||||
|
||||
*Geometric primitives* are shapes such as NURBS, subdivision surfaces,
|
||||
polygons, and curves. The exact set of supported primitives may vary
|
||||
from renderer to renderer.
|
||||
|
||||
Each geometric primitive carries around a set of named *primitive
|
||||
variables* (also sometimes called *interpolated values* or
|
||||
*user data*). Nearly all shape types will have, among their primitive
|
||||
variables, control point positions that, when interpolated, actually
|
||||
designate the shape. Some shapes will also allow the specification of
|
||||
normals or other shape-specific data. Arbitrary user data may also be
|
||||
attached to a shape as primitive variables. Primitive variables may be
|
||||
interpolated in a variety of ways: one constant value per primitive, one
|
||||
constant value per face, or per-vertex values that are interpolated
|
||||
across faces in various ways.
|
||||
|
||||
If a shader input parameter's name and type match the name and type
|
||||
of a primitive variable on the object (and that input parameters is
|
||||
not already explicitly connected to another layer's output), the
|
||||
interpolated primitive variable will override the instance value or
|
||||
default.
|
||||
|
||||
|
||||
#### Attribute state and shader assignments
|
||||
|
||||
Every geometric primitive has a collection of *attributes* (sometimes
|
||||
called the *graphics state*) that includes its transformation
|
||||
matrix, the list of which lights illuminate it, whether it is one-sided
|
||||
or two-sided, shader assignments, etc. There may also be a long list of
|
||||
renderer-specific or user-designated attributes associated with each
|
||||
object. A particular attribute state may be shared among many geometric
|
||||
primitives.
|
||||
|
||||
The attribute state also includes shader assignments --- the shaders or
|
||||
shader groups for each of several *shader uses*, such as surface
|
||||
shaders that designate how light reflects or emits from each point on a shape,
|
||||
displacement shaders that can add fine detail to the shape on a
|
||||
point-by-point basis, and volume shaders that describe how light is
|
||||
scattered within a region of space. A particular renderer may have
|
||||
additional shader types that it supports.
|
||||
|
||||
|
||||
#### Shader execution state: parameter binding and global variables
|
||||
|
||||
When the body of code of an individual shader is about to execute, all
|
||||
its parameters are *bound* --- that is, take on specific values
|
||||
(from connections from other layers, interpolated primitive variables,
|
||||
instance values, or defaults, in that order).
|
||||
|
||||
Certain state about the position on the surface where the shading is
|
||||
being run is stored in so-called *global variables*. This includes
|
||||
such useful data as the 3D coordinates of the point being shaded, the
|
||||
surface normal and tangents at that point, etc.
|
||||
|
||||
Additionally, the shader may query other information about other
|
||||
elements of the attribute state attached to the primitive, and
|
||||
information about the renderer as a whole (rendering options, etc.).
|
||||
|
||||
#### Surface and volume shaders compute closures
|
||||
|
||||
Surface shaders (and volume shaders) do not by themselves compute the
|
||||
final color of light emanating from the surface (or along a volume).
|
||||
Rather, they compute a *closure*, which is a symbolic representation
|
||||
describing the appearance of the surface, that may be more fully
|
||||
evaluated later. This is in effect a parameterized formula, in which
|
||||
some inputs have definite numeric values, but others may depend on
|
||||
quantities not yet known (such as the direction from which the surface
|
||||
is being viewed, and the amount of light from each source that is
|
||||
arriving at the surface).
|
||||
|
||||
For example, a surface shader may compute its result like this:
|
||||
|
||||
color paint = texture ("file.tx", u, v);
|
||||
Ci = paint * diffuse (N);
|
||||
|
||||
In this example, the variable `paint` will take on a specific numeric
|
||||
value (by looking up from a texture map). But the `diffuse()` function
|
||||
returns a `color closure`, not a definite numeric `color`. The output
|
||||
variable `Ci` that represents the appearance of the surface is also a `color
|
||||
closure`, whose numeric value is not known yet, except that it will be the
|
||||
product of `paint`` and a Lambertian reflectance.
|
||||
|
||||
|
||||
|
||||
```{image} Figures/shaderexecschematic.png
|
||||
```
|
||||
|
||||
The closures output by surface and volume shaders can do a number of
|
||||
interesting things that a mere number cannot:
|
||||
|
||||
* Evaluate: given input and output light directions, compute the
|
||||
proportion of light propagating from input to output.
|
||||
* Sample: given just an input (or output) direction, choose a
|
||||
scattering direction with a probability distribution that is
|
||||
proportional to the amount of light that will end up going in various
|
||||
directions.
|
||||
* Integrate: given all lights and a view direction, compute
|
||||
the total amount of light leaving the surface in the view direction.
|
||||
* Recompute: given changes only to lights (or only to one light),
|
||||
recompute the integrated result without recomputing other lights or
|
||||
any of the calculations that went into assembling constants in the
|
||||
closure (such as texture lookups, noise functions, etc.).
|
||||
|
||||
<!--
|
||||
At present, we are assuming that the primitive closure functions (such
|
||||
as `diffuse`, `ward`, `cooktorrance`, etc.) are all built
|
||||
into the renderer, or implemented as renderer plugins. At a later time,
|
||||
possibly in a later draft or maybe not until a truly later version of
|
||||
the spec, we will fully spec it out so that closure primitive functions
|
||||
may be written in OSL. But I fear that if we do it too soon,
|
||||
we'll screw it up. But, yes, the eventual goal is for you to be able to
|
||||
write these primitive functions in the language itself.
|
||||
-->
|
||||
|
||||
|
||||
#### Integrators
|
||||
|
||||
The renderer contains a number of *integrators* (selectable via the
|
||||
renderer's API) which will combine the color closures computed by
|
||||
surfaces and volumes with the light sources and view-dependent
|
||||
information, to yield the amount of light visible to the camera.
|
||||
|
||||
```{image} Figures/integratorschematic.png
|
||||
:width: 6.0in
|
||||
```
|
||||
|
||||
<!--
|
||||
At present, this document is written as if the integrators are built
|
||||
into the renderer itself (or implemented as renderer plug-ins). At a
|
||||
later time, we intend to make it possible for integrators themselves
|
||||
to be written in OSL.
|
||||
-->
|
||||
|
||||
|
||||
#### Units
|
||||
|
||||
You can tell the renderer (through a global option) what units the scene
|
||||
is using for distance and time. Then the shader has a built-in function
|
||||
called `transformu()` that works a lot like `transform()`, but
|
||||
instead of converting between coordinate systems, it converts among
|
||||
units. For example,
|
||||
|
||||
```
|
||||
displacement bumpy (float bumpdist = 1,
|
||||
string bumpunits = "cm")
|
||||
{
|
||||
// convert bumpdist to common units
|
||||
float spacing = transformu (bumpunits, "common", bumpdist);
|
||||
float n = noise (P / spacing);
|
||||
displace (n);
|
||||
}
|
||||
```
|
||||
|
||||
So you can write a shader to achieve some effect in real world units,
|
||||
and that shader is totally reusable on another show that used different
|
||||
modeling units.
|
||||
|
||||
It knows all the standard names like `cm`, `in`, `km`,
|
||||
etc., and can convert among any of those, as well as between named
|
||||
coordinate systems. For example,
|
||||
|
||||
```
|
||||
float x = transformu ("object", "mm", 1);
|
||||
```
|
||||
|
||||
now `x` is the number of millimeters per unit of "object" space on
|
||||
that primitive.
|
||||
|
||||
[^rendererapi]: This document does not dictate a specific renderer API for
|
||||
declaring shader instances, groups, and connections; the code above is just
|
||||
an example of how it might be done.
|
||||
|
||||