cmake_minimum_required(VERSION 2.8) include_directories(MachineIndependent ../OGLCompilersDLL ${CMAKE_CURRENT_BINARY_DIR}) if(WIN32) add_subdirectory(OSDependent/Windows) include_directories(${include_directories} OSDependent/Windows) elseif(UNIX) add_subdirectory(OSDependent/Linux) include_directories(${include_directories} OSDependent/Linux) else(WIN32) message("unkown platform") endif(WIN32) set(SOURCES MachineIndependent/glslang.y MachineIndependent/Constant.cpp MachineIndependent/InfoSink.cpp MachineIndependent/Initialize.cpp MachineIndependent/IntermTraverse.cpp MachineIndependent/Intermediate.cpp MachineIndependent/ParseHelper.cpp MachineIndependent/PoolAlloc.cpp MachineIndependent/RemoveTree.cpp MachineIndependent/Scan.cpp MachineIndependent/ShaderLang.cpp MachineIndependent/SymbolTable.cpp MachineIndependent/Versions.cpp MachineIndependent/intermOut.cpp MachineIndependent/limits.cpp MachineIndependent/linkValidate.cpp MachineIndependent/parseConst.cpp MachineIndependent/reflection.cpp MachineIndependent/preprocessor/Pp.cpp MachineIndependent/preprocessor/PpAtom.cpp MachineIndependent/preprocessor/PpContext.cpp MachineIndependent/preprocessor/PpMemory.cpp MachineIndependent/preprocessor/PpScanner.cpp MachineIndependent/preprocessor/PpSymbols.cpp MachineIndependent/preprocessor/PpTokens.cpp GenericCodeGen/CodeGen.cpp GenericCodeGen/Link.cpp) set(HEADERS Public/ShaderLang.h Include/BaseTypes.h Include/Common.h Include/ConstantUnion.h Include/InfoSink.h Include/InitializeGlobals.h Include/intermediate.h Include/PoolAlloc.h Include/ResourceLimits.h Include/revision.h Include/ShHandle.h Include/Types.h MachineIndependent/gl_types.h MachineIndependent/Initialize.h MachineIndependent/localintermediate.h MachineIndependent/ParseHelper.h MachineIndependent/reflection.h MachineIndependent/RemoveTree.h MachineIndependent/Scan.h MachineIndependent/ScanContext.h MachineIndependent/SymbolTable.h MachineIndependent/unistd.h MachineIndependent/Versions.h MachineIndependent/preprocessor/PpContext.h MachineIndependent/preprocessor/PpTokens.h) find_package(BISON) if(NOT BISON_FOUND) set(BISON_EXECUTABLE ../tools/bison.exe) message("bison not found. Assuming it is at ${BISON_EXECUTABLE}") endif() # Always use a custom command since our use of --defines isn't assumed by CMake's BISON_TARGET, # which ends up causing the target to always be rebuilt. add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp.h COMMAND ${BISON_EXECUTABLE} --defines=${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp MAIN_DEPENDENCY MachineIndependent/glslang.y WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) set(BISON_GLSLParser_OUTPUT_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp) add_library(glslang STATIC ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS}) if(WIN32) source_group("Public" REGULAR_EXPRESSION "Public/*") source_group("MachineIndependent" REGULAR_EXPRESSION "MachineIndependent/[^/]*") source_group("Generated Files" FILES ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp ${CMAKE_CURRENT_BINARY_DIR}/glslang_tab.cpp.h) source_group("Include" REGULAR_EXPRESSION "Include/[^/]*") source_group("GenericCodeGen" REGULAR_EXPRESSION "GenericCodeGen/*") source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*") endif(WIN32) install(TARGETS glslang ARCHIVE DESTINATION lib)