Use dali-shader-generator to generate the shaders 24/257324/2
authorAdeel Kazmi <adeel.kazmi@samsung.com>
Thu, 22 Apr 2021 15:56:12 +0000 (16:56 +0100)
committerAdeel Kazmi <adeel.kazmi@samsung.com>
Fri, 23 Apr 2021 13:37:22 +0000 (14:37 +0100)
Change-Id: Icaebd89c26e954b21e5982e067a13f0c607fc840

build/android/dali/build_toolkit.sh
build/tizen/examples/CMakeLists.txt
build/tizen/shader-generator.sh [deleted file]

index eae8927..cd35bf5 100755 (executable)
@@ -15,6 +15,10 @@ else
     export ENABLE_TRACE=OFF
   fi
 
+  if [ -z "$CXX" ]; then
+    export CXX="g++"
+  fi
+
   export PREFIX=${DALI_ENV_DIR}
   export PKG_CONFIG_LIBDIR=${ANDROID_NDK}/prebuilt/linux-x86_64/lib/pkgconfig
   export PKG_CONFIG_PATH=${PREFIX}/lib/${ANDROID_ABI}/pkgconfig
@@ -23,7 +27,7 @@ else
   export DALI_DATA_RO_INSTALL_DIR=${PREFIX}/files
   export DALI_DATA_RW_INSTALL_DIR=${PREFIX}/files
 
-  ${ANDROID_SDK}/cmake/3.10.2.4988404/bin/cmake ${DALI_DIR}/dali-toolkit/build/tizen -DCMAKE_C_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NDK=${ANDROID_NDK} -DANDROID_STL=c++_shared -DCMAKE_CXX_FLAGS='-fexceptions -frtti -w -Wall -std=c++17' -DINCLUDE_DIR=${PREFIX}/include -DLIB_DIR=${PREFIX}/lib/${ANDROID_ABI} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_TRACE=${ENABLE_TRACE} -DWITH_STYLE='720x1280'
+  ${ANDROID_SDK}/cmake/3.10.2.4988404/bin/cmake ${DALI_DIR}/dali-toolkit/build/tizen -DCMAKE_C_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -DCMAKE_CXX_COMPILER=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DANDROID_ABI=${ANDROID_ABI} -DANDROID_NDK=${ANDROID_NDK} -DANDROID_STL=c++_shared -DCMAKE_CXX_FLAGS='-fexceptions -frtti -w -Wall -std=c++17' -DINCLUDE_DIR=${PREFIX}/include -DLIB_DIR=${PREFIX}/lib/${ANDROID_ABI} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DENABLE_TRACE=${ENABLE_TRACE} -DWITH_STYLE='720x1280' -DANDROID_HOST_COMPILER="$CXX"
 fi
 
 make -j8 || exit 1
index 6476710..1692226 100644 (file)
@@ -20,16 +20,13 @@ IF (NOT "${ENABLE_SCENE_LOADER}" )
   ENDIF()
 ENDIF()
 
+FIND_PROGRAM( SHADER_GENERATOR "dali-shader-generator" )
+IF( NOT SHADER_GENERATOR )
+  MESSAGE( FATAL_ERROR "dali-shader-generator not found!" )
+ENDIF()
+
 FOREACH(EXAMPLE ${SUBDIRS})
