From 5ad09d0e13c80d3987eb5f27040384c39390a7d0 Mon Sep 17 00:00:00 2001 From: Ray Donnelly Date: Thu, 12 Dec 2013 16:52:29 +0000 Subject: [PATCH 1/4] CMakeLists.txt: Fixes and improvements 1. main.cpp doesn't exist anymore. 2. hlslang_tab.cpp is now Gen_hlslang_tab.cpp. 3. Remove redundancy in bison and flex execution. 4. Use find_package() to locate them if !windows. --- CMakeLists.txt | 137 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 68 insertions(+), 69 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f159a1d..dc30cd5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,7 +59,6 @@ set(MACHINE_INDEPENDENT_FILES hlslang/MachineIndependent/intermOut.cpp hlslang/MachineIndependent/IntermTraverse.cpp hlslang/MachineIndependent/localintermediate.h - #hlslang/MachineIndependent/parseConst.cpp hlslang/MachineIndependent/ParseHelper.cpp hlslang/MachineIndependent/ParseHelper.h hlslang/MachineIndependent/PoolAlloc.cpp @@ -92,9 +91,9 @@ endif () set(MACHINE_INDEPENDENT_GENERATED_SOURCE_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent/Gen_hlslang.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent/hlslang_tab.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent/hlslang_tab.h + hlslang/MachineIndependent/Gen_hlslang.cpp + hlslang/MachineIndependent/Gen_hlslang_tab.cpp + hlslang/MachineIndependent/hlslang_tab.h ) SET_SOURCE_FILES_PROPERTIES(${MACHINE_INDEPENDENT_GENERATED_SOURCE_FILES} PROPERTIES @@ -107,62 +106,26 @@ source_group("Machine Independent\\Generated Source" FILES ${MACHINE_INDEPENDENT # Add system specific settings if (WIN32) set(OSDEPENDENT_FILES - hlslang/OSDependent/Windows/main.cpp hlslang/OSDependent/Windows/osinclude.h hlslang/OSDependent/Windows/ossource.cpp ) source_group("OSDependent\\Windows" FILES ${OSDEPENDENT_FILES}) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/hlslang/OSDependent/Windows) + include_directories(hlslang/OSDependent/Windows) - add_custom_command(OUTPUT hlslang/MachineIndependent/Gen_hlslang_tab.cpp hlslang/MachineIndependent/hlslang_tab.h - COMMAND set ARGS "BISON_SIMPLE=../../tools/bison.simple" - COMMAND set ARGS "BISON_HAIRY=../../tools/bison.simple" - COMMAND ../../tools/bison.exe ARGS -d -t -v hlslang.y - COMMAND copy ARGS /y hlslang_tab.c Gen_hlslang_tab.cpp - COMMAND del ARGS hlslang_tab.c - COMMAND del ARGS hlslang.output - MAIN_DEPENDENCY hlslang/MachineIndependent/hlslang.y - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent - COMMENT "Executing Bison on hlslang.y" - ) - - add_custom_command(OUTPUT hlslang/MachineIndependent/Gen_hlslang.cpp - COMMAND ../../tools/flex.exe ARGS hlslang.l - MAIN_DEPENDENCY hlslang/MachineIndependent/hlslang.l - DEPENDS hlslang/MachineIndependent/hlslang_tab.h - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent - COMMENT "Executing flex on hlslang.l" - ) - - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D\"_HAS_ITERATOR_DEBUGGING=0\" /D\"_SECURE_SCL=0\" /D\"_CRT_SECURE_NO_WARNINGS\"") - SET(TEST_LIBS opengl32.lib) + IF (MSVC) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D\"_HAS_ITERATOR_DEBUGGING=0\" /D\"_SECURE_SCL=0\" /D\"_CRT_SECURE_NO_WARNINGS\"") + ENDIF (MSVC) + SET(TEST_LIBS opengl32 gdi32 user32) elseif (APPLE) set(OSDEPENDENT_FILES hlslang/OSDependent/Mac/osinclude.h hlslang/OSDependent/Mac/ossource.cpp ) source_group("OSDependent\\Mac" FILES ${OSDEPENDENT_FILES}) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/hlslang/OSDependent/Mac) - - add_custom_command(OUTPUT hlslang/MachineIndependent/Gen_hlslang_tab.cpp hlslang/MachineIndependent/hlslang_tab.h - COMMAND set ARGS "BISON_SIMPLE=../../tools/bison.simple" - COMMAND set ARGS "BISON_HAIRY=../../tools/bison.simple" - COMMAND bison ARGS -o hlslang_tab.cpp -d -t -v hlslang.y - COMMAND mv hlslang_tab.hpp hlslang_tab.h - MAIN_DEPENDENCY hlslang/MachineIndependent/hlslang.y - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent - COMMENT "Executing Bison on hlslang.y" - ) - - add_custom_command(OUTPUT hlslang/MachineIndependent/Gen_hlslang.cpp - COMMAND flex ARGS hlslang.l - MAIN_DEPENDENCY hlslang/MachineIndependent/hlslang.l - DEPENDS hlslang/MachineIndependent/hlslang_tab.h - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent - COMMENT "Executing flex on hlslang.l" - ) + include_directories(hlslang/OSDependent/Mac) + FIND_LIBRARY(OPENGL_LIBRARY OpenGL) - FIND_LIBRARY(COCOA_LIBRARY Cocoa) + FIND_LIBRARY(COCOA_LIBRARY Cocoa) SET(TEST_LIBS ${OPENGL_LIBRARY} ${COCOA_LIBRARY}) elseif (UNIX) set(OSDEPENDENT_FILES @@ -170,33 +133,69 @@ elseif (UNIX) hlslang/OSDependent/Linux/ossource.cpp ) source_group("OSDependent\\Linux" FILES ${OSDEPENDENT_FILES}) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/hlslang/OSDependent/Linux) - - add_custom_command(OUTPUT hlslang/MachineIndependent/hlslang_tab.cpp hlslang/MachineIndependent/hlslang_tab.h - COMMAND set ARGS "BISON_SIMPLE=../../tools/bison.simple" - COMMAND set ARGS "BISON_HAIRY=../../tools/bison.simple" - COMMAND bison ARGS -o hlslang_tab.cpp -d -t -v hlslang.y - COMMAND mv hlslang_tab.hpp hlslang_tab.h - MAIN_DEPENDENCY hlslang/MachineIndependent/hlslang.y - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent - COMMENT "Executing Bison on hlslang.y" - ) - - add_custom_command(OUTPUT hlslang/MachineIndependent/Gen_hlslang.cpp - COMMAND flex ARGS hlslang.l - MAIN_DEPENDENCY hlslang/MachineIndependent/hlslang.l - DEPENDS hlslang/MachineIndependent/hlslang_tab.h - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent - COMMENT "Executing flex on hlslang.l" - ) + include_directories(hlslang/OSDependent/Linux) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb") SET(TEST_LIBS GL glut GLEW pthread) endif () +# Bison reads two environment variables at build-time (BISON_SIMPLE and BISON_HAIRY): +# +# http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_get_or_set_environment_variables.3F +# "Also, environment variables SET in the CMakeLists.txt only take effect for cmake +# itself (configure-time), so you cannot use this method to set an environment variable +# that a custom command might need (build-time). Barring environment variable support +# by various CMake commands (e.g. add_custom_command(), currently not supported yet), +# an acceptable workaround may be to invoke shell scripts instead which wrap the +# commands to be executed." +# +# So making that work for both batch files and shell: +# +# To be precise, here we want to check for batch file +# execution rather than that we're using the MSVC IDE +# or are generating "MinGW Makefiles". +# +if ((MSVC_IDE) OR (${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles")) + SET(SETENV "set") + SET(CONTINUATION &) +else () + SET(SETENV) + SET(CONTINUATION) +endif () + +set(ENV{BISON_SIMPLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/bison.simple) +set(ENV{BISON_HAIRY} ${CMAKE_CURRENT_SOURCE_DIR}/tools/bison.simple) + +if (WIN32) + set(BISON_EXECUTABLE ${CMAKE_CURRENT_SOURCE_DIR}/tools/bin/bison.exe) + set(FLEX_EXECUTABLE ${CMAKE_CURRENT_SOURCE_DIR}/tools/flex.exe) +else () + find_package(BISON REQUIRED) + find_package(FLEX REQUIRED) +endif () + +add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent/Gen_hlslang_tab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent/hlslang_tab.h + COMMAND ${SETENV} BISON_SIMPLE=${CMAKE_CURRENT_SOURCE_DIR}/tools/bison.simple ${CONTINUATION} + ${SETENV} BISON_HAIRY=${CMAKE_CURRENT_SOURCE_DIR}/tools/bison.simple ${CONTINUATION} + ${BISON_EXECUTABLE} ARGS -o hlslang_tab.c -d -t -v hlslang.y + COMMAND ${CMAKE_COMMAND} -E copy_if_different hlslang_tab.c Gen_hlslang_tab.cpp + COMMAND ${CMAKE_COMMAND} -E remove -f hlslang_tab.c hlslang.output + MAIN_DEPENDENCY hlslang/MachineIndependent/hlslang.y + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent + COMMENT "Executing Bison on hlslang.y" + ) + +add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent/Gen_hlslang.cpp + COMMAND ${FLEX_EXECUTABLE} ARGS hlslang.l + MAIN_DEPENDENCY hlslang/MachineIndependent/hlslang.l + DEPENDS hlslang/MachineIndependent/hlslang_tab.h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent + COMMENT "Executing flex on hlslang.l" + ) include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/hlslang - ${CMAKE_CURRENT_SOURCE_DIR}/hlslang/MachineIndependent + hlslang + hlslang/MachineIndependent ) add_library(hlsl2glsl -- 2.5.0