-
Notifications
You must be signed in to change notification settings - Fork 2
Add LLAR Formula for coin-or/qpOASES (releases/3.2.1) #119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,110 @@ | ||
| import "os" | ||
| import "slices" | ||
|
|
||
| id "coin-or/qpOASES" | ||
|
|
||
| fromVer "releases/3.2.1" | ||
|
|
||
| // qpOASES exposes a single, package-owned build choice worth translating: | ||
| // the Conan recipe's `fPIC` option (default True, dropped on Windows). | ||
| // It maps to CMAKE_POSITION_INDEPENDENT_CODE for the static library. | ||
| defaults { | ||
| "fPIC": "ON", | ||
| } | ||
|
|
||
| // Position-independent code is meaningless on Windows, which is exactly why | ||
| // the Conan recipe deletes the fPIC option there. Reject fPIC=ON on Windows. | ||
| filter => { | ||
| if slices.contains(target.require["os"], "windows") { | ||
| return slices.contains(target.options["fPIC"], "OFF") | ||
| } | ||
| return true | ||
| } | ||
|
|
||
| onBuild ctx => { | ||
| installDir := ctx.outputDir | ||
|
|
||
| c := cmake.new(ctx.SourceDir, ctx.SourceDir+"/_build", installDir) | ||
| c.buildType "Release" | ||
| // Upstream declares cmake_minimum_required(VERSION 2.6); modern CMake | ||
| // refuses that compatibility floor without an explicit policy version. | ||
| c.define "CMAKE_POLICY_VERSION_MINIMUM", "3.5" | ||
|
|
||
| // Match the Conan recipe: build only the library, not the examples. | ||
| c.defineBool "QPOASES_BUILD_EXAMPLES", false | ||
|
|
||
| // Carry over the fPIC option for the static library. | ||
| c.defineBool "CMAKE_POSITION_INDEPENDENT_CODE", slices.contains(target.options["fPIC"], "ON") | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [Medium] The |
||
|
|
||
| c.configure | ||
| c.build | ||
| c.install | ||
|
|
||
| // Installed interface: static lib libqpOASES.a in lib/, headers in | ||
| // include/ (qpOASES.hpp + the qpOASES/ directory). | ||
| ctx.setMetadata "-lqpOASES" | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [Low] Consumer metadata likely omits paths a consumer needs. |
||
| } | ||
|
|
||
| onTest ctx => { | ||
| installDir := ctx.outputDir | ||
|
|
||
| // Consumer check derived from the Conan test_package: include the public | ||
| // header and construct/solve a QProblem against the installed library. | ||
| // Built in an independent tree so onTest also passes on a cache hit, | ||
| // where onBuild (and its _build dir) never ran. | ||
| testDir := ctx.SourceDir + "/_qpoases_test" | ||
| os.mkdirAll(testDir, 0o755)! | ||
|
|
||
| consumer := `#include <qpOASES.hpp> | ||
|
|
||
| int main() | ||
| { | ||
| USING_NAMESPACE_QPOASES | ||
|
|
||
| // 2 variables, 1 constraint (mirrors the Conan test_package problem). | ||
| real_t H[2*2] = { 1.0, 0.0, 0.0, 0.5 }; | ||
| real_t A[1*2] = { 1.0, 1.0 }; | ||
| real_t g[2] = { 1.5, 1.0 }; | ||
| real_t lb[2] = { 0.5, -2.0 }; | ||
| real_t ub[2] = { 5.0, 2.0 }; | ||
| real_t lbA[1] = { -1.0 }; | ||
| real_t ubA[1] = { 2.0 }; | ||
|
|
||
| QProblem example( 2, 1 ); | ||
|
|
||
| Options options; | ||
| example.setOptions( options ); | ||
|
|
||
| int_t nWSR = 10; | ||
| returnValue rv = example.init( H, g, A, lb, ub, lbA, ubA, nWSR ); | ||
|
|
||
| return ( rv == SUCCESSFUL_RETURN ) ? 0 : 1; | ||
| } | ||
| ` | ||
| os.writeFile(testDir+"/consumer.cpp", []byte(consumer), 0o644)! | ||
|
|
||
| cml := `cmake_minimum_required(VERSION 3.5) | ||
| project(qpoases_consumer CXX) | ||
| add_executable(consumer consumer.cpp) | ||
| find_path(QPOASES_INCLUDE_DIR NAMES qpOASES.hpp REQUIRED) | ||
| find_library(QPOASES_LIB NAMES qpOASES REQUIRED) | ||
| target_include_directories(consumer PRIVATE ${QPOASES_INCLUDE_DIR}) | ||
| target_link_libraries(consumer PRIVATE ${QPOASES_LIB}) | ||
| ` | ||
| os.writeFile(testDir+"/CMakeLists.txt", []byte(cml), 0o644)! | ||
|
|
||
| testBuild := testDir + "/_build" | ||
| tc := cmake.new(testDir, testBuild, "") | ||
| tc.buildType "Release" | ||
| tc.define "CMAKE_POLICY_VERSION_MINIMUM", "3.5" | ||
| tc.use installDir | ||
|
|
||
| tc.configure | ||
| tc.build | ||
|
|
||
| // Run the freshly built consumer. A non-zero exit surfaces via lastErr. | ||
| exec testBuild + "/consumer" | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [Low] Platform-assuming executable path. |
||
| if lastErr != nil { | ||
| panic lastErr | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| { | ||
| "path": "coin-or/qpOASES", | ||
| "deps": {} | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[High] The default Windows matrix is rejected — this contradicts the stated intent and blocks the default Windows build.
defaultssetsfPIC: "ON", so a plain Windows build hastarget.options["fPIC"] == ["ON"]. This branch then returnsslices.contains(["ON"], "OFF")→false, which rejects the entire effective matrix (a falsefilterstops before dependency discovery). Sollar makeon Windows with default options cannot build at all — a consumer must explicitly passfPIC=OFF.The comment says this "matches the Conan recipe," but Conan's
del self.options.fPICon Windows removes the option so the build proceeds normally without any fPIC input — it does not requirefPIC=OFF. The reference guidance is to usefilteronly to reject a selection "proved unsupported by the source";fPIC=ONis not unsupported (CMake simply ignoresCMAKE_POSITION_INDEPENDENT_CODEon Windows).Suggested fix: drop the OS special-case in
filter(returntrueon Windows) and, if desired, gate only thec.defineBool "CMAKE_POSITION_INDEPENDENT_CODE"call on non-Windows — rather than failing the matrix on its own default value.