<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span>Hi Mark,</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<br>
Thanks for the feedback.</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
By default CMake is building the static library in debug, to get other things one has to explicit turn it on.<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
To build in release mode for CMake you use the following flag:</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
-DCMAKE_BUILD_TYPE=Release</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<a id="LPlnk473027" href="https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html">https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html</a><br>
</div>
<div class="LPBorder634962" id="LPBorder_GTaHR0cHM6Ly9jbWFrZS5vcmcvY21ha2UvaGVscC9sYXRlc3QvdmFyaWFibGUvQ01BS0VfQlVJTERfVFlQRS5odG1s" style="width: 100%; margin-top: 16px; margin-bottom: 16px; position: relative; min-width: 424px; max-width: 800px;" contenteditable="false">
<table id="LPContainer634962" role="presentation" style="padding: 12px 36px 12px 12px; border-radius: 2px; border: 1px solid rgb(200, 200, 200); width: 100%;">
<tbody>
<tr valign="top" style="border-spacing: 0px;">
<td style="width: 100%;">
<div id="LPTitle634962" style="font-family: "wf_segoe-ui_light","Segoe UI Light","Segoe WP Light","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; font-size: 21px; font-weight: 300; margin-right: 8px; margin-bottom: 12px;">
<a id="LPUrlAnchor634962" style="color: var(--themePrimary); text-decoration: none;" href="https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html" target="_blank">CMAKE_BUILD_TYPE — CMake 3.14.1 Documentation</a></div>
<div id="LPDescription634962" style="color: rgb(102, 102, 102); overflow: hidden; font-family: "wf_segoe-ui_normal","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; font-size: 14px; margin-right: 8px; margin-bottom: 12px; max-height: 100px;">
CMAKE_BUILD_TYPE¶. Specifies the build type on single-configuration generators. This statically specifies what build type (configuration) will be built in this build tree.</div>
<div id="LPMetadata634962" style="color: rgb(166, 166, 166); font-family: "wf_segoe-ui_normal","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; font-size: 14px; font-weight: 400;">
cmake.org</div>
</td>
</tr>
</tbody>
</table>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
To build shared library you use the following flag:</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
-DBUILD_SHARED_LIBS=ON<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<a id="LPlnk385626" href="https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html">https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html</a><br>
</div>
<div class="LPBorder144821" id="LPBorder_GTaHR0cHM6Ly9jbWFrZS5vcmcvY21ha2UvaGVscC9sYXRlc3QvdmFyaWFibGUvQlVJTERfU0hBUkVEX0xJQlMuaHRtbA.." style="width: 100%; margin-top: 16px; margin-bottom: 16px; position: relative; min-width: 424px; max-width: 800px;" contenteditable="false">
<table id="LPContainer144821" role="presentation" style="padding: 12px 36px 12px 12px; border-radius: 2px; border: 1px solid rgb(200, 200, 200); width: 100%;">
<tbody>
<tr valign="top" style="border-spacing: 0px;">
<td style="width: 100%;">
<div id="LPTitle144821" style="font-family: "wf_segoe-ui_light","Segoe UI Light","Segoe WP Light","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; font-size: 21px; font-weight: 300; margin-right: 8px; margin-bottom: 12px;">
<a id="LPUrlAnchor144821" style="color: var(--themePrimary); text-decoration: none;" href="https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html" target="_blank">BUILD_SHARED_LIBS — CMake 3.14.1 Documentation</a></div>
<div id="LPDescription144821" style="color: rgb(102, 102, 102); overflow: hidden; font-family: "wf_segoe-ui_normal","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; font-size: 14px; margin-right: 8px; margin-bottom: 12px; max-height: 100px;">
BUILD_SHARED_LIBS¶. Global flag to cause add_library() to create shared libraries if on.. If present and true, this will cause all libraries to be built shared unless the library was explicitly added as a static library.</div>
<div id="LPMetadata144821" style="color: rgb(166, 166, 166); font-family: "wf_segoe-ui_normal","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; font-size: 14px; font-weight: 400;">
cmake.org</div>
</td>
</tr>
</tbody>
</table>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
To build tests use the following flags:</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
-DBUILD_TESTING=ON</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
Then you can use: ctest -j 4 to run the test in parallel</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
For programs use:</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
-DBUILD_PROGRAMS=ON<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
For the missing build flags this is great feedback and I will to fix those:<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
Add:</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">-DENABLE_HARDENING, </span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">-D_FORTIFY_SOURCE=2</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><br>
</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">Add option:</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">-fstack-protector-strong (on compilers where it is supported, unless</span><br style="color: rgb(33, 33, 33); font-family: &quot; font-size: 14.66px">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">disabled with --disable-stack-protector).</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">-DCUSTOM_MODES</span></span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><br>
</span></span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">Please let me know if there is more missing flags.</span></span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><br>
</span></span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<font style="background-color: rgb(255, 255, 255);">I might reach out to you directly if I am having issues with the build with these flags.</font></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><br>
</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">I would like to aim that CMake can produce binaries similar as autotools with same build flags etc.</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">Some documentation regarding these options for people not familiar with CMake would probably also help.</span><span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><br>
</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none"><br>
</span></div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<span style="display: inline !important; background-color: rgb(255, 255, 255); font-size-adjust: none">Best Regards Marcus</span><br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif; font-size: 12pt;">
<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Mark Harris <markh.sj@gmail.com> on behalf of Mark Harris <mark.hsj@gmail.com><br>
<b>Sent:</b> Wednesday, April 10, 2019 07:24<br>
<b>To:</b> opus@xiph.org<br>
<b>Cc:</b> Marcus Asteborg<br>
<b>Subject:</b> Opus cmake build</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">I tried the new cmake-based build system to build Opus on Linux and<br>
macOS.  I'm not familiar with cmake but based on instructions I found<br>
online I used it as follows:<br>
<br>
 - mkdir build<br>
 - cd build<br>
 - cmake -DCMAKE_INSTALL_PREFIX:PATH=<install-path> ..<br>
 - make<br>
 - ctest<br>
 - make install<br>
<br>
Although the "make" command completed, it reported that optimizations<br>
were disabled:<br>
<br>
opus_decoder.c:37:10: warning: You appear to be compiling without<br>
optimization, if so opus will be very slow. [-W#pragma-messages]<br>
<br>
The autotools build builds with -g -O2, unless overridden.  It appears<br>
that cmake is using neither of those options.  I don't have a strong<br>
opinion on -g, but for Opus it is important to build with optimizations<br>
enabled; so much so that this message was added so that if somehow the<br>
user managed to build with optimizations off they would be made aware<br>
that they messed something up.  How can we make this build by default<br>
with optimizations enabled?<br>
<br>
Checking the compiler options that cmake was using, I also found that it<br>
was enabling custom modes with -DCUSTOM_MODES.  This is not a<br>
recommended option, and the autotools build does not enable this unless<br>
configured with --enable-custom-modes.  And it is not present at all in<br>
the Visual Studio project files, so it is not clear where this came<br>
from.  I could not even find an option to disable this with cmake.  This<br>
should default to disabled.<br>
<br>
To reduce the chance that Opus can be used as part of a security<br>
exploit, Opus builds with a number of hardening options in a default<br>
autotools build, including -DENABLE_HARDENING, -D_FORTIFY_SOURCE=2, and<br>
-fstack-protector-strong (on compilers where it is supported, unless<br>
disabled with --disable-stack-protector).  It also enables a number of<br>
compiler warnings by default, to help catch mistakes.  However it<br>
appears that all of that is lost in the cmake build.  How can we get<br>
those added?<br>
<br>
When I ran the ctest command it reported "No test configuration file<br>
found!" and did not run any of the tests.  Is this the correct command?<br>
With autotools the tests are run using "make check", but that did not<br>
work either using the cmake-generated Makefile.<br>
<br>
I went ahead and installed with "make install" without running the<br>
tests, but checking the install location I could not find the libopus.so<br>
file (or libopus.dylib on macOS).  There was a libopus.a but the shared<br>
library was missing.  In the autotools build both libopus.so (or<br>
libopus.dylib on macOS) and libopus.a are installed in the lib directory<br>
by default.  I could not find a cmake option for this either.<br>
<br>
Is there work to bring the cmake build up to the level of what we have<br>
today with the autotools build, or is it intended only as an alternative<br>
to the Visual Studio project files for Windows users?<br>
<br>
 - Mark<br>
</div>
</span></font></div>
</body>
</html>