-  # Generate source files for shaders
-  SET(SHADER_SOURCE_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/shaders/")
-  SET(SHADER_GENERATED_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/generated/")
   SET(PARENT_CMAKE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../")
-  IF (EXISTS ${SHADER_SOURCE_DIR})
-    EXECUTE_PROCESS( COMMAND bash -c "${PARENT_CMAKE_SOURCE_DIR}/shader-generator.sh ${SHADER_SOURCE_DIR} ${SHADER_GENERATED_DIR} --skip")
-    SET_PROPERTY( DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
-                "${SHADER_GENERATED_DIR}" )
-  ENDIF()
   FILE(GLOB SRCS "${EXAMPLES_SRC_DIR}/${EXAMPLE}/*.cpp")
   SET(SRCS ${SRCS} "${ROOT_SRC_DIR}/shared/resources-location.cpp")
   IF(SHARED)
@@ -37,6 +34,18 @@ FOREACH(EXAMPLE ${SUBDIRS})
   ELSE()
     ADD_EXECUTABLE(${EXAMPLE}.example ${SRCS})
   ENDIF()
+
+  # Generate source files for shaders
+  SET(SHADER_SOURCE_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/shaders/")
+  IF (EXISTS ${SHADER_SOURCE_DIR})
+    SET(SHADER_GENERATED_DIR "${EXAMPLES_SRC_DIR}/${EXAMPLE}/generated/")
+    ADD_CUSTOM_TARGET(${EXAMPLE}-generate-shaders
+                      COMMAND ${SHADER_GENERATOR} --skip ${SHADER_SOURCE_DIR} ${SHADER_GENERATED_DIR})
+    SET_PROPERTY(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
+                 "${SHADER_GENERATED_DIR}")
+    ADD_DEPENDENCIES(${EXAMPLE}.example ${EXAMPLE}-generate-shaders)
+  ENDIF()
+
   TARGET_LINK_LIBRARIES(${EXAMPLE}.example ${REQUIRED_LIBS})
   INSTALL(TARGETS ${EXAMPLE}.example DESTINATION ${BINDIR})
 ENDFOREACH(EXAMPLE)
diff --git a/build/tizen/shader-generator.sh b/build/tizen/shader-generator.sh
deleted file mode 100755 (executable)
index 5426fd2..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/bash
-
-# Set Colors
-Red='\033[0;31m'          # Red
-Yellow='\033[0;33m'       # Yellow
-Blue='\033[0;34m'         # Blue
-Clear='\033[0m'       # Text Reset
-
-#########################################################################################
-
-Usage()
-{
-  echo -e "${Yellow}Usage: $(basename ${BASH_SOURCE[0]}) [indir] [outdir] [OPTIONS]"
-  echo
-  echo -e " ${Blue}Mandatory parameters:${Clear}"
-  echo -e "  indir       The input directory where the original shader files are located"
-  echo -e "  outdir      The output directory where the header files for the shaders should be generated"
-  echo -e " ${Red}NOTE: All the above parameters must be provided${Clear}"
-  echo
-  echo -e " ${Blue}Options:${Clear}"
-  echo -e "  -s|--skip   Skip the generation of header and cpp files that include all the generated shader header files"
-  echo -e "  -h|--help   Help"
-}
-
-if [ "$1" = "-h" ] || [ "$1" = "--help" ]
-then
-  Usage
-  exit 0
-elif [ "$#" -lt 2 ]
-then
-  echo -e "${Red}ERROR:${Clear} Mandatory parameters are not provided"
-  echo
-  Usage
-  exit 1
-fi
-
-#########################################################################################
-
-indir=$1
-outdir=$2
-skip=""
-
-for option in $*
-do
-  if [ "$option" = "-s" ] || [ "$option" = "--skip" ]
-  then
-    skip="--skip"
-    continue
-  elif [[ $option == -* ]]
-  then
-    echo -e "${Red}Invalid Option: ${Blue}$option${Clear}"
-    echo
-    Usage
-    exit 1
-  fi
-done
-
-#########################################################################################
-
-mkdir -p $outdir
-
-if [ ! -e $indir ] ; then
-    echo "Error: The folder \""$indir"\" does not exist!"
-    exit 1
-fi
-
-cd $indir
-all_shaders=$(ls -1 *.{vert,frag,def} 2>/dev/null)
-cd $OLDPWD
-
-# Generate one header file per shader which is defined as a const std::string_view
-for name in $all_shaders ; do
-  echo "Generating header files for $name..."
-  varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
-
-  newname=$(echo ${name} | sed -e 's/\./-/;')".h"
-  echo Writing $newname
-
-  shader_fullpath=$(echo ${indir})$name
-
-  header_name="${varname}_GEN_H"
-  echo "const std::string_view" "$varname""{" > $outdir/$newname
-  cat $shader_fullpath | sed -e 's/^..*$/"&\\n"/' >> $outdir/$newname
-  echo "};" >> $outdir/$newname
-done
-
-if [ "$skip" != "--skip" ]; then
-  # Generate one cpp file that includes all the previously generated string_views for shaders
-  echo "Generating cpp file..."
-  echo -e "#include \"../builtin-shader-extern-gen.h\"\n" > $outdir/builtin-shader-gen.cpp
-
-  varnames=
-  for name in $all_shaders ; do
-    varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
-    newname=$(echo ${name} | sed -e 's/\./-/;')".h"
-    varnames="${varnames} $varname"
-    echo "#include \"$newname\"" >> $outdir/builtin-shader-gen.cpp
-  done
-
-  # Generate one header file that defines all the shader string_views as extern variables
-  echo "Generating extern header file ( for external use )..."
-  echo "#ifndef GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H" > $outdir/../builtin-shader-extern-gen.h
-  echo -e "#define GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H\n" >> $outdir/../builtin-shader-extern-gen.h
-
-  echo "#include <string_view>" >> $outdir/../builtin-shader-extern-gen.h
-  echo "" >> $outdir/../builtin-shader-extern-gen.h
-
-  for name in $all_shaders ; do
-    varname=$(echo "SHADER_$name" | tr [a-z] [A-Z] | sed -e 's/-/_/g;s/\./_/g;')
-    newname=$(echo ${name} | sed -e 's/\./-/;')".h"
-    echo "extern const std::string_view $varname;" >> $outdir/../builtin-shader-extern-gen.h
-  done
-  cat >> $outdir/../builtin-shader-extern-gen.h << EOF
-
-#endif // GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H
-EOF
-fi
-