v2: fixes in cmake (Emil Velikov, Chad Versace) Changed also nmf file content and generation, moved nacl example content to separate output path.
Signed-off-by: Tapani Pälli <[email protected]> --- .gitignore | 1 + cmake/Modules/WaffleDefineCompilerFlags.cmake | 10 ++++-- examples/CMakeLists.txt | 46 +++++++++++++++++++++++++++ examples/gl_basic.c | 21 ++++++++++++ examples/index.html | 43 +++++++++++++++++++++++++ 5 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 examples/index.html diff --git a/.gitignore b/.gitignore index 6981cd7..99b8e09 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ Makefile /doc/html/man/wflinfo.1.html /examples/gl_basic /examples/simple-x11-egl +/html/ /lib/ /libcmocka.a /src/waffle/libwaffle_static.a diff --git a/cmake/Modules/WaffleDefineCompilerFlags.cmake b/cmake/Modules/WaffleDefineCompilerFlags.cmake index 7532a91..679d09c 100644 --- a/cmake/Modules/WaffleDefineCompilerFlags.cmake +++ b/cmake/Modules/WaffleDefineCompilerFlags.cmake @@ -45,12 +45,16 @@ if (NOT MSVC) # enough for single-stepping. set(CMAKE_C_FLAGS_RELEASE "-g1 -O2 -DNDEBUG") - waffle_add_c_flag("-Werror=implicit-function-declaration" WERROR_IMPLICIT_FUNCTION_DECLARATION) + # These are disabled for NaCl because compilation against ppapi_simple would fail. + if(NOT waffle_has_nacl) + waffle_add_c_flag("-Werror=implicit-function-declaration" WERROR_IMPLICIT_FUNCTION_DECLARATION) + waffle_add_c_flag("-fvisibility=hidden" WITH_VISIBILITY_HIDDEN) + endif() + waffle_add_c_flag("-Werror=incompatible-pointer-types" WERROR_INCOMPATIBLE_POINTER_TYPES) waffle_add_c_flag("-Werror=int-conversion" WERROR_INT_CONVERSION) - waffle_add_c_flag("-fvisibility=hidden" WITH_VISIBILITY_HIDDEN) - if(waffle_on_linux) + if(waffle_on_linux AND NOT waffle_has_nacl) # On MacOS, the SSE2 headers trigger this error. waffle_add_c_flag("-Werror=missing-prototypes" WERROR_MISSING_PROTOTYPES) endif() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index fc0bda2..31a909b 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -17,6 +17,52 @@ if(waffle_on_linux AND waffle_has_x11_egl) endif() # ---------------------------------------------------------------------------- +# Target: gl_basic_nacl (executable + JSON manifest file) +# ---------------------------------------------------------------------------- +if (waffle_has_nacl) + add_executable(gl_basic_nacl.nexe gl_basic.c) + include_directories(${nacl_INCLUDE_DIRS}) + + # Set path where to create and copy required files. + set(nacl_example_path ${PROJECT_SOURCE_DIR}/html/gl_basic_nacl) + + file(MAKE_DIRECTORY ${nacl_example_path}) + + set_target_properties(gl_basic_nacl.nexe + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${nacl_example_path} + ) + + target_link_libraries(gl_basic_nacl.nexe + ${waffle_libname} + ${nacl_LDFLAGS} + -lppapi_simple + -lnacl_io + ) + + # Create .nmf file that contains JSON manifest for the .nexe required by NaCl + # NOTE, this serves as example only and user might need to recreate nmf file + # suitable for the used environment. Extra entry for libppapi_gles2.so is added + # because we are not linking with it but require its presence during execution. + # --no-arch-prefix is used because '-x' has no option to set architecture for + # the extra entry. + add_custom_command( + OUTPUT gl_basic_nacl.nmf + COMMAND ${nacl_root}/tools/create_nmf.py --no-arch-prefix -x libppapi_gles2.so:libppapi_gles2.so -L${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${nacl_example_path}/gl_basic_nacl.nexe -o ${nacl_example_path}/gl_basic_nacl.nmf + DEPENDS gl_basic_nacl.nexe + COMMENT "Create JSON manifest" + VERBATIM + ) + + add_custom_target(gl_basic_create_json_manifest ALL + DEPENDS gl_basic_nacl.nmf) + + # install index.html that loads gl_basic_nacl.nmf + file(INSTALL index.html DESTINATION ${nacl_example_path}) + +endif() + +# ---------------------------------------------------------------------------- # Target: gl_basic (executable) # ---------------------------------------------------------------------------- diff --git a/examples/gl_basic.c b/examples/gl_basic.c index 69418c8..311593a 100644 --- a/examples/gl_basic.c +++ b/examples/gl_basic.c @@ -520,8 +520,20 @@ removeXcodeArgs(int *argc, char **argv) #endif // __APPLE__ +#ifdef __native_client__ +#include "ppapi_simple/ps_main.h" +// +// We need to rename main() for native client +// because ppapi_simple already defines main(). +// +int basic_test_main(int argc, char **argv); +PPAPI_SIMPLE_REGISTER_MAIN(basic_test_main) +int +basic_test_main(int argc, char **argv) +#else int main(int argc, char **argv) +#endif { bool ok; int i; @@ -542,9 +554,18 @@ main(int argc, char **argv) cocoa_init(); #endif + #ifdef __native_client__ + // Fixed arguments for native client. + opts.context_api = WAFFLE_CONTEXT_OPENGL_ES2; + opts.platform = WAFFLE_PLATFORM_NACL; + opts.dl = WAFFLE_DL_OPENGL_ES2; + opts.context_profile = WAFFLE_NONE; + opts.context_version = -1; + #else ok = parse_args(argc, argv, &opts); if (!ok) exit(EXIT_FAILURE); + #endif i = 0; init_attrib_list[i++] = WAFFLE_PLATFORM; diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 0000000..ee57fef --- /dev/null +++ b/examples/index.html @@ -0,0 +1,43 @@ +<!-- +// Copyright 2014 Intel Corporation +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// - Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<!DOCTYPE html> +<html> +<head> + <title>Waffle NaCl example</title> +</head> + +<body> + <!-- + NOTE - The example .nmf file makes assumption that required + libraries exist within same directory as the executable. If + this is not the case please recreate .nmf file suitable for + your environment. + --> + <embed id="waffle" src="gl_basic_nacl.nmf" type="application/x-nacl"/> +</body> +</html> -- 2.1.0 _______________________________________________ waffle mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/waffle

