
if(NOT MSVC)
    add_compile_flags("-w")
endif()

add_definitions(
    -DUSE_EXTERNAL_DXTN_LIB=1
    -DBUILD_GL32
    -DWIN32
    -DUSE_3DNOW_ASM)

if(ARCH MATCHES i386)
    add_definitions(
        -DUSE_X86_ASM
        -DUSE_MMX_ASM
        -DUSE_SSE_ASM)
else()
    add_definitions(-DGL_NO_STDCALL)
endif(ARCH MATCHES i386)

if(NOT MSVC)
    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS_INIT} -Wl,--enable-stdcall-fixup")
endif()

include_directories(
    BEFORE include
    src
    src/main
    src/glapi
    src/math
    src/tnl
    src/shader
    src/shader/grammar
    src/shader/slang
    src/shader/slang/OSDependent/Linux
    src/shader/slang/OGLCompilersDLL)

list(APPEND SOURCE
    src/drivers/common/driverfuncs.c
    src/drivers/windows/gdi/wgl.c
    src/drivers/windows/gdi/wmesa.c
    src/drivers/windows/icd/icd.c
    src/glapi/glapi.c
    src/glapi/glapi_getproc.c
    src/glapi/glthread.c
    src/main/accum.c
    src/main/api_arrayelt.c
    src/main/api_exec.c
    src/main/api_loopback.c
    src/main/api_noop.c
    src/main/api_validate.c
    src/main/arrayobj.c
    src/main/attrib.c
    src/main/blend.c
    src/main/bufferobj.c
    src/main/buffers.c
    src/main/clear.c
    src/main/clip.c
    src/main/colortab.c
    src/main/context.c
    src/main/convolve.c
    src/main/debug.c
    src/main/depth.c
    src/main/depthstencil.c
    src/main/dispatch.c
    src/main/dlist.c
    src/main/dlopen.c
    src/main/drawpix.c
    src/main/enable.c
    src/main/enums.c
    src/main/eval.c
    src/main/execmem.c
    src/main/extensions.c
    src/main/fbobject.c
    src/main/feedback.c
    src/main/ffvertex_prog.c
    src/main/fog.c
    src/main/framebuffer.c
    src/main/get.c
    src/main/getstring.c
    src/main/hash.c
    src/main/hint.c
    src/main/histogram.c
    src/main/image.c
    src/main/imports.c
    src/main/light.c
    src/main/lines.c
    src/main/matrix.c
    src/main/mipmap.c
    src/main/mm.c
    src/main/multisample.c
    src/main/pixel.c
    src/main/pixelstore.c
    src/main/points.c
    src/main/polygon.c
    src/main/queryobj.c
    src/main/rastpos.c
    src/main/rbadaptors.c
    src/main/readpix.c
    src/main/renderbuffer.c
    src/main/scissor.c
    src/main/shaders.c
    src/main/state.c
    src/main/stencil.c
    src/main/texcompress.c
    src/main/texcompress_fxt1.c
    src/main/texcompress_s3tc.c
    src/main/texenv.c
    src/main/texenvprogram.c
    src/main/texformat.c
    src/main/texgen.c
    src/main/teximage.c
    src/main/texobj.c
    src/main/texparam.c
    src/main/texrender.c
    src/main/texstate.c
    src/main/texstore.c
    src/main/varray.c
    src/main/vtxfmt.c
    src/math/m_debug_clip.c
    src/math/m_debug_norm.c
    src/math/m_debug_xform.c
    src/math/m_eval.c
    src/math/m_matrix.c
    src/math/m_translate.c
    src/math/m_vector.c
    src/math/m_xform.c
    src/shader/arbprogparse.c
    src/shader/arbprogram.c
    src/shader/atifragshader.c
    src/shader/grammar/grammar_mesa.c
    src/shader/nvfragparse.c
    src/shader/nvprogram.c
    src/shader/nvvertparse.c
    src/shader/program.c
    src/shader/programopt.c
    src/shader/prog_cache.c
    src/shader/prog_debug.c
    src/shader/prog_execute.c
    src/shader/prog_instruction.c
    src/shader/prog_noise.c
    src/shader/prog_parameter.c
    src/shader/prog_print.c
    src/shader/prog_statevars.c
    src/shader/prog_uniform.c
    src/shader/shader_api.c
    src/shader/slang/slang_builtin.c
    src/shader/slang/slang_codegen.c
    src/shader/slang/slang_compile.c
    src/shader/slang/slang_compile_function.c
    src/shader/slang/slang_compile_operation.c
    src/shader/slang/slang_compile_struct.c
    src/shader/slang/slang_compile_variable.c
    src/shader/slang/slang_emit.c
    src/shader/slang/slang_ir.c
    src/shader/slang/slang_label.c
    src/shader/slang/slang_link.c
    src/shader/slang/slang_log.c
    src/shader/slang/slang_mem.c
    src/shader/slang/slang_preprocess.c
    src/shader/slang/slang_print.c
    src/shader/slang/slang_simplify.c
    src/shader/slang/slang_storage.c
    src/shader/slang/slang_typeinfo.c
    src/shader/slang/slang_utility.c
    src/shader/slang/slang_vartable.c
    src/swrast/s_aaline.c
    src/swrast/s_aatriangle.c
    src/swrast/s_accum.c
    src/swrast/s_alpha.c
    src/swrast/s_atifragshader.c
    src/swrast/s_bitmap.c
    src/swrast/s_blend.c
    src/swrast/s_blit.c
    src/swrast/s_buffers.c
    src/swrast/s_context.c
    src/swrast/s_copypix.c
    src/swrast/s_depth.c
    src/swrast/s_drawpix.c
    src/swrast/s_feedback.c
    src/swrast/s_fog.c
    src/swrast/s_fragprog.c
    src/swrast/s_imaging.c
    src/swrast/s_lines.c
    src/swrast/s_logic.c
    src/swrast/s_masking.c
    src/swrast/s_points.c
    src/swrast/s_readpix.c
    src/swrast/s_span.c
    src/swrast/s_stencil.c
    src/swrast/s_texcombine.c
    src/swrast/s_texfilter.c
    src/swrast/s_texstore.c
    src/swrast/s_triangle.c
    src/swrast/s_zoom.c
    src/swrast_setup/ss_context.c
    src/swrast_setup/ss_triangle.c
    src/tnl/t_context.c
    src/tnl/t_draw.c
    src/tnl/t_pipeline.c
    src/tnl/t_rasterpos.c
    src/tnl/t_vb_cull.c
    src/tnl/t_vb_fog.c
    src/tnl/t_vb_light.c
    src/tnl/t_vb_normals.c
    src/tnl/t_vb_points.c
    src/tnl/t_vb_program.c
    src/tnl/t_vb_render.c
    src/tnl/t_vb_texgen.c
    src/tnl/t_vb_texmat.c
    src/tnl/t_vb_vertex.c
    src/tnl/t_vertex.c
    src/tnl/t_vertex_generic.c
    src/tnl/t_vp_build.c
    src/vbo/vbo_context.c
    src/vbo/vbo_exec.c
    src/vbo/vbo_exec_api.c
    src/vbo/vbo_exec_array.c
    src/vbo/vbo_exec_draw.c
    src/vbo/vbo_exec_eval.c
    src/vbo/vbo_rebase.c
    src/vbo/vbo_save.c
    src/vbo/vbo_save_api.c
    src/vbo/vbo_save_draw.c
    src/vbo/vbo_save_loopback.c
    src/vbo/vbo_split.c
    src/vbo/vbo_split_copy.c
    src/vbo/vbo_split_inplace.c
    src/drivers/windows/icd/mesa.def)

