CMake: split out all src/OpenGL targets into their own CMakeLists

Added CMakeLists.txt to the following folders that produce the
following targets:

src/OpenGL/common -> libGLESCommon (new)
src/OpenGL/compiler -> GLCompiler
src/OpenGL/libEGL -> libEGL
src/OpenGL/libGLESv2 ->libGLESv2
src/OpenGL/libGLES_CM -> libGLES_CM

Change-Id: I8217918b13b6963d18d1e6f89b4fa9e806bb36db
Bug: b/145758253
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/43588
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6ace7a7..05d9c5d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -647,51 +647,6 @@
 # File Lists
 ###########################################################
 
-file(GLOB_RECURSE EGL_LIST
-    ${OPENGL_DIR}/libEGL/*.cpp
-    ${OPENGL_DIR}/libEGL/*.h
-    ${OPENGL_DIR}/libEGL/*.hpp
-    ${OPENGL_DIR}/common/Object.cpp
-    ${OPENGL_DIR}/common/Object.hpp
-    ${OPENGL_DIR}/common/debug.cpp
-    ${OPENGL_DIR}/common/debug.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h
-)
-
-file(GLOB_RECURSE GLES2_LIST
-    ${OPENGL_DIR}/libGLESv2/*.cpp
-    ${OPENGL_DIR}/libGLESv2/*.h
-    ${OPENGL_DIR}/libGLESv2/*.hpp
-    ${OPENGL_DIR}/common/*.cpp
-    ${OPENGL_DIR}/common/*.h
-    ${OPENGL_DIR}/common/*.hpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/include/KHR/*.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/include/GLES2/*.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/include/GLES3/*.h
-)
-
-file(GLOB_RECURSE GLES_CM_LIST
-    ${OPENGL_DIR}/libGLES_CM/*.cpp
-    ${OPENGL_DIR}/libGLES_CM/*.h
-    ${OPENGL_DIR}/libGLES_CM/*.hpp
-    ${OPENGL_DIR}/common/*.cpp
-    ${OPENGL_DIR}/common/*.h
-    ${OPENGL_DIR}/common/*.hpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/include/KHR/*.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/include/GLES/*.h
-)
-
-file(GLOB_RECURSE OPENGL_COMPILER_LIST
-    ${OPENGL_COMPILER_DIR}/*.cpp
-    ${OPENGL_COMPILER_DIR}/*.h
-    ${OPENGL_COMPILER_DIR}/*.hpp
-)
-file(GLOB_RECURSE OPENGL_COMPILER_OS_SPECIFIC_LIST
-    ${OPENGL_COMPILER_DIR}/ossource*.cpp
-    ${OPENGL_COMPILER_DIR}/ossource*.h
-    ${OPENGL_COMPILER_DIR}/ossource*.hpp
-)
-list(REMOVE_ITEM OPENGL_COMPILER_LIST ${OPENGL_COMPILER_OS_SPECIFIC_LIST})
 
 file(GLOB VULKAN_LIST
     ${VULKAN_DIR}/*.cpp
@@ -749,20 +704,12 @@
 ###########################################################
 
 if(WIN32)
-    list(APPEND OPENGL_COMPILER_LIST ${OPENGL_COMPILER_DIR}/ossource_win.cpp)
-    list(APPEND EGL_LIST ${OPENGL_DIR}/libEGL/libEGL.rc)
-    list(APPEND GLES2_LIST ${OPENGL_DIR}/libGLESv2/libGLESv2.rc)
-    list(APPEND GLES_CM_LIST ${OPENGL_DIR}/libGLES_CM/libGLES_CM.rc)
     list(APPEND VULKAN_LIST
         ${VULKAN_DIR}/Vulkan.rc
         ${SOURCE_DIR}/WSI/Win32SurfaceKHR.cpp
         ${SOURCE_DIR}/WSI/Win32SurfaceKHR.hpp
     )
 elseif(LINUX)
-    list(APPEND OPENGL_COMPILER_LIST
-        ${OPENGL_COMPILER_DIR}/ossource_posix.cpp
-    )
-
     if(X11)
         list(APPEND VULKAN_LIST
             ${SOURCE_DIR}/WSI/XlibSurfaceKHR.cpp
@@ -780,22 +727,10 @@
     endif()
 
 elseif(APPLE)
-    list(APPEND EGL_LIST
-        ${OPENGL_DIR}/libEGL/OSXUtils.mm
-        ${OPENGL_DIR}/libEGL/OSXUtils.hpp
-    )
-    list(APPEND OPENGL_COMPILER_LIST
-        ${OPENGL_COMPILER_DIR}/ossource_posix.cpp
-    )
-
     list(APPEND VULKAN_LIST
         ${SOURCE_DIR}/WSI/MetalSurface.mm
         ${SOURCE_DIR}/WSI/MetalSurface.h
     )
-elseif(ANDROID)
-    list(APPEND OPENGL_COMPILER_LIST
-        ${OPENGL_COMPILER_DIR}/ossource_posix.cpp
-    )
 endif()
 
 if(WIN32)
@@ -825,7 +760,6 @@
     message(FATAL_ERROR "REACTOR_BACKEND must be 'LLVM' or 'Subzero'")
 endif()
 
-
 add_subdirectory(src/Common) # Add gl_common target
 add_subdirectory(src/Main) # Add gl_main target
 add_subdirectory(src/Shader) # Add gl_shader target
@@ -840,98 +774,19 @@
     gl_renderer
 )
 
-add_library(GLCompiler STATIC EXCLUDE_FROM_ALL ${OPENGL_COMPILER_LIST})
-set_target_properties(GLCompiler PROPERTIES
-    INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
-    POSITION_INDEPENDENT_CODE 1
-    FOLDER "OpenGL"
-    COMPILE_OPTIONS "${SWIFTSHADER_COMPILE_OPTIONS};${WARNINGS_AS_ERRORS}"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
-)
-target_link_libraries(GLCompiler ${OS_LIBS} ${SWIFTSHADER_LIBS})
-
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-    set(LIB_PREFIX "lib64")
-else()
-    set(LIB_PREFIX "lib")
-endif()
+add_subdirectory(src/OpenGL/common EXCLUDE_FROM_ALL) # Add libGLESCommon target
+add_subdirectory(src/OpenGL/compiler EXCLUDE_FROM_ALL) # Add GLCompiler target
 
 if(SWIFTSHADER_BUILD_EGL)
-    add_library(libEGL SHARED ${EGL_LIST})
-    set_target_properties(libEGL PROPERTIES
-        INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
-        FOLDER "OpenGL"
-        COMPILE_OPTIONS "${SWIFTSHADER_COMPILE_OPTIONS};${WARNINGS_AS_ERRORS}"
-        COMPILE_DEFINITIONS "EGL_EGLEXT_PROTOTYPES; EGLAPI=; NO_SANITIZE_FUNCTION=;$<$<CONFIG:Debug>:DEBUGGER_WAIT_DIALOG>"
-        LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
-        PREFIX ""
-    )
-    if(LINUX)
-        if(X11)
-            set_property(TARGET libEGL APPEND PROPERTY COMPILE_DEFINITIONS "USE_X11=1")
-        endif()
-    endif()
-    if (ANDROID)
-        set_target_properties(libEGL PROPERTIES SUFFIX "_swiftshader.so")
-    endif ()
-    set_shared_library_export_map(libEGL ${SOURCE_DIR}/OpenGL/libEGL)
-    target_link_libraries(libEGL gl_swiftshader_core ${OS_LIBS} ${SWIFTSHADER_LIBS})
-    add_custom_command(
-        TARGET libEGL
-        POST_BUILD
-        COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libEGL>/translator
-        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libEGL> $<TARGET_FILE_DIR:libEGL>/translator/${LIB_PREFIX}EGL_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
-        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
-        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libEGL> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
-    )
+    add_subdirectory(src/OpenGL/libEGL) # Add libEGL target
 endif()
 
 if(SWIFTSHADER_BUILD_GLESv2)
-    add_library(libGLESv2 SHARED ${GLES2_LIST})
-    set_target_properties(libGLESv2 PROPERTIES
-        INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
-        FOLDER "OpenGL"
-        COMPILE_OPTIONS "${SWIFTSHADER_COMPILE_OPTIONS};${WARNINGS_AS_ERRORS}"
-        COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; GL_API=; GL_APICALL=; GLAPI=; NO_SANITIZE_FUNCTION=;"
-        LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
-        PREFIX ""
-    )
-    if (ANDROID)
-        set_target_properties(libGLESv2 PROPERTIES SUFFIX "_swiftshader.so")
-    endif ()
-    set_shared_library_export_map(libGLESv2 ${SOURCE_DIR}/OpenGL/libGLESv2)
-    target_link_libraries(libGLESv2 gl_swiftshader_core ${Reactor} GLCompiler ${OS_LIBS} ${SWIFTSHADER_LIBS})
-    add_custom_command(
-        TARGET libGLESv2
-        POST_BUILD
-        COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libGLESv2>/translator
-        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLESv2> $<TARGET_FILE_DIR:libGLESv2>/translator/${LIB_PREFIX}GLES_V2_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
-        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
-        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLESv2> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
-    )
+    add_subdirectory(src/OpenGL/libGLESv2) # Add libGLESv2 target
 endif()
 
 if(SWIFTSHADER_BUILD_GLES_CM)
-    add_library(libGLES_CM SHARED ${GLES_CM_LIST})
-    set_target_properties(libGLES_CM PROPERTIES
-        INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
-        FOLDER "OpenGL"
-        COMPILE_OPTIONS "${SWIFTSHADER_COMPILE_OPTIONS};${WARNINGS_AS_ERRORS}"
-        COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; EGLAPI=; GL_API=; GL_APICALL=; GLAPI=;"
-        LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
-        PREFIX ""
-    )
-    if (ANDROID)
-        set_target_properties(libGLES_CM PROPERTIES SUFFIX "_swiftshader.so")
-    endif ()
-    set_shared_library_export_map(libGLES_CM ${SOURCE_DIR}/OpenGL/libGLES_CM)
-    target_link_libraries(libGLES_CM gl_swiftshader_core ${Reactor} GLCompiler ${OS_LIBS} ${SWIFTSHADER_LIBS})
-    add_custom_command(
-        TARGET libGLES_CM
-        POST_BUILD
-        COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libGLES_CM>/translator
-        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLES_CM> $<TARGET_FILE_DIR:libGLES_CM>/translator/${LIB_PREFIX}GLES_CM_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
-    )
+    add_subdirectory(src/OpenGL/libGLES_CM) # Add libGLES_CM target
 endif(SWIFTSHADER_BUILD_GLES_CM)
 
 if(SWIFTSHADER_BUILD_VULKAN)
diff --git a/src/OpenGL/common/CMakeLists.txt b/src/OpenGL/common/CMakeLists.txt
new file mode 100644
index 0000000..af00c37
--- /dev/null
+++ b/src/OpenGL/common/CMakeLists.txt
@@ -0,0 +1,68 @@
+# Copyright 2020 The SwiftShader Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(ROOT_PROJECT_COMPILE_OPTIONS
+    ${SWIFTSHADER_COMPILE_OPTIONS}
+    ${WARNINGS_AS_ERRORS}
+)
+
+set(ROOT_PROJECT_LINK_LIBRARIES
+    ${OS_LIBS}
+    ${SWIFTSHADER_LIBS}
+)
+
+set(LIBGL_COMMON_SRC_FILES
+    debug.cpp
+    debug.h
+    Image.cpp
+    Image.hpp
+    MatrixStack.cpp
+    MatrixStack.hpp
+    NameSpace.hpp
+    Object.cpp
+    Object.hpp
+    Surface.hpp
+)
+
+add_library(libGLESCommon
+    ${LIBGL_COMMON_SRC_FILES}
+)
+
+set_target_properties(libGLESCommon PROPERTIES
+    POSITION_INDEPENDENT_CODE 1
+    FOLDER "OpenGL"
+    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
+    PREFIX ""
+)
+
+target_include_directories(libGLESCommon
+    PUBLIC
+        ".."
+        "${CMAKE_SOURCE_DIR}/include"
+        "${CMAKE_SOURCE_DIR}/src"
+)
+
+target_compile_definitions(libGLESCommon
+    PRIVATE
+)
+
+target_compile_options(libGLESCommon
+    PUBLIC
+        ${ROOT_PROJECT_COMPILE_OPTIONS}
+)
+
+target_link_libraries(libGLESCommon
+    PUBLIC
+        ${ROOT_PROJECT_LINK_LIBRARIES}
+)
diff --git a/src/OpenGL/compiler/CMakeLists.txt b/src/OpenGL/compiler/CMakeLists.txt
new file mode 100644
index 0000000..d636c53
--- /dev/null
+++ b/src/OpenGL/compiler/CMakeLists.txt
@@ -0,0 +1,152 @@
+# Copyright 2020 The SwiftShader Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(ROOT_PROJECT_COMPILE_OPTIONS
+    ${SWIFTSHADER_COMPILE_OPTIONS}
+    ${WARNINGS_AS_ERRORS}
+)
+
+set(ROOT_PROJECT_LINK_LIBRARIES
+    ${OS_LIBS}
+    ${SWIFTSHADER_LIBS}
+)
+
+set(OPENGL_COMPILER_SRC_FILES
+    AnalyzeCallDepth.cpp
+    AnalyzeCallDepth.h
+    BaseTypes.h
+    Common.h
+    Compiler.cpp
+    Compiler.h
+    ConstantUnion.h
+    debug.cpp
+    debug.h
+    Diagnostics.cpp
+    Diagnostics.h
+    DirectiveHandler.cpp
+    DirectiveHandler.h
+    ExtensionBehavior.h
+    glslang_lex.cpp
+    glslang_tab.cpp
+    glslang_tab.h
+    glslang.h
+    InfoSink.cpp
+    InfoSink.h
+    Initialize.cpp
+    Initialize.h
+    InitializeGlobals.h
+    InitializeParseContext.cpp
+    InitializeParseContext.h
+    Intermediate.cpp
+    intermediate.h
+    intermOut.cpp
+    IntermTraverse.cpp
+    localintermediate.h
+    MMap.h
+    osinclude.h
+    OutputASM.cpp
+    OutputASM.h
+    parseConst.cpp
+    ParseHelper.cpp
+    ParseHelper.h
+    PoolAlloc.cpp
+    PoolAlloc.h
+    Pragma.h
+    preprocessor/DiagnosticsBase.cpp
+    preprocessor/DiagnosticsBase.h
+    preprocessor/DirectiveHandlerBase.cpp
+    preprocessor/DirectiveHandlerBase.h
+    preprocessor/DirectiveParser.cpp
+    preprocessor/DirectiveParser.h
+    preprocessor/ExpressionParser.cpp
+    preprocessor/ExpressionParser.h
+    preprocessor/Input.cpp
+    preprocessor/Input.h
+    preprocessor/length_limits.h
+    preprocessor/Lexer.cpp
+    preprocessor/Lexer.h
+    preprocessor/Macro.cpp
+    preprocessor/Macro.h
+    preprocessor/MacroExpander.cpp
+    preprocessor/MacroExpander.h
+    preprocessor/numeric_lex.h
+    preprocessor/pp_utils.h
+    preprocessor/Preprocessor.cpp
+    preprocessor/Preprocessor.h
+    preprocessor/SourceLocation.h
+    preprocessor/Token.cpp
+    preprocessor/Token.h
+    preprocessor/Tokenizer.cpp
+    preprocessor/Tokenizer.h
+    SymbolTable.cpp
+    SymbolTable.h
+    TranslatorASM.cpp
+    TranslatorASM.h
+    Types.h
+    util.cpp
+    util.h
+    ValidateLimitations.cpp
+    ValidateLimitations.h
+    ValidateSwitch.cpp
+    ValidateSwitch.h
+)
+
+if(WIN32)
+    list(APPEND OPENGL_COMPILER_SRC_FILES
+        ossource_win.cpp
+    )
+elseif(LINUX)
+    list(APPEND OPENGL_COMPILER_SRC_FILES
+        ossource_posix.cpp
+    )
+elseif(APPLE)
+    list(APPEND OPENGL_COMPILER_SRC_FILES
+        ossource_posix.cpp
+    )
+elseif(ANDROID)
+    list(APPEND OPENGL_COMPILER_SRC_FILES
+        ossource_posix.cpp
+    )
+endif()
+
+add_library(GLCompiler
+    ${OPENGL_COMPILER_SRC_FILES}
+)
+
+set_target_properties(GLCompiler PROPERTIES
+    POSITION_INDEPENDENT_CODE 1
+    FOLDER "OpenGL"
+    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
+)
+
+target_include_directories(GLCompiler
+    PRIVATE
+        ".."
+        "${CMAKE_SOURCE_DIR}/include"
+        "${CMAKE_SOURCE_DIR}/src"
+)
+
+target_compile_definitions(GLCompiler
+    PRIVATE
+)
+
+target_compile_options(GLCompiler
+    PRIVATE
+        ${ROOT_PROJECT_COMPILE_OPTIONS}
+)
+
+target_link_libraries(GLCompiler
+    PRIVATE
+        ${ROOT_PROJECT_LINK_LIBRARIES}
+)
diff --git a/src/OpenGL/libEGL/CMakeLists.txt b/src/OpenGL/libEGL/CMakeLists.txt
new file mode 100644
index 0000000..50e0983
--- /dev/null
+++ b/src/OpenGL/libEGL/CMakeLists.txt
@@ -0,0 +1,118 @@
+# Copyright 2020 The SwiftShader Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(ROOT_PROJECT_COMPILE_OPTIONS
+    ${SWIFTSHADER_COMPILE_OPTIONS}
+    ${WARNINGS_AS_ERRORS}
+)
+
+set(ROOT_PROJECT_LINK_LIBRARIES
+    ${OS_LIBS}
+    ${SWIFTSHADER_LIBS}
+)
+
+set(LIBEGL_SRC_FILES
+    Config.cpp
+    Config.h
+    Context.hpp
+    Display.cpp
+    Display.h
+    libEGL.cpp
+    libEGL.hpp
+    main.cpp
+    main.h
+    OSXUtils.hpp
+    resource.h
+    Surface.cpp
+    Surface.hpp
+    Sync.hpp
+    Texture.hpp
+)
+
+if(WIN32)
+    list(APPEND LIBEGL_SRC_FILES
+        libEGL.rc
+    )
+elseif(APPLE)
+    list(APPEND LIBEGL_SRC_FILES
+        OSXUtils.mm
+        OSXUtils.hpp
+    )
+endif()
+
+add_library(libEGL SHARED
+    ${LIBEGL_SRC_FILES}
+)
+
+set_target_properties(libEGL PROPERTIES
+    POSITION_INDEPENDENT_CODE 1
+    FOLDER "OpenGL"
+    PREFIX ""
+    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
+    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+)
+
+target_include_directories(libEGL
+    PRIVATE
+        ".."
+        "../.."
+)
+
+target_compile_definitions(libEGL
+    PRIVATE
+        "EGL_EGLEXT_PROTOTYPES"
+        "EGLAPI="
+        "NO_SANITIZE_FUNCTION="
+        $<$<CONFIG:Debug>:"DEBUGGER_WAIT_DIALOG">
+)
+
+target_compile_options(libEGL
+    PRIVATE
+        ${ROOT_PROJECT_COMPILE_OPTIONS}
+)
+
+target_link_libraries(libEGL
+    PRIVATE
+        libGLESCommon
+        gl_swiftshader_core
+        ${ROOT_PROJECT_LINK_LIBRARIES}
+)
+
+if(LINUX)
+    if(X11)
+        set_property(TARGET libEGL APPEND PROPERTY COMPILE_DEFINITIONS "USE_X11=1")
+    endif()
+endif()
+
+if (ANDROID)
+    set_target_properties(libEGL PROPERTIES SUFFIX "_swiftshader.so")
+endif ()
+
+set_shared_library_export_map(libEGL ${CMAKE_CURRENT_SOURCE_DIR})
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(LIB_PREFIX "lib64")
+else()
+    set(LIB_PREFIX "lib")
+endif()
+
+add_custom_command(
+    TARGET libEGL
+    POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libEGL>/translator
+    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libEGL> $<TARGET_FILE_DIR:libEGL>/translator/${LIB_PREFIX}EGL_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
+    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libEGL> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
+)
diff --git a/src/OpenGL/libGLES_CM/CMakeLists.txt b/src/OpenGL/libGLES_CM/CMakeLists.txt
new file mode 100644
index 0000000..29c81f5
--- /dev/null
+++ b/src/OpenGL/libGLES_CM/CMakeLists.txt
@@ -0,0 +1,117 @@
+# Copyright 2020 The SwiftShader Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(ROOT_PROJECT_COMPILE_OPTIONS
+    ${SWIFTSHADER_COMPILE_OPTIONS}
+    ${WARNINGS_AS_ERRORS}
+)
+
+set(ROOT_PROJECT_LINK_LIBRARIES
+    ${OS_LIBS}
+    ${SWIFTSHADER_LIBS}
+)
+
+set(LIBGLES_CM_SRC_FILES
+    Buffer.cpp
+    Buffer.h
+    Context.cpp
+    Context.h
+    Device.cpp
+    Device.hpp
+    Framebuffer.cpp
+    Framebuffer.h
+    IndexDataManager.cpp
+    IndexDataManager.h
+    libGLES_CM.cpp
+    libGLES_CM.hpp
+    main.cpp
+    main.h
+    mathutil.h
+    Renderbuffer.cpp
+    Renderbuffer.h
+    resource.h
+    ResourceManager.cpp
+    ResourceManager.h
+    Texture.cpp
+    Texture.h
+    utilities.cpp
+    utilities.h
+    VertexDataManager.cpp
+    VertexDataManager.h
+)
+
+if(WIN32)
+    list(APPEND LIBGLES_CM_SRC_FILES
+        libGLES_CM.rc
+    )
+endif()
+
+add_library(libGLES_CM SHARED
+    ${LIBGLES_CM_SRC_FILES}
+)
+
+set_target_properties(libGLES_CM PROPERTIES
+    POSITION_INDEPENDENT_CODE 1
+    FOLDER "OpenGL"
+    PREFIX ""
+    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
+    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+)
+
+target_include_directories(libGLES_CM
+    PRIVATE
+        ".."
+        "../.."
+)
+
+target_compile_definitions(libGLES_CM
+    PRIVATE
+        "GL_GLEXT_PROTOTYPES"
+        "EGLAPI="
+        "GL_API="
+        "GL_APICALL="
+        "GLAPI="
+)
+
+target_compile_options(libGLES_CM
+    PRIVATE
+        ${ROOT_PROJECT_COMPILE_OPTIONS}
+)
+
+target_link_libraries(libGLES_CM
+    PRIVATE
+        libGLESCommon
+        gl_swiftshader_core
+        ${ROOT_PROJECT_LINK_LIBRARIES}
+)
+
+if (ANDROID)
+    set_target_properties(libGLES_CM PROPERTIES SUFFIX "_swiftshader.so")
+endif ()
+
+set_shared_library_export_map(libGLES_CM ${CMAKE_CURRENT_SOURCE_DIR})
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(LIB_PREFIX "lib64")
+else()
+    set(LIB_PREFIX "lib")
+endif()
+
+add_custom_command(
+    TARGET libGLES_CM
+    POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libGLES_CM>/translator
+    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLES_CM> $<TARGET_FILE_DIR:libGLES_CM>/translator/${LIB_PREFIX}GLES_CM_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
+)
diff --git a/src/OpenGL/libGLESv2/CMakeLists.txt b/src/OpenGL/libGLESv2/CMakeLists.txt
new file mode 100644
index 0000000..de05ec2
--- /dev/null
+++ b/src/OpenGL/libGLESv2/CMakeLists.txt
@@ -0,0 +1,136 @@
+# Copyright 2020 The SwiftShader Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(ROOT_PROJECT_COMPILE_OPTIONS
+    ${SWIFTSHADER_COMPILE_OPTIONS}
+    ${WARNINGS_AS_ERRORS}
+)
+
+set(ROOT_PROJECT_LINK_LIBRARIES
+    ${OS_LIBS}
+    ${SWIFTSHADER_LIBS}
+)
+
+set(LIBGLESV2_SRC_FILES
+    Buffer.cpp
+    Buffer.h
+    Context.cpp
+    Context.h
+    Device.cpp
+    Device.hpp
+    entry_points.cpp
+    entry_points.h
+    Fence.cpp
+    Fence.h
+    Framebuffer.cpp
+    Framebuffer.h
+    IndexDataManager.cpp
+    IndexDataManager.h
+    libGLESv2.cpp
+    libGLESv2.hpp
+    libGLESv3.cpp
+    main.cpp
+    main.h
+    mathutil.h
+    Program.cpp
+    Program.h
+    Query.cpp
+    Query.h
+    Renderbuffer.cpp
+    Renderbuffer.h
+    resource.h
+    ResourceManager.cpp
+    ResourceManager.h
+    Sampler.h
+    Shader.cpp
+    Shader.h
+    Texture.cpp
+    Texture.h
+    TransformFeedback.cpp
+    TransformFeedback.h
+    utilities.cpp
+    utilities.h
+    VertexArray.cpp
+    VertexArray.h
+    VertexDataManager.cpp
+    VertexDataManager.h
+)
+
+if(WIN32)
+    list(APPEND LIBGLESV2_SRC_FILES
+        libGLESv2.rc
+    )
+endif()
+
+add_library(libGLESv2 SHARED
+    ${LIBGLESV2_SRC_FILES}
+)
+
+set_target_properties(libGLESv2 PROPERTIES
+    POSITION_INDEPENDENT_CODE 1
+    FOLDER "OpenGL"
+    PREFIX ""
+    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
+    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+)
+
+target_include_directories(libGLESv2
+    PRIVATE
+        ".."
+        "../.."
+)
+
+target_compile_definitions(libGLESv2
+    PRIVATE
+        "GL_GLEXT_PROTOTYPES"
+        "GL_API="
+        "GL_APICALL="
+        "GLAPI="
+        "NO_SANITIZE_FUNCTION="
+)
+
+target_compile_options(libGLESv2
+    PRIVATE
+        ${ROOT_PROJECT_COMPILE_OPTIONS}
+)
+
+target_link_libraries(libGLESv2
+    PRIVATE
+        libGLESCommon
+        gl_swiftshader_core
+        GLCompiler
+        ${ROOT_PROJECT_LINK_LIBRARIES}
+)
+
+if (ANDROID)
+    set_target_properties(libGLESv2 PROPERTIES SUFFIX "_swiftshader.so")
+endif ()
+
+set_shared_library_export_map(libGLESv2 ${CMAKE_CURRENT_SOURCE_DIR})
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    set(LIB_PREFIX "lib64")
+else()
+    set(LIB_PREFIX "lib")
+endif()
+
+add_custom_command(
+    TARGET libGLESv2
+    POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libGLESv2>/translator
+    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLESv2> $<TARGET_FILE_DIR:libGLESv2>/translator/${LIB_PREFIX}GLES_V2_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
+    COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
+    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLESv2> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/
+)