if(ARCH MATCHES i386)
    list(APPEND SOURCE
        src/tnl/t_vertex_sse.c
        src/x86/3dnow.c
        src/x86/3dnow_normal.S
        src/x86/3dnow_xform1.S
        src/x86/3dnow_xform2.S
        src/x86/3dnow_xform3.S
        src/x86/3dnow_xform4.S
        src/x86/common_x86.c
        src/x86/common_x86_asm.S
        src/x86/glapi_x86.S
        src/x86/mmx_blend.S
        src/x86/read_rgba_span_x86.S
        src/x86/sse_normal.S
        src/x86/sse_xform1.S
        src/x86/sse_xform2.S
        src/x86/sse_xform3.S
        src/x86/sse_xform4.S
        src/x86/sse.c
        src/x86/x86.c
        src/x86/x86_cliptest.S
        src/x86/x86_xform2.S
        src/x86/x86_xform3.S
        src/x86/x86_xform4.S
        src/x86/rtasm/x86sse.c)
else()
    list(APPEND SOURCE src/x86-64/x86-64.c src/x86-64/xform4.S)
endif()

add_library(mesa32 SHARED ${SOURCE})
add_pch(mesa32 src/main/glheader.h)
set_module_type(mesa32 win32dll ENTRYPOINT 0)
add_importlibs(mesa32 gdi32 user32 msvcrt kernel32 ntdll)
add_dependencies(mesa32 psdk)
add_cd_file(TARGET mesa32 DESTINATION reactos/system32 FOR all)

if(NOT MSVC)
    allow_warnings(mesa32)
endif